Tajemnice ATARI

MAPA PAMIĘCI

713-735, $02c9-$02df ...
    Są to komórki nie używane przez system operacyjny.

    Kolejne cztery bajty są bardzo ważne głównie dla użytkowników stacji dysków, dla pozostałych są to po prostu nieużywane komórki pamięci, obdarzone wspólną nazwą GLBABS. Kiedy w pamięci znajduje się jakiś Dyskowy System Operacyjny (zwany w skrócie DOS-em), to mamy do czynienia z dwoma słowami, które przechowują bardzo ważne informacje, dotyczące ostatnio ładowanego programu maszynowego.

736-737, $02e0-$02e1 RUNAD
    To słowo używane jest do przechowywania adresu uruchomienia ładowanego ostatnio programu. Po zakończeniu procesu odczytu, DOS wykonuje skok do procedury, której adres znajduje się w tym miejscu. Oczywiście, zazwyczaj w pliku na dyskietce zawarta jest informacja o tym, jaki adres należy tutaj wpisać, więc taki skok nie prowadzi w nieznane... Inną sprawą jest to, że Dyskowe Systemy Operacyjne przed rozpoczęciem ładowania programu wstawiają tu pewne specjalne wartości, np. adres zawartej w nich samych procedury, składającej się z jednego tylko rozkazu RTS, powodującego powrót z wykonywanego podprogramu lub też po prostu zero - w takim wypadku po wczytaniu programu DOS podejmuje decyzję o wykonaniu skoku tylko wtedy, gdy zawartość RUNAD uległa zmianie.

    Użytkownicy publikowanej na łamach TA nakładki dla DOS-a 2.5 o nazwie "Command Processor" lub popularnego COS-a znają na pewno polecenie RUN, rozpoznawane przez te programy. Użycie tej komendy bez parametru powoduje ponowne wykonanie programu ostatnio wgrywanego z dysku, czy też kasety. Wynika to z prostego faktu - komenda RUN bez parametru powoduje wykonanie programu, którego adres zawarty jest właśnie w opisywanych komórkach pamięci. Takie, bardzo sympatyczne zachowanie ładowanego programu możliwe jest tylko wtedy, kiedy jego wykonywanie zostało zakończone w ładny sposób, czyli przez "dobrowolny" powrót do DOS-a, bowiem w przypadku zakończenia pracy naciśnięciem klawisza RESET każdy DOS wpisze do RUNAD adres swojej własnej procedury bezpieczeństwa.

    Cały powyższy opis jest prawdziwy dla DOS-a 2.5 i wszelkich DOS-ów, które są z nim zgodne. Jednak oprócz nich istnieją także Dyskowe Systemy Operacyjne, które startują odczytywane programy w sobie tylko właściwy sposób. Najbardziej znanym spośród nich jest SpartaDOS, który wykonuje programy od pierwszego odczytanego bajtu, o ile nie podano RUNAD. Należy o tym pamiętać, kiedy tworzy się programy przeznaczone właśnie dla SpartaDOS-a.

    Skoro już piszę o uruchamianiu programów dyskowych i o SpartaDOS-ie, to nie od rzeczy będzie wspomnieć o jeszcze jednej ważnej sprawie. Często zdarza się, że programy kończą się zwykłą instrukcją RTS, powodującą powrót do DOS-a. Nie jest to błędem, lecz o wiele bezpieczniejsze jest kończenie programu rozkazem skoku pośredniego przez komórkę DOSVEC (10-11, $0a-0b). Taka ostrożność spowodowana jest znajomością zachowania właśnie SpartaDOS-a, który po wywołaniu pierwszego odczytanego rozkazu usiłuje jeszcze wykonać procedurę, której adres jest w RUNAD. Wywołanie DOS-a przez DOSVEC powoduje zaniechanie takiego postępowania i nie grozi żadnymi niebezpiecznymi konsekwencjami.

738-739, $02e2-$02e3 INITAD
    W tym słowie przechowywany jest tzw. adres inicjalizacji, odczytywany z dyskietki. Cała różnica pomiędzy INITAD i RUNAD polega na tym, że INTAD jest wykorzystywany natychmiast po załadowaniu tego słowa adresem odczytanym z pliku dyskowego, zaś RUNAD nabiera znaczenia dopiero po zakończeniu odczytu całego pliku.

    Procedura inicjalizacyjna jest zazwyczaj króciutkim podprogramem, który przygotowuje proces ładowania właściwego programu dyskowego. Może on np. wyłączyć ekran w przypadku, gdy ładowana jest nowa Display List, co zapobiegnie niezbyt ładnym efektom "mrugania" obrazu. Podczas inicjalizacji można także wyświetlić wizytówkę, która będzie widniała na ekranie przez cały czas wgrywania programu, czy też stworzyć licznik wczytywanych bloków danych - jest całe mnóstwo możliwości, których wykorzystanie może znakomicie uatrakcyjnić oczekiwanie na załadowanie programu.

    Wszystkie powyższe sugestie można również odnieść do COS-a, który jest dokładnym odpowiednikiem Dyskowego Systemu Operacyjnego, a więc także przestrzega zasad ładowania programów. W przypadku używania COS-a komórka INITAD ma nawet jeszcze większe znaczenie, bo widok ładnego, interesującego ekranu naprawdę umila niezbyt krótkie oczekiwanie na wgranie programu kasetowego.

740, $02e4 RAMSIZ
    Z tej komórki można odczytać adres pierwszego bajtu pamięci, powyżej dostępnego dla użytkownika obszaru RAM. W RAMSIZ przechowywany jest starszy bajt tego adresu, czyli inaczej numer pierwszej zajętej przez ROM strony pamięci. Przypominam, że stroną nazywamy 256-bajtowy blok pamięci.

    Zawartość RAMSIZ jest dokładnie taka sama, jak zawartość RAMTOP (106, $6a), a domyślna umieszczana tutaj wartość to 160, co jest o tyle zrozumiałe, że interpreter BASIC-a zajmuje obszar od adresu 40960, czyli 160*256.

741-742, $02e5-$02e6 MEMTOP
    To słowo jest wskaźnikiem szczytu wolnej pamięci, zawiera adres ostatniego wolnego bajtu RAM. Zawartość MEMTOP jest odświeżana po wciśnięciu RESET, po zmianie trybu graficznego i po otworzeniu ekranu (co także związane jest często ze zmianą trybu graficznego). Związek tego słowa z MEMTOP wynika z faktu, że Display List zaczyna się w następnym, po wskazywanym przez MEMTOP, bajcie.

743-744, $02e7-$02e8 MEMLO
    To słowo jest wskaźnikiem początku wolnej pamięci, zawiera adres pierwszego bajtu RAM nie wykorzystywanego przez system operacyjny. Podczas włączania komputera jest tu zapisywany adres 1792, czyli $0700 i system operacyjny komputera nigdy więcej nie zmienia tej wartości - robią to programy systemowe takie, jak DOS i COS. Po załadowaniu zapisują tutaj adres pierwszego bajtu, którego już nie używają.

    Istnienie tego typu wskaźnika ma swoje uzasadnienie i jest bardzo pomocne przy tworzeniu tzw. programów rezydentnych. Cóż to takiego? Programy rezydentne to programy, które ładują się do pamięci i są w niej stale obecne, aż do momentu usunięcia ich przez użytkownika, przy czym umożliwiają pracę z innymi programami, chowając się gdzieś w tle i aktywizując się dopiero na wyraźne życzenie. Do tej klasy programów należy np. popularny XLF - umożliwia on korzystanie z edytora tekstów, tablicy kodów, kalkulatora i wglądownicy równocześnie z dowolnym innym programem załadowanym do pamięci.

    Uważni czytelnicy TA na pewno przypominają sobie publikowany w numerze 1/92 w cyklu o programowaniu procesora 6502 program Relocator, którego zadaniem było takie przetłumaczenie dowolnego programu maszynowego, aby po umieszczeniu go pod adresem wskazywanym przez MEMLO dawał się bez kłopotu uruchomić. Dysponując tęgo typu procedurą mamy podstawowe narzędzie do tworzenia programów rezydentnych - trzeba tylko, żeby taki program był połączony z Relocatorem i po przeniesieniu go na sam dół pamięci wpisał do MEMLO adres pierwszego bajtu ponad sobą. Podłączony do jakiegoś przerwania, np. do przerwania klawiatury może spokojnie oczekiwać na polecenie aktywacji, nie przeszkadzając innym programom w pracy.

    To wszystko teoria, którą staramy się lansować w naszej gazecie, ale w praktyce nie jest to tak łatwe, jak może się wydawać. Nie znaczy to oczywiście, że zamierzam wycofać się z tego, co napisałem przed chwilą. Chodzi mi o coś innego - wiele programów nic sobie nie robi z MEMLO. Na przykład bardzo interesujący SpartaDOS X ładuje swoje dane w stałe miejsce w dole pamięci nie zwracając uwagi na to, że coś przy okazji niszczy. Niestety, na to nie można już nic poradzić, trzeba tylko pamiętać o tym przy ładowaniu programów rezydentnych do pamięci.

745, $02e9 ...
    Nieużywana komórka pamięci.

746-749, $02ea-$02ed DVSTAT
    Czterobajtowy blok zawierający informacje o stanie urządzenia zewnętrznego, wpisywany tutaj na żądanie przez system operacyjny. Analizując zawartość tego obszaru można się dowiedzieć wielu interesujących rzeczy na temat np. stacji dysków.

    Wielu użytkowników ATARI XL/XE dysponuje rozszerzeniami stacji dysków, często zgodnymi ze standardem TOP DRIVE. W tym systemie niektórym z bitów DVSTAT nadano dodatkowe znaczenie - postaram się króciutko wspomnieć o tych cechach, choć wszelkie informacje pochodzą z dokumentacji systemu TOP DRIVE instalowanego przez pewną firmę z Nowej Dęby i nie mogę wziąć za nie pełnej odpowiedzialności.

746, $02ea ten rejestr jest często nazywany DSTAT.

    Znaczenie bitów:

• 7 bit ustawiony oznacza, że urządzenie jest "inteligentne", czyli wyposażone we własny mikroprocesor, natomiast bit skasowany mówi o tym, że mamy do czynienia z magnetofonem kasetowym; w systemie TOP DRIVE (będę go oznaczał umownie TD) i podobnych, wartość 0 tego bitu oznacza, że w stacji znajduje się dyskietka sformatowana w rozszerzonej gęstości.
• 6 nieużywany.
• 5 bit ustawiony oznacza w TD, że dyskietka w stacji została sformatowana w podwójnej gęstości.
• 4 bit ustawiony oznacza, że silnik urządzenia w tej chwili pracuje.
• 3 bit ustawiony oznacza, że dyskietka jest zabezpieczona przed zapisem.
• 2 bit ustawiony oznacza, że podczas zapisu wystąpił błąd.
• 1 bit ustawiony oznacza, że podczas przesyłania danych wystąpił błąd.
• 0 bit ustawiony oznacza nieprawidłową komendę dla urządzenia.

747, $02eb ten rejestr jest często nazywany FSTAT.

    W systemie TD znaczenie bitów jest następujące:

• 7 bit równy 0 oznacza, że drzwi stacji są otwarte.
• 6 bit równy 0 oznacza, że dysk jest zabezpieczony przed zapisem.
• 5 bit oznacza typ rekordu, lecz niestety nie umiem podać szczegółów na ten temat.
• 4 bit równy 0 oznacza, że wystąpił błąd RNF (*).
• 3 bit równy 1 oznacza, że wystąpił błąd CRC (*).
• 2 bit równy 0 oznacza, że podczas przesyłania część danych została utracona;
• 1 bit równy 0 oznacza żądanie przesłania danych.
• 0 bit równy 0 oznacza, że kontroler stacji jest zajęty.

748, $02ec TIMEOUT
    W tej komórce znajduje się informacja o maksymalnym czasie, w jakim urządzenie musi zakończyć wykonywanie zleconej operacji.
749, $02ed ...
   W tej komórce znajduje się informacja o liczbie bajtów w buforze wyjściowym urządzenia.

Jarosław Syrylak


   (*) RNF oznacza Record Not Found, zaś CRC jest skrótem, pochodzącym od słów Cyclic Redundancy Check. Obydwa terminy odnoszą się do informacji kontrolnych zawartych na każdej ścieżce oraz w każdym sektorze na dysku i dostępnych jedynie dla sterownika napędu. Błąd RNF występuje wtedy, gdy nie odnaleziono sektora z danymi, których potrzebuje program, a błąd CRC oznacza nieprawidłową sumę kontrolną dla danych w sektorze.



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

Pixel 2002