Habe mal meinen Z80 verseuchtes Gedankengut gelöscht.

so geht das ja nimmer.
Hier mal das neue Runtime Grundmodell.
Code: Alles auswählen
PUB Start(status)
result := cognew(@runtime, status) + 1 'Status ist zeiger auf syncronzelle der COG's
DAT{{Runtime COG***********************************************************************************}}
runtime
org 0
rdlong stat, #par 'Statuszeiger laden
mov areg, stat
add areg, h00000001 'Adresszeiger berechnen
RESTART
mov line, stat
add line, hline 'Linezeiger berechnen (80 Variabeln/Zeiger+Adressregister)
TLOOP wrlong areg, line 'neuen Linezeiger schreiben
RTLOOP rdlong temp, stat 'status laden
cmp temp, h00000000
if_z jmp #RESTART 'Test auf startfreigabe =0 = Stop >0 = Start
rdlong line, areg 'Linezeiger laden
rdlong code, line 'Code und Arg1 laden
mov arg1, code '
shr code, h00000010
and arg1, h0000ffff
add line, h00000001
rdlong arg23, line 'Arg2 und Arg3 Laden
mov arg2, arg23 '
mov arg3, arg23 '
shr arg2, h00000010
and arg3, h0000ffff
add line, h00000001 '(Zeiger auf neuen TOKEN)
cmp code, T0000 wz 'Token 0000 = NEW
if_z jmp #J0000
cmp code, T0001 wz 'Token 0000 = END
if_z jmp #J0001
cmp code, T0002 wz 'Token 0000 = STOP
if_z jmp #J0002
jmp #RTLOOP
'Konstanten & Variabeln
h00000000 long $00000000 '0
h00000001 long $00000001 '1
h00000010 long $00000010 '16 bit verschieben
h0000ffff long $0000FFFF '16 bit Lowmaske
hline long 6 * 26 + 1 'Adressberechnung
temp long 0 'Merker
stat long 0 'Zeiger auf Statusregister
areg long 0 '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
{{Tokencode}}
T0000 long $0000 'NEW
J0000 ' Statusregister auf 0 setzen um alle Runtimmodule zu stoppen und ihre internen Register in grundstellung zu bringen
' Zeilenregister auf 1. Zeile stellen
jmp #TLOOP
T0001 long $0001 'END
J0001 ' Statusregister auf 0 setzen um alle Runtimmodule zu stoppen und ihre internen Register in grundstellung zu bringen
' Zeilenregister auf 1. Zeile stellen
wrlong stat, #0
jmp #RESTART
T0002 long $0002 'STOP
J0002 ' Statusregister auf 1 setzen um IDE zu zeigen das ein STOP-Befehl empfangen wurde
' Zeilenregister zeigt auf nächste Zeile
wrlong stat, #1
jmp #TLOOP
fit $1F0
'**************************************************************************************************
Bildschirmfoto_24.09.2012.png
Das währen ca.400longs für Routinen
Kann mal jemand drüberschaun ob das so richtig ist?