Seite 10 von 20

Re: HBasic

Verfasst: Mi 31. Okt 2012, 00:42
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.

Re: HBasic

Verfasst: Mi 31. Okt 2012, 04:04
von PIC18F2550
HBasic lät VGA-Treiber von SD-Karte.
DSCI0222.JPG
:LACHEN

Der VGA-Treiber ist noch dumm.

Re: HBasic

Verfasst: Mi 31. Okt 2012, 11:52
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

Re: HBasic

Verfasst: Fr 2. Nov 2012, 00:32
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

Re: HBasic

Verfasst: Fr 2. Nov 2012, 00:54
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.

Re: HBasic

Verfasst: Mo 5. Nov 2012, 20:45
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

Re: HBasic

Verfasst: Mo 5. Nov 2012, 21:49
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

Re: HBasic

Verfasst: Di 6. Nov 2012, 21:22
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

Re: HBasic

Verfasst: Di 6. Nov 2012, 21:55
von drohne235
Schau doch in mental rein, da sind schon Routinen in PASM (direkt über den eRAM-Routinen) dafür drin. :RAUCHEN

Re: HBasic

Verfasst: Mi 7. Nov 2012, 22:45
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