Autor Wątek: FDD35 rev.3  (Przeczytany 17210 razy)

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
FDD35 rev.3
« dnia: 2023.04.11, 18:10:45 »
Od pierwszego podejścia do klona stacji Timex FDD3/3000 minęło już ponad 7 lat. Jak ten czas leci :o
Żeby nie przeciągać więc tamtego wątku założę nowy, bo jest "trochę" zmian w projekcie.

Główną przyczyną nowego podejścia jest problem, z którym walczę od kilku lat i straciłem już nadzieję na jego rozwiązanie.
Kolega hsimpson zadał mi podłączenie trzech napędów jednocześnie. Niby prosta sprawa, bo stacja może obsłużyć do czterech napędów.
Okazuje się, że proste to jest jedynie w teorii.
Do podłączenia dostałem napęd 3" od CPC, napęd 3,5" od PC oraz HxC. Dowolne 2 z tych napędów podłączone na jednej taśmie pracują bez problemu.
Podłączenie wszystkich trzech jednocześnie powoduje, że nie działa komunikacja z żadnym.
Najprawdopodobniej przyczyną są wbudowane terminatory wewnątrz napędów, a nie chcę w nich grzebać.
Każdy z napędów inaczej obciąża linie i póki są 2, to jeszcze jakoś to działa (HxC i stary napęd z CPC pracują niezbyt stabilnie, ale pracują).
Przy trzech napędach tolerancja poziomów na liniach się kończy.

Dlatego w końcu przeprojektowałem FDD35 tak, aby miała niezależne 2 kanały dla napędów (po 2 napędy na kanał).
Na każdym z kanałów można użyć innej taśmy - z przeplotem lub bez.
A że już i tak rysuję na nowo, to zrobiłem "trochę" modyfikacji:
- z płytki wyleciał GAL, dzielnik LS393, rejestr pomocniczy FDC LS273 i trochę logiki - teraz cała logika jest w jednym CPLD Xillinx XC9572-10PC84,
- zamiast ROM jest 512 KB FlashROM, zamiast dwóch kostek RAM jest jedna, ale też 512 KB,
- obszar pamięci dla procesora został podzielony na 4 segmenty po 16 KB każdy, dla każdego segmentu jest w CPLD zdefiniowany rejestr banku, w którym można zapisać adres jednego z 32 dostępnych banków RAM lub 32 banków ROM,
- banki ROM są z cieniem w RAM, czyli można odczytać zawartość ROM i zapisać RAM "pod spodem" w tym samym numerze banku, a potem bezkolizyjnie przełączyć bank z ROM na RAM,
- dzielnik zegara jest konfigurowalny - można podwoić częstotliwość dla procesora (Turbo 8 MHz) i/lub układu WD1772 (obsługa dysków HD, wymaga napisania oprogramowania),
- dodana została obsługa przerwań z kontrolera UART (ze względu na ograniczoną pojemność CPLD nie udało mi się rozdzielić kanałów i przerwania albo są wszystkie albo wcale, również wymagane napisanie oprogramowania do obsługi),
- pod adresem rejestru pomocniczego FDC (#E0) można odczytać status zgłoszonego przerwania UART (po 4 bity na każdy kanał, wszystkie bity wyzerowane oznaczają przerwanie z kontrolera FDC),
- dodane dwa nowe porty do zapisu rejestrów konfiguracji (#D0) i banków (#F0), w związku z czym dekodowanie pozostałych portów ma dodaną linię A4 (w oryginale dekodowane są tylko A5..A7),
- rejestr konfiguracji można odczytać - zawiera informacje o domyślnych (zworki) oraz zachowanych ustawieniach Turbo, HD i obsługi przerwań UART,
- podwójny układ resetowania - jeden reset jest na stałe od załączenia zasilania i kasuje rejestry konfiguracyjne, drugi reset to ten z przycisku działa jak w oryginalnej stacji, ale nie kasuje rejestru konfiguracji (Turbo, HD i obsługa przerwań UART mogą być włączane/wyłączane programowo, na zworkach jest ustawienie domyślne po włączeniu zasilania),
- żaden z układów reset nie zatrzymuje dzielnika zegara, drobiazg, ale to właśnie zostało popsute w SAM Coupe,
- wyprowadzone złącze Expansion Bus, z drobnymi odstępstwami - zegar jest tylko wyjściem (jest bufor i zworka, którą można sygnał odłączyć) oraz można wybrać zworką, czy IROM odłącza tylko ROM, czy całą pamięć w stacji,
- gniazda portów interfejsu oraz RS-232 można zamontować bezpośrednio na PCB albo wyprowadzić taśmą IDC na zewnątrz płytki,
- każdy sygnał wyboru napędu A, B, C, D może być dowolnie przezworkowany do dowolnego napędu w dowolnym z dwóch kanałów,
- wyprowadzone sygnały dla LED Turbo, HD oraz InUse (świeci, gdy stacja rzeczywiście coś czyta z napędu, a nie tylko został wybrany).

Koncepcyjnie projekt jest zamknięty (nie ma więcej miejsca w CPLD). Projekt CPLD jest gotowy, schemat przerysowany. Teraz czas na płytkę.
Prawdopodobnie PCB będzie nieco dłuższe niż poprzednie (nie będzie już pasować do oryginalnej obudowy FDD3), a to dlatego, że napęd 3,5" jest dłuższy od poprzedniej wersji płytki i źle wyglądały gniazda RS-232 wciśnięte pod spodem (napędy nadal będą montowane nad płytką).
Co wyjdzie w praniu, to się jeszcze okaże.
« Ostatnia zmiana: 2023.04.11, 18:35:44 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

Maryjan

  • *****
  • Wiadomości: 6666
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: FDD35 rev.3
« Odpowiedź #1 dnia: 2023.04.11, 18:19:49 »
Stale podnosisz poprzeczkę :)
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

skoti

  • *****
  • Wiadomości: 750
  • Miejsce pobytu:
    Polska
Odp: FDD35 rev.3
« Odpowiedź #2 dnia: 2023.04.11, 18:32:43 »
 :o WOW. To jest News na który warto było czekać. Już czuję zapach topnika unoszący się nad płytką.  ;D

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: FDD35 rev.3
« Odpowiedź #3 dnia: 2023.04.11, 19:04:29 »
Fiu, fiu, fajnie :)
Tylko wybór CPLD mnie zastanawia, bo chyba będzie go dość ciężko kupić? Nie widzę nigdzie u "normalnych" sprzedawców.
Ale rozumiem jego atuty, 5V i obudowa do podstawki.

KWF

  • Moderator
  • *****
  • Wiadomości: 6838
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • PCBway
Odp: FDD35 rev.3
« Odpowiedź #4 dnia: 2023.04.11, 19:12:47 »
Super, ale XC9572 jest archaiczny i to bardzo. Wersje XL można upolować na Ali za rozsądne pieniądze. Może Altera Max7000 (7064S na 5 V i PLCC), są dostępne jej odpowiedniki z Atmela.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: FDD35 rev.3
« Odpowiedź #5 dnia: 2023.04.11, 19:13:29 »
Zamówiłem 10 szt. CPLD ze starego źródła, jeszcze z przed ery zarazy. Zobaczymy co przyjdzie.
O ile przyjadą niemalowane i sprawne, to cena przystępna ok. 40 zł.

Wersja XL nie występuje w obudowie większej niż 44 piny, która nadaje się do montażu THT (w podstawce), a mnie się zwyczajnie nie chce szarpać z SMT.
Poza tym seria XL owszem jest 5V-tolerant, ale wymaga dodatkowych zabiegów (zasilanie 3,3V oraz zewnętrzne pull-up'y).
I ostatni argument - Xillinx'a znam najlepiej.
« Ostatnia zmiana: 2023.04.11, 19:25:27 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: FDD35 rev.3
« Odpowiedź #6 dnia: 2023.04.11, 20:12:30 »
Poszukałem pobieżnie i chyba jedyne źródło XC9572-10PC84 to Aliexpress, a chętnych może być więcej, niż 10.
Ja też bym chętniej zobaczył Alterę 7000, wybór PLCC jest tu większy, plus jeszcze wspomniane odpowiedniki ATF15xx (rozumiem, że Microchip to teraz Atmel, a raczej dokładnie odwrotnie :D).
Albo chociaż dwa mniejsze CPLD (np. 2x9536) w PLCC44 (ile pinów jest używanych przez Twój projekt?).

Ale rozumiem Twój opór przed zmianami, skoro już zamówiłeś te układy.

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: FDD35 rev.3
« Odpowiedź #7 dnia: 2023.04.11, 20:27:02 »
Miałem jeszcze kilka sztuk z poprzednich projektów. Mam też jakieś Altery EPM7xxx i jeszcze większe, w których z powodzeniem upchnąłbym wszystko z WD1772 włącznie, ale już w obudowie QFP. Tym razem chodzi mi tylko o to, że ma działać i chcę uruchomić projekt w możliwie najkrótszym czasie.
Na starcie potrzebowałem 46 pinów, a skoro już mam ich 69, to zostały mi 3 wolne. Wykorzystałem CPLD "po korek" - zostały 3 makrocele i 3 bloki funkcjonalne nieobsadzone.

Prawdę mówiąc, to bardziej liczyłem na jakieś uwagi do funkcjonalności niż na temat doboru CPLD.
« Ostatnia zmiana: 2023.04.11, 20:49:12 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: FDD35 rev.3
« Odpowiedź #8 dnia: 2023.04.11, 21:01:23 »
First things first :)
Odnośnie funkcjonalności, masz gdzieś rozpisane te nowe rejestry i jak się one przekładają na mapę pamięci? Bo opisałeś to mocno po łebkach.
I jak ten ROM shadow zrobiłeś? W sensie, jak będzie w praktyce wyglądało jego kopiowanie?

Maryjan

  • *****
  • Wiadomości: 6666
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Odp: FDD35 rev.3
« Odpowiedź #9 dnia: 2023.04.11, 21:14:28 »
Taki WD1772 w CPLD byłby jak najbardziej zasadny.
Nawet, jako odrębna jednostka.
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: FDD35 rev.3
« Odpowiedź #10 dnia: 2023.04.11, 22:24:36 »
FDC w CPLD ciężko będzie wcisnąć, to już raczej jakieś FPGA.
Znalazłem jakąś niby open-sourcową implementację w VHDL, ale jako fragment większego projektu (Atari ST), więc nie chciało mi się zbytnio ściągać i dłubać w tym, by oszacować zasobożerność.
Fajna by była też możliwość uruchomienia maszyny bez FDC. W końcu jest kawał ROM-u, a skoro na dodatek można go przeprogramowywać, to może któregoś dnia pojawiłby się moduł SD/MMC na przykład :)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2434
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Odp: FDD35 rev.3
« Odpowiedź #11 dnia: 2023.04.11, 22:35:26 »
Super koncepcja, trzymam kciuki i nie mogę się doczekać finalizacji :)
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: FDD35 rev.3
« Odpowiedź #12 dnia: 2023.04.12, 05:31:08 »
Odnośnie funkcjonalności, masz gdzieś rozpisane te nowe rejestry i jak się one przekładają na mapę pamięci? Bo opisałeś to mocno po łebkach.
Jak się okazało do pierwszej prezentacji nie były potrzebne szczegóły. Całe skupienie poszło na model CPLD :P

Rejestr konfiguracji  banków jest tylko do zapisu na porcie #F0.
Bity 7 i 6 to numer segmentu przestrzeni adresowej CPU od 0 do 3 po 16 KB (wewnętrznie adresują cztery 6-bitowe rejestry banków).
Bit 5 to wybór banku RAM (0) lub ROM (1).
Pozostałe bity to adres banku od 0 do 31 po 16 KB każdy.

Rejestr konfiguracji zegara i przerwań jest do zapisu i odczytu na porcie #D0. Zapisywane są tylko bity od 0 do 2.
Bit 0 - aktualne ustawienie zegara CPU - 4 MHz (0) lub 8 MHz (1),
Bit 1 - aktualne ustawienie zegara FDC - 8 MHz (0) lub 16 MHz (1), ustawienie 1 wymusza też 8 MHz dla procesora, żeby się wyrobił z obsługą FDC,
Bit 2 - aktualny stan obsługi błędów UART - wyłączone (0) lub włączone (1),
Bit 3 - można odczytać ustawienie linii DDEN kontrolera dyskietek (zanegowana kopia bitu 5 rejestru pomocniczego FDC, którego nie można odczytywać),
Bit 4 - początkowe ustawienie zegara CPU (zworka zwarta to 1),
Bit 5 - początkowe ustawienie zegara FDC (jw.)
Bit 6 - początkowe ustawienie obsługi przerwań UART (jw.)
Bit 7 - konfiguracja tylko z dwoma dwustronnymi napędami dyskietek (na stałe tylko na zworce) - napędy A i B mogą być obsługiwane dwustronnie lub jednostronnie, a napędy C i D to druga strona dyskietki A i B

Przy włączonej obsłudze przerwań UART można odczytać status przerwania z portu #E0 (przy wyłączonych przerwaniach nie jest adresowany).
Bit 0 - TxRDY kanał A,
Bit 1 - TxE kanał A,
Bit 2 - RxRDY kanał A,
Bit 3 - BRKDET kanał A,
Bit 4 - TxRDY kanał B,
Bit 5 - TxE kanał B,
Bit 6 - RxRDY kanał B,
Bit 7 - BRKDET kanał B

I jak ten ROM shadow zrobiłeś? W sensie, jak będzie w praktyce wyglądało jego kopiowanie?
Jeśli został wybrany bank ROM, to odczyt następuje z tegoż banku, a zapis jest możliwy do banku RAM o tym samym adresie.
Można odczytać komórkę ROM i zapisać do komórki RAM "pod spodem". Nie jest to cień sprzętowy, jeśli o to pytałeś (samo się nie kopiuje).

Trochę to psuje możliwość programowego nadpisywania FlashROM, ale może to i dobrze.
Zawsze mogę zrobić inną wersję wsadu dla CPLD (bo na kolejny rejestr do wyłączania w trakcie pracy już nie mam miejsca).
« Ostatnia zmiana: 2023.04.12, 07:09:04 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: FDD35 rev.3
« Odpowiedź #13 dnia: 2023.04.12, 22:16:23 »
[Jak się okazało do pierwszej prezentacji nie były potrzebne szczegóły. Całe skupienie poszło na model CPLD :P

Wiesz, najpierw ogół, potem szczegół :)

Cytuj
Pozostałe bity to adres banku od 0 do 31 po 16 KB każdy.

Czyli dowolne 16 KB z RAM i ROM można przyporządkować do dowolnej ćwiartki przestrzeni adresowej, łącznie z powtórzeniami? W sensie - można mieć to samo 16 KB "widziane" przez CPU cztery razy?

Cytuj
Można odczytać komórkę ROM i zapisać do komórki RAM "pod spodem". Nie jest to cień sprzętowy, jeśli o to pytałeś (samo się nie kopiuje).

Rozumiem: /RD wybiera ROM, /WR wybiera RAM w tej samej przestrzeni adresowej CPU.
Sprzętowe kopiowanie nie miałoby specjalnie sensu raczej.

Cytuj
na kolejny rejestr do wyłączania w trakcie pracy już nie mam miejsca

To jest znak! Potrzebujesz więcej makrocel! :D EPM7096LC84 można kupić poniżej 40 zł...
Wiem, wiem - znowu przynudzam o CPLD ;)

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: FDD35 rev.3
« Odpowiedź #14 dnia: 2023.04.13, 05:34:13 »
Czyli dowolne 16 KB z RAM i ROM można przyporządkować do dowolnej ćwiartki przestrzeni adresowej, łącznie z powtórzeniami? W sensie - można mieć to samo 16 KB "widziane" przez CPU cztery razy?
Nie wiem w jakim celu, ale można.

Cytuj
Rozumiem: /RD wybiera ROM, /WR wybiera RAM w tej samej przestrzeni adresowej CPU.
W tym samym segmencie ORAZ w banku RAM o tym samym numerze co bank ROM (banki mają wspólne adresowanie A14..A18).

Cytuj
To jest znak! Potrzebujesz więcej makrocel! :D EPM7096LC84 można kupić poniżej 40 zł...
Wiem, wiem - znowu przynudzam o CPLD ;)
Mam też Xillinx XC95108, ale nie o to chodzi, żeby to rozciągać.
Pierwotnie miała być FDD3500 z procesorem Z180 i jeszcze większą ilością bajerów, ale już się w jeden "zbyt ambitny" projekt utopiłem i nie wiem czy mi życia wystarczy na dokończnie (to frustrujące).
Tak więc trzeba raczej zachować umiar i FDD3500 już sobie odpuszczę.
ZX/Enterprise/CPC/Robotron/C128D