Tajemnice ATARI

6 Strona

REMOVER

    Procedura ta dokonuje przeprowadzki danych zapisanych szesnastkowo w wierszach DATA do pamięci. Dane są poszukiwane w wierszach występujących za wierszem wywołującym procedurę. REMOVER nie sprawdza poprawności danych (od tego jest Generator Kodów lub ... DATAwnik), a jedynie pierwszą instrukcję w wierszu: toleruje DATA i REM. Po napotkaniu wiersza z mną instrukcją wykonywany jest skok do tego wiersza ("przeskok" nad blokiem wierszy DATA) lub do trybu bezpośredniego. Ilość danych w pojedynczym wierszu DATA jest obojętna.

    Zapisywany 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,213
    Powyż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.

DATAwnik

    Jest to specjalizowana odmiana procedury SYNTAX - głównej procedury interpretera BASIC-a. Jej samej nie można było wykorzystać ze względu na skoki JMP do jej początku. Wypada się przyznać, że fragmenty SYNTAX musiałem powielić w swojej procedurze.
1000 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):NEW 
    Po 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_OUT

    Pod wszystko mówiącą nazwą kryją się dwie procedury: kasownika i odREMiacza ekonomicznie połączone w jeden program.

    Po 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 8AA59420D0A9A59F38E594B0AD
    Jeż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



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

Pixel 2002