Seite 1 von 20
HBasic
Verfasst: Di 18. Sep 2012, 19:57
von PIC18F2550
Wie währe es mit einem Basic wo jeder Befehl nur 2long's lang währe.
Die ausgeschriebenen Zeilen baut der Bellatrix zusammen.
Die Eingabezeile wird auch im Bellatrix Zusammengebaut.
Regnatix bekommt doppelrolle einmal compiler und einmal Runtime.
Token im hRam Variabeln bis long im hRam 4x26Long's
Texte und Strings Quelltexte und compilierter Cod vor Start der Runtime im Externen Ram
Hauptroutine mit 1.COG arbeitet nach starten in Spinn und stellt schnittstelle zur Hive Hartware zur verfügung.
Zur Zeit nur mal so eine IDEE

Re: TokenBasic
Verfasst: Mi 19. Sep 2012, 18:21
von drohne235
Also an einem Basic besteht definitiv Interesse, wurde ja schon öfters hier erwähnt.
Idee: Warum muss der Compiler in Regnatix laufen, verschwendet dort doch nur wertvollen hRAM?! Im Prinzip könnte in Regnatix doch nur die Runtime laufen und Bella compiliert komplett. Das compilieren wäre ja auch nicht zeitkritisch, weshalb man den Compiler in Bella auch in Spin realisieren könnte. So könnte man fertige Compilate auch mit maximalen Ressourcen in ganz anderen Props laufen lassen - man benötigt nur die die Basic-VM und der Rest des Speichers ist frei für das eigentliche Programm.
Wenn man das weiterdenkt, könnte der Basic-Compiler im Prinzip auch Spin-Bytecode erzeugen.
Re: TokenBasic
Verfasst: Mi 19. Sep 2012, 20:22
von PIC18F2550
Hi,
keine VM.
Der Compiler kann fast den gesamten hRam verwenden. Der Quelltext und das compilat liegen im externen Ram.
Nach einem reeboot von Regnatix wird von IDE auf Runtime umgeschaltet(Regnatix wird neu geladen RuntimeCOG's werden gestartet und Token werden in hRam umgeladen und COG's gestartet)
Der obere teil ist nur die Runtime1 die IDE ist noch nicht in arbeit.
Der Speicher im bellatrix ist im graphigmodus für den Quelltext viel zu klein.
Die Runtime ist ausschließlich auf den 6xCOG-Ram beschränkt die Variabeln 4x26 longs,1x26 long's mit Zeigern in den externenRam (64K für 0 therminierte Strings und Text Konstanten)
Am ende stehen ca 16k (4000 befehle) zur verfügung.
Re: TokenBasic
Verfasst: Mi 19. Sep 2012, 21:55
von drohne235
Klingt interessant!

Re: TokenBasic
Verfasst: Do 20. Sep 2012, 20:50
von PIC18F2550
Hi drohne235.
Hat du schon ein modul das die kommunikation über den Bus in PASM realisiert?
Wenn ich die Bus und Ram sachen auf ein oder 2 COG's aufteilen kann hätte ich den Speicher von 0x01F8 bis 0x7FFF für den Programmcode frei.

Re: HBasic
Verfasst: Fr 21. Sep 2012, 13:58
von drohne235
Der m-Core hat die Kommunikation direkt per PASM integriert. Schau mal in dem letzten Archiv hier im Forum (Link unten), dort findest du das im Regnatix-Code, Ordner "rom". Ist aber nur die Kommunikation von Regnatix aus, die Slaves haben noch Spin-Code.
http://hive-project.de/board/download/file.php?id=1618
Re: HBasic
Verfasst: Sa 22. Sep 2012, 23:25
von PIC18F2550
Super teilchen Danke.
Als erstes einmal Printchr und Printstr unabhängig vom graphigtreiber.
Das Problem sind die underschiedlichen busaufrufe der Treiber.
Wenn aufruf zum Treiber nich passt ist mis... vorprogrammiert.
VGA, TV, g0, ... sollten gemeinsame Schnittstelle besitzen und in einer Fehlansprache eine Fehlermeldung mit der LED Ausgeben.
Das würde den verwaltungsaufwand in den Programmen erheblich verringern(reg-ios).
Re: HBasic
Verfasst: So 23. Sep 2012, 11:27
von drohne235
Im m-Core findest du auch gleich fertige PASM-Routinen, um auf den externen RAM zuzugreifen.
Re: HBasic
Verfasst: So 23. Sep 2012, 14:14
von PIC18F2550
Nicht so schnell mit dem alten Gaul.
Erstmal mus das Grundgerüst sauber laufen (Print und Input)
Re: HBasic
Verfasst: Mo 24. Sep 2012, 18:52
von PIC18F2550
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?