Autor Wątek: CP/M, karta CF i MCY7880  (Przeczytany 16062 razy)

tapy

  • ****
  • Wiadomości: 295
  • Z80 & CP/M
Odp: CP/M, karta CF i MCY7880
« Odpowiedź #30 dnia: 2024.07.04, 19:58:06 »
Czy przy tak ustawionych parametrach dysku w CPMTOOLS to nie powinieneś mieć DSM ustawione na 4087 zamiast tych 4063?

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: CP/M, karta CF i MCY7880
« Odpowiedź #31 dnia: 2024.07.05, 10:20:31 »
Czy przy tak ustawionych parametrach dysku w CPMTOOLS to nie powinieneś mieć DSM ustawione na 4087 zamiast tych 4063?

Muszę doczytać, bo jak na razie moje ustawienia są skopiowane z serii filmów o których wspominałem wcześniej. Ich autor używał kart SD, gdzie rozmiar sektora karty również wynosi 512 bajtów, więc mogłem skopiować przyjęte przez niego rozwiązania.
Niestety zmiana DSM na 4087 (i odpowiednio DISKA_ALV na DS (4089/8)+1) nie przyniosła rezultatu -

Natomiast zauważyłem jeszcze jedną rzecz wyłączenie logów debugowych lekko zmienia zachowanie programu (i charakter błedu).

Jeśli logi są włączone wywołanie DIR wyprintuje tylko jeden plik (ASM.COM). Jeśli będę próbował wołać DIR odpowiednio długo, w końcu zawiesi się, wpadając w nieskończoną pętlę odczytu struktury DIR z dysku. Dodatkowo jeśli włączę logi w SETDMA, to z jakiegoś powodu nigdy nie dostanę działającego prompta - komputer po rozruchu go wyprintuje, ale nie będzie reagował na klawiaturę.

Natomiast jeśli logi są wyłaczone zachowanie bywa różne. Zwykle pierwsze wywołanie dir zwraca coś takiego, jak na załączonym obrazku. Widzę, że jest to jednak cała zawartość dysku (nie wiem czemu ubzdurałem sobie, że to tylko jego część). Niekiedy potem dostaję ponownego prompta, ale często też program zawiesza się albo wchodzi w WBOOT. Jeśli pojawi się prompt, kolejne kilka wywołań DIR zwróci tylko ASM.COM, aż w końcu system się zawiesi.

W załączniku przesyłam też aktualną wersję BIOS-a. Może komuś powie to coś więcej.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: CP/M, karta CF i MCY7880
« Odpowiedź #32 dnia: 2024.07.05, 13:12:52 »
I jeszcze jedna obserwacja. Udało mi się załadować DDT, ale program chyba też nie zachowuje się do końca poprawnie.
Gdy daję mu komendę "D" drukuje hexdumpa, jednak nie zawsze. Czasem (kilka razy pod rząd) printowana jest pusta linia i dopiero potem znowu zaczyna zrzucać zawartość pamięci. I tak w kółko.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: CP/M, karta CF i MCY7880
« Odpowiedź #33 dnia: 2024.07.08, 09:03:21 »
Ok, udało mi się zrobić kolejny mały krok. Znalazłem przyczynę dla którego komputer zawieszał się po włączeniu debugów w SETDMA. Okazuje się, że popełniłem błąd ustawiając w tej części kodu lokalny stos BIOS-a. Umknął mi fakt, że ten sam lokalny stos jest ustawiany w procedurze WBOOT, która w pewnym momencie woła SETDMA. Tak więc używany stos był w takiej sytuacji nadpisywany.
Poza tym w paru miejscach w operacjach dyskowych oraz terminalowych natknąłem się na przypadki, kiedy pierwotna zawartość używanych rejestrów nie była zrzucana na stos. Poprawiłem to, ale jak na razie nie wpłynęło to w żaden sposób na działanie systemu - nadal jest niestabilny.
Przeprowadzając dodatkowe próby uświadomiłem sobie jednak jeszcze jedną rzecz - pomimo tego, że DIR nie listuje pełnej zawartości katalogu, ciągle jestem w stanie odpalać te "niewidoczne" pliki (np. DDT).  Muszę jeszcze raz to dokładnie przeanalizować, bo trochę wygląda to tak, jakby operacje dyskowe działały poprawnie, ale gdzieś w pewnym momencie działo coś powodującego niestabilną pracę systemu - właśnie jakieś napisanie stosu albo któregoś z rejestrów.

Będę wdzięczny za wszelkie propozycje odnośnie możliwości dalszego debugowania. ;)

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: CP/M, karta CF i MCY7880
« Odpowiedź #34 dnia: 2024.07.10, 08:52:45 »
Ok. Udało mi się znaleźć przyczynę. Okazuje się, że winę za cała sytuację ponosiły aktywne przerwania. Stos BDOS-a jest ja tyle mały, że w pewnych sytuacjach potrafił się przepełnić po przyjściu przerwania i dochodziło do nadpisania pamięci. Na chwilę obecną wyłączyłem przerwania zupełnie na etapie inicjacji CP/M. Były mi potrzebne właściwie tylko do obsługi klawiatury. Wystarczyło przepisać procedury jej obsługi na pooling.