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 :D :D :D

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. :mrgreen:

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. :shock:
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. :D so geht das ja nimmer. :shock:

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 :D
Kann mal jemand drüberschaun ob das so richtig ist?