Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.
Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.
POSITION x, y : GET #6,z
bartgo:
"Jestem tu nowy."bartgo:
Próbuję realizować swoje "marzenie z dzieciństwa" czyli napisanie prostego ale kompletnego, sensownego programu w Forth. Wziąłem na warsztat grę "Łapacz" Krzysztofa Hołowni, opublikowaną w Tajemnicach Atari 3/91 (Atari Basic, 5-linii, gra w trybie tekstowym, używa joysticka).bartgo:
Najpierw, hm... Muszę czymś zrobić ZRZUT dysku/pliku atr, bajt po bajcie. Bez sensu wrzucić taki kod na githuba albo nawet do pliku tekstowego - jest to plik binarny... Trzeba by napisać coś, co przeczyta sektor po sektorze dyskietkę, zrzuci do pliku znaczące sektory (bez iluśtam początkowych odpowiadających za jądro Forth), pokroi na ekrany dodając znaczniki końca linii ale nie tnąc słów w połowie... (...)bartgo:
Pewno przygotuję w następnych dniach tutorial jak krok po kroku uruchomić kod lub napisać coś własnego.( - EDytor Wprowadzania: 1/5 - )
( autor: Roland Pantola )
( [c]1992 Tajemnice Atari )
( "FORGET TASK" to remove EDW! )
: TASK ;
: <=< OVER > >R < R> * ;
37000 CONSTANT AD0
0 VARIABLE AB 0 VARIABLE *K
0 VARIABLE LIN 0 VARIABLE EN
: AF AD0 AB @ + ;
: B32 32 BASE ! ;
: NK IF 0 0 ELSE B32 AF NUMBER
DECIMAL 1024 U/ THEN ;
: N1 0 AF COUNT OVER + SWAP ;
-->
( - EDytor Wprowadzania: 2/5 - )
: NU N1 DO
I C@ 47 OVER 58 <=< 64 ROT
87 <=< + 0= + LOOP NK ;
: K0 1 *K +! C@ *K @ * DUP
EN +! + 1024 MOD ;
: K1 DO
I K0 I C@ 0= IF I 38
BLANKS LEAVE THEN LOOP ;
: KP 0 *K ! 4 AF C! 32 AF
5 + C! NU 0 EN ! ;
: KOD= KP >R >R 0 AF 38 + AF 6
+ K1 R> = R> LIN @ = SWAP
OVER * ;
: .R2 0 <# # # #> TYPE SPACE ;
-->
( - EDytor Wprowadzania: 3/5 - )
: ?L LIN @ B32 .R2 DECIMAL ;
: WP 125 EMIT 1 LIN +!
." Do wprowadzenia linia "
?L CR CR ;
: ?DOB DROP AF 6 + AF 32 CMOVE
32 AB +! WP 1 ;
: ?Z CR CR AF 1+ 37 TYPE 155
EMIT 28 EMIT 0 ;
: LL
." Teraz potrzebna linia: "
?L ;
: ?ZLE 125 EMIT 0= IF LL ELSE
." Popraw: " THEN ?Z ;
-->
( - EDytor Wprowadzania: 4/5 - )
: KO KOD= IF ?DOB ELSE ?ZLE
THEN EN @ 1442 = * ;
: GO 125 EMIT CR ." Gotowe!"
CR ;
: E1 1 82 C! 0 AB ! 0 LIN !
WP ;
: BBL AF 1024 AB @ OVER MOD
- DUP AB +! BLANKS ;
-->
( - EDytor Wprowadzania: 5/5 - )
( EDW: -- )
: EDW E1 BEGIN AF 39 ERASE
AF 1+ 37 EXPECT KO UNTIL BBL
GO ;
( EDW-SAVE: n -- )
: BSAV OVER + SWAP DO DUP I 0
R/W B/BUF + LOOP DROP ;
: EDW-SAVE AD0 SWAP B/SCR *
AB @ B/BUF / BSAV ;
;S
( /END )