J.F
Guest
Fri Jul 05, 2024 12:13 pm
On Wed, 3 Jul 2024 08:10:31 +0200, Atlantis wrote:
Quote:
Dodałem do programu printy debugowe, które informują o wejściu w
poszczególne procedury BIOS-a oraz zrzucają zawartość poszczególnych
parametrów odpowiedzialnych za operacje dyskowe, które są w nich ustawianie.
Z szybkiej analizy tych logów wynika, że przy starcie systemu:
1. Cyklicznie są wołane procedury SETDMA, SELDSK, SETTRK, SECTRN, SETSEC
i READ.
To chyba normalne - potrzebne do czytania danych.
Quote:
2. Parametr TRACK ma na początku wartość 0x0000, a potem jest
sukcesywnie podbijany o jeden w zakresie od 0x0020 do 0x003F.
Chyba też normalne - czyta katalog, a potem plik.
Quote:
3. Parametr SECTOR przyjmuje wartości od 0 do 3, przechodząc jeden cykl
na jedno podbicie parametru TRACK.
To też w miare normalne - czytasz kolejne sektory.
Tylko ... nie za mało? 4 sektory na ścieżce? Sektory po 128 czy 512B
Moze implementacji na karcie CF tak najprosciej.
Quote:
4. Parametr DMA przyjmuje albo adres bufora DISK_BUFFER (0x0080) albo
DIRBUF.
5. Odbywają się sukcesywne odczyty z karty CF, a wartość LBA jest
liczona poprawnie (adres początku partycji + parametr TRACK).
Printy debugowe mogą być włączane i wyłączane dyrektywą budowania
warunkowego. I tutaj jest jedna rzecz, która mnie zastanawia - kod
zachowuje się inaczej po dodaniu tych printów.
Jeśli je włączę, system wchodzi w procedurę BOOT, zaczyna czytać kartę i
zrzuca powyżej wymienione logi. Potem wyświetla prompt i zawiesza się -
klawiatura przestaje reagować.
Jeśli logi WYŁĄCZĘ system się uruchamia, czyta kartę (nie mam oczywiście
logów, ale widzę świecenie diody aktywności) po czym wyświetla prompt i
pozwala mi wypisywać polecenia.
Nie pamietam ... ale gdzie masz ustawiony wskaźnik stosu?
Byc może z logiem zużywa parę bajtów więcej i zajeżdza cos poniżej ?
Juz nie pamietam, ale czy shell (CMD ?) nie ładował się do góry
pamięci?
Ewentualnie - czytane dane zajeżdzają stos.
Quote:
Zwykle wtedy dzieje się jedna z dwóch
rzeczy:
- System zawiesza się po wykonaniu komendy DIR.
- System zwraca niepełna zawartość dysku po wpisaniu komendy DIR, ale
pozwala na wpisywanie kolejnych komend.
To już chyba moze być objaw gubienia bajtów z sektorów.
J.