SIO FIFO
From Atariki
←Older revision | Newer revision→
Rozszerzenie funkcji układu POKEY skonstruowane przez simiusa: dokłada do układu 256-bajtowy bufor (FIFO) dla danych odbieranych przez komputer ze złącza szeregowego. Pozwala to na znaczne rozluźnienie wymagań co do czasu, w jakim procesor Atari musi odebrać bajt z rejestru SERIN zanim nastąpi jego przepełnienie (serial overrun).
Np. normalnie uzyskanie transmisji z szybkością 127 kbps wymaga zastosowania własnych procedur szeregowych, działających na zasadzie pollingu, oraz zastąpienia systemowej procedury VBL znacznie skróconą wersją. Jest to konieczne, gdyż przesłanie bajtu z tą szybkością trwa tylko ok. 140 cykli standardowego zegara 1,773 MHz, a zatem, przy normalnej aktywności układu ANTIC, normalnie działających przerwaniach NMI i standardowych procedurach transmisji SIO działających na przerwaniach IRQ, procesor nie nadąża z odbiorem i transmisja ulega zerwaniu. Natomiast przy użyciu SIO FIFO można uzyskać stabilny odczyt 127 kbps bez tych wszystkich szykan, wykorzystując procedury transmisji działające na IRQ i bez modyfikacji VBL.
Urządzenie ma formę płytki o wielkości 50x21mm i postać podstawki DIL40 pod POKEY. Montuje się ją w miejsce POKEY-a, a sam POKEY umieszcza się w podstawce na płytce.
SIO FIFO jest konfigurowalne i można je programowo ustawić w tryb przezroczysty, niezależnie od ustawionej w POKEY prędkości odbioru. Służy do tego nieużywany przez POKEY rejestr $D20C.
Wpis pod ten adres dowolnej wartości ze skasowanym najstarszym bitem (np. zerowanie rejestrów podczas inicjowania systemu) powoduje inicjalizację FIFO (czyli m.in. usunięcie wszystkich zalegających tam danych). Zapis wartości w postaci (binarnie) 10xxxxxx ustawia granicę przestawienia w tryb przezroczysty od wartości AUDF3 określonej przez sześć najmłodszych bitów, czyli $00-$3F. Dodatkowo, jeśli wpisywany bajt ma ustawiony 6 bit, wartość określona sześcioma najmłodszymi bitami zostanie potraktowana jako domyślna. Zatem wpisanie $80 przełączy urządzenie w tryb przezroczysty bez względu na baudrate, a wpisanie $C0 spowoduje, że zawsze będzie w takim trybie wstawało.