Tajemnice ATARI

MAPA PAMIĘCI



765, $02fd FILDAT
    Rejestr używany podczas wypełniania obszaru komendą FILL, dostępną z BASIC-a za pośrednictwem XIO.

766, $02fe DSPFLG
    Znacznik sposobu wyświetlania znaków sterujących. Normalnie zawiera zero, co powoduje, że znaki sterujące wykonują swoje naturalne funkcje takie jak przesuwanie kursora, czy też czyszczenie ekranu. Konsekwencją wpisania do DSPFLG dowolnej wartości niezerowej jest wyświetlanie tych znaków. Możemy wtedy zobaczyć na ekranie strzałki kursora, znaki czyszczenia ekranu itp.

767, $02ff SSFLAG
    Znacznik zatrzymania wyświetlania, używany podczas przewijania ekranu, rysowania itp. Normalnie zawiera zero, co oznacza, że wyświetlanie ma się odbywać w sposób nieprzerwany. Wartość 255 powoduje zatrzymanie wyświetlania, aż do momentu ponownego wyzerowania komórki SSFLAG. Kombinacja CONTROL i "1", o której już pisałem zamienia wszystkie bity danej w SSFLAG na przeciwne, powodując, że przyjmuje ona na przemian wartość 255 lub 0 i w konsekwencji zatrzymując i wznawiając wyświetlanie.

    System operacyjny komputerów ATARI XL/XE jest bardzo elastyczny. Jeśli chodzi o operacje wejścia/wyjścia. Jego twórcy stwierdzili, że użytkownik powinien mieć możliwość łatwego dostosowania procedur komunikacji z urządzeniami zewnętrznymi do własnych potrzeb. OS został więc napisany tak, aby umożliwiał odnalezienie przez odpowiednie wektory procedur obsługi wszystkich urządzeń zewnętrznych oraz dołączenie własnych. Trzecia strona pamięci używana jest przez system operacyjny do przechowywania informacji związanych z operacjami wejścia/wyjścia.

    Lokacje 768-779 ($0300-$030b) zawierają tzw. Device Control Block czyli blok sterowania urządzeniem, wykorzystywany podczas operacji z użyciem szyny szeregowej. W ROM-ie małego ATARI znajdują się procedury obsługi transmisji szeregowej, które z tego obszaru pamięci odczytują potrzebne parametry i tutaj także wpisują informacje o stanie wykonanej operacji, z których mogą korzystać inne programy. Zestaw tych procedur nazywamy umownie SIO (z ang. Serial Input/Output - wejście/wyjście szeregowe).

768, $0300 DDEVIC
    W tej komórce pamięci znajduje się umowna liczba określająca urządzenie, którego dotyczyła ostatnio wykonywana operacja. Możemy tu znaleźć następujące wartości:

• 49-52 ($31-$34) stacje dysków o numerach od 1 do 4 (od D1: do D4:),
• 64 ($40) drukarka nr 1 (P1:),
• 79 ($4f) drukarka nr 2 (P2:).
• 80-83 ($50-$53) porty RS232 (od R1: do R4:).

Wartości tych nie powinno się zmieniać, tym bardziej, że niosą one dość ciekawe informacje. Z publikowanego na łamach TA kursu programowania mikroprocesora 6502 na pewno dowiedzieliście się, że ładnie napisane programy rozpoznają tzw. urządzenie domyślne czyli to, z którego zostały załadowane. Informację o takim urządzeniu możemy znaleźć właśnie w DDEVIC.

769, $0301 DUNIT
    Bajt zawarty w tej komórce pamięci oznacza numer urządzenia, którego dotyczy transmisja.

770, $0302 DCOMND
    Do tej komórki pamięci należy przed rozpoczęciem transmisji szeregowej wpisać kod komendy do wykonania. Dozwolone kody komend to:

  • 82 ($52, 'R') odczyt (ang. read),
  • 87 ($57, 'W) zapis z weryfikacją (ang. write),
  • 80 ($50, 'P') zapis bez weryfikacji (ang. put),
  • 83 ($53, 'S') odczyt stanu urządzenia (ang. status),
  • 33 ($21, '!') formatowanie dyskietki w pojedynczej gęstości,
  • 34 ($22, '"') formatowanie dyskietki w podwójnej gęstości.

        Niektóre źródła podają również inne dozwolone komendy, ale z praktyki wynika, że nie mają one zastosowania do współcześnie stosowanych urządzeń szeregowych. Ciekawym natomiast rozszerzeniem zestawu poleceń jest tzw. standard Percom stosowany np. w popularnym Top Drive. Pozwala on na użycie dodatkowych rozkazów:

    • 78 ($4e, 'N') odczyt Percom,
    • 79 ($4f, 'O') zapis Percom.

        Po odczytaniu Percom, we wskazanym buforze (patrz 772-773, $304-$305) pojawia się dwunastobajtowy blok informacji, mówiących o aktualnej konfiguracji stacji dysków. Struktura tego bloku jest następująca:

    nr bajtu znaczenie
    0 liczba ścieżek na dyskietce znajdującej się w stacji
    1 krok głowicy
    213 liczba sektorów na ścieżce (18 dla gęstości pojedynczej i podwójnej, 26 dla gęstości rozszerzonej)
    4 liczba głowic w stacji dysków, zmniejszona o l
    5 rodzaj zapisu (0 dla gęstości pojedyncze) 4 dla rozszerzonej i podwójnej)
    6 i 7 liczba bajtów w sektorze (128 dla gęstości pojedynczej i rozszerzonej, 256 dla podwójnej)
    8 sygnał gotowości napędu
    9 szybkość napędu
    10 i 11 nieużywane

        W standardzie Percom wszystkie słowa podawane są w kolejności: starszy i młodszy bajt, a więc odwrotnej niż zazwyczaj.

        Podobny blok można przygotować samodzielnie i przesłać do stacji dysków, zmuszając ją do pracy w nietypowych formatach. Oczywiście dotyczy to tylko tych stacji, które rozpoznają standard Percom. Każdy program, który chce korzystać z Percom powinien najpierw rozpoznać, czy stacja dysków go akceptuje. W tym celu wystarczy wysłać komendę odczytania Percom i czekać na informację o stanie operacji. Jeśli stan operacji jest równy 1, to wszystko w porządku, wartość ujemna sygnalizuje, że stacja dysków nie umie obsługiwać Percom.

        Posiadacze stacji dysków firmy TOMS znają program służący do kopiowania plików na i z dyskietek w formacie IBM. Format ten jest inny od formatów stosowanych dla dyskietek ATARI, różni się ilością sektorów na ścieżce i ilością bajtów w sektorze, ale dane z dyskietek IBM można odczytać właśnie przy pomocy Percom, znając odpowiednie wartości.

    771, $0303 DSTATS
        Z tej komórki można odczytać informację o stanie operacji wejścia/wyjścia. Liczba ujemna oznacza, że podczas transmisji wystąpił błąd.

    772-773, $0304-$0305 DBUFLO/HI
        Do tego słowa należy wpisać adres bufora, zawierającego dane do zapisu lub bufora, w którym powinny znaleźć się dane odczytane z urządzenia zewnętrznego. Operacja odczytu stanu urządzenia wymaga podania adresu bufora DVSTAT (746-749, $02ea-$02ed) i wpisania liczby 4 do słowa DBYTLO/HI (776-777, $0308-$0309).

    774, $0306 DTIMLO
        Zawartość tej komórki pamięci określa czas po jakim należy zakończyć operację na urządzeniu zewnętrznym. System operacyjny wpisuje tutaj 31.

    775, $0307 DUNUSE
        Nieużywany bajt.

    776-777, $0308-$0309 DBYTLO/HI
        To słowo zawiera informację o tym, ile bajtów zostało lub ma być przesłane w trakcie transmisji szeregowej.

    778-779, $030a-$030b DAUX1/2
        Komórki używane przez SIO do różnych celów, np. do przechowywania numeru sektora na dyskietce.

        Lokacje 780-793 ($030c-$0319) zawierają różnorodne informacje używane przez SIO.

    780-781, $030c-$030d TIMER1
        Wartość początkowa licznika używanego podczas odczytu przez SIO.

    782, $030e ADDCOR
        Znacznik dodawania i korekcji prędkości używany podczas odczytu przez SIO.

    783, $030f CASFLG
        Znacznik operacji kasetowych. Ustawiony oznacza, że operacja dotyczy magnetofonu, skasowany - innego urządzenia szeregowego.

    784-785, $0310-$0311 TIMER2
        Wartość końcowa licznika używanego podczas transmisji szeregowej. Liczniki TIMER1 i TIMER2 są używane do kontrolowania prędkości transmisji. Pierwszy bajt każdego z nich zawiera wartość z VCOUNT (54283, $d40b), a drugi wartość zegara z RTCLOK (20, $14). Różnica pomiędzy tymi wartościami używana jest do obliczania aktualnej prędkości transmisji.

    786-787, $0312-$0313 TEMP1
        Dwubajtowy bufor używany przez procedury transmisji szeregowej podczas obliczania prędkości transmisji.

    788, $0314 TEMP2
        Bajt pomocniczy używany przez SIO.

    789, $0315 TEMP3
        Bajt pomocniczy używany przez SIO.

    790, $0316 SAVIO
        W tej komórce pamięci znajduje się informacja o stanie czwartego bitu rejestru SKSTAT (53775, $d20f1 uaktualniana po odebraniu każdego bitu podczas transmisji szeregowej.

    791, $0317 TIMFLG
        Liczba określająca, jak długo należy oczekiwać na odebranie pierwszego bajtu rekordu kasetowego. Procedury transmisji szeregowej zmniejszają tę liczbę podczas oczekiwania na dane i sygnalizują błąd, kiedy osiągnie zero. W ten sposób wykrywa się nieprawidłową prędkość odczytu z kasety.

    792, $0318 STACKP
        Wskaźnik stosu używany podczas transmisji szeregowej. Wskazuje na bajt na stosie, używany podczas transmisji.

    793, $0319 TSTAT
        Procedury transmisji szeregowej używają tej komórki do tymczasowego przechowywania stanu operacji jako kopii rejestru STATUS (48, 830). W systemie operacyjnym małego ATARI każde urządzenie zewnętrzne ma swój symbol literowy oraz procedury, zajmujące się obsługą transmisji z/do tego urządzenia. Kiedy piszemy w BASIC-u np.:
    OPEN #1,4,0,"C:"
    
    to system operacyjny poszukuje informacji o urządzeniu "C:", a po jej znalezieniu zleca odpowiednim procedurom przygotowanie tego urządzenia do odczytu. Oczywiście informacje o urządzeniu muszą znajdować się w odpowiednim miejscu pamięci. Takim miejscem jest obszar 794-831 ($031a-$033f), zwany HATABS. Zawiera on nie tylko informacje o urządzeniu "C:", ale o wszystkich urządzeniach zewnętrznych dołączonych do komputera. HATABS podzielony jest na trzybajtowe grupy, z których każda zawiera literowy identyfikator urządzenia, np. P, C, E, S, K oraz adres tablicy zawierającej adresy poszczególnych procedur obsługi danego urządzenia. Jeśli urządzeń jest mniej, niż możliwych wpisów w HATABS, to pozostała część HATABS jest wypełniona zerami.

        W tablicy obsługi urządzenia wpisane są kolejno adresy procedur:

    • otwarcia urządzenia (przygotowania go do operacji wejścia/wyjścia),
    • zamknięcia urządzenia (zakończenia operacji wejścia/wyjścia),
    • odczytu jednego bajtu z urządzenia,
    • zapisu jednego bajtu do urządzenia,
    • odczytu stanu urządzenia,
    • obsługi specjalnych komend pomniejszone o jeden oraz
    • skok do procedury inicjalizacji urządzenia.

        Aby zainstalować własne procedury obsługi urządzenia, należy załadować je do pamięci, a następnie odnaleźć pierwsze wolne miejsce w HATABS i wpisać do niego identyfikator naszego urządzenia oraz adres tablicy obsługi. Ciekawe jest to, że nie musimy martwić się, gdy nazwa naszego urządzenia pokrywa się z nazwą już istniejącą. System operacyjny przeszukuje HATABS od tyłu, a więc znajdzie naszą nazwę wcześniej.

    794-831, $031a-$033f HATABS
        Tablica adresów procedur obsługi urządzeń.

    Jarosław Syrylak



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

    Pixel 2002