Tajemnice ATARI

Z G R Y W U S


   Większość ciekawszych programów, które będziemy prezentować, została napisana w języku asemblera. Drukowanie ich tekstów źródłowych jest raczej niewykonalne (setki, a nawet tysiące wierszy!), zwłaszcza, jeżeli chodzi o programy dłuższe, a poza tym nie wszyscy mają asemblery lub ochotę do ich zakupu, a tym bardziej do przepisywania mnemoników. Z tego powodu wszystkie listingi będą pochodziły ze standardowego basicu (za wyjątkiem oczywiście specjalnych cykli, czy artykułów). Musi więc istnieć jakiś pomost pomiędzy gotowym programem w języku maszynowym, a dostępnym dla każdego wydrukiem z basicu. Takim łącznikiem jest programik dekodujący zapisany w wierszach DATA kod maszynowy do pamięci i uruchamiający go, bądź zapisujący go na dowolne urządzenie zewnętrzne (kaseta, dysk, edytor ekranowy itp.). Wybraliśmy ten drugi sposób, gdyż dzięki temu uzyskujemy gotowy program, który wystarczy wczytać z używanej pamięci zewnętrznej i od razu można go używać bez każdorazowego czekania na jego zdekodowanie. Poza tym, taki "zgrany" program jest dużo krótszy od odpowiednika w basicu.

   Zgrywus zapisuje gotowy program w postaci pliku (file), lub programu samodzielnie ładowalnego z magnetofonu (BOOT). Dla zupełnie niewtajemniczonych typ plikowy oznacza, że wczytujemy go do komputera z poziomu DOS-u lub COS-u. Takie rozwiązanie dla osób używających napędu dysków jest oczywiste, natomiast dla posiadaczy magnetofonów może mieć też pewne zalety. Ze względu na uniwersalność Zgrywus nagrywając dany program w postaci BOOT-u dodaje na początku tzw. "loader", czyli procedurę potrafiącą przeanalizować i załadować właściwy program (w formacie pliku). Dlatego też każdy wykreowany BOOT jest o dwa sektory dłuższy od analogicznego pliku. Wspomniałem przed chwilą o zaletach nagrywania programów na kasety także w postaci plików DOS-owych. Wszystkie "użytki" (99%) mają opcję powrotu do systemu, dzięki czemu rano wczytany COS nawet przy pracy z różnymi programami ma wielkie szanse pozostać w komputerze do wieczora.

   Wydrukowany dalej program po przepisaniu należy nagrać na taśmę lub dyskietkę instrukcją LIST"C:" lub LIST"D:ZGRYWUS.LST". Wszystkie programy w języku maszynowym, które drukować będziemy jako same wiersze DATA o numerach od 1000 wzwyż należy nagrywać na posiadaną pamięć zewnętrzną przy pomocy "Zgrywusa". Tryb postępowania jest następujący:

1. przepisujemy wszystkie wiersze drukowanego programu;

2. "doczytujemy" do nich zgrywusa odpowiednio komendą ENTER"C:" lub ENTER"D:ZGRYWUS.LST";

3. zapisujemy kompletny program na dysku lub kasecie;

4. o ile w pamięci był generator kodów kontrolnych naciskamy RESET

5. komendą RUN uruchamiamy program.

   Oczywiście w każdym opisie drukowanego programu poinformujemy, czy w tym konkretnym wypadku można użyć Zgrywusa.

   Ze względu na wygodę przepisywania Zgrywus został napisany tak, by był jak najkrótszy. Dlatego ze względów dydaktycznych w tym przypadku nie będzie omawiana konstrukcja programu. Basic jest niestety językiem w którym "porządność" pisania nie zawsze idzie w parze z długością programu. Jedynym faktem, który warto wspomnieć jest wyłączenie ekranu bezpośrednio po uruchomieniu Zgrywusa ze względu na szybkość pracy. O tym, że program "żyje" możemy się przekonać słuchając jednostajnego "pykania" w głośniku monitora. W końcu na monitorze pojawi się zapytanie o pożądany format zapisu. Odpowiadamy naciskając klawisz 1 lub 2 i potwierdzamy RETURNem. Przy wyborze zapisu na plik, pojawi się pytanie o jego nazwę. Odpowiedziami poprawnymi są np: D:XYZ.COM, D2:PROGRAM, C:, E:, itp. Natomiast po wyborze drugiej możliwości (BOOT) program zapyta się o nazwę, która ma pojawić się w czasie wczytywania programu z kasety. Można tu wpisać maksymalnie 40 znakowy napis.

Mirosław Liminowicz


1 REM -------------------------------
2 REM :          Zgrywus            :
3 REM : autor:  Miroslaw Liminowicz :
4 REM :  (c) 1991 Tajemnice Atari   :
5 REM -------------------------------
10 DIM A$(39):DT=760:BS=1536:C=2
20 ? CHR$(125):POKE 559,0:GOSUB 700
30 DT=800:C=18:BS=39700:GOSUB 700
40 DT=1000:C=999:BS=30000:GOSUB 700
50 POKE 559,34:IF  NOT FS THEN END 
60 TRAP 60:? :? 
70 ? "1. Format plikowy (file)"
80 ? "2. Samodzielny kasetowy (BOOT)"
90 ? "0. Wyjscie z programu"
100 INPUT W:ON W+1 GOTO 290,120,200
110 GOTO 60
120 ? :? "Na jaki plik ";:INPUT A$
130 AUX=0:IF A$(1,1)="C" THEN AUX=128
140 TRAP 190:OPEN #1,8,AUX,A$
150 A=USR(1536,FS,BS)
160 CLOSE #1:SOUND 0,0,0,0
170 IF A=1 THEN 60
180 ? "Blad - ";A;CHR$(253):GOTO 60
190 A=PEEK(195):GOTO 160
200 ? :? "Podaj nazwe ":INPUT A$
210 L=LEN(A$):NA=39914
220 FOR A=0 TO 39:POKE NA+A,32:NEXT A
230 L=LEN(A$):FOR A=1 TO L
240 POKE NA+A-1,ASC(A$(A,A)):NEXT A
250 TRAP 190:OPEN #1,8,128,"C:"
260 A=USR(1536,256,39700)
270 IF A<>1 THEN 160
280 GOTO 150
290 TRAP 50000:END 
700 REM ---   hex to data conv    ---
710 FS=0:RESTORE DT:TRAP 750
720 FOR X=0 TO C:READ A$:POKE 53279,7
730 FOR I=1 TO 26 STEP 2
740 H=ASC(A$(I))-48:H=(H-39*(H>9))*16:
L=ASC(A$(I+1))-48:L=L-39*(L>9):POKE BS
+FS,H+L:FS=FS+1:NEXT I:NEXT X
750 RETURN 
760 REM ---        saver          ---
770 DATA 68688d5903688d5803688d5503
780 DATA 688d5403a90b8d5203a2102056
790 DATA e484d4a90085d560
800 REM ---     file loader       ---
810 DATA 00010007b507a27fbd00049d80
820 DATA 07ca10f7a027b9d607c9601006
830 DATA e91f1002696091588810eead1e
840 DATA 0348ad1f0348a9048d1e03a907
850 DATA 8d1f03a2038e5203e88e5a03a9
860 DATA d38d5403a9078d550320af0768
870 DATA 8d1f03688d1e03a980853e0a85
880 DATA 3d853f8d89028d8a02a9568de0
890 DATA 02a9f58de10220a207858020a2
900 DATA 0785812580c9fff0f020a20785
910 DATA 8220a207858320a207a0009180
920 DATA a580c582a581e583b0d5e680d0
930 DATA 02e6814c8807a9008d58038d59
940 DATA 03a9078d5203a2102056e43003
950 DATA a00160c088f0062056f54c71e4
960 DATA a90c8d5203a2102056e4a2ff9a
970 DATA 6ce002433a9b

Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001