Tajemnice ATARI

MAPA PAMIĘCI

    Lokacje 00032 do 00047 ($0020-$008f) zajmuje Blok Sterowania We/Wy na stronie zerowej (ZIOCB). Posiada on taką samą strukturę organizacyjną co Blok Sterowania We/Wy (IOCB) zajmujący lokacje 00832 do 00959 ($0340-$03bf). ZIOCB jest używany podczas wykonywania operacji We/Wy do współpracy systemowych procedur operacji We/Wy (CIO - Central Input/Output) ze sterownikami urządzeń zewnętrznych (sterowniki, tzw. handlery zostaną dokładnie omówione przy wyjaśnianiu znaczenia tablicy HATABS zajmującej lokacje 00794 do 00831 ($031a-$033f), znaczenie CIO zostanie omówione przy wyjaśnianiu znaczenia IOCB). W chwili, gdy zostanie zainicjowana dowolna operacja wykonywana przez CIO otworzy się jeden z IOCB-ÓW do obsługi tej operacji. Gdy wywołamy CIO (np. poprzez skok do wektora obsługi znajdujący się pod adresem 58454 ($e456)), spowoduje to przepisanie zawartości aktywnego bloku I/O. Systemowe procedury We/Wy korzystają właśnie z tych lokacji pamięci. Po zakończeniu operacji We/Wy zawartość ZIOCB-u zostaje przepisana do aktywnego IOCB-U. Zasady wywoływania operacji We/Wy zostaną dokładnie wyjaśnione przy omawianiu IOCB-ÓW. Wykorzystanie ZIOCB-u jest następujące:

$0020 00032 ICHIDZ
Komórka ustawiana przez system operacyjny do identyfikacji numeru IOCB-U. Gdy IOCB nie jest aktywny - zawiera wartość 255 ($ff),

$0021 00033 ICDNOZ
Numer urządzenia zewnętrznego lub numer aktywnej stacji dysków. Jest on ustawiany standardowo na wartość 1 przez system.

$0022 00034 ICCOMZ
Użytkownik korzystający z systemowej obsługi urządzeń We/Wy wpisuje tu kod operacji, który jest odpowiednio interpretowany przez CIO. Wyjaśnienie dozwolonych wartości kodów i ich znaczenie zostanie omówione przy IOCB-ach.

$0023 00035 ICSTATZ
Status (numer błędu) ostatnio wykonywanej operacji We/Wy. Wartość 1 oznacza, że operacja powiodła się. Numer błędu może, ale nie musi pokrywać się ze statusem zwracanym po wykonaniu systemowej operacji STATUS.

$0024,$0025 00036,00037 ICBALZ/HZ
Adres początku bufora transmitowanych danych lub adres nazwy urządzenia zewnętrznego (dla stacji dysków również nazwy pliku) wykorzystywany przy wywołaniu operacji OPEN (otwórz kanał We/Wy do komunikacji), STATUS (pobierz status urządzenia zewnętrznego), etc.

$0026,$0027 00038,00039 ICPTLZ/HZ
Adres procedury PUT (zapisz) jednego bajtu, ustawiany przez system operacyjny. Dla znających asembler mikroprocesora 6502 krótkie wyjaśnienie. Wywołanie tej procedury przy pomocy skoku pośredniego [JMP (ICPTLZ)] jest błędem i spowoduje nieuchronne zawieszenie działania pracy komputera. Praktycznie komórki 00038,00039 ($0026,$0027) zawierają adres procedury PUT minus 1. Właściwe wywołanie procedury PUT BYTE powinno wyglądać następująco:
LDA ICPTHZ ; {ICPTLZ+1}
PHA
LDA ICPTLZ
PHA
RTS
Procedurę tę należy wywołać przy pomocy skoku do pod-programu (JSR), aby po wykonaniu operacji PUT mógł być wykonywany dalszy ciąg programu użytkownika. Jeszcze jedna ciekawostka dotycząca przesyłania jednego bajtu danych. Gdy wyzerujemy komórki ICBLLZ/HZ (lokacje 00040,00041 ($0028,$0029)) i wywołamy procedury GET BYTE (odczytaj bajt) lub PUT BYTE wtedy jest przesyłana jedna dana przez akumulator, odpowiednio ładujemy akumulator tą daną lub ta dana jest zwracana w rejestrze A.

$0028,$0029 00040,00041 ICBLLZ/HZ
Ilość danych przeznaczonych do przesłania podczas wykonywania operacji GET BYTE lub PUT BYTE. Ich zawartość jest zmniejszana o jeden po przesłaniu każdej danej. Gdy obydwie są wyzerowane, wtedy przesyłana jest jedna dana (patrz ciekawostka wyżej).

$002a-$002f 00042-00047 ICAX1-6Z
Dodatkowe, pomocnicze komórki wykorzystywane np. do ustawienia długości przerw między rekordami podczas współpracy z magnetofonem (ICAX2Z), podczas pracy z BASICem. Teoretycznie komórka ICAX5Z (lokacja 00046 ($002e)) powinna zawierać numer bloku kontroli We/Wy pomnożony przez jego długość czyli przez 16, lecz praktyka wykazała, że warunkiem poprawnego wywołania CIO jest załadowanie tej wartości (numer IOCB-U * 16) do rejestru X mikroprocesora i z taką jego zawartością uaktywnienie CIO (np. poprzez skok do wektora CIOV czyli pod adres 58454 ($e456)).

$0030 00048 STATUS
Komórka wykorzystywana przez znajdujące się w ROM-ie procedury SIO (Serial Input/Output czyli obsługa szeregowego przesyłania danych) do zapamiętania statusu aktualnie wykonywanej operacji We/Wy.

$0031 00049 CHKSUM
Komórka wykorzystywana przez SIO przy przesyłaniu sumy kontrolnej. Kiedy ilość przetransmitowanych danych równa jest sumie kontrolnej wtedy ustawiana jest komórka CHXSNT (lokacja 00059 ($003B)).

$0032,$0033 00050,0005 BUFRLO/HI
Wskaźnik bufora danych, konkretnie adres danej przeznaczonej do transmisji.

$0034,$0035 00052,00053 BFENLO/HI
Adres następnej danej przeznaczonej do przesłania. Jeżeli jest to operacja zapisu danych to pod tym adresem znajduje się dana, w przypadku operacji odczytu dana pojawi się właśnie w komórce o tym adresie.

$0036,$0037 00054,00055 C/DRETRY
Komórki pamięci wykorzystywane jako liczniki ilości powtórzeń danej operacji We/Wy. Przykładowo dla stacji dysków: tutaj są wpisane informacje dotyczące ilości powtórzeń czytania lub zapisu sektora (o ile wcześniejsze próby nie powiodły się), długości timeoutu, itp.

$0038 00056 BUFRFL
Wskaźnik zawartości bufora danych. Gdy zawiera bajt równy 255 ($ff) to bufor jest pełny.

$0039 00057 RECYDN
Wskaźnik zakończenia operacji wysyłania danej. Gdy zawiera bajt równy 255 ($ff) to operacja została zakończona.

$003a 00058 XMTDON
Wskaźnik zakończenia transmisji. Gdy zawiera bajt równy 255 ($ff) to transmisja została zakończona.

$003b 00059 CHXSNT
Wskaźnik wysłania sumy kontrolnej. Gdy zawiera bajt równy 255 ($ff) to suma kontrolna została przesłana.

$003C 00060 NOCKSM
Wskaźnik przesłania sumy kontrolnej po transmisji danych. Wartość 0 oznacza przesłanie po danych sumy kontrolnej, wartość różna od zera - brak jej przesłania.

$003d 00061 BPTR
Wskaźnik bufora magnetofonu. Wartość tej komórki jest porównywana z wartością komórki BLIM (lokacja 00650 ($028a)). Gdy ich wartości są równe to bufor magnetofonu jest pusty przy operacji czytania (wszystkie dane zostały przeczytane) lub jest pełny przy operacji zapisu (wszystkie dane zostały zapisane). System operacyjny standardowo ustawia tę komórkę na 128 ($80), więc po ominięciu niektórych fragmentów systemowych procedur obsługi magnetofonu (gdy piszemy własną) można ingerować w długość rekordu danych.

$003e 00062 FTYPE
Komórka oznaczająca długość przerwy między rekordami w czasie transmisji danych z magnetofonem. Kopiowana jest tutaj zawartość komórki ICAX2Z (lokacja 00043 ($002b)). Wartość zero oznacza długie przerwy, wartość 128 ($80) oznacza przerwy krótkie.

$003f 00063 FEOF
Wskaźnik -końca pliku magnetofonowego. Jeśli zawiera wartość różną od zera to wystąpił koniec pliku (EOF - End Of File).

$0040 00064 FREQ
Komórka używana przez sterownik kasetowy podczas operacji OPEN. Zawartość oznacza ilość wydawanych sygnałów dźwiękowych (beepów) Systemowa procedura obsługi magnetofonu ustawia komórkę na wartość 1 podczas operacji czytania, a na wartość 2 podczas zapisu.

$0041 00065 SOUNDR
Wykorzystywana przez SIO do ustawienia natężenia dźwięku podczas transmisji danych, zarówno przez magnetofon, jak i przez stację dysków. Standardowo jest ustawiana przez system na 3, zmiana tej wartości na 0 powoduje wyciszenie dźwięku.

$0042 00066 CRITIC
Informuje system operacyjny, czy wystąpiła operacja czasowo krytyczna. Zawartość 0 oznacza stan normalny, nic specjalnego się nie dzieje. Jednak gdy zawiera jakąkolwiek liczbę różną od zera, system wstrzymuje działanie niektórych procesów wewnętrznych (aby zwiększyć czas przeznaczony na wykonanie operacji czasowo krytycznej). Należą do nich: autorepetycja klawiszy (automatyczne powtarzane czytanie stale wciśniętego klawisza), zmiana dźwięku dzwonka (Control-2), wykonywana jest tylko pierwsza faza YBLANK przerwania niemaskowalnego (NMI).

$0043-$0049 00067-00073 FMZSPG
Siedem komórek pamięci strony zerowej wykorzystywanych przez dyskowy system operacyjny. W zasadzie mają różne znaczenie w zależności od aktualnie rezydującego DOS-a, dla DOS-a 2.5 firmy Atari Corporation oznaczają:

$0043,$0044 00067,00068 ZBUFP
Zawiera wskaźnik bufora nazwy pliku użytkownika (adres nazwy pojawiającej się w Directory).

$0045,$0046 00069,00070 ZDRVA
Wykorzystywany jako wskaźnik do różnych celów, np. zawiera wektor do procedury "get sector", "setup", "free sector".

$0047,$0048 00071,00072 ZSBA
Wskaźnik bufora sektora czyli zawiera adres bufora danych czytanych lub zapisywanych na dyskietce.

$0049 00073 ERRNO
Numer błędu operacji We/Wy.

LEON



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

Pixel 2001