Jakiś czas temu złożyłem amatorski komputerek ośmiobitowy na procesorze
8080 (a właściie polskim MCY7880) i zabrałem się za uruchamianie na nim CP/M. Całość była złożona na płytce prototypowej, więc teraz zabrałem się za budowę bardziej finalnej wersji, przy okazji przenosząc się na
8085. Udało mi się uruchomić większość peryferiów i przenieść kod z wersji prototypowej. Tak naprawdę wymagane były tylko niewielkie zmiany
- np. niektóre peryferia znajdują się teraz pod innymi adresami.
W przypadku karty CF trafiłem jednak na ścianę. Z jakiegoś powodu nie jestem w stanie odczytać ani informacji o karcie (przychodzą bzdury, a powinna się wyświetlać jej nazwa) ani sektora rozruchowego (kod nie znajduje poprawnych wartości w MBR). Najwyraźniej jednak komunikacja pomiędzy kartą i systemem działa, bo:
- Jestem w stanie zainicjować kartę, a w trakcie operacji zmienia się zawartość odczytywanego rejestru STATUS.
- Przy próbie odczytu danych z karty zapala się na chwilę dioda na linii DASP.
Rzucił mi się w oczy jeszcze jeden dziwny szczegół. Dobrałem kwarc tak samo, aby zegar systemowy był dokładnie taki sam w wersji na 8080 i 8085 (2,048 MHz). Z jakiegoś powodu pojawiło się inne zachowanie karty, jeśli chodzi o timeout podczas jej inicjacji. Timeout to dwie pętle na rejestrach B i C. W wersji na 8080 rejestr C miał początkową wartość 32, a B był przy każdym przebiegu inicjowany wartością 255. W przypadku konstrukcji na 8085 jednak to nie wystarczało i musiałem podbić rejestr C do 64, żeby inicjacja miała szanse przejść.
Patrzę na schemat i nie mogę znaleźć żadnej różnicy w połączeniach. Kod jak mówiłem został przeniesiony ze starego projektu, zmienił się tylko adres karty.
Ktoś ma pomysł gdzie szukać przyczyny?