6 StronaREMOVERZapisywany jest obszar ciągły. Jeżeli zachodzi potrzeba zmiany adresu, to przed kolejnym blokiem DATA należy ponownie umieścić wiersz wywołujący REMOVER i zawierający nowy adres początkowy. Widać tu podobieństwo do poczynań DOS-u przy wczytywaniu pliku binarnego złożonego z wielu segmentów - każdy z nich może być umieszczony w innym miejscu pamięci. UWAGA! Ewentualne dalsze instrukcje umieszczone w wierszu wywołującym REMOVER nie zostaną wykonane. 1 ? CHR$(125):POKE 766,1:POKE 84,4:? " 1 RM=ADR(";CHR$(34);:FOR I=1 TO 76:REA D A:? CHR$(A);:NEXT I:? CHR$(34);")" 2 ? "2 A=1536:A=USR(RM,A)":? 3:? 4:? 5 :? "POKE 766,0:POKE 842,12:? CHR$(125) :END":POKE 766,1:POKE 84,0 3 POKE 842,13:STOP :DATA 104,104,133,2 04,104,133,203,162,0,165,159,32,208,16 9,32,25,184,200,177,138,240,243,201 4 DATA 1,240,7,104,104,104,104,76,148, 169,200,200,196,159,176,226,136,177,13 8,10,10,10,10,176,2,105,144,129,203 5 DATA 200,177,138,201,64,41,15,144,3, 24,105,9,97,203,129,203,230,203,208,21 7,230,204,208,213Powyższy program generuje procedurę REMOVER w postaci pojedynczego wiersza programu w BASIC-u, który można dołączać do wszelkich swoich programów. Drugi wiersz, który zostanie przy tej okazji wygenerowany, zawiera przykład użycia REMOVER-a. Należy je zachować przy pomocy instrukcji LIST "C:" lub LIST "D:nazwa". Następne dwa programy wymagają właśnie dołączenia zapisanego w ten sposób REMOVER-a. Spowoduje on umieszczenie danego programu na szóstej stronie. DATAwnik1000 REM *-------------------------* : DATAwnik SEC9207 jarek : 1005 REM :(c) 1992 Tajemnice ATARI: *-------------------------* 1010 DATA 68C904F0034C00A06885CC6885 1020 DATA CB6885CE6885CD686885CFA900 1030 DATA 859468A86820B0A1B18030DFA5 1040 DATA CBD004C5CCF0D7A90DC5CB9006 1050 DATA A6CCD002A5CB0A690620C4A220 1060 DATA C4A2A90120C4A2A200A1CDA829 1070 DATA 0FAA984A4A4A4A20CB0620C4A2 1080 DATA 8A20CB0620C4A2E6CDD002E6CE 1090 DATA C6CBE6CBD006A5CCF00EC6CCC6 1100 DATA CBA002B180A888C494D0C8A99B 1110 DATA 20C4A220A2A9B00E208EB5A59F 1120 DATA A820D0A9A28A20F8A820F2A9F0 1130 DATA 8F20A2A9A494A28A207AA8A597 1140 DATA 858AA598858BA49488B180918A 1150 DATA 98D0F88594B1801865CFAAC8B1 1160 DATA 806900A88A4C1F06C90A093090 1170 DATA 02690660 2000 ? CHR$(125):NEWPo cóż? Program pomaga pragnącym zapisać ciąg bajtów obecnych gdzieś w pamięci komputera w wierszach DATA w formie akceptowanej np. przez Zgrywusa. Chwilkę po RUN program, umieszczony na 6. stronie, jest gotowy do wykonywania poleceń w trybie bezpośrednim. Format: Q = USR(1536,ile,skąd,krok,pocz) gdzie ile - liczba bajtów ciągu do zapisania w liniach DATA, skąd - adres początkowy tego ciągu, krok - krok numeracji wierszy DATA, pocz - numer pierwszego wiersza. Przykład: Q = USR(1536,212,1536,10,1010)DATAwnik zapisze samego siebie w liniach DATA od numeru 1010 co 10. Program BASIC-owy obecny ewentualnie w pamięci jest chroniony w ten sposób, że DATAwnik wyświetla na ekranie dotychczasowe wiersze, jeżeli są one kasowane przez powstające właśnie linie DATA. Działanie programu może być w każdej chwili przerwane, a skasowane linijki - odzyskane poprzez ponowne ich wprowadzenie z ekranu. REM_OUTPo cóż? Kasownik - owszem, ale odremiacz? Postulat zrozumiałości programów łatwo spełnić nie oszczędzając na instrukcji REM. Kiedy jednak dochodzimy do FRE(0)=37 lub chcemy stworzyć wersję eksportową (krótką) swego dzieła, to co? Zaczynamy żałować, że pisaliśmy komentarze? To przecież bez sensu! Ból przy ręcznym odremianiu długiego programu również zapamiętałem i stąd ten program. Podobnie jak DATAwnik, program REM_OUT jest przeznaczony do pracy w trybie bezpośrednim. Podobnie humanitarnie też działa. Jeżeli popełniliśmy omyłkę, podając zły obszar od-do (usuwane wiersze pojawiają się na ekranie), należy nacisnąć BREAK (CONTROL/1 pauzuje proces). Można odzyskać wyświetlone linie poprzez "najechanie" na każdą z nich kursorem i naciśnięcie RETURN. O piątej nad ranem to się zdarza. 1000 REM *-------------------------* : REM_OUT SEC9207 jarek : 1005 REM :(c) 1992 Tajemnice ATARI: *-------------------------* 1010 DATA 68C903D0488DFE026885A16885 1020 DATA A06885AE6885AD68684820A2A9 1030 DATA 20F2A9F02820E1A93023C5AE90 1040 DATA 0BD01D88B18AC5AD9002D01468 1050 DATA F01A48208EB5A59FA820D0A9A2 1060 DATA 8A20F8A8F0D368A9008DFE024C 1070 DATA 00A0482019B8C8B18AF0DE88C8 1080 DATA B18AF01188B18A85A7A8C49F90 1090 DATA F1A59F20D0A9D0AA889848208E 1100 DATA B568A002918A8594A888A91691 1110 DATA 8AA59420D0A9A59F38E594B0ADJeżeli odremianie, to tylko odremianie - w wierszu, gdzie REM nie jest jedyną instrukcją, skasowana zostanie tylko odpowiednia część wiersza. Chwilkę po RUN program jest gotowy do użycia. Format: Q = USR(1536,od,do,co) gdzie od i do podajemy analogicznie jak w instrukcji LIST, zaś co określa tryb pracy: 0 - odremiacz, 1 - kasownik. Program instaluje się na 6. stronie. Część w BASIC-u nie będzie już dłużej potrzebna - można na niej wypróbować działanie programu. Jarosław Krysztopik
|