X-FORTH von Carsten Strotmann zum neuem Leben erwecken...
von wichtel » So 8. Jan 2012, 14:10X-FORTH von Strotmann :
http://atariwiki.strotmann.de/wiki/Wiki ... ge=X-FORTH
Ich habe jetzt auch mal dieses X-FORTH getestet.
Ist als ASM-Source und ATR verfügbar:
http://atariwiki.strotmann.de/wiki/Wiki.jsp?page=Index unter "X".
Den Source-Code kann man mit dem atasm.exe compilieren , oder auch nur mal anschauen wie er aufgebaut ist. Ich habe ihn mit atasm.exe als : XFTH.65o compiliert und das Forth funktioniert.
Ich habe hier ein FORTH-Programm welches auch mit dem X-FORTH läuft.
XFTH.65o starten dann mit --- INCLUDE" D:XJOYTEX.F --- das Programm laden, danach INIT eingeben und die Grafik laden mit -- READFILE" D:MULBI.BIN --- dann den Weg den die PM mit den Joystick zurücklegen soll eingeben zb : 100 BEWEGE (RETURN drücken) dann den Joystick bedienen, wenn die PM 10x mit der Grafik colligiert ist oder die Wegpunkte verbraucht sind , ist es zu ende.
Beim Laden des Programmes ist "HEX" vorgegeben, man kann diese Basis dann auch ändern mit 10 BASE ! auf Decimal umstellen.
Wer hat dann mal interesse mit FORTH etwas zu programieren ? Vielleicht das X-FORTH von Carsten wieder auf die Beine helfen, da wurde ja viel Arbeit reingesteckt (danke). Er kann uns bestimmt auch weiterhelfen , wenn es eine Sackgasse gibt ..... Mit den festen Floatroutinen im ATARI800XL hat sich erledigt, die laufen jetzt bei mir auch in dem X-FORTH.
Bitte mal melden, ich würde mich freuen.
Der Text von meinem Programm.
Es wird eine DPL erstellt (160x96 mit 3-Farben), 2 Bit ist ein Plotpunkt und 2 Scanlinien hoch.
Ich stelle nur 80 Grafikzeilen dar , den Rest von 16 Zeilen bzw 32 für den Textmodus mit 4 Textzeilen.
Da es von Cas noch keinen genauen Plan gibt über den Speicher für den Returnstack und Datenstack , habe ich den obersten Bereich genommen für den Grafikbereich (das X-Forth endet bei B800) A000.
Da die Grafik hier im Modus den Wert von 4096 Byte nicht überschreitet, braucht man keinen zweite DPL anlegen. Die PM lege ich ab B000.
Für den Textbereich (4 Zeilen) habe ich ein bisschen getrickst. Er beginnt ja bei BC40.
Mit der Speicherzelle 2BF kann ich die 4 letzten Textzeilen festlegen , die dann dementsprechend bei BF60 beginnen. In diesen 4 Zeilen wird der Textmodus vom X-Forth weiter benutzt.
In den Grafikkbereich kann man jetzt ein Bild reinladen mit der Grösse 160x80 in 3 Farben.
wichtel
http://atariwiki.strotmann.de/wiki/Wiki ... ge=X-FORTH
Ich habe jetzt auch mal dieses X-FORTH getestet.
Ist als ASM-Source und ATR verfügbar:
http://atariwiki.strotmann.de/wiki/Wiki.jsp?page=Index unter "X".
Den Source-Code kann man mit dem atasm.exe compilieren , oder auch nur mal anschauen wie er aufgebaut ist. Ich habe ihn mit atasm.exe als : XFTH.65o compiliert und das Forth funktioniert.
Ich habe hier ein FORTH-Programm welches auch mit dem X-FORTH läuft.
XFTH.65o starten dann mit --- INCLUDE" D:XJOYTEX.F --- das Programm laden, danach INIT eingeben und die Grafik laden mit -- READFILE" D:MULBI.BIN --- dann den Weg den die PM mit den Joystick zurücklegen soll eingeben zb : 100 BEWEGE (RETURN drücken) dann den Joystick bedienen, wenn die PM 10x mit der Grafik colligiert ist oder die Wegpunkte verbraucht sind , ist es zu ende.
Beim Laden des Programmes ist "HEX" vorgegeben, man kann diese Basis dann auch ändern mit 10 BASE ! auf Decimal umstellen.
Wer hat dann mal interesse mit FORTH etwas zu programieren ? Vielleicht das X-FORTH von Carsten wieder auf die Beine helfen, da wurde ja viel Arbeit reingesteckt (danke). Er kann uns bestimmt auch weiterhelfen , wenn es eine Sackgasse gibt ..... Mit den festen Floatroutinen im ATARI800XL hat sich erledigt, die laufen jetzt bei mir auch in dem X-FORTH.
Bitte mal melden, ich würde mich freuen.
Der Text von meinem Programm.
Es wird eine DPL erstellt (160x96 mit 3-Farben), 2 Bit ist ein Plotpunkt und 2 Scanlinien hoch.
Ich stelle nur 80 Grafikzeilen dar , den Rest von 16 Zeilen bzw 32 für den Textmodus mit 4 Textzeilen.
Da es von Cas noch keinen genauen Plan gibt über den Speicher für den Returnstack und Datenstack , habe ich den obersten Bereich genommen für den Grafikbereich (das X-Forth endet bei B800) A000.
Da die Grafik hier im Modus den Wert von 4096 Byte nicht überschreitet, braucht man keinen zweite DPL anlegen. Die PM lege ich ab B000.
Für den Textbereich (4 Zeilen) habe ich ein bisschen getrickst. Er beginnt ja bei BC40.
Mit der Speicherzelle 2BF kann ich die 4 letzten Textzeilen festlegen , die dann dementsprechend bei BF60 beginnen. In diesen 4 Zeilen wird der Textmodus vom X-Forth weiter benutzt.
In den Grafikkbereich kann man jetzt ein Bild reinladen mit der Grösse 160x80 in 3 Farben.
- Code: Alles auswählen
HEX
022F CONSTANT SDMCTL
026F CONSTANT GPRIOR
D000 CONSTANT HPOS0
D01D CONSTANT GRACTL
D407 CONSTANT PMBASE
230 CONSTANT SDLSTL
D40B CONSTANT VCOUNT
A000 CONSTANT SCREEN0
BF60 CONSTANT SCREEN1
02C0 CONSTANT PCOLR0
02C4 CONSTANT COLOR0
02C5 CONSTANT COLOR1
02C6 CONSTANT COLOR2
02C8 CONSTANT COLOR4
0278 CONSTANT STICK0
D004 CONSTANT P0PF
D01E CONSTANT HITCLR
00 VARIABLE XPOS
00 VARIABLE YPOS
00 VARIABLE TESTXY
00 VARIABLE MILLI
00 VARIABLE ODLIST
00 VARIABLE COLOR0O
00 VARIABLE COLOR1O
00 VARIABLE COLOR2O
00 VARIABLE COLOR4O
00 VARIABLE ZC
00 VARIABLE ZZ
00 VARIABLE ZA
00 VARIABLE ZA1
00 VARIABLE DLIST -2 ALLOT
70 C, 70 C, 70 C,
4D C, SCREEN0 ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D0D ,
0D0D , 0D0D , 0D0D , 0D C,
42 C, SCREEN1 ,
0202 , 02 ,
41 C, DLIST ,
00 VARIABLE SPRITE0 9 ALLOT
FF SPRITE0 C!
81 SPRITE0 1 + C!
81 SPRITE0 2 + C!
81 SPRITE0 3 + C!
81 SPRITE0 4 + C!
81 SPRITE0 5 + C!
81 SPRITE0 6 + C!
81 SPRITE0 7 + C!
FF SPRITE0 8 + C!
: GCLS SCREEN0 C80 0 FILL ;
: INITPM
SDMCTL C@ 1C OR SDMCTL C!
3 GRACTL C!
1 GPRIOR C!
B0 PMBASE C! ;
: DELAY
ZZ @ 0 DO
LOOP ;
: PM0POS
B400 FF 0 FILL
SPRITE0 B400 YPOS C@ + 9 CMOVE
XPOS C@ HPOS0 C!
DELAY ;
: READFILE"
FILE" R/O OPEN-FILE
128 < IF
SOURCE-ID !
SCREEN0 C80 SOURCE-ID @ READ-FILE
SOURCE-ID @ CLOSE-FILE
0 SOURCE-ID !
ELSE
." Error open file"
THEN ;
: BEWEGE
ZA1 !
BEGIN
FF ZZ !
STICK0 C@
DUP 0E = IF YPOS C@ 1 - YPOS C! 1 TESTXY C! 1 ZA @ + DUP ZA ! . CR PM0POS THEN
DUP 0D = IF YPOS C@ 1 + YPOS C! 2 TESTXY C! 1 ZA @ + DUP ZA ! . CR PM0POS THEN
DUP 07 = IF XPOS C@ 1 + XPOS C! 3 TESTXY C! 1 ZA @ + DUP ZA ! . CR PM0POS THEN
0B = IF XPOS C@ 1 - XPOS C! 4 TESTXY C! 1 ZA @ + DUP ZA ! . CR PM0POS THEN
P0PF C@ 0 > IF
500 ZZ !
TESTXY C@ 1 = IF YPOS C@ 4 + YPOS C! 1 ZC @ + ZC ! PM0POS THEN
TESTXY C@ 2 = IF YPOS C@ 4 - YPOS C! 1 ZC @ + ZC ! PM0POS THEN
TESTXY C@ 3 = IF XPOS C@ 4 - XPOS C! 1 ZC @ + ZC ! PM0POS THEN
TESTXY C@ 4 = IF XPOS C@ 4 + XPOS C! 1 ZC @ + ZC ! PM0POS THEN
THEN
ZC @ A = IF ZA1 @ ZA ! THEN
1 HITCLR C!
0 TESTXY C!
ZA @ ZA1 @ = UNTIL
0 ZC !
0 ZA !
0 ZA1 !
." wegpunkte/colli erreicht ! " CR ;
: INIT
INITPM
70 PCOLR0 C!
0C COLOR4 C!
DLIST SDLSTL !
4 2BF C!
32 DUP XPOS C! YPOS C! PM0POS
0 ZC !
0 ZA !
0 ZA1 ! ;
wichtel