ROM PBI
From Atariki
Wersja z dnia 18:01, 14 sie 2008 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 18:16, 14 sie 2008 KMK (Dyskusja | wkład) (autorewert) Next diff → |
||
Linia 50: | Linia 50: | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
- | [[Kategoria:Mapa pamięci]] |
Wersja z dnia 18:16, 14 sie 2008
Pamięć ROM urządzenia połączonego do PBI zajmuje 2k od $D800 do $DFFF i pokrywa się z pakietem matematycznym. Kiedy system operacyjny wybiera urządzenie ustawiając odpowiedni bit w rejestrze PDVREG $D1FF, urządzenie odłącza pakiet matematyczny (podanym z zewnątrz sygnałem MPD) włączając na to miejsce własną pamięć.
Pamięć ta pojawia się po ingerencji w rejestr PDVREG nawet wtedy, kiedy ROM systemu operacyjnego jest odłączony przez skasowanie bitu rejestru PORTB. Dlatego niemożliwe są bezpośrednie transfery danych pomiędzy urządzeniem PBI a pamięcią w obszarze $D800-$DFFF - wszelkie odczyty do tej pamięci lub zapisy z niej powinny być buforowane przez DOS lub inicjalizer.
Podane tu adresy nie są do wykorzystania w programach użytkownika, korzysta z nich wyłącznie system operacyjny.
Adres | Etykieta | Opis |
$D803 | DEVID1 |
Znacznik, po którym system operacyjny rozpoznaje, czy ustawienie bitu rejestru PDVREG przyniosło jakiś efekt. Powinien mieć wartość $80. |
$D805 | PDIOR |
Parallel Device I/O Routine. Punkt wejścia do procedury obsługującej urządzenia blokowe. Działa ona tak jak SIO, czyli transmituje dane całymi blokami (sektorami). W chwili wejścia do PDIOR parametry transmisji ustawione są w DCB. Po przeprowadzeniu operacji procedura powinna zwrócić status w rejestrze Y (zob. Kody błędów), ustawić znacznik C procesora na 1 (SEC) i zakończyć się przez RTS. Jeśli urządzenie "nie chce" obsłużyć wywołania (bo np. jest to dysk, a ustawione w DCB parametry dotyczą drukarki), procedura powinna skasować znacznik C (CLC) i zakończyć się przez RTS. |
$D808 | PDINT |
Parallel Device Interrupt routine. Procedura obsługi przerwania IRQ wywołanego przez urządzenie. Powinna kończyć się przez RTS (nie RTI!). |
$D80B | DEVID2 |
Znacznik analogiczny do DEVID1. Powinien mieć wartość $91. |
$D80C | PDSPC |
Parallel Device Specification. Jeśli urządzenie jest urządzeniem znakowym CIO, bajt ten powinien zawierać jego symbol identyfikacyjny analogiczny do tego, jaki wpisuje się do HATABS; np. dla urządzenia "E:" będzie to bajt o wartości $45 ('E'). Gdy urządzenie jest blokowe (SIO) bajt ten powinien być wyzerowany. |
$D80D | PDVOPV |
Parallel Device Open Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę otwarcia pliku, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D80F | PDVCLV |
Parallel Device Close Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę zamknięcia pliku, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D811 | PDVGBV |
Parallel Device Get Byte Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę odczytu bajtu, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D813 | PDVPBV |
Parallel Device Put Byte Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę zapisu bajtu, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D815 | PDVSTV |
Parallel Device Status Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę odczytu statusu, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D817 | PDVSPV |
Parallel Device Special Vector. Dla urządzeń znakowych CIO powinien wskazywać procedurę obsługi operacji specjalnych, jeśli zaś urządzenie nie rejestruje się w CIO, powinien wskazywać rozkaz RTS. Analogicznie jak w przypadku innych urządzeń CIO wektor powinien zawierać adres procedury zmniejszony o 1. |
$D819 | PDINIT |
Parallel Device Initialization routine. Procedura inicjowania urządzenia. Jest wywoływana z procedury RESET (zarówno zimnego jak i ciepłego startu) po zainicjowaniu całego systemu, ale przed otwarciem edytora ekranowego. Oprócz zainicjowania pracy samego urządzenia zewnętrznego (o ile jest to w ogóle konieczne), musi ustawić pewne zmienne systemu operacyjnego tak, żeby umiał on potem wywoływać procedury obsługi tego urządzenia. Dla urządzenia blokowego SIO wystarczy ustawienie odpowiedniego bitu w rejestrze PDVMSK $0247. Jest to ten bit, który w chwili wejścia do PDINIT jest ustawiony w rejestrze PDVRS $0248. Wartość tego rejestru powinna zostać z-OR-owana z PDVMSK, a następnie w nim zapisana. Jeśli urządzenie ma obsługiwać przerwania IRQ, czyli jeśli ma być wywoływana procedura PDINT, analogicznej operacji trzeba dokonać na rejestrze PINTMSK $0249. Urządzenie znakowe CIO powinno ponadto wpisać się do tabeli HATABS, najlepiej użyć do tego procedury NEWDEVC $E486. Jako adres tabeli adresowej sterownika trzeba przy tym podać adres $E48F. Procedurę inicjowania kończy rozkaz RTS. |