Code: Alles auswählen
CON ' LOADER-KONSTANTEN
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
'signaldefinition regnatix
'#0, D0,D1,D2,D3,D4,D5,D6,D7 'datenbus
'#8, A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 'adressbus
'#19, REG_RAM1,REG_RAM2 'selektionssignale rambank 1 und 2
'#21, REG_PROP1,REG_PROP2 'selektionssignale für administra und bellatrix
'#23, REG_AL 'strobesignal für adresslatch
'#24, HBEAT 'front-led
' BUSCLK 'bustakt
' BUS_WR '/wr - schreibsignal
' BUS_HS ' '/hs - quittungssignal
'prop 1 - administra (bus_putchar1, bus_getchar1)
'prop 2 - bellatrix (bus_putchar2, bus_getchar2)
' +------------------------- al
' |+------------------------ /prop2
' hbeat --------+ ||+----------------------- /prop1
' clk -------+| |||+---------------------- /ram2
' /wr ------+|| ||||+--------------------- /ram1
' /hs -----+||| ||||| +--------- a0..a10
' |||| ||||| |
' |||| |||||-----------+ -------- d0..d7
DB_OFF = %00000000_00000000_00000000_00000000 'maske: bus inaktiv
'DB_IN = %00000111_11111111_11111111_00000000 'maske: dbus-eingabe
DB_OUT = %00000111_11111111_11111111_11111111 'maske: dbus-ausgabe
M1 = %00000000_01011000_00000000_00000000 '/prop1=0, /wr=0, busclk=0 frida
M2 = %00000110_01011000_00000000_00000000 '/prop1=0, /wr=1, busclk=1 frida
M3 = %00000100_01111000_00000000_00000000 '/prop1=1, /wr=1, busclk=0 frida
M4 = %00000000_00000000_00000000_00000000
M5 = %00001000_00000000_00000000_00000000 '/hs=0?
#0, OPT
SD_MOUNT
SD_DIROPEN
SD_NEXTFILE
SD_OPEN
SD_CLOSE
SD_GETC
SD_PUTC
SD_GETBLK
SD_PUTBLK
SD_SEEK
SD_FATTRIB
SD_VOLNAME
SD_CHECKMOUNTED
SD_CHECKOPEN
SD_CHECKUSED
SD_CHECKFREE
SD_NEWFILE
SD_NEWDIR
SD_DEL
SD_RENAME
SD_CHATTRIB
SD_CHDIR
SD_FORMAT
SD_UNMOUNT
SD_DMACT
SD_DMSET
SD_DMGET
SD_DMCLR
SD_DMPUT
SD_EOF
DAT ' Namen und Ort der zu ladenen Treiber
DATEN
Byte "PROG1" ,0,0,0,0,0,0,0, 0 ' Path Regnatix
Byte "reg.bin" ,0,0,0,0,0, 0 ' Regnatix
Byte "PROG1" ,0,0,0,0,0,0,0, 0 ' Path Bellatrix
Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0 ' Bellatrix
Byte "LIB",0,0,0,0,0,0,0,0,0, 0 ' Path Administra
Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0 ' Administra
PUB main ' BOOT
waitcnt(clkfreq*2+cnt) 'kurze pause für slaves
long[$7FFC]:=0
cognew(@loader,0)
long[$7FFC]:=@DATEN
DAT ' Loader
org 0
'#####################################################################################
'# Warten auf Startfreigabe
'#####################################################################################
loader
rdlong STATUS, STATUSADR
cmp STATUS, $0
if_z jmp #loader
'#####################################################################################
'# Copy Dateinahmen
'#####################################################################################
mov TEMP0, 78 ' Datenblock
mov TEMP1, @PATH1 ' Zeiger auf internen Datenblock
nexta
rdlong TEMP1, STATUS
add TEMP1, $1
add STATUS, $1
djnz TEMP0, #nexta
'#####################################################################################
'# Alle anderen COG's Stoppen
'#####################################################################################
mov TEMP0, 0 ' 8 COG's
cogid TEMP1 ' eigene COG- ausschließen
nextb
cmp TEMP0, TEMP1
if_nz cogstop TEMP0
djnz TEMP0, #nextb
'#####################################################################################
'# Bus init
'#####################################################################################
' outa[18..8] := 0 ' adresse a0..a10 auf 0 setzen
' outa[busclk] := 0 ' busclk startwert
andn outa, CON00
' outa[reg_ram1] := 1 ' ram1 inaktiv
' outa[reg_ram2] := 1 ' ram2 inaktiv
' outa[reg_prop1] := 1 ' prop1 inaktiv
' outa[reg_prop2] := 1 ' prop2 inaktiv
' outa[bus_wr] := 1 ' schreiben inaktiv
or outa, CON01
' dira := db_in ' datenbus auf eingabe schalten frida
mov dira, DBIN
' outa[reg_al] := 1 ' obere adresse in adresslatch übernehmen frida
or outa, REG_AL
nop
' outa[reg_al] := 0 'frida
andn outa, REG_AL
'#####################################################################################
'# Path1
'#####################################################################################
call #spath1
'#####################################################################################
'# Load1
'#####################################################################################
'#####################################################################################
'# Path2
'#####################################################################################
call #spath2
'#####################################################################################
'# Load2
'#####################################################################################
'#####################################################################################
'# Path3
'#####################################################################################
call #spath3
'#####################################################################################
'# Load3
'#####################################################################################
'#####################################################################################
'# Bus OFF
'#####################################################################################
' dira := db_off ' datenbus auf eingabe schalten
mov dira, $0
'#####################################################################################
'# Rücksprung
'#####################################################################################
jmp #loader
'#####################################################################################
'# Subroutine: PATH1
'#####################################################################################
spath1
nop
spath1_ret ret
'#####################################################################################
'# Subroutine: PATH2
'#####################################################################################
spath2
nop
spath2_ret ret
'#####################################################################################
'# Subroutine: PATH3
'#####################################################################################
spath3
nop
spath3_ret ret
'#####################################################################################
'# Variabeln und Constanten
'#####################################################################################
STATUSADR long $0000_7FFC
STATUS long $0000_0000
TEMP0 long $0000_0000
TEMP1 long $0000_0000
' +------------------------- al
' |+------------------------ /prop2
' hbeat --------+ ||+----------------------- /prop1
' clk -------+| |||+---------------------- /ram2
' /wr ------+|| ||||+--------------------- /ram1
' /hs -----+||| ||||| +--------- a0..a10
' |||| ||||| |
' |||| |||||-----------+ -------- d0..d7
CON00 long %00000010_00000011_11111111_00000000 ' A0-A10 bus_wr busclk
CON01 long %00000100_00111100_00000000_00000000 ' MEM1/2 PROP1/2 bus_wr
DBIN long %00000111_11111111_11111111_00000000
REG_AL long %00000000_10000000_00000000_00000000
PATH1 res 13 ' Verzeichnis von wo geladen werden Soll
DATEI1 res 13
PATH2 res 13
DATEI2 res 13
PATH3 res 13
DATEI3 res 13
So ungefähr sollte das beginnen.