{{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Autor: Ingo Kripahle │ │ Copyright (c) 2010 Ingo Kripahle │ │ See end of file for terms of use. │ │ Die Nutzungsbedingungen befinden sich am Ende der Datei │ └──────────────────────────────────────────────────────────────────────────────────────────────────────┘ Informationen : hive-project.de Kontakt : drohne235@googlemail.com System : TriOS Name : Bellatrix-Flash Chip : Bellatrix Typ : Flash Version : 01 Subversion : 1 Funktion : Systemloader für den Bellatrix-Chip. Dieser Code wird bei einem Chip-Reset oder nach einem reboot-Kommando aus dem an Bellatrix angeschlossenen EEProm in den hRAM kopiert und gestartet. Funktional wartet der Loader dann darauf, dass Regnatix über den Systembus eine BIN-Datei sendet, welche in einen Heap geladen und gestartet wird. In TriOS ist dafür die Datei "bel.sys" reserviert. Dieser Bellatrix-Code kann zur Laufzeit den Loader durch das Spin-Kommando "reboot" wieder aktivieren. Nachdem der Loader den übertragenen Code gestartet hat, beendet die verwendete Cog ihre Arbeit. Komponenten : - COG's : Loader 1 Cog (nur während des Bootvorgangs) Logbuch : 20-01-2009-dr235 - erste version 22-03-2010-dr235 - anpassung trios Kommandoliste : Notizen : header einer bin-datei 00 b400 ' clkfreq low 02 04c4 ' clkfreq hi 04 ca6f ' sum byte, clkmode byte 06 0010 ' (obj) object start addr 08 005c ' (vars) variables start 0A 0088 ' (stk) stack start 0C 002c ' (PUB) obchain first PUB method start 0E 008c ' (isp) initial stack pointer value --------------------------------------------------------------------------------------------------------- }} CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 COGMAX = 8 INTERPRETER = $f004 'interpreteradresse (rom) PROGLEN = 32000 'größe des verfügbaren programmspeichers 'signaldefinitionen regnatix #0, D0,D1,D2,D3,D4,D5,D6,D7 'datenbus #8, BEL_VGABASE 'vga-signale (8pin) #16, BEL_KEYBC,BEL_KEYBD 'keyboard-signale #18, BEL_MOUSEC,BEL_MOUSED 'maus-signale #20, BEL_VIDBASE 'video-signale(3pin) #23, BEL_SELECT 'belatrix-auswahlsignal #24, HBEAT 'front-led BUSCLK 'bustakt BUS_WR '/wr - schreibsignal BUS_HS ' '/hs - quittungssignal 'system ' ' hbeat --------+ ' clk -------+| ' /wr ------+|| ' /hs -----+||| +------------------------- /cs ' |||| | -------- d0..d7 DB_IN = %00001001_00000000_00000000_00000000 'maske: dbus-eingabe DB_OUT = %00001001_00000000_00000000_11111111 'maske: dbus-ausgabe DB_OFF = %00000000_00000000_00000000_00000000 'maske: bus inaktiv M1 = %00000010_00000000_00000000_00000000 M2 = %00000010_10000000_00000000_00000000 'busclk=1? & /cs=0? M3 = %00000000_00000000_00000000_00000000 M4 = %00000010_00000000_00000000_00000000 'busclk=0? VAR byte heap[PROGLEN] 'programmspeicher byte proghdr[16] 'puffer für objektkopf PUB main | spinbin,i 'loader: hauptroutine {{main - loader: hauptroutine}} outa[bus_hs] := 1 'handshake inaktiv ,frida dira := db_in 'datenbus auf eingabe schalten ,frida spinbin := load 'bellatrix-code laden dira := db_off 'buszugriff deaktivieren run(spinbin) 'code ausführen & loader-cog beenden PRI errorled(time) 'loader: fehleranzeige über hbeat-led {{errorled(time) - loader: fehleranzeige über hbeat-led}} repeat !outa[hbeat] waitcnt(10_000_000 * time + cnt) PRI run(spinptr) 'loader: bin-datei bei adresse starten {{run(spinprt) - loader: bin-datei bei adresse starten}} if spinptr cognew(INTERPRETER, spinptr+4) 'neuen cog mit objekt starten PRI load | rc,ii,plen,progptr 'loader: datei in heap laden {{load - loader: datei vom bus in den heap laden 1. empf 16 Byte BIN-Dateiheader 2. send 2 Byte Objektlänge (h/l) 3. empf n Bytes komplette Datein inkl. Header }} ' kopf der bin-datei einlesen ------------------------------------------------------ repeat ii from 0 to 15 '16 bytes --> proghdr byte[@proghdr][ii] := bus_getchar plen := word[@proghdr+$A] '$a ist stackposition und damit länge der objektdatei if plen > PROGLEN 'objekt größer als verfügberer speicher? errorled(1) ' objektlänge an regnatix senden bus_putchar(plen >> 8) 'hsb senden bus_putchar(plen & $FF) 'lsb senden ' bin-datei einlesen ------------------------------------------------------ progptr := @heap progptr := (progptr + 4) & !3 repeat ii from 0 to plen-1 'datei --> heap byte[progptr][ii] := bus_getchar ' zeiger im header mit offset versehen ------------------------------------------------------ repeat ii from 0 to 4 Word[progptr+6+ii<<1] += progptr ' variablenbereich löschen ------------------------------------------------------ rc := word[@proghdr+$8] repeat ii from rc to plen step 4 long[progptr + ii] := 0 ' stackwerte setzen? ------------------------------------------------------ long[progptr+plen-4] := $fff9ffff long[progptr+plen-8] := $fff9ffff return progptr PUB bus_putchar(zeichen) 'BUS: Ein Byte über BUS ausgeben {{ein byte über bus ausgeben Belltrix --> Regnatix}} waitpeq(M1,M2,0) 'busclk=1? & prop2=0? dira := db_out 'datenbus auf ausgabe stellen outa[7..0] := zeichen 'daten ausgeben outa[bus_hs] := 0 'daten gültig waitpeq(M3,M4,0) 'busclk=0? dira := db_in 'bus freigeben outa[bus_hs] := 1 'daten ungültig PUB bus_getchar : zeichen 'BUS: Ein Byte über BUS empfangen {{ein byte über bus empfangen Regnatix --> Bellatrix}} waitpeq(M1,M2,0) 'busclk=1? & prop2=0? zeichen := ina[7..0] 'daten einlesen outa[bus_hs] := 0 'daten quittieren outa[bus_hs] := 1 waitpeq(M3,M4,0) 'busclk=0? DAT {{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ TERMS OF USE: MIT License │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ │files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ │modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ │is furnished to do so, subject to the following conditions: │ │ │ │The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ │ │ │THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ │WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ │COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ │ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}