Autor Wątek: 8085 i karta CF  (Przeczytany 6806 razy)

tapy

  • ****
  • Wiadomości: 295
  • Z80 & CP/M
Odp: 8085 i karta CF
« Odpowiedź #15 dnia: 2025.01.18, 12:56:57 »
Ciekawy jest ten wątek z zakłóceniami, chyba powinienem to sprawdzić na swoich komputerach z 8085 (8085 MiniMax i modułem RC2014 z 8085), bo podobnie niepokojące objawy mogą się pojawić na wczoraj zmontowanym module DMA 82C37, który również zatrzaskuje adres za pomocą 74HCT573 (w module DMA może być trudniej to zaobserwować).

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #16 dnia: 2025.01.18, 17:10:32 »
Ciekawy jest ten wątek z zakłóceniami, chyba powinienem to sprawdzić na swoich komputerach z 8085 (8085 MiniMax i modułem RC2014 z 8085), bo podobnie niepokojące objawy mogą się pojawić na wczoraj zmontowanym module DMA 82C37, który również zatrzaskuje adres za pomocą 74HCT573 (w module DMA może być trudniej to zaobserwować).

Przyjrzałem się jeszcze raz dokładniej pracy układu. O ile skorelowane czasowo z początkiem impulsu ALE szpilki na liniach A0..A7 oraz CS zniknęły to nadal widzę pewną niezamierzoną aktywność na liniach CS (w tym na linii CS karty CF). Wygląda na to, że proste podpięcie linii IO_M do wejścia G1 układu 74HCT138 nie wystarczy, żeby skutecznie zablokować dekoder poza sytuacjami, kiedy IO faktycznie jest używane.  Żeby całkowicie pozbyć się niechcianej aktywności na tych liniach sygnał blokujący pewni też trzeba by opóźniać przez zatrzaśnięcie w przerzutniku, np. sygnałem ALE. Przy czym wydaje mi się to zbędne, bo fałszywa aktywność na tych liniach i tak nie pokrywa się z aktywnymi sygnałami WR/RD.
Do tego w komputerze na 8080 dekodery adresów IO oraz pamięci pracowały dosłownie cały czas i nie były niczym blokowane (bo 8080 nie posiada linii IO_M), tak więc ostateczna decyzja o aktywacji konkretnego układu zależała od styanu na jednej z linii IORD, IOWR, MEMRD i MEMWR. Karta CF jakoś nie miała problemu z pracą w takich warunkach. Nie wydaje mi się więc żeby w 8085 znacznie mniej intensywna "fałszywa" aktywność na liniach linii CS miała nagle sabotować jej pracę.
Ten problem jest dla mnie naprawdę sporą zagadką. Na chwile obecną skończyły mi się wszystkie pomysły jakie miałem...

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #17 dnia: 2025.01.19, 10:52:26 »
W ramach eksperymentu wykonałem jeszcze próbę z filtrowaniem zasilania. Piny VCC karty CF, jej bufora (74HCT245) oraz rejestru przechowującego młodszy bajt adresu (74HCT574) próbowałem zasilać najpierw przez niewielki rezystor (2,2 oma) a potem przez dławik (10 uH). Niestety niczego to nie zmieniło.
Mogę jeszcze dodać, że najprawdopodobniej zachowanie karty jest powtarzalne, to znaczy błędne dane przychodzące podczas próby odczytu nie są losowe. W pierwszym etapie bootowania CP/M komputer odczytuje strukturę info karty i wyświetla jej nazwę. Na komputerze z 8080 ten kod działał. Tutaj jednak w dostaję dwa bajty: 0x08 i 0xDF, które powtarzają się przy kolejnych resetach.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #18 dnia: 2025.01.20, 20:55:41 »
Sprawdziłem za pomocą oscyloskopu sygnały na liniach danych, przed i po buforem.
Znaczenie kolorów jest następujące:
Kanał 1 (żółty) - sygnał CS karty CF (podłączony również do wejścia G bufora 245).
Kanał 2 (fioletowy) - systemowy sygnał RD (nieopóźniony) - podłączony także do wejścia DIR bufora 245).
Kanał 3 (niebieski) - linia danych od strony magistrali systemowej.
Kanał 4 (zielony - linia danych od strony karty CF.

Dodatkowo jeszcze zrzut opóźnionego sygnału RD (na niebiesko)
Pomiary miały miejsce podczas cyklicznego odczytu z rejestru STATUS karty w TinyBasicu. Cyklicznie czytana była wartość 80 (dziesiętnie) co zgadzałoby się ze stanami linii danych na zboczu narastającym RD.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #19 dnia: 2025.01.20, 21:29:33 »
A tutaj oscylogramy przechwycone podczas operacji zapisu do rejestru karty.
Zapisywana była wartość 85, więc linie powinny być naprzemiennie w stanie wysokim i niskim. Tu chyba też wszystko jest ok?
Ktoś ma jeszcze jakiś pomysł co mógłbym sprawdzić?

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #20 dnia: 2025.01.21, 08:09:49 »
Jeszcze jedna rzecz mnie niepokoi - zaszumiony w stanie wysokim sygnał !RESET.
Myślicie, że taki jego przebieg może odpowiadać za niestabilną pracę karty? Niby wartość wysoka i nie powinna być interpretowana jako zejście do zera, ale jednak nie wygląda to ładnie. Chyba dodam pull-up.
To samo generalnie z systemowym sygnałem RD, który też trochę fluktuuje, chociaż również nie schodzi do zera (gdy nie powinien) i nie widać wpływu tych zmian na pracę bufora.

Ewentualnie:
Czy komuś przychodzi do głowy jakiś programowy powód dla którego kod do obsługi karty miałby przestać działać po przesiadce z 8080 na 8085 i zmianie adresu karty w przestrzeni I/O?

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #21 dnia: 2025.01.22, 20:17:34 »
Ok, kolejny update. Zrobiłem eksperyment i wyprintowałem zawartość bufora po odczytaniu sektora MBR.
Pierwsza rzecz rzucająca się w oczy to powtarzalność zawartości. Wartości odczytywane nie są losowe i powtarzają się w każdym kolejnym odczycie.
Wygląda to następująco:

FA 00 8E BC B0 00 8E 8E FB 00 BF 06 00 F3 EA 06 00 BE 38 75 83 10 FE 07 F3 16 02 01 00 B2 8A 01 4C CD EA 7C 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 56 00 00 01 83 02 00 00 00 00 00 01 83 02 00 00 00 00 00 01 83 02 00 00 00 00 00 01 83 02 00 00 00 00 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Rzeczywista zawartość sektora MBR karty (odczytana pod Linuksem za pomocą dd i hexdump) wygląda następująco:

FA B8 00 10 8E D0 BC 00 B0 B8 00 00 8E D8 8E C0 FB BE 00 7C BF 00 06 B9 00 02 F3 A4 EA 21 06 00 00 BE BE 07 38 04 75 0B 83 C6 10 81 FE FE 07 75 F3 EB 16 B4 02 B0 01 BB 00 7C B2 80 8A 74 01 8B 4C 02 CD 13 EA 00 7C 00 00 EB FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 3E 56 D4 00 00 00 04 01 04 83 23 02 24 00 08 00 00 00 40 00 00 00 24 01 24 83 43 02 44 00 48 00 00 00 40 00 00 00 44 01 44 83 63 02 64 00 88 00 00 00 40 00 00 00 64 01 64 83 83 02 84 00 C8 00 00 00 40 00 00 55 AA
Jak widać pierwszy bajt się zgadza. Potem wartości zaczynają się rozjeżdżać, aż w końcu mamy cała serię fałszywych wartości 0xFF. Największy problem generuje to na końcu, bo sprawdza czy dwa ostatnie bajty mają właściwe wartości (0x55, 0xAA).

Innymi słowy o ile odczyty sektora STATUS wyglądają ok (zarówno w TinyBasicu jak i na oscyloskopie) to przy czytaniu całego bloku danych pojawia się problem.
Ktoś ma pomysł co może być przyczyną takiego zachowania?

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #22 dnia: 2025.01.23, 08:19:31 »
Ok, kolejny update. Pomiędzy tymi danymi występuje istotna zależność. Wygląda na to, że co drugi bajt z sektora MBR jest pomijany przy odczycie. Gdy zabraknie danych, do bufora trafiają niewłaściwe wartości.
Zaczynam zastanawiać się czy faktycznie stary trop z fałszywymi aktywacjami na linii CF_CS nie był poprawny. Oryginalnie miałem tam niskie szpilki, związane ze stanami nieustalonymi na początku cyklu, gdy 74HCT573 stawał się "przezroczysty" dla sygnałów na liniach AD0..AD7, które przez chwilę miały stany nieustalone. Zastosowanie 74HCT574 (zatrzaskiwanego zanegowanym sygnałem ALE) nie rozwiązało tego problemu do końca, bo jeszcze jednej rzeczy nie wziąłem pod uwagę - sygnał IO/M (który w tej chwili jest używany do odblokowywania dekoderów adresów) zmienia swój stan na samym początku cyklu pracy CPU, czyli jeszcze przed zatrzaśnięciem młodszego bajtu adresu w 574. Tak więc przez krótką chwilę dochodzi do sytuacji, kiedy w rejestrze mamy jeszcze starą wartość, ale dekoder adresów I/O zdąży zostać odblokowany wysokim stanem IO/M.
Byłem przekonany, że taka sytuacja nie powinna wpływać na działanie karty, bo te fałszywe niskie stany na linii CS nie są skorelowane z aktywnością RW/RD. Na działanie innych peryferiów najwyraźniej nie ma to wpływu. Jednak po obejrzeniu zawartości bufora znów zaczynam mieć wątpliwości. Może jednak jakiś wskaźnik adresu wewnątrz karty jest inkrementowany fałszywym sygnałem na linii CS?
Chyba z ciekawości spróbuję zatrzaskiwać IO/M w 7474 za pomocą zanegowanego sygnału ALE i dopiero tak wygenerowanym sygnałem odblokowywać dekodery adresów. Wtedy powinienem mieć pewność, że aktywność na liniach CS pojawi się dopiero wtedy, gdy w 574 będzie znajdowała się poprawna i stabilna połówka adresu.
To, albo faktycznie słabo prowadzona masa miesza w działaniu karty. Ale żeby wyniki były aż tak powtarzalne?

tapy

  • ****
  • Wiadomości: 295
  • Z80 & CP/M
Odp: 8085 i karta CF
« Odpowiedź #23 dnia: 2025.01.23, 10:35:26 »
Oscylogram w cyfrówce nigdy nie jest tak ładny, jak to jest przedstawiane na wykresach kart katalogowych. Należy na nie patrzeć tylko jako poziomy napięć określających 1 lub 0 dla danej technologii wykonania lub niepokojące stany nieustalone pomiędzy tymi wartościami nad którymi należy się pochylić.
Aktywacja sygnału /CS na karcie CF nie zmienia stanu wewnętrznych rejestrów jeśli nie jest to powiązane z aktywnym sygnałem /RD lub /WR. Przedstawiony zrzut odczytanych danych to kompletny chaos losowych wartości w stosunku do fizycznej zawartości karty, a jego "powtarzalność" zapewne jest wynikiem tych samych warunków. Uważam, że należy doprowadzić do takiego stanu, by te przypadkowe sygnały /CS nie pojawiały się, bo jest małe prawdopodobieństwo pojawienia się tak częstego, jednoczesnego, określonego adresu i sygnału IO/M aktywującego dekoder, nawet na mocno zaszumionej szynie.
Generalnie problemy z kartami CF to jest przekłamywanie poszczególnych bitów, gdy problem dotyczy bajtów to grubsza sprawa, bo okienko odczytu sygnału /RD CPU nie jest zgodny z tym co wystawia na szynę karta CF i tu bym skupił swoje zainteresowanie w celu rozwiązania problemu.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #24 dnia: 2025.01.23, 14:05:30 »
Przedstawiony zrzut odczytanych danych to kompletny chaos losowych wartości w stosunku do fizycznej zawartości karty, a jego "powtarzalność" zapewne jest wynikiem tych samych warunków. Uważam, że należy doprowadzić do takiego stanu, by te przypadkowe sygnały /CS nie pojawiały się, bo jest małe prawdopodobieństwo pojawienia się tak częstego, jednoczesnego, określonego adresu i sygnału IO/M aktywującego dekoder, nawet na mocno zaszumionej szynie.

Też tak na początku myślałem. Jeśli jednak przyjrzysz się dokładniej odczytanym wartościom, to nie są one ani trochę chaotyczne - występuje tutaj wyraźny porządek. Czytany jest co drugi bajt z sektora MBR, a gdy danych zabraknie, przychodzą naprzemiennie sekwencje 0x00 oraz 0xFF.
Też początkowo wydawało mi się to mało prawdopodobne, ale fałszywe niskie stany na linii CS wydają mi się w tej chwili najbardziej prawdopodobnym podejrzanym. W teorii nie powinny mieć one wpływu bez sygnału WR/RD, ale może dzieje się coś jeszcze? Może np. karta nie zdąży zareagować na zmianę sygnału RD, kiedy CS zostaje na chwilę podniesiona do stanu wysokiego i zaraz potem na jakiś czas powraca do niskiego.
Spróbuję wykorzystać 7474 do zatrzaskiwania IO/M zanegowanym sygnałem ALE i dopiero tak "odfiltrowanym" sygnałem będę odblokowywał dekodery adresów. To powinno zsynchronizować aktywność dekoderów ze zmianami zawartości 74574, tym samym usuwając fałszywe niskie stany z linii CS.
W pewnym sensie tłumaczyłoby to też brak tego objawu na 8080 - tam nie ma multiplesowania części magistrali adresowej, więc cały adres jest aktualizowany jendocześnie. Nawet jeśli dekoder będzie odblokowany cały czas, to zupełnie inaczej będą wyglądały zależności czasowe np. pomiędzy podniesieniem RD/WR do stanu wysokiego i aktualizacją adresu na magistrali.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #25 dnia: 2025.01.23, 19:36:50 »
Ok. Mając chwilę czasu wprowadziłem wyżej wspomnianą modyfikację do układu. Teraz dekodery adresów pamięci oraz I/O nie są blokowane bezpośrednio sygnałem IO/M, ale sygnałem zatrzaskiwanym w przerzutniku 7474. Za zatrzaskiwanie odpowiada zanegowany sygnał ALE. W efekcie dekodery są aktywowane równocześnie z aktualizacją młodszego bajtu adresu w 74574 (pomijając różnicę wynikającą z czasów propagacji).
Efekty są następujące:
  • Zniknęła niepożądana aktywność na liniach CS. Widać to chociażby po tym, że nieużywane obecne linie w ogóle nie przechodzą w stan niski. Aktywności nie widać także na linii CS karty CF, jeśli w danym momencie z niej nie korzystam.
  • Na liniach CS widoczne są sporadyczne zakłócenia w postaci szpilek o amplitudzie około 200mV w okolicy stanu wysokiego. Zdecydowanie za mało, żeby spowodować zmianę stanu. Zapewne wnikają ze stanów nieustalonych.
  • Komputer nadal działa.
  • Karta CF nadal NIE działa. Kompletnie nic nie zmieniło się w jej zachowaniu, nadal dokładnie taka sama, przekłamana zawartość MMR, złożona początkowo z co drugiego bajtu.

Wychodzi więc na to, że te fałszywe niskie stany linii CS nie były powodem problemów z kartą. Trzeba szukać dalej. Niemniej 7474 pomiędzy IO/M i dekoderami chyba i tak uwzględnię w kolejnej wersji płytki - mniej niepotrzebnej aktywności na liniach CS ułatwia debugowanie i zmneijsza zakłócenia.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #26 dnia: 2025.01.24, 01:13:10 »
Ok, udało mi się trochę popchnąć projekt do przodu. Znalazłem przyczynę pomijania co drugiego bajtu podczas odczytu MBR z karty.
Okazało się, że karta nie była zainicjowana do pracy w trybie 8bit i co drugi bajt przepadał na połowie magistrali danych, która nie była do niczego podłączona. Dlaczego jednak karta nie była poprawnie skonfigurowana, chociaż odpowiedni kod był obecny (i przetestowany na komputerze z 8080)? Okazuje się, że zbyt szybko przechodziłem do wywołania procedury inicjującej kartę CF. W przypadku starszej konstrukcji wcześniej było wykonywanych kilka dodatkowych operacji (m.in. związanych z inicjacją układu graficznego i kontrolera klawiatury). Tutaj przechodziłem do inicjowania karty zaraz po skonfigurowaniu podstawowych peryferiów (8251, 8253, 8259) co zajmuje niewiele czasu. Karta najwyraźniej nie była jeszcze gotowa na przyjmowanie poleceń. Dodanie kilku pętli opóźniających sprawiło, że teraz karta inicjuje się poprawnie i bajty nie są gubione.
Niestety, to nie koniec problemów. Ciągle niektóre bajty przychodzą przekłamane. Jakiś pomysł co może odpowiadać za taki stan rzeczy?

W taj chwili otrzymuję następującą reprezentację MBR:

FA B8 00 00 8E D0 BC 00 B0 B8 00 00 8E D8 8E 00 FB BE 00 00 BF 00 06 00 00 02 F3 00 EA 21 06 00 00 BE BE 00 38 04 75 00 83 C6 10 00 FE FE 07 00 F3 EB 16 00 02 B0 01 00 00 7C B2 00 8A 74 01 00 4C 02 CD 00 EA 00 7C 00 00 EB FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 3E 56 00 00 00 00 00 01 04 83 00 02 24 00 00 00 00 00 00 00 00 00 00 01 24 83 00 02 44 00 00 00 00 00 00 00 00 00 00 01 44 83 00 02 64 00 00 00 00 00 00 00 00 00 00 01 64 83 00 02 84 00 00 00 00 00 00 00 00 55 00

Jest lepiej, ale nadal nie jest idealnie.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #27 dnia: 2025.01.24, 17:17:27 »
Kolejny update. Rzuciłem okiem na obecnie odczytywany ciąg bajtów.
Kolejna porcja obserwacji:
  • Błędy odczytu jest powtarzalne.
  • Błąd polega na zastępowaniu niektórych wartości przez 0x00.
  • Obrywa się w ten sposób co czwartemu bajtowi. Wygląda na to, że w sposób spójny. Miejscami problemu nie widać, ale to tylko dlatego, że 0x00 jest w tym miejscu wartością oczekiwaną.

EDIT:

Ok. Wygląda na to, że udało się znaleźć obejście problemu (jeśli nie rozwiązanie). Wygląda na to, że problem z przekłamanymi wartościami co czwartego bajtu dotyczy tylko jednego modelu karty - przemysłowej TRS. Spróbowałem ponownie przetestować kolekcję posiadanych kart i wygląda na to, że inne działają. To znaczy przechodzi weryfikacja dwóch ostatnich bajtów i odczytywana jest tablica partycji. Spróbuję zbudować CP/M dla tego systemu i zobaczę czy się zbootuje. Procedura obejmowała sprawdzanie CRC, więc powinienem wychwycić ewentualne błędy transmisji.
« Ostatnia zmiana: 2025.01.24, 17:52:22 wysłana przez Atlantis »

damik

  • Fresh rosin sniffer ;)
  • Moderator
  • *****
  • Wiadomości: 2674
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Odp: 8085 i karta CF
« Odpowiedź #28 dnia: 2025.01.24, 22:23:06 »
Testowałeś to tylko na jednej karcie CF czy na różnych rodzajach innych modeli kart?
Z doświadczenia wiem że niektóre karty CF są bardziej oporne niż inne i to z różnych powodów.

Czyli wygląda to tak jak sugerowałem wcześniej...  ;D
Zwykle najmniej problemów sprawiają karty CF od SanDisk, ale to też nie jest reguła.
« Ostatnia zmiana: 2025.01.24, 22:33:39 wysłana przez damik »
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

Atlantis

  • ****
  • Wiadomości: 319
  • Miejsce pobytu:
    Kraków
Odp: 8085 i karta CF
« Odpowiedź #29 dnia: 2025.01.25, 08:27:49 »
Czyli wygląda to tak jak sugerowałem wcześniej...  ;D
Zwykle najmniej problemów sprawiają karty CF od SanDisk, ale to też nie jest reguła.

Tak, i wtedy też to zrobiłem. Tylko wtedy mieliśmy do czynienia z jeszcze innym problemem - procedura inicjacji karty była wołana za wcześnie po resecie, przez co karta nie była w stanie poprawnie na nią zareagować i nadal działała w trybie 16bit. W efekcie traciliśmy co drugi bajt podczas czytania danych. Z oczywistych względów zachowanie powtarzało się na każdej testowanej karcie.
Po naprawieniu tamtego błędu pojawił się kolejny, tym razem związany z nadpisywanie co czwartego bajtu przez zero. Tutaj okazało się, że zachowanie ogranicza się tylko do jednej karty.

W każdym razie, udało mi się zbootować CP/M. Procedura obejmuje sprawdzanie CRC. Wygląda więc na to, że znacznie większe transfery również odbywają się bez błędów.
Płytka po wszystkich przeróbkach posiada sporo przeciętych ścieżek i nowych połączeń wykonanych kynarem, wiec pewnie wytrawię i złożę nową wersję. Mój porty BIOS-a CP/M też wymaga jeszcze paru poprawek, ale teraz przynajmniej nie jestem blokowany przez niedziałająca kartę CF. :)