Rejestry KMK/JŻ IDE
From Atariki
Wersja z dnia 15:07, 23 sie 2005 KMK (Dyskusja | wkład) (→Lista rejestrów) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) |
||
Linia 1: | Linia 1: | ||
- | ====Procedura dostępu==== | + | ==Procedura dostępu== |
- | Poniżej wymienione rejestry nie są dostępne wprost. Stają się dostępne po wybraniu urządzenia odpowiednim dla niego bitem w rejestrze PDVREG ($D1FF). System operacyjny komputera wykonuje to automatycznie przy każdym resecie (celem zainicjowania urządzeń) oraz przy odwołaniach do [[SIO]] (celem przeprowadzenia transferu danych). Jednak dostępu do rejestrów mogą potrzebować specjalistyczne programy narzędziowe (jak FDISK) i diagnostyczne. | + | Poniżej wymienione rejestry nie są dostępne wprost. Stają się dostępne po wybraniu urządzenia odpowiednim dla niego bitem w rejestrze [[Rejestry PBI#PDVREG|PDVREG ($D1FF)]]. System operacyjny komputera wykonuje to automatycznie przy każdym resecie (celem zainicjowania urządzeń) oraz przy odwołaniach do [[SIO]] (celem przeprowadzenia transferu danych). Jednak dostępu do rejestrów mogą potrzebować specjalistyczne programy narzędziowe (jak FDISK) i diagnostyczne. |
* Wyszukiwanie urządzenia odbywa się w pętli, która ma osiem przebiegów. | * Wyszukiwanie urządzenia odbywa się w pętli, która ma osiem przebiegów. | ||
- | * Za każdym przebiegiem ustawia się na 1 jeden bit rejestru PDVREG (najpierw bit 0, za następnym przebiegiem bit 1 itd.) kasując pozostałe. | + | * Za każdym przebiegiem ustawia się na 1 jeden bit rejestru-cienia PDVRS $0248 oraz rejestru PDVREG (najpierw bit 0, za następnym przebiegiem bit 1 itd.) kasując pozostałe (cień ustawiamy na wypadek, gdyby jakieś urządzenie PBI zgłosiło tymczasem przerwanie - jeśli przerwania są wyłączone, nie trzeba tego robić). |
* Po ustawieniu bitu trzeba skontrolować zawartość komórek $D803 i $D80B. Jeśli wartość ich jest równa odpowiednio $80 i $91, to znaczy, że aktywowane zostało jakieś urządzenie. | * Po ustawieniu bitu trzeba skontrolować zawartość komórek $D803 i $D80B. Jeśli wartość ich jest równa odpowiednio $80 i $91, to znaczy, że aktywowane zostało jakieś urządzenie. | ||
- | * Jeśli w komórkach $D800-$D802 znajdują się kolejno wartości $28, $07, $70, to aktywowanym urządzeniem jest interfejs [[KMK/JŻ IDE]]. | + | * Jeśli w komórkach $D800-$D801 znajdują się kolejno wartości $28, $07, to aktywowanym urządzeniem jest interfejs [[KMK/JŻ IDE]] (lub [[IDE Plus 2.0]]). |
- | Urządzenie odłącza się przez wpisanie zera do rejestru PDVREG ($D1FF). | + | Urządzenie odłącza się przez wpisanie zera do rejestru [[Rejestry PBI#PDVREG|PDVREG ($D1FF)]] (oraz ewentualnie przedtem do cienia, jak powyżej). |
- | ====Lista rejestrów==== | + | ==Lista rejestrów== |
<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>$D100</td><td>DATA.LO</td><td>Młodszy bajt portu danych.</td></tr> | + | <tr><td>$D100</td><td>DATA.HI</td><td>Starszy bajt portu danych.</td></tr> |
- | <tr><td>$D110</td><td>DATA.HI</td><td>Starszy bajt portu danych.</td></tr> | + | <tr><td>$D110</td><td>DATA.LO</td><td>Młodszy bajt portu danych.</td></tr> |
- | <tr><td>$D111</td><td>ERROR</td><td><p>Rejestr ERROR. Ustawiany na odpowiednią wartość, gdy bit 0 rejestru STATUS ma wartość 1:</p> | + | <tr><td>$D111 (R)</td><td>ERROR</td><td><p>Rejestr ERROR. Ustawiany na odpowiednią wartość, gdy bit 0 rejestru STATUS ma wartość 1:</p> |
- | * bit 7 - Bad sector | + | * bit 7 - Bad sector (ATA-1) lub zarezerwowany (ATA-2 i późniejsze) |
* bit 6 - Uncorrectable ECC error | * bit 6 - Uncorrectable ECC error | ||
- | * bit 5 - zarezerwowany | + | * bit 5 - Media Changed |
* bit 4 - ID not found | * bit 4 - ID not found | ||
- | * bit 3 - zarezerwowany | + | * bit 3 - Media Change Requested |
* bit 2 - Aborted command | * bit 2 - Aborted command | ||
* bit 1 - Track 0 not found | * bit 1 - Track 0 not found | ||
Linia 32: | Linia 32: | ||
<p>W trybie diagnostycznym rejestr ERROR przyjmuje następujące wartości:</p> | <p>W trybie diagnostycznym rejestr ERROR przyjmuje następujące wartości:</p> | ||
- | * 1 - NO ERRORS | + | '''ATA-1:''' |
- | * 2 - Formatter device error | + | |
- | * 3 - Sector buffer error | + | * $01 - NO ERRORS |
- | * 4 - ECC circuitry error | + | * $02 - Formatter device error |
- | * 5 - Controlling MPU error | + | * $03 - Sector buffer error |
+ | * $04 - ECC circuitry error | ||
+ | * $05 - Controlling MPU error | ||
+ | * $8x - Slave drive failed | ||
+ | |||
+ | '''ATA-2 i późniejsze:''' | ||
+ | |||
+ | * $01 - Master passed, slave passed or not present | ||
+ | * $00, $02-$7F - Master failed, slave passed or not present | ||
+ | * $81 - Master passed, slave failed | ||
+ | * $80, $82-$FF - Master failed, slave failed | ||
</td></tr> | </td></tr> | ||
- | <tr><td>$D112</td><td>SCOUNT</td><td>Ilość sektorów do odczytu lub zapisu.</td></tr> | + | <tr><td>$D111 (W)</td><td>FEATURES</td><td>Rejestr używany przez niektóre komendy opcjonalne oraz przez komendę SET FEATURES, która wybiera tryby pracy specyficzne dla danego urządzenia (np. włącza i wyłącza cache itp.)</td></tr> |
- | <tr><td>$D113</td><td>SNUM</td><td>Numer sektora na ścieżce, który będzie zapisywany lub odczytywany.</td></tr> | + | <tr><td>$D112</td><td>SCOUNT</td><td>Liczba sektorów do odczytu lub zapisu. 0 oznacza 256 sektorów.</td></tr> |
- | <tr><td>$D114</td><td>CYL.LO</td><td>Numer cylindra (młodszy bajt).</td></tr> | + | <tr><td>$D113</td><td>SNUM</td><td><p>W trybie CHS: numer sektora na ścieżce, który będzie zapisywany lub odczytywany. Zakres teoretycznie od 1 do 255, w praktyce od 1 do liczby określonej przez geometrię dysku.</p> |
+ | <p>W trybie LBA: bity 0-7 28-bitowego numeru sektora LBA.</p> | ||
+ | </td></tr> | ||
- | <tr><td>$D115</td><td>CYL.HI</td><td>Numer cylindra (starszy bajt).</td></tr> | + | <tr><td>$D114</td><td>CYL.LO</td><td><p>W trybie CHS: młodszy bajt numeru cylindra.</p> |
+ | <p>W trybie LBA: bity 8-15 28-bitowego numeru sektora LBA.</p> | ||
+ | </td></tr> | ||
+ | |||
+ | <tr><td>$D115</td><td>CYL.HI</td><td><p>W trybie CHS: starszy bajt numeru cylindra.</p> | ||
+ | <p>W trybie LBA: bity 16-23 28-bitowego numeru sektora LBA.</p> | ||
+ | </td></tr> | ||
<tr><td>$D116</td><td>SDH</td><td><p>Rejestr SDH:</p> | <tr><td>$D116</td><td>SDH</td><td><p>Rejestr SDH:</p> | ||
- | * bit 7 - zarezerwowany | + | * bit 7 - zarezerwowany, równy 1 |
* bit 6 - mode select (0 = CHS, 1 = LBA) | * bit 6 - mode select (0 = CHS, 1 = LBA) | ||
- | * bit 5 - zarezerwowany | + | * bit 5 - zarezerwowany, równy 1 |
* bit 4 - drive select (0 = master, 1 = slave) | * bit 4 - drive select (0 = master, 1 = slave) | ||
- | * bity 3-0 - numer głowicy | + | * bity 3-0 - w trybie CHS: numer głowicy; w trybie LBA: bity 24-27 28-bitowego numeru sektora LBA |
+ | |||
+ | <p>Według pierwotnych założeń bitami 7 i 5 wybierano rozmiar sektora (256, 512, 1024 lub 2048 bajtów). Stąd nazwa rejestru: SDH = Sector size, Device, Head.</p> | ||
</td></tr> | </td></tr> | ||
Linia 72: | Linia 92: | ||
* bit 7 - Busy | * bit 7 - Busy | ||
* bit 6 - Ready | * bit 6 - Ready | ||
- | * bit 5 - zarezerwowany | + | * bit 5 - Write fault (ATA-1), lub Device fault (ATA-2 i późniejsze) |
* bit 4 - Seek complete | * bit 4 - Seek complete | ||
* bit 3 - Data request (DRQ) | * bit 3 - Data request (DRQ) | ||
Linia 78: | Linia 98: | ||
* bit 1 - Index pulse | * bit 1 - Index pulse | ||
* bit 0 - Error | * bit 0 - Error | ||
+ | |||
+ | <p>Gdy bit 7 (BUSY) jest ustawiony, wszystkie inne bity tego rejestru oraz wartości wszystkich innych rejestrów ATA są nieokreślone.</p> | ||
</td></tr> | </td></tr> | ||
- | <tr><td>$D118 (W)</td><td>FIXDISK</td><td>Tzw. fixed disk control register. Używany jest do zresetowania kontrolera.</td></tr> | + | <tr><td>$D11E (W)</td><td>FIXDISK</td><td><p>Tzw. fixed disk control register. Używany jest głównie do zresetowania kontrolera.</p> |
- | <tr><td>$D118 (R)</td><td>ALTSTATUS</td><td>Cień rejestru STATUS.</td></tr> | + | * bit 2 - SRST, ustawienie tego bitu na co najmniej 20 ms powoduje reset kontrolera |
+ | * bit 1 - nIEN, Interrupt Enable (nie używany na Atari) | ||
+ | * bit 0 - powinien być zawsze ustawiany na 0 | ||
+ | |||
+ | <p>Pozostałe bity są zarezerwowane.</p> | ||
+ | |||
+ | </td></tr> | ||
+ | |||
+ | <tr><td>$D11E (R)</td><td>ALTSTATUS</td><td>Cień rejestru STATUS.</td></tr> | ||
</table> | </table> | ||
- | ====Zobacz też:==== | + | ==Zobacz też== |
- | * [[Mapa pamięci]] | ||
* [[KMK/JŻ IDE]] | * [[KMK/JŻ IDE]] | ||
+ | * [[Mapa pamięci]] | ||
+ | * [[Rejestry msc IDE]] | ||
- | [[Kategoria:Atari 8-bit]] | + | [[Kategoria:Programowanie Atari 8-bit]] |
Aktualna wersja
Procedura dostępu
Poniżej wymienione rejestry nie są dostępne wprost. Stają się dostępne po wybraniu urządzenia odpowiednim dla niego bitem w rejestrze PDVREG ($D1FF). System operacyjny komputera wykonuje to automatycznie przy każdym resecie (celem zainicjowania urządzeń) oraz przy odwołaniach do SIO (celem przeprowadzenia transferu danych). Jednak dostępu do rejestrów mogą potrzebować specjalistyczne programy narzędziowe (jak FDISK) i diagnostyczne.
- Wyszukiwanie urządzenia odbywa się w pętli, która ma osiem przebiegów.
- Za każdym przebiegiem ustawia się na 1 jeden bit rejestru-cienia PDVRS $0248 oraz rejestru PDVREG (najpierw bit 0, za następnym przebiegiem bit 1 itd.) kasując pozostałe (cień ustawiamy na wypadek, gdyby jakieś urządzenie PBI zgłosiło tymczasem przerwanie - jeśli przerwania są wyłączone, nie trzeba tego robić).
- Po ustawieniu bitu trzeba skontrolować zawartość komórek $D803 i $D80B. Jeśli wartość ich jest równa odpowiednio $80 i $91, to znaczy, że aktywowane zostało jakieś urządzenie.
- Jeśli w komórkach $D800-$D801 znajdują się kolejno wartości $28, $07, to aktywowanym urządzeniem jest interfejs KMK/JŻ IDE (lub IDE Plus 2.0).
Urządzenie odłącza się przez wpisanie zera do rejestru PDVREG ($D1FF) (oraz ewentualnie przedtem do cienia, jak powyżej).
Lista rejestrów
Adres | Etykieta | Opis |
$D100 | DATA.HI | Starszy bajt portu danych. |
$D110 | DATA.LO | Młodszy bajt portu danych. |
$D111 (R) | ERROR | Rejestr ERROR. Ustawiany na odpowiednią wartość, gdy bit 0 rejestru STATUS ma wartość 1:
W trybie diagnostycznym rejestr ERROR przyjmuje następujące wartości: ATA-1:
ATA-2 i późniejsze:
|
$D111 (W) | FEATURES | Rejestr używany przez niektóre komendy opcjonalne oraz przez komendę SET FEATURES, która wybiera tryby pracy specyficzne dla danego urządzenia (np. włącza i wyłącza cache itp.) |
$D112 | SCOUNT | Liczba sektorów do odczytu lub zapisu. 0 oznacza 256 sektorów. |
$D113 | SNUM | W trybie CHS: numer sektora na ścieżce, który będzie zapisywany lub odczytywany. Zakres teoretycznie od 1 do 255, w praktyce od 1 do liczby określonej przez geometrię dysku. W trybie LBA: bity 0-7 28-bitowego numeru sektora LBA. |
$D114 | CYL.LO | W trybie CHS: młodszy bajt numeru cylindra. W trybie LBA: bity 8-15 28-bitowego numeru sektora LBA. |
$D115 | CYL.HI | W trybie CHS: starszy bajt numeru cylindra. W trybie LBA: bity 16-23 28-bitowego numeru sektora LBA. |
$D116 | SDH | Rejestr SDH:
Według pierwotnych założeń bitami 7 i 5 wybierano rozmiar sektora (256, 512, 1024 lub 2048 bajtów). Stąd nazwa rejestru: SDH = Sector size, Device, Head. |
$D117 (W) | COMMAND | Rejestr do wpisywania komend kontrolera IDE. Oprogramowanie interfejsu używa następujących komend:
|
$D117 (R) | STATUS | Rejestr statusu:
Gdy bit 7 (BUSY) jest ustawiony, wszystkie inne bity tego rejestru oraz wartości wszystkich innych rejestrów ATA są nieokreślone. |
$D11E (W) | FIXDISK | Tzw. fixed disk control register. Używany jest głównie do zresetowania kontrolera.
Pozostałe bity są zarezerwowane. |
$D11E (R) | ALTSTATUS | Cień rejestru STATUS. |