ROM PBI

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 07:36, 11 mar 2006
KMK (Dyskusja | wkład)

← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(link do atari magazyn)
Linia 1: Linia 1:
-Pamięć ROM urządzenia połączonego do [[PBI]] zajmuje 2k od $D800 do $DFFF i pokrywa się z [[pakiet matematyczny|pakietem matematycznymn]]. W momencie, 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ęć ROM urządzenia połączonego do [[PBI]] zajmuje 2k od $D800 do $DFFF i pokrywa się z [[pakiet matematyczny|pakietem matematycznym]]. Kiedy system operacyjny wybiera urządzenie ustawiając odpowiedni bit w rejestrze [[Rejestry PBI#PDVREG|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 [[Rejestry PIA 6520#PORTB|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]].+Pamięć ta pojawia się po ingerencji w rejestr PDVREG nawet wtedy, kiedy ROM systemu operacyjnego jest odłączony przez skasowanie bitu rejestru [[Rejestry PIA#PORTB|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. Podane tu adresy nie są do wykorzystania w programach użytkownika, korzysta z nich wyłącznie system operacyjny.
Linia 7: Linia 7:
<table border = 1 cellpadding = 5> <table border = 1 cellpadding = 5>
<tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Opis</b></td></tr> <tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$D800</td><td>???</td><td>
 +<p>Znaczenie nieustalone: bajty identyfikacyjne lub suma kontrolna.</p>
 +</td></tr>
 +<tr><td>$D802</td><td>???</td><td>
 +<p>Znaczenie nieustalone, być może identyfikator komputera, dla którego przeznaczony jest ROM: sterowniki przeznaczone dla 1400XL mają tu $01, dla 1450XLD - $03. </p>
 +</td></tr>
<tr><td>$D803</td><td>DEVID1</td><td> <tr><td>$D803</td><td>DEVID1</td><td>
-<p>Znacznik, po którym system operacyjny rozpoznaje, czy ustawienie bitu rejestru PDVREG przyniosło jakiś efekt. Powinien mieć wartość $80.</p>+<p>Znacznik, po którym system operacyjny rozpoznaje, czy ustawienie bitu rejestru [[Rejestry PBI#PDVREG|PDVREG]] przyniosło jakiś efekt. Powinien mieć wartość $80.</p>
 +</td></tr>
 +<tr><td>$D804</td><td>PDDEVIC</td><td>
 +<p>Parallel Device I/O SIO Bus ID. Wartość DDEVIC (patrz [[SIO#DCB|DCB]]) dla urządzenia obsługiwanego przez procedurę opisaną poniżej. Dla wszelkiego rodzaju stacji dysków, twardych dysków itp. powinna wynosić $31. Sterownik syntezatora mowy z [[1400XL]] i [[1450XLD]] ma tu wartość $60.</p>
</td></tr> </td></tr>
<tr><td>$D805</td><td>PDIOR</td><td> <tr><td>$D805</td><td>PDIOR</td><td>
<p>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.</p> <p>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.</p>
</td></tr> </td></tr>
-<tr><td>$D808</td><td>PDVINT</td><td>+<tr><td>$D808</td><td>PDINT</td><td>
<p>Parallel Device Interrupt routine. Procedura obsługi przerwania IRQ wywołanego przez urządzenie. Powinna kończyć się przez RTS (nie RTI!).</p> <p>Parallel Device Interrupt routine. Procedura obsługi przerwania IRQ wywołanego przez urządzenie. Powinna kończyć się przez RTS (nie RTI!).</p>
</td></tr> </td></tr>
Linia 20: Linia 29:
</td></tr> </td></tr>
<tr><td>$D80C</td><td>PDSPC</td><td> <tr><td>$D80C</td><td>PDSPC</td><td>
-<p>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').</p>+<p>Parallel Device CIO 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').</p>
<p>Gdy urządzenie jest blokowe ([[SIO]]) bajt ten powinien być wyzerowany.</p> <p>Gdy urządzenie jest blokowe ([[SIO]]) bajt ten powinien być wyzerowany.</p>
</td></tr> </td></tr>
Linia 41: Linia 50:
<p>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.</p> <p>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.</p>
</td></tr> </td></tr>
-<tr><td>$D819</td><td>PDVINIT</td><td>+<tr><td>$D819</td><td>PDINIT</td><td>
-<p>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 dokonać ustawienia pewnych zmiennych systemu operacyjnego tak, żeby umiał je on potem wywoływać.</p>+<p>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.</p>
-<p>Dla urządzenia blokowego [[SIO]] wystarczy ustawienie odpowiedniego bitu w rejestrze PDVMSK $0247. Jest to ten bit, który w chwili wejścia do PDVINIT jest ustawiony w rejestrze PDVRS $0248. Wartość tego rejestru powinna zostać z-OR-owana z PDVMSK, a następnie w nim zapisana.</p>+<p>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.</p>
-<p>Jeśli urządzenie ma obsługiwać przerwania IRQ, czyli jeśli ma być wywoływana procedura PDVINT, analogicznej operacji trzeba dokonać na rejestrze PINTMSK $0249.</p>+<p>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.</p>
<p>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.</p> <p>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.</p>
<p>Procedurę inicjowania kończy rozkaz RTS.</p></td></tr> <p>Procedurę inicjowania kończy rozkaz RTS.</p></td></tr>
</table> </table>
 +
 += Linki =
 +
 +* [http://atarionline.pl/biblioteka/czasopisma/Atari_Magazyn/Atari_Magazyn_1994_04.djvu Atari Magazyn 4/1994] artykuł "Jak zrobić nowe urządzenie"
[[Kategoria:Programowanie Atari 8-bit]] [[Kategoria:Programowanie Atari 8-bit]]

Aktualna wersja

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.

AdresEtykietaOpis
$D800???

Znaczenie nieustalone: bajty identyfikacyjne lub suma kontrolna.

$D802???

Znaczenie nieustalone, być może identyfikator komputera, dla którego przeznaczony jest ROM: sterowniki przeznaczone dla 1400XL mają tu $01, dla 1450XLD - $03.

$D803DEVID1

Znacznik, po którym system operacyjny rozpoznaje, czy ustawienie bitu rejestru PDVREG przyniosło jakiś efekt. Powinien mieć wartość $80.

$D804PDDEVIC

Parallel Device I/O SIO Bus ID. Wartość DDEVIC (patrz DCB) dla urządzenia obsługiwanego przez procedurę opisaną poniżej. Dla wszelkiego rodzaju stacji dysków, twardych dysków itp. powinna wynosić $31. Sterownik syntezatora mowy z 1400XL i 1450XLD ma tu wartość $60.

$D805PDIOR

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.

$D808PDINT

Parallel Device Interrupt routine. Procedura obsługi przerwania IRQ wywołanego przez urządzenie. Powinna kończyć się przez RTS (nie RTI!).

$D80BDEVID2

Znacznik analogiczny do DEVID1. Powinien mieć wartość $91.

$D80CPDSPC

Parallel Device CIO 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.

$D80DPDVOPV

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.

$D80FPDVCLV

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.

$D811PDVGBV

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.

$D813PDVPBV

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.

$D815PDVSTV

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.

$D817PDVSPV

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.

$D819PDINIT

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.

Linki

Personal tools