Code: Alles auswählen
010111 000i 1111 --------- sssssssss

Code: Alles auswählen
010111 000i 1111 --------- sssssssss
Code: Alles auswählen
DAT{{Runtime COG***********************************************************************************}}
runtime
org 0
' ---------------------------------------------------------------------
mov sprvm, SPRV 'Bytecode Merken
INI0
rdlong temp1, stat 'status laden
cmp temp1, h7F7FF7F7 wz
if_z jmp #m0
jmp #INI0 'Test auf inifreigabe ><h7F7FF7F7 = Stop =h7F7FF7F7 = Start
' ---------------------------------------------------------------------
m0 ' Load Programm vom externen Ram
' ---------------------------------------------------------------------
RESTART ' ini SYSTEM
mov line, h00000000
' ---------------------------------------------------------------------
TLOOP
wrlong line, areg 'neuen Linezeiger schreiben
' ---------------------------------------------------------------------
RTLOOP
rdlong temp1, stat 'status laden
cmp temp1, h00000000 wz
if_nz jmp #RTLOOP 'Test auf startfreigabe >0 = Stop =0 = Start
rdlong line, areg 'Linezeiger laden
' ---------------------------------------------------------------------
rdlong code, line 'Code und Arg1 laden
...
...
mov SPRV, sprvm
add SPRV, code
shr code, $06 wz 'untere 6 bit löschen
' sub code, $0 wz 'Test ob richtiger 64 Token-block
if_nz jmp #RTLOOP 'wenn nicht dann rücksprung
SPRV jmp #SPRV0
SPRV0 jmp #J0000 'STOP
jmp #J0001 'END
jmp #J0002 'GOTO
' TOK-CODE Senden an Bellatrix ----------------------------------------------------------
jmp #J0003 'write_Bellatrix_word+long
jmp #J0004 'write_Bellatrix_byte+long
...
...
'Konstanten
h00000000 long $00000000 '0
h00000001 long $00000001 ' STOP-Statusmeldung
h00000004 long $00000004 '1 ein long weiter
h000000ff long $000000FF '8 bit Lowmaske
h0000ffff long $0000FFFF '16 bit Lowmaske
dinp long %00000111_11111111_11111111_00000000 ' bus input
dout long %00000111_11111111_11111111_11111111 ' bus output
_s1 long %00000100_01111000_00000000_00000000 ' bus inaktiv
_b1 long %00000000_00111000_00000000_00000000 ' adm=1, bel=0, wr=0, busclk=0
_b2 long %00000010_00111000_00000000_00000000 ' adm=1, bel=0, wr=0, busclk=1
_b3 long %00000110_00111000_00000000_00000000 ' adm=1, bel=0, wr=1, busclk=1
_a1 long %00000000_01011000_00000000_00000000 ' adm=0, bel=1, wr=0, busclk=0
_a2 long %00000010_01011000_00000000_00000000 ' adm=0, bel=1, wr=0, busclk=1
_a3 long %00000110_01011000_00000000_00000000 ' adm=0, bel=1, wr=1, busclk=1
_hs long %00001000_00000000_00000000_00000000 ' hs=1?
'---------------------------------------------------------------------
h7F7FF7F7 long $7F7FF7F7 '32 bitmaske für LOAD SYSTEM von externen Ram (STATUS)
'---------------------------------------------------------------------
'Variabeln
sprvm long $0 'Merker Bytecode SPRVM
stat long $7FFC 'Zeiger auf Statusregister
areg long $7FF8 'Zeiger auf token im hRAM
line long 0 'Merker line Nummer
code long 0 'Tockencode
arg1 long 0 'Tokenargument 1
arg23 long 0 'Longargument
arg2 long 0 'Tokenargument 2
arg3 long 0 'Tokenargument 3
temp1 long 0 'Merker
temp2 long 0 'Merker
temp3 long 0 'Merker
fit $1F0
Code: Alles auswählen
rdlong code, line ' arg1:code = 23:9
jmp code
Es gibt aber trotzdem nur 512 Sprungziele im cog. Also kannst Du zumindest die unteren 9bit als direkte Einsprungadresse verwenden.PIC18F2550 hat geschrieben::? was soll er bewirken :?:
code kann werte von 0..65535 annehmen.
Code: Alles auswählen
addr.long[7FF8]
Adresse des Programmspeichers dient zur syncronisation der COG's
1.) Adresse lesen
2.) Abarbeiten
ja Neue adresse schreiben
nein warten auf neue Adresse
status.long[7FFC]
Sreuerregiste zum steuern der Runtimmodule
>0 = Stop
0 = Go
Code: Alles auswählen
COG0 ist der spinnteil von der Runtine und wird nach dem Starten von COG1 beendet.
COG1 ist sowas wie die Mutter im System sie verbindet den Regnatix mit dem rest vom HIVE
und läd Runtimmodule in COG2-7 und 0
COG2-7 & 0 sind ladbare Module die verschiedene Funktionen ähnlich wie COG1 zur verfügung stellen
OK es hatt etws gedauert aber jetzt binn ich wieder wachkuroneko hat geschrieben:kuroneko hat geschrieben:Hast Du mal ueber folgendes nachgedacht?Code: Alles auswählen
rdlong code, line ' arg1:code = 23:9 jmp code
PIC18F2550 hat geschrieben:was soll er bewirken
![]()
code kann werte von 0..65535 annehmen.
Code: Alles auswählen
' arg1:code = 23:9
Code: Alles auswählen
'---------------------------------------------------------------------
' eRam
'
' temp1 Daten
' temp2 Adresse
' temp3 temp
'---------------------------------------------------------------------
eRamWR ' byte schreiben
mov dira,dout ' bus auf ausgabe schalten
call #setadr ' adresse setzen
and temp1,#$ff
or outa,temp1 ' wert an ports setzen
xor outa,_bwr ' schreibsignal aktiv
mov dira,dinp ' bus auf eingabe schalten
mov outa,_s1 ' bus wieder inaktiv
eRamWR_ret ret
'---------------------------------------------------------------------
eRamWD ' byte lesen
call #setadr ' adresse setzen
mov temp1,ina ' port einlesen
and temp1,#$ff ' daten ausmaskieren
mov outa,_s1 ' bus wieder inaktiv
eRamWD_ret ret
'---------------------------------------------------------------------
setadr ' adresse verarbeiten hwt-adresse --> latch
mov temp3,temp2 ' adresse holen
shr temp3,#3 ' adresse für latch zurechtschieben
and temp3,_latch ' latchbits ausmaskieren
or outa,temp3 ' adresse für latch an ports setzen
xor outa,_al ' wert in latch übernehmen
xor outa,_al ' wert in latch übernehmen
mov temp3,temp2 ' adresse holen
shl temp3,#8 ' adresse zurechtschieben
and temp3,_adr ' adresse ausmaskieren
or outa,temp3 ' adresse an ports setzen
xor outa,_ram1 ' rambank 1 selektieren
setadr_ret ret