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:
Komórka ustawiana przez system operacyjny do identyfikacji numeru IOCB-U. Gdy IOCB nie jest aktywny - zawiera wartość 255 ($ff),
Numer urządzenia zewnętrznego lub numer aktywnej stacji dysków. Jest on ustawiany standardowo na wartość 1 przez system.
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.
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)).
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.
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.
Wskaźnik zawartości bufora danych. Gdy zawiera bajt równy 255 ($ff) to bufor jest pełny.
Wskaźnik zakończenia operacji wysyłania danej. Gdy zawiera bajt równy 255 ($ff) to operacja została zakończona.
Wskaźnik zakończenia transmisji. Gdy zawiera bajt równy 255 ($ff) to transmisja została zakończona.
Wskaźnik wysłania sumy kontrolnej. Gdy zawiera bajt równy 255 ($ff) to suma kontrolna została przesłana.
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.
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.
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.
Wskaźnik -końca pliku magnetofonowego. Jeśli zawiera wartość różną od zera to wystąpił koniec pliku (EOF - End Of File).
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.
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.
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.
Numer błędu operacji We/Wy.
LEON
|