Z G R Y W U SWię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 |