Rejestry KMK/JŻ IDE

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:32, 15 mar 2010
KMK (Dyskusja | wkład)
(Lista rejestrów - ++)
← Previous diff
Wersja z dnia 22:00, 23 mar 2010
KMK (Dyskusja | wkład)
(Lista rejestrów)
Next diff →
Linia 52: Linia 52:
<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>$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>$D112</td><td>SCOUNT</td><td>Liczba sektorów do odczytu lub zapisu.</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>$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> <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: osiem bitów 28-bitowego numeru sektora LBA.</p>+<p>W trybie LBA: bity 0-7 28-bitowego numeru sektora LBA.</p>
</td></tr> </td></tr>
<tr><td>$D114</td><td>CYL.LO</td><td><p>W trybie CHS: młodszy bajt numeru cylindra.</p> <tr><td>$D114</td><td>CYL.LO</td><td><p>W trybie CHS: młodszy bajt numeru cylindra.</p>
-<p>W trybie LBA: osiem bitów 28-bitowego numeru sektora LBA.</p>+<p>W trybie LBA: bity 8-15 28-bitowego numeru sektora LBA.</p>
</td></tr> </td></tr>
<tr><td>$D115</td><td>CYL.HI</td><td><p>W trybie CHS: starszy bajt numeru cylindra.</p> <tr><td>$D115</td><td>CYL.HI</td><td><p>W trybie CHS: starszy bajt numeru cylindra.</p>
-<p>W trybie LBA: osiem bitów 28-bitowego numeru sektora LBA.</p>+<p>W trybie LBA: bity 16-23 28-bitowego numeru sektora LBA.</p>
</td></tr> </td></tr>
Linia 72: Linia 72:
* bit 5 - zarezerwowany, równy 1 * 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 - w trybie CHS: numer głowicy; w trybie LBA: 4 bity 28-bitowego numeru sektora LBA+* bity 3-0 - w trybie CHS: numer głowicy; w trybie LBA: 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> <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>

Wersja z dnia 22:00, 23 mar 2010

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 PDVREG (najpierw bit 0, za następnym przebiegiem bit 1 itd.) kasując pozostałe.
  • 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.

Urządzenie odłącza się przez wpisanie zera do rejestru PDVREG ($D1FF).

Lista rejestrów

AdresEtykietaOpis
$D100DATA.HIStarszy bajt portu danych.
$D110DATA.LOMłodszy bajt portu danych.
$D111 (R)ERROR

Rejestr ERROR. Ustawiany na odpowiednią wartość, gdy bit 0 rejestru STATUS ma wartość 1:

  • bit 7 - Bad sector (ATA-1) lub zarezerwowany (ATA-2 i późniejsze)
  • bit 6 - Uncorrectable ECC error
  • bit 5 - Media Changed
  • bit 4 - ID not found
  • bit 3 - Media Change Requested
  • bit 2 - Aborted command
  • bit 1 - Track 0 not found
  • bit 0 - Data address mark not found

W trybie diagnostycznym rejestr ERROR przyjmuje następujące wartości:

ATA-1:

  • $01 - NO ERRORS
  • $02 - Formatter device 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
$D111 (W)FEATURESRejestr 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.)
$D112SCOUNTLiczba sektorów do odczytu lub zapisu. 0 oznacza 256 sektorów.
$D113SNUM

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.

$D114CYL.LO

W trybie CHS: młodszy bajt numeru cylindra.

W trybie LBA: bity 8-15 28-bitowego numeru sektora LBA.

$D115CYL.HI

W trybie CHS: starszy bajt numeru cylindra.

W trybie LBA: bity 16-23 28-bitowego numeru sektora LBA.

$D116SDH

Rejestr SDH:

  • bit 7 - zarezerwowany, równy 1
  • bit 6 - mode select (0 = CHS, 1 = LBA)
  • bit 5 - zarezerwowany, równy 1
  • bit 4 - drive select (0 = master, 1 = slave)
  • bity 3-0 - w trybie CHS: numer głowicy; w trybie LBA: 24-27 28-bitowego numeru sektora LBA

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)COMMANDRejestr do wpisywania komend kontrolera IDE. Oprogramowanie interfejsu używa następujących komend:
  • $10 - RECALIBRATE
  • $20 - READ SECTOR
  • $30 - WRITE SECTOR
  • $70 - SEEK
  • $90 - EXECUTE DIAGNOSTICS
  • $91 - SET DRIVE PARAMETERS
  • $EC - IDENTIFY DRIVE
$D117 (R)STATUS

Rejestr statusu:

  • bit 7 - Busy
  • bit 6 - Ready
  • bit 5 - Write fault (ATA-1), lub Device fault (ATA-2 i późniejsze)
  • bit 4 - Seek complete
  • bit 3 - Data request (DRQ)
  • bit 2 - Data corrected successfully
  • bit 1 - Index pulse
  • bit 0 - Error

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.

  • 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

Pozostałe bity są zarezerwowane.

$D11E (R)ALTSTATUSCień rejestru STATUS.

Zobacz też:

Personal tools