ATR: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Mono (dyskusja | edycje)
→Narzędzia: linki do franny i xedisk
 
(Nie pokazano 51 wersji utworzonych przez 9 użytkowników)
Linia 1: Linia 1:
Obraz dyskietki 8-bitowego Atari uzywany w emulatorach, [[APE]] itp. opracowany przez [[Nick Kennedy|Nick'a Kennedy`ego]].
Obraz dyskietki 8-bitowego Atari używany w emulatorach, [[APE]] itp. opracowany przez [[Nick Kennedy|Nicka Kennedy]]'ego.
 
Istnieje też odmiana '''ATZ''', jest to obraz dyskietki w formacie ATR skompresowany przy pomocy programu gzip. Format ATZ (i ATR też) jest obsługiwany przez emulatory [[Atari800]], [[Altirra]] oraz [[Atari800Win PLus]].


== Nagłówek ==
== Nagłówek ==


16 bajtów zgodnie z ponizszą tabelką.<br />
16 bajtów zgodnie z poniższą tabelką. Istnieją dwie wersje, pierwsze siedem bajtów ma takie samo znaczenie w obu:
 
=== Nagłówek [[SIO2PC]] ===


<table BORDER="1" cellpadding="5" WIDTH="100%" cellspacing="0">
<table BORDER="1" cellpadding="5" WIDTH="100%" cellspacing="0">
<tr>
<tr>
<th>Offset</th>
<TH>Typ</TH>
<TH>Typ</TH>
<TH>Nazwa</TH>
<TH>Nazwa</TH>
<TH>Opis</TH>
<TH>Opis</TH>
</tr>
</tr>
<tr>
<tr>
<td>$00</td>
<td width="10%" align="center">
<td width="10%" align="center">
WORD
WORD
Linia 19: Linia 26:
</td>
</td>
<td>
<td>
$0296 (suma 'NICKATARI')
Kolejno wartości: $96 i $02 ($0296, suma 'NICKATARI')
</td>
</tr>
 
<tr>
<td>$02</td>
<td width="10%" align="center">
WORD
</td>
<td width="10%" align="center">
wPars
</td>
<td>
<p>Rozmiar obrazu (bez nagłówka), liczony w [[paragraf]]ach: innymi słowy rozmiar w bajtach podzielić przez 16.</p>
</td>
</tr>
 
<tr>
<td>$04</td>
<td width="10%" align="center">
WORD
</td>
<td width="10%" align="center">
wSecSize
</td>
<td>
<p>Rozmiar sektora w bajtach: $80, $0100 lub $0200.</p>
</td>
</tr>
 
<tr>
<td>$06</td>
<td width="10%" align="center">
WORD
</td>
<td width="10%" align="center">
wParsHigh
</td>
<td>
<p>Najstarsze słowo rozmiaru w paragrafach (wprowadzono w REV 3.00).</p>
</td>
</tr>
 
<tr>
<td>$08</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btFlags
</td>
<td>
* bit 4 = 1 - obraz z zabezpieczeniami
* bit 5 = 1 - ochrona przed zapisem
</td>
</tr>
 
<tr>
<td>$09</td>
<td width="10%" align="center">
WORD
</td>
<td width="10%" align="center">
wBad
</td>
<td>
<p>Numer pierwszego sektora z zabezpieczeniami (jeśli bit 4 btFlags jest ustawiony).</p>
</td>
</tr>
 
<tr>
<td>$0B</td>
<td width="10%" align="center">
DWORD
</td>
<td width="10%" align="center">
dwUnused
</td>
<td>
<p>Cztery bajty nieużywane, równe $00.</p>
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$0F</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btUnused
</td>
<td>
<p>Bajt nieużywany, równy $00.</p>
</td>
</tr>
</table>
=== Nagłówek APE ===
<table BORDER="1" cellpadding="5" WIDTH="100%" cellspacing="0">
<tr>
<th>Offset</th>
<TH>Typ</TH>
<TH>Nazwa</TH>
<TH>Opis</TH>
</tr>
<tr>
<td>$00</td>
<td width="10%" align="center">
<td width="10%" align="center">
WORD
WORD
</td>
<td width="10%" align="center">
wMagic
</td>
<td>
Kolejno wartości: $96 i $02 ($0296, suma 'NICKATARI')
</td>
</tr>


<tr>
<td>$02</td>
<td width="10%" align="center">
WORD
</td>
</td>
<td width="10%" align="center">
<td width="10%" align="center">
Linia 31: Linia 156:
</td>
</td>
<td>
<td>
rozmiar obrazu, in paragrafach (rozmiar/$10)
Rozmiar obrazu (bez nagłówka), liczony w paragrafach: innymi słowy rozmiar w bajtach podzielić przez 16.
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$04</td>
<td width="10%" align="center">
<td width="10%" align="center">
WORD
WORD
Linia 42: Linia 169:
</td>
</td>
<td>
<td>
Rozmiar sektora. ($80 lub $100) bajtów/sektor
Rozmiar sektora w bajtach: $80, $0100 lub $0200.
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$06</td>
<td width="10%" align="center">
<td width="10%" align="center">
BYTE
BYTE
Linia 53: Linia 182:
</td>
</td>
<td>
<td>
starsza część rozmiaru w paragrafach (rozmiar/$10) (wprowadzono w REV 3.00)
<p>Najstarszy bajt rozmiaru w paragrafach.</p>
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$07</td>
<td width="10%" align="center">
<td width="10%" align="center">
DWORD
DWORD
Linia 64: Linia 195:
</td>
</td>
<td>
<td>
32bit CRC pliku (dodano w APE?)
<p>32-bit CRC pliku. Wartość ta jest ważna jeśli bit 1 bajtu nr 15 (btFlags) jest ustawiony. Występuje od wersji APE 1.10.</p>
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$0B</td>
<td width="10%" align="center">
<td width="10%" align="center">
DWORD
DWORD
Linia 75: Linia 208:
</td>
</td>
<td>
<td>
Niewykorzystane
Niewykorzystane.
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td>$0F</td>
<td width="10%" align="center">
<td width="10%" align="center">
BYTE
BYTE
Linia 86: Linia 221:
</td>
</td>
<td>
<td>
bit 0 (Tylko do odczytu) (dodano w APE?)
* bit 0 = 1 - obraz tylko do odczytu.
* bit 1 = 1 - pole dwCRC zawiera ważną sumę kontrolną
<p>Pozostałe bity są niewykorzystane i powinny być równe zero. Występuje od wersji APE 1.10.</p>
</td>
</td>
</tr>
</tr>
</table>
</table>


Najczęściej się spotyka pliki z nagłówkiem podstawowym, w którym w bajtach 7-15 nagłówka są same zera. Pozostałe na ogół mają nagłówek w formacie APE z ustawionym znacznikiem zabezpieczenia przed zapisem. Plików w pierwszym z wymienionych formatów w zasadzie nie spotyka się.


== Treść ==
== Treść ==


Po nagłówku występują po kolei sektory.
Po nagłówku występują po kolei sektory danych.
 
=== Sektor 128 bajtów ===
 
Obrazy dla rozmiaru sektora równego 128 bajtów ([[Formaty dyskietek#SD|SD]] i [[Formaty dyskietek#ED|ED]]) mają wszystkie sektory tej samej wielkości. Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:
 
rozmiar_pliku_atr = (liczba_sektorów * 128)+16
 
Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następującego wzoru:
 
offset = ((nr_sektora - 1) * 128) + 16
 
=== Sektor 256 bajtów ===
 
W tym formacie panuje zamieszanie, którego praprzyczyną jest próba zaoszczędzenia 384 bajtów, jakie marnują się w obszarze odczytu wstępnego dyskietek [[DD]].
 
Dla wielkości sektora równej 256 bajtów występują dwa sposoby zapisania pierwszych trzech sektorów obrazu dysku:
 
# jako obszaru 768 bajtów, w którym "rzeczywiste" dane sektorów zajmują pierwsze 384 bajty, a druga jego połówka jest niewykorzystana (ale jest uwzględniona w wykazanej nagłówkiem wielkości obrazu liczonej w paragrafach - dla obrazu 180k będzie ta wielkość wynosiła $2D00).
# jako trzech porcji danych po 128 bajtów (w tym wypadku wielkość obrazu zapisana w nagłówku będzie o 24 paragrafy mniejsza niż powyżej).
 
Ten drugi format uchodzi za prawidłowy, w tej sytuacji sektor nr 4 (i każdy dalszy) zapisywany jest w pliku o 384 bajty wcześniej niż wynikałoby to z prostego obliczenia wzoru:
 
((nr_sektora-1) * wielkość_sektora) + wielkość_nagłówka
 
Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:
 
rozmiar_pliku_atr = ((liczba_sektorów - 3) * 256) + 384 + 16
 
Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następujących wzorów:
 
** dla sektorów 1-3:
 
offset = ((nr_sektora - 1) * 128) + 16
 
** dla pozostałych sektorów:
 
offset = ((nr_sektora - 4) * 256) + 384 + 16
 
Program może łatwo rozróżnić te dwa typy po nagłówku: jeśli wielkość sektora wynosi $0100, trzeba sprawdzić, czy najmłodszy półbajt liczby paragrafów jest równy 0 (typ 1) czy 8 (typ 2).
 
Istnieje jeszcze trzeci rodzaj plików ATR: mają one rozmiar pliku i wielkość obrazu jak w przypadku typu 1, lecz dane wewnątrz rozmieszczone są jak w typie 2. Ponieważ nie ma dobrej metody na wykrycie tej sytuacji, mając taki plik najlepiej jest go poprawić odejmując 24 od liczby paragrafów zapisanej w nagłówku.
 
=== Sektor 512 bajtów ===
 
Obrazy dla rozmiaru sektora równego 512 bajtów ([[Formaty_dyskietek#DD_512|DD 512]]) mają, podobnie jak te z sektorami 128-bajtowymi, wszystkie sektory tej samej wielkości - nie ma wyróżnionego obszaru odczytu wstępnego (zajmuje on zresztą tylko jeden sektor, pierwszy). Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:
 
rozmiar_pliku_atr = (liczba_sektorów * 512) + 16
 
Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następującego wzoru:
 
offset = ((nr_sektora - 1) * 512) + 16
 
== Weryfikacja poprawności ==
 
Od wersji 1.10 w [[APE]] wprowadzono mechanizm określania poprawności obrazu ATR (może on służyć np. do weryfikowania błędów powstałych przy ściąganiu obrazu z sieci). Mechanizm ten bazuje na algorytmie obliczania 32-bitowego [http://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC] stosowanego np. w [http://pl.wikipedia.org/wiki/PKZIP PKZIP].
 
Jeśli obraz jest "opieczętowany" (bit 1 btFlags jest ustawiony) wtedy dla określenia poprawności obrazu należy obliczyć 32-bitową wartość CRC z każdego jego bajtu łącznie z nagłówkiem (zakłada się, że bajty o offsetach 7..14 są wyzerowane). Jeśli obliczony kod jest identyczny z wartością zapisaną w polu dwCRC można założyć, że obraz jest nieuszkodzony.
 
CRC32 dany jest wielomianem:
 
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1
 
czyli $04C11DB7 w notacji "najpierw MSB".
 
== Zabezpieczenia ==
 
W wersji 4.05 [[SIO2PC]] wprowadzono możliwość symulowania zabezpieczeń dla sektorów na dysku.
 
Jeśli bit 4 btFlags jest ustawiony, wtedy począwszy od sektora podanego w wBad występują sektory z zabezpieczeniami.
 
Sektor zamiast danych zawiera wtedy informacje o użytych zabezpieczeniach:
<table BORDER="1" cellpadding="5" WIDTH="100%" cellspacing="0">
<tr>
<th>Offset</th>
<TH>Typ</TH>
<TH>Nazwa</TH>
<TH>Opis</TH>
</tr>
 
<tr>
<td>$00</td>
<td width="10%" align="center">
DWORD
</td>
<td width="10%" align="center">
dwSign
</td>
<td>
Kolejno wartości: $C2, $1C, $3D i $1E (sygnatura sektora z zabezpieczeniami).
</td>
</tr>
 
<tr>
<td>$04</td>
<td width="10%" align="center">
BYTE[4]
</td>
<td width="10%" align="center">
btaErrStatus
</td>
<td>
4 bajty zwracane przez komendę STATUS ("S" = $53) [[SIO]] (podane w odwrotnej kolejności), po próbie odczytu <b>BŁĘDNEGO</b> sektora.
</td>
</tr>
 
<tr>
<td>$08</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btCmdResp
</td>
<td>
Status zwracany po otrzymaniu komendy ("A" lub "N").[1]
</td>
</tr>
 
<tr>
<td>$09</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btDataResp
</td>
<td>
Status zwracany po otrzymaniu bloku danych ("C" lub "A"/"E").[1]
</td>
</tr>
 
<tr>
<td>$0A</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btChksumInfo
</td>
<td>
Informacja o sumie kontrolnej ("G" - poprawna, lub "B" - błędna).[1]
</td>
</tr>
 
<tr>
<td>$0B</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btResDelay
</td>
<td>
Czas, po którym ma zostać wysłana odpowiedź na odczyt ("R") bądź zapis ("P"/"W") <b>POPRAWNEGO</b> sektora.[2]
</td>
</tr>
 
<tr>
<td>$0C</td>
<td width="10%" align="center">
BYTE
</td>
<td width="10%" align="center">
btErrResDelay
</td>
<td>
Czas, po którym ma zostać wysłana odpowiedź na odczyt ("R") <b>BŁĘDNEGO</b> sektora.[2]
</td>
</tr>
 
<tr>
<td>$0D</td>
<td width="10%" align="center">
BYTE[4]
</td>
<td width="10%" align="center">
btaStatus
</td>
<td>
4 bajty zwracane przez komendę STATUS ("S" = $53) SIO (podane w odwrotnej kolejności), po próbie odczytu <b>POPRAWNEGO</b> sektora.
</td>
</tr>
 
</table>
 
# "_" oznacza, że zawartość bajtu nie ma znaczenia, "T" oznacza brak odpowiedzi (TIMEOUT u odbiorcy).
# Czas mierzony jest w jednostkach po 55 ms (ang. "jiffy" - odwrotność 18,2 Hz).
 
== Narzędzia ==
* Do przygotowania pliku ATR na komputerze PC można użyć programu [http://serious-dial.atari.pl/makeATR/ makeATR] autorstwa [[Soudi]]ego.
* Wtyczka dla programu Total Commander umożliwiająca operowanie na plikach ATR autorstwa [[Pajero]] [http://madteam.atari8.info/uzytki/atrwcx.7z Total Commander ATR Plugin].
* [[SIO2BSD#Inne|SIO2BSD]] umożliwia tworzenie obrazów ATR.
* [[IDE Plus]] pozwala na dostęp do zawartości pliku ATR z poziomu [[SpartaDOS X]].
* [[Franny]] z pakietu [https://sourceforge.net/projects/atari8/ Atari8 tools] autorstwa [[Bober]]a pozwala na manipulacje plikami ATR w obydwu wariantach.
* [https://github.com/epi/xedisk xedisk] autorstwa [[Epi]]ego umożliwia manipulacje plikami ATR.
 
== Zobacz też ==
* [http://pages.suddenlink.net/wa5bdu/readme.txt Dokumentacja Nicka Kennedy'ego]
* [http://www.atarimax.com/ape/docs/DiskImageFAQ/#Atr_Format Nagłówek ATR w APE]
* [https://atarionline.pl/v01/index.php?subaction=showfull&id=1323287642&archive=&start_from=0&ucat=7&ct=poczatki Poradnik opisujący w jaki sposób przegrać obraz ATR na dyskietkę]
 
{{stub}}
[[Kategoria:Emulacja]]
[[Kategoria:Formaty plików]]
[[Kategoria:Obrazy dyskowe 8bit]]

Aktualna wersja z 16 sty 2021, 12:25

Obraz dyskietki 8-bitowego Atari używany w emulatorach, APE itp. opracowany przez Nicka Kennedy'ego.

Istnieje też odmiana ATZ, jest to obraz dyskietki w formacie ATR skompresowany przy pomocy programu gzip. Format ATZ (i ATR też) jest obsługiwany przez emulatory Atari800, Altirra oraz Atari800Win PLus.

Nagłówek

16 bajtów zgodnie z poniższą tabelką. Istnieją dwie wersje, pierwsze siedem bajtów ma takie samo znaczenie w obu:

Nagłówek SIO2PC

Offset Typ Nazwa Opis
$00

WORD

wMagic

Kolejno wartości: $96 i $02 ($0296, suma 'NICKATARI')

$02

WORD

wPars

Rozmiar obrazu (bez nagłówka), liczony w paragrafach: innymi słowy rozmiar w bajtach podzielić przez 16.

$04

WORD

wSecSize

Rozmiar sektora w bajtach: $80, $0100 lub $0200.

$06

WORD

wParsHigh

Najstarsze słowo rozmiaru w paragrafach (wprowadzono w REV 3.00).

$08

BYTE

btFlags

  • bit 4 = 1 - obraz z zabezpieczeniami
  • bit 5 = 1 - ochrona przed zapisem
$09

WORD

wBad

Numer pierwszego sektora z zabezpieczeniami (jeśli bit 4 btFlags jest ustawiony).

$0B

DWORD

dwUnused

Cztery bajty nieużywane, równe $00.

$0F

BYTE

btUnused

Bajt nieużywany, równy $00.

Nagłówek APE

Offset Typ Nazwa Opis
$00

WORD

wMagic

Kolejno wartości: $96 i $02 ($0296, suma 'NICKATARI')

$02

WORD

wPars

Rozmiar obrazu (bez nagłówka), liczony w paragrafach: innymi słowy rozmiar w bajtach podzielić przez 16.

$04

WORD

wSecSize

Rozmiar sektora w bajtach: $80, $0100 lub $0200.

$06

BYTE

btParsHigh

Najstarszy bajt rozmiaru w paragrafach.

$07

DWORD

dwCRC

32-bit CRC pliku. Wartość ta jest ważna jeśli bit 1 bajtu nr 15 (btFlags) jest ustawiony. Występuje od wersji APE 1.10.

$0B

DWORD

dwUnused

Niewykorzystane.

$0F

BYTE

btFlags

  • bit 0 = 1 - obraz tylko do odczytu.
  • bit 1 = 1 - pole dwCRC zawiera ważną sumę kontrolną

Pozostałe bity są niewykorzystane i powinny być równe zero. Występuje od wersji APE 1.10.

Najczęściej się spotyka pliki z nagłówkiem podstawowym, w którym w bajtach 7-15 nagłówka są same zera. Pozostałe na ogół mają nagłówek w formacie APE z ustawionym znacznikiem zabezpieczenia przed zapisem. Plików w pierwszym z wymienionych formatów w zasadzie nie spotyka się.

Treść

Po nagłówku występują po kolei sektory danych.

Sektor 128 bajtów

Obrazy dla rozmiaru sektora równego 128 bajtów (SD i ED) mają wszystkie sektory tej samej wielkości. Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:

rozmiar_pliku_atr = (liczba_sektorów * 128)+16

Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następującego wzoru:

offset = ((nr_sektora - 1) * 128) + 16

Sektor 256 bajtów

W tym formacie panuje zamieszanie, którego praprzyczyną jest próba zaoszczędzenia 384 bajtów, jakie marnują się w obszarze odczytu wstępnego dyskietek DD.

Dla wielkości sektora równej 256 bajtów występują dwa sposoby zapisania pierwszych trzech sektorów obrazu dysku:

  1. jako obszaru 768 bajtów, w którym "rzeczywiste" dane sektorów zajmują pierwsze 384 bajty, a druga jego połówka jest niewykorzystana (ale jest uwzględniona w wykazanej nagłówkiem wielkości obrazu liczonej w paragrafach - dla obrazu 180k będzie ta wielkość wynosiła $2D00).
  2. jako trzech porcji danych po 128 bajtów (w tym wypadku wielkość obrazu zapisana w nagłówku będzie o 24 paragrafy mniejsza niż powyżej).

Ten drugi format uchodzi za prawidłowy, w tej sytuacji sektor nr 4 (i każdy dalszy) zapisywany jest w pliku o 384 bajty wcześniej niż wynikałoby to z prostego obliczenia wzoru:

((nr_sektora-1) * wielkość_sektora) + wielkość_nagłówka

Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:

rozmiar_pliku_atr = ((liczba_sektorów - 3) * 256) + 384 + 16

Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następujących wzorów:

    • dla sektorów 1-3:
offset = ((nr_sektora - 1) * 128) + 16
    • dla pozostałych sektorów:
offset = ((nr_sektora - 4) * 256) + 384 + 16

Program może łatwo rozróżnić te dwa typy po nagłówku: jeśli wielkość sektora wynosi $0100, trzeba sprawdzić, czy najmłodszy półbajt liczby paragrafów jest równy 0 (typ 1) czy 8 (typ 2).

Istnieje jeszcze trzeci rodzaj plików ATR: mają one rozmiar pliku i wielkość obrazu jak w przypadku typu 1, lecz dane wewnątrz rozmieszczone są jak w typie 2. Ponieważ nie ma dobrej metody na wykrycie tej sytuacji, mając taki plik najlepiej jest go poprawić odejmując 24 od liczby paragrafów zapisanej w nagłówku.

Sektor 512 bajtów

Obrazy dla rozmiaru sektora równego 512 bajtów (DD 512) mają, podobnie jak te z sektorami 128-bajtowymi, wszystkie sektory tej samej wielkości - nie ma wyróżnionego obszaru odczytu wstępnego (zajmuje on zresztą tylko jeden sektor, pierwszy). Obliczenia rozmiaru pliku ATR dokonujemy wg następującego wzoru:

rozmiar_pliku_atr = (liczba_sektorów * 512) + 16

Dane konkretnego sektora będą się znajdować na pozycji obliczonej wg następującego wzoru:

offset = ((nr_sektora - 1) * 512) + 16

Weryfikacja poprawności

Od wersji 1.10 w APE wprowadzono mechanizm określania poprawności obrazu ATR (może on służyć np. do weryfikowania błędów powstałych przy ściąganiu obrazu z sieci). Mechanizm ten bazuje na algorytmie obliczania 32-bitowego CRC stosowanego np. w PKZIP.

Jeśli obraz jest "opieczętowany" (bit 1 btFlags jest ustawiony) wtedy dla określenia poprawności obrazu należy obliczyć 32-bitową wartość CRC z każdego jego bajtu łącznie z nagłówkiem (zakłada się, że bajty o offsetach 7..14 są wyzerowane). Jeśli obliczony kod jest identyczny z wartością zapisaną w polu dwCRC można założyć, że obraz jest nieuszkodzony.

CRC32 dany jest wielomianem:

x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1

czyli $04C11DB7 w notacji "najpierw MSB".

Zabezpieczenia

W wersji 4.05 SIO2PC wprowadzono możliwość symulowania zabezpieczeń dla sektorów na dysku.

Jeśli bit 4 btFlags jest ustawiony, wtedy począwszy od sektora podanego w wBad występują sektory z zabezpieczeniami.

Sektor zamiast danych zawiera wtedy informacje o użytych zabezpieczeniach:

Offset Typ Nazwa Opis
$00

DWORD

dwSign

Kolejno wartości: $C2, $1C, $3D i $1E (sygnatura sektora z zabezpieczeniami).

$04

BYTE[4]

btaErrStatus

4 bajty zwracane przez komendę STATUS ("S" = $53) SIO (podane w odwrotnej kolejności), po próbie odczytu BŁĘDNEGO sektora.

$08

BYTE

btCmdResp

Status zwracany po otrzymaniu komendy ("A" lub "N").[1]

$09

BYTE

btDataResp

Status zwracany po otrzymaniu bloku danych ("C" lub "A"/"E").[1]

$0A

BYTE

btChksumInfo

Informacja o sumie kontrolnej ("G" - poprawna, lub "B" - błędna).[1]

$0B

BYTE

btResDelay

Czas, po którym ma zostać wysłana odpowiedź na odczyt ("R") bądź zapis ("P"/"W") POPRAWNEGO sektora.[2]

$0C

BYTE

btErrResDelay

Czas, po którym ma zostać wysłana odpowiedź na odczyt ("R") BŁĘDNEGO sektora.[2]

$0D

BYTE[4]

btaStatus

4 bajty zwracane przez komendę STATUS ("S" = $53) SIO (podane w odwrotnej kolejności), po próbie odczytu POPRAWNEGO sektora.

  1. "_" oznacza, że zawartość bajtu nie ma znaczenia, "T" oznacza brak odpowiedzi (TIMEOUT u odbiorcy).
  2. Czas mierzony jest w jednostkach po 55 ms (ang. "jiffy" - odwrotność 18,2 Hz).

Narzędzia

Zobacz też


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.