HBasic

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag von drohne235 »

Ups, ich war irgendwie immer auf den eRAM fixiert. Hab nochmal zurück geblättert:
Token im hRam Variabeln bis long im hRam 4x26Long's
Texte und Strings Quelltexte und compilierter Cod vor Start der Runtime im Externen Ram
Hab ich dann durcheinander gewirbelt. Sieht interessant aus, kann mich aber nur schwer so theoretisch reindenken, am leichtesten fällt mir das im Vergleich zu m/mental... :?
Funktionen wie print_HEX, print_String, ... oder die Commandlinie werden in Bellatrix ausgelagert.


Habe ich bei m auch so gemacht - das entspricht 100% dem Konzept vom Hive und spart massig Platz. Ein klasisches Forth (wie auch ein klassisches Basic) geht davon aus, dass es auf einem Prozessor/Chip läuft. Deshalb kümmert sich PropForth (als klassischer Vertreter, welcher ja auch auf einem Chip autark läuft) auch um alles - Eingabe- und Ausgabeformatierung, Parsing usw. m ist eine "faule Sau" und kümmert sich einfach nur um nichts. m kennt Zeichen, Longs und Token - um den Rest soll sich doch bitte ein Sklave kümmern. Wird eine Zahl ausgegeben, so sendet m ein Long zu Bella uns sagt: sieh zu wie du das auf dem Screen bekommst. Dadurch passt der m-Core auch noch mit Compiler, Interpreter, Editor und Massenspeicherverwaltung in knapp über 3KB - der Rest ist frei für die Anwendung.

Aber ich will mal nicht so viel Offtopic hier über mental schwatzen... :twisted: HBasic ist in jedem Fall ein neuer Ansatz.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

HBasic lät VGA-Treiber von SD-Karte.
DSCI0222.JPG
:LACHEN

Der VGA-Treiber ist noch dumm.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

:shock: Ist mir heute früh nicht mal aufgefallen das der Textblock von der Runtime an Bellatrix garnicht gesendet wurde :SCHREIEN .
2012-10-31_11-48-31_423.jpg
Das mit den Verschiedenen DAT-Blöcken und wie man diese auseinanderhält muss ich auch noch näher betrachten :SCHRAUBEN
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

So da die 1. Runtime arbeitet kommt ersteinmal das Grundgerüst für dir 2. drann und dann wieder TESTEN bis der Hauptschalter kommt. :LACHEN
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Also das Grundgerüst für Runtime1 benötigt 109 long's der Rest steht für BasicBefehle zur verfügung. :DAUMENHOCH und stellt ein Grundgerüst für 64 BasicBefehle. :SCHREIEN

Runtime0 ist die Runtime die die Kommunikation über den Bus und zu den eRam verwaltet.

In Runtime1 bis Runtimexx werden nur Basicbefehle abgearbeitet.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

:shock: Jetzt liegt doch das Projekt noch zu Hause auf dem Rechner wie Ärgerlich. :evil:

Also wird kurzerhand mein VGA-Treiber vom Z1013 dran glauben müssen. :SCHRAUBEN
Ich will das Businterface auf PASM umstellen dann sollte alles noch ein bisschen schneller gehen. :DAUMENHOCH
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Und wieder soll der hRam außer Daten nichts anderes enthalten.

Code: Alles auswählen

  ScreenPtr       = $0
  CursorPtr       = $77E6     'byte    ckx, cky, ckm, cmx, cmy, cmm   cursor control bytes
  SyncPtr         = $77FC     'long    sync                           written to -1 by VGA driver after each screen refresh
  font            = $7800     'long
Damit kann ich über 3 Screens scrollen. :LACHEN ohne auch nur ein Byte übertragen zu müssen.

Anzeigescreen 80x60
Virtuellerscreen 80x180
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Hi, drohne235
Habe ich das read/write Byte vom BUS richtig übersetzt?

Code: Alles auswählen

DAT
vgacog          org 0
                andn    dira,   dinp
                or      dira,   dout
                or      outa,   bhs
                call    #rbus
loop
                jmp #loop

'ein byte vom bus lesen
''funktionsgruppe               : chip
''funktion                      : ein byte von regnatix empfangen
''eingabe                       : -
''ausgabe                       : byte
'    waitpeq(M1,M2,0)                                     'busclk=1? & prop2=0?
''''''    wert := ina[DB]                                    'daten einlesen
'    wert := ina & DB                                   'daten einlesen
'    outa[BUS_HS] := 0                                    'daten quittieren
'    waitpeq(M3,M4,0)                                     'busclk=0?
'    outa[BUS_HS] := 1
rbus
                waitpeq     M1,     M2                    'busclk=1? & prop2=0?
                mov         temp1,  ina
                and         temp1,  #$FF
                andn        outa,   bhs
                waitpeq     M3,     M4
                or          outa,   bhs
rbus_ret        ret
'ein byte auf bus schreiben
''funktionsgruppe               : chip
''funktion                      : ein byte an regnatix senden
''eingabe                       : byte
''ausgabe                       : -
'    waitpeq(M1,M2,0)                                      'busclk=1? & prop2=0?
'    dira := DB_OUT                                        'datenbus auf ausgabe stellen
'    outa[7..0] := wert                                    '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
wbus
                waitpeq     M1,     M2                    'busclk=1? & prop2=0?
                and         temp1,  #$FF
                or          dira,   dout
                andn        outa,   #$FF
                or          outa,   temp1
                or          outa,   bhs
                waitpeq     M3,     M4
                andn        dira,   dinp
                or          outa,   bhs
wbus_ret        ret
'Konstanten
'         hbeat   --------+
'         clk     -------+|
'         /wr     ------+||
'         /hs     -----+||| +------------------------- /cs
'                      |||| |                 -------- d0..d7
'port     long    %00000000_00000000_00000000 dddddddd  ' a: adr, d: daten'Konstanten
dinp      long    %00000111_10000000_00000000_11111111  ' bus input
dout      long    %00001000_00000000_00000000_11111111  ' bus output
clr       long    %00000000_00000000_00000000_11111111  ' bus löschen, maske: dbus-ausgabe
M1        long    %00000010_00000000_00000000_00000000
M2        long    %00000010_10000000_00000000_00000000  ' busclk=1? & /cs=0?
M3        long    %00000000_00000000_00000000_00000000
M4        long    %00000010_00000000_00000000_00000000  ' busclk=0?
bhs       long    %00001000_00000000_00000000_00000000  '

temp1     long $0
h00000000 long $0     '
h00000001 long $1     '
h0000ffff long $FFFF  '16 bit Lowmaske

                fit
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: HBasic

Beitrag von drohne235 »

Schau doch in mental rein, da sind schon Routinen in PASM (direkt über den eRAM-Routinen) dafür drin. :RAUCHEN
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2851
Registriert: Fr 30. Sep 2011, 13:08

Re: HBasic

Beitrag von PIC18F2550 »

Muß noch getestet werden. :SCHREIEN

Code: Alles auswählen

DAT
vgacog          org 0
                djnz    temp1,  #vgacog wz
                andn    dira,   dinp
                or      dira,   dout
                or      outa,   bhs
loop            call    #rbus
                sub     temp1,  #$1F wc
        if_nc   jmp     #command

                mov     temp2,  #0
                sub     temp2,  #160
                mov     temp3,  Zeile
loop1           add     temp2,  #160
                djnz    temp3,  #loop1
                add     temp2,  Spalte
                add     temp2,  Spalte          '2x wegen wordformat

                add     temp1,  color
                wrword  temp1,  temp2
                add     spalte, #1
                cmp     spalte, #80 wz
        if_z    mov     spalte, #0
        if_z    add     zeile,  #1
                cmp     zeile,  #60 wz
        if_z    sub     zeile,  #1              '! Scroll einfügen!

                jmp #loop
'***************************************************************************
command         cmp     temp1,  #$0  wz
        if_z    jmp     #b00
...
                cmp     temp1,  #$1F wz
        if_z    jmp     #b1F

                jmp #loop
'**********************************************************************
b00     'Steuersequenz
                jmp #loop
...
b1F     'Steuersequenz
                jmp #loop

rbus    'ein byte vom bus lesen
                waitpeq     M1,     M2                    'busclk=1? & prop2=0?
                mov         temp1,  ina
                and         temp1,  #$FF
                andn        outa,   bhs
                waitpeq     M3,     M4
                or          outa,   bhs
rbus_ret        ret
wbus    'ein byte auf bus schreiben
                waitpeq     M1,     M2                    'busclk=1? & prop2=0?
                and         temp1,  #$FF
                or          dira,   dout
                andn        outa,   #$FF
                or          outa,   temp1
                or          outa,   bhs
                waitpeq     M3,     M4
                andn        dira,   dinp
                or          outa,   bhs
wbus_ret        ret

'Konstanten
'         hbeat   --------+
'         clk     -------+|
'         /wr     ------+||
'         /hs     -----+||| +------------------------- /cs
'                      |||| |                 -------- d0..d7
'port     long    %00000000_00000000_00000000 dddddddd  ' a: adr, d: daten'Konstanten
dinp      long    %00000111_10000000_00000000_11111111  ' bus input
dout      long    %00001000_00000000_00000000_11111111  ' bus output
clr       long    %00000000_00000000_00000000_11111111  ' bus löschen, maske: dbus-ausgabe
M1        long    %00000010_00000000_00000000_00000000
M2        long    %00000010_10000000_00000000_00000000  ' busclk=1? & /cs=0?
M3        long    %00000000_00000000_00000000_00000000
M4        long    %00000010_00000000_00000000_00000000  ' busclk=0?
bhs       long    %00001000_00000000_00000000_00000000  '

Spalte    long $0
Zeile     long $0
temp1     long $FF      'Startverzögerung
temp2     long $0
temp3     long $0
color     long %00001010_00000000
h00000000 long $0       '
h00000001 long $1       '
h0000ffff long $FFFF    '16 bit Lowmaske

                fit
There are 342 ($156) Longs left in the cog
Bellatrix wird jetzt entspinnt :SCHRAUBEN
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten