Gdzie znajde opis obslugiwanych komend kontrolera ?
Odpowiadam solidniej na pytanie pierwsze: kiedyś była jakas dokumentacja, ale zginęła. Ale, ponieważ właśnie dokonałem znaleziska najnowszych źródeł sterownika (v. 1.4, o których byłem przekonany, ze przedpadły), mogę ci powiedzieć co następuje:
Kontroler obsługuje normalnie komendy: read/put/write sector (przy czym write = put), read status, read percom. Przy tym trzeba pamiętać, że wielkość transferu jest z góry określona, to znaczy niezależna od tego, co zapiszemy w DBYT. *NIEMNIEJ* DBYT trzeba ustawiać, bo z powodu że najnowsza wersja sprzętu przeznacza aż 3 kilo na program sterownika, być może zrobię z DBYT jakiś użytek.
Blok PERCOM wygląda tak:
0 - wartość 1 (znaczy, że twardy dysk)
1 - numer wersji zczytany z ROM-u ($14 = 1.4)
2 - starszy bajt liczby sektorów partycji
3 - młodszy bajt liczby sektorów partycji
4 - najstarszy bajt liczby sektorów partycji
5 - flagi, nie pamiętam, zapisuje to FDISK
6 - starszy bajt liczby cylindrów napędu
7 - młodszy bajt liczby cylindrów napędu
8 - $FF
9 - "I"
10 - "D"
11 - "E"
Ponieważ ktoś napisał, że PERCOM SIO2IDE wygląda podobnie, więc przypuszczałbym, że ktoś się tu zainspirował moimi wynalazkami.
Rozkaz read status zwraca 4 bajty, z czego:
bajt 0, bit 3 = 1 - write protection, bit 4 = 1 - podpięte są dwa dyski
bajt 1, rejestr ERROR kontrolera (bieżąca wartość), eor #$FF
bajt 2, bez znaczenia
bajt 3, bez znaczenia
Rozkazy dodatkowe:
$E6 - SLEEP - powinien zaparkować dysk i faktycznie to robi w przypadku większości napędów.
$E7 - RESET - resetuje oba napędy, co powinno je obudzić (jeśli zrobiono przedtem SLEEP)
$EC - INDENTIFY DRIVE - zwraca informacje o napędzie (p. dokumentacja dysków ATA)
$EE - MEDIA CHANGE - odczytuje na nowo bootsektor dysku (mam na myśli master boot sektor, z tablicą partycji i wszystkim) do wewnętrznej pamięci sterownika, oraz resetuje wewnętrzne zmienne.
Jedyny parametr, jakiego te rozkazy wymagają, to numer którejkolwiek partycji w DUNIT, no i $31 w DDEVIC. Jak będzie więcej miejsca, to się może zrobi, żeby DUNIT nie trzeba było ustawiać (bo i po co).
Jak rozpoznac obecnosc kontrolera SIO2IDE, KMK ?
Dodatkowa informacja: numer wersji sterownika jest zapisany pod adresem $d804 w postaci DCB, tj. $14 = 1.4
KMK
? HEX$(6670358)