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

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.
Der VGA-Treiber ist noch dumm.
Re: HBasic
Verfasst: Mi 31. Okt 2012, 11:52
von PIC18F2550

Ist mir heute früh nicht mal aufgefallen das der Textblock von der Runtime an Bellatrix garnicht gesendet wurde

.
Das mit den Verschiedenen DAT-Blöcken und wie man diese auseinanderhält muss ich auch noch näher betrachten

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.

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.

und stellt ein Grundgerüst für 64 BasicBefehle.
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

Jetzt liegt doch das Projekt noch zu Hause auf dem Rechner wie Ärgerlich.
Also wird kurzerhand mein VGA-Treiber vom Z1013 dran glauben müssen.
Ich will das Businterface auf PASM umstellen dann sollte alles noch ein bisschen schneller gehen.

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.

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.

Re: HBasic
Verfasst: Mi 7. Nov 2012, 22:45
von PIC18F2550
Muß noch getestet werden.
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
