Kurs Assemblera cz. 11

 

KERNAL

1. Retrospekcje

Czy pamiętacie jak w odcinku VII naszego kursu, w styczniu tego roku bawiliśmy się w drukowanie na ekranie literki „A” za pomocą rozkazu JSR? I to JSR w jakieś dziwaczne miejsce, w którym nic nie wstawialiśmy, do komórki $ffd2, gdzieś, w odległe peryferia pamięci. Mimo wszystko, literka „A” pojawiła się na ekranie. Pisałem wtedy, że tam właśnie mieści się procedurka ROM, która powoduje przeniesienie wartości akumulatora do urządzenia odbierającego. A był nim akurat ekran, więc wszystko poszło po naszej myśli. Trzeba nam wiedzieć, że $ffd2 to jedna z pozycji tabeli skoków zwanej KERNAL.

2. KERNAL – wiek dziecinny.

Nasz dzisiejszy bohater to tablica skoków. Kilkadziesiąt komórek pamięci zajętych jest sekwencjami w rodzaju: JMP ($0326), JMP $f49e, JMP $ff5d, JMP $f6e4 i podobnymi. Są to odwołania do różnych procedur zainstalowanych w ROM: LOAD, SAVE, otwarcie pliku itd.

Kiedy powstał KERNAL, trudno mi dokładnie powiedzieć. Jego podstawowym założeniem była mrzonka o kompatybilności wszystkich komputerów firmy Commodore. Każdy z nich miał bowiem mieć taki sam KERNAL. Niezależnie od tego, jak prezentowałyby się inne części ROM, zawsze JSR $ffd2 powodować miało wydrukowanie znaku. Dzięki temu miała zostać osiągnięta pełna zgodność. I rzeczywiście, działało to w dawnych biurowych maszynach (takich staromodnych, w których monitor, stacja i klawiatura były w jednej obudowie). Zdawało egzamin, gdy chodziło wyłącznie o nudne programy biurowe, obsługujące w zasadzie wyłącznie wejścia, wyjścia i pamięć.

Już kiedy pojawił się VIC-20, a potem C-64 ze swoimi niesamowitymi możliwościami, przestano w zasadzie marzyć o możliwości wczytywania programów z jednego komputera na drugim. Zwłaszcza, kiedy różni zapaleńcy zaczęli zabawiać się z rastrem, samplingiem i innymi dziwacznymi efektami, które na starych Commodorach były do osiągnięcia. KERNAL jednak pozostał, bo okazało się po prostu, że jest skutecznym i wygodnym narzędziem do pisania programów. Bowiem daje to wygodę, że – jeśli chcemy np. wczytać z dysku program – nie musimy wertować całej mapy pamięci w nadziei odnalezienia czegoś ciekawego, a wystarczy nam jej ostatnia część – KERNAL.

3. Pełna rozpiska.

A teraz czas na pełną rozpiskę tabeli skoków dla tych wszystkich, którzy mapy pamięci nie mają oraz dla tych, którzy wprawdzie ją mają, ale „gdzieś ją położyli”, a chcieli by mieć KERNAL oprawiony w ramki i powieszony nad łóżkiem. Podaję tutaj po kolei: adres pozycji w systemie szesnastkowym, dziesiętnym, skrót nazwy procedury oraz krótki jej opis.

4. Parę słów.

Fakt, że umieściłem pełną rozpiskę tablicy KERNAL w kursie programowania nie oznacza wcale – broń Boże! – że trzeba się jej uczyć na pamięć. Wręcz przeciwnie – ma służyć jako ściągawka z KERNALa, która może się przydać nawet doświadczonym programistom. Pewne procedury i tak wejdą w nawyk (np. LOAD, SETLFS) a pewnych i tak nikt nigdy nie używa (np. SCREEN, IOBASE).

A teraz pokażę Wam, jak korzystać z tej tablicy. Oto kilka przykładowych procedur, które nie raz i nie dwa razy mogą się przydać, czego dowodem są liczne listy do redakcji.

5. Save.

Oto przykładowa procedura, która nagra nam na dysk zawartość ekranu, pod tytułem „c&a”.

Jeśli w drugiej linijce programu LDX #$08 zmienimy na LDX #$01, to nagramy wszystko na taśmę a nie na dyskietkę.

6. Load.

Jeśli przyjdzie wam chętka władować cokolwiek do pamięci, możemy się posłużyć tym oto programem (tu akurat ładujemy nagrany właśnie plik „c&a”, w lokacje od $1000 wzwyż).

Ciekawscy i niedowiarkowie powinni sprawdzić monitorem pamięć od $1000 do $13e8. Będzie tam ekran dokładnie taki, jak podczas wywołania procedury SAVE.

7. Input.

Prościutki jest też programik, który posłuży nam jako asemblerowy odpowiednik BASIC-owego polecenia INPUT:

Dzięki niemu, oprócz niewątpliwej radości jaką sprawi nam zobaczenie wstukanemu własnoręcznie tekstu w pamięci, ucieszy nas też pewnie, że wiemy, ile właściwie ma on liter.

8. Pa Pa!

Na ten miesiąc chyba wystarczy już natłoku informacji, więc będę kończył, żeby Was więcej nie przemęczać. Spróbujcie może zrobić coś sensownego z tym, co Wam tu podałem. Jeśli interesuje Was, jak wykorzystać inne procedury KERNAL to napiszcie, a przygotuję kolejny artykuł na ten arcyciekawy temat. Pa pa!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *