Ktoś z was ma może jakieś doświadczenia z portowaniem CP/M-a na własne urządzenia oraz obsługą kart CF na starych procesorach ośmiobitowych?
Próbuję obecnie uruchomić ten system na moim komputerze z polskim mikroprocesorem MCY7880 (
https://hackaday.io/project/161333-polon-7880).
Udało mi się osiągnąć kilka niewielkich sukcesów, ale jest też sporo problemów do pokonania.
W wielkim skrócie:
1. Budując hardware nie wziąłem pod uwagę buforów pomiędzy kartą CF i magistralą systemową. Niektóre wpisy w Internecie zwracają uwagę na fakt, że może to być przyczyną problemów w przypadku systemów na starych CPU. I chyba faktycznie trafiłem na taki problem, bo z podręcznej kolekcji kart tylko jedna działa (względnie) stabilnie. Pozostałe co prawda przechodzą inicjalizację, ale nie chcą się czytać - odmawiają współpracy albo na etapie próby odczytania informacji o karcie, albo podczas odczytu MBR. Kilka kart niby czytało poprawnie MBR, ale już próba załadowania jakiegoś programy przez bootloader (kopiowanie do pamięci 16kB spod adresu pierwszej partycji) kończyła się przekłamaniami. Najczęściej gubione były bajty o wartości 0xFF. Tylko jedna karta działa na tyle stabilnie, że byłem w stanie załadować i uruchomić CP/M, który właśnie próbuję przeportować.
2. Udało mi się przygotować roboczą wersję BIOS-a. Dopóki procedury odpowiedzialne za operacje dyskowe były zastąpione prostymi stubami (za sprawa których system myślał, że ma do czynienia z pustym, niesformatowanym dyskiem) wszystko działało względnie stabilnie. Mogłem wpisywać polecenia do prompta, ale oczywiście niewiele byłem w stanie zdziałać w systemie pozbawionym dysków.
3. Problemy zaczęły się w momencie, gdy zacząłem dodawać procedury do obsługi dysku. Na chwilę obecną CP/M widziw zawartość partycji systemowej (przygotowanej pod linuksem za pomocą cpmtools) ale nic nie działa stabilnie. Czasem komenda "dir" wylistuje zawartość dysku, czasem pokaże tylko jeden plik, czasem kilka, a czasem komputer się podczas tej operacji zawiesi. Możliwe, że objawił się wspomniany wcześniej problem z niestabilnym odczytem karty, ale równie dobrze może to być coś innego, np. nadpisywanie pamięci przez stos.
4. Dodałem dodatkowe printy debugowe. Teraz widzę na przykład, że system po uruchomieniu przechodzi przez poszczególne sektory (zapewne sprawdzając segment DIR partycji) ale z jakiegoś powodu po dodaniu tych printów system zaczął się zawieszać (nie reaguje na klawiaturę) zaraz po wyświetleniu prompta...
Ktoś mógłby polecić jakieś podejście do debugowania takiego systemu? Czy faktycznie bufory na liniach karty CF mogą pomóc?