Użycie DSTATS ($0303) na numer sektora to chyba nie najszczęśliwszy pomysł - o ile się nie mylę, powrót z SIO zamazuje wpisaną wartość kodem statusu, nieprawdaż? No a poza tym masz tylko 7 bitów, konieczność robienia ORA przy zapisie albo AND przy odczycie, i niebezpieczeństwo, że gdzieś jakiś handler robi jednak LDA $0303/CMP #$40 ...
Już chyba lepiej jest wykorzystać na ten cel DTIMLO ($306). Całe 8 bitów i święty spokój.
Co do PERCOM - rozszerzenie do 24-bitów było w miarę naturalne, bo najstarszym bajtem numeru sektora jest bajt, gdzie oryginalna dokumentacja opiewa liczbę głowic napędu, odjąć 1. Ale dalej nie ma za bardzo ruchu. Myślałem o tym, żeby zdefiniować nową komendę po prostu, która zwracałaby a) wielkość partycji w sektorach, b) wielkość sektora. Razem 6 bajtów. Jest drobny problem co ma dla takiej partycji (powyżej 8 GB) zwracać PERCOM i czy w ogóle coś.
Z wielkością katalogu to chyba lekko przesadziłeś: odszukanie pliku w takim czymś trwałoby chyba z dobę.
Co do CHS: dokumentacja ATA stanowi, że przez CHS można zaadresować 65536 cylindrów, 255 sektorów na ścieżkę i 16 głowic. 255*16*65536 = 267386880 sektorów po 512 bajtów = 130560 MB.
Sektorów na ścieżkę jest 255 bo numeracja zaczyna się od 1 (inaczej niż w LBA).
Bity nieużywane (5 i 7) w rejestrze SDH muszą mieć określoną wartość ze względu na kompatybilność wsteczną. Dlatego master to $80 a slave to $90. We współczesnych dyskach nie ma to znaczenia, ale w starych dyskach może mieć: któreś bity miały w standardzie ATA-1 wybierać rozmiar sektora (stąd nazwa rejestru: Sector-Device-Head).
Z 64-bitowymi tablicami partycji na razie się wstrzymaj - 32 bity na razie wystarczą, potem się zobaczy.