Timmy

Z ZX Spectrum Wiki

Informacje zawarte na tej stronie, nie mogą być używane w celach komercyjnych bez wiedzy i zgody autorów.

Opis

Pierwszy klon Timexa z wykorzystaniem oryginalnego układu SCLD (TS 2068 PAL). Timmy został wyposażony w:

  • procesor Z80A z zegarem 3.5 MHz,
  • Timexowe SCLD z wianuszkiem złącz, dla zamiennika (o ile powstanie),
  • 16KB dolnego RAM,
  • 2 x 32KB górnego RAM,
  • 2 banki ROM po 16KB,
  • poprawiony Kempston z dekoderem adresów z A5, A6 i A7,
  • nowszy dekoder PAL (AD724JR),
  • wyjście wideo RGB i kompozytowe,
  • układ dźwiękowy AY-3-8910 na portach Timexa,
  • zasilanie z zasilacza o dowolnej polaryzacji,
  • przycisk reset,
  • złącze do podpięcia klawiatury od Timexa.

Został zachowany oryginalny format płytki i układ złącz jak w TC2048.

Elementy funkcjonalne i jak z nimi postępować opisane poniżej na podstawie schemat w wersji 0.12 w podrozdziałach:

  • zasilanie, elementy bierne i podstawki,
  • SCLD, procesor, ROM i dolny RAM,
  • układ wyjścia wideo i we/wy audio,
  • Kempston i AY,
  • górny RAM,
  • układ bankowania górnego RAMu, czyli 80K.

Poniższy opis zawiera także uwagi w jakiej kolejności uruchamiać poszczególne moduły oraz które elementy są niezbędne do ich poprawnego działania.


Zasilanie, elementy bierne i podstawki

SCLD, procesor, ROM i dolny RAM

Układ wyjścia wideo i we/wy audio

Kempston I AY

Kempston: Timmy nie byłby pełnym klonem TC2048, gdyby nie posiadał portu joysticka w standardzie Kempston, czyli na porcie 31 (0x1F). Kilka słów wyjaśnienia, pomimo że ten typ interfejsu jest dobrze znany i opisany w wielu miejscach. Port joysticka TC2048 jest obarczony dwoma niedogodnościami. Pierwszą jest niepełny dekoder adresu portu, który bada tylko stan linii adresowej A5. Taki dekoder powoduje, że port 31 jest odczytywany także dla wszystkich odczytów portów z linią adresową A5 w stanie niskim. Jego konstrukcja mogła wynikać z braku niezbędnej ilości bramek logicznych w zastosowanych układach scalonych. A zmiana konstrukcyjna wymagałaby zwiększenia ilości elementów i co za tym idzie wzrost kosztów produkcji mikrokomputera. Drugą i największą bolączką portu joysticka TC2048 jest jego polaryzacja, która jest odwrotna do przyjętej konwencji. Styki zwierane są do napięcia zasilania, a nie do masy. Budując Timmy'ego zmieniłem dekoder na taki, w którym brane są pod uwagę stany linii A6 i A7, tj. adres Kempstona jest dekodowany jako 000xxxxx. Polaryzacja portu też została przywrócona do "normalnej".

Za bufor wykorzystałem układ 74LS540. Dlaczego ten typ, a nie bardziej popularny 72LS240? "Pinologia" 74LS540 z wejściami po jednej stronie układu scalonego i wyjściami po przeciwnej bardziej mi pasuje. Układ 74LS240 wymaga odrobinę pokręconych ścieżek na płytce, a z natury jestem leniwy. Port joysticka wyposażyłem w organicznik prądu, w przypadku bezpośredniego zwarcia +5V do GND w porcie, w postaci rezystora R21. Jeśli ktoś nie ma rezystora o mocy 0.5 lub 1W, na własną odpowiedzialność, może w jego miejsce wlutować zworę.

Program testujący interfejs Kempstona został opisany na łamach numer 3 Zina80 i warto się z nim zapoznać. Można także samodzielnie napisać trzy linijki programu testującego joystick w BASICu. Dla bardzo leniwych pozostają opcje diagnostyczne wbudowane w niektóre ROMy testowe.

Programowalny układ dźwiękowy (AY): TC2048 wyposażono w ten sam układ SCLD co TC2068/UK2086. Większe Timexy zaprojektowano z układem dźwiękowym typy AY-3-8912 sterowany bezpośrednio z SCLD. Tej funkcjonalności nie wykorzystywano w TC2048. Dlaczego? Możliwe, że z powodu większej kompatybilności z ZX Spectrum 48K oraz wykorzystanych innych portów, niż były ogólnie przyjęte w świecie ZX Spectrum. Timexy do kontrolowania układu PSG (AY) używają portów 0xF5 i 0xF6, zamiast 0xBFFD i 0xFFFD z ZX Spectrym 128K. PSG w TC2068 jest napędzany zegarem 1.75MHz zamiast 1.77MHz używanym w ZX128K lub 1.79MHz z przystawek dźwiękowych tj. Melodik i pochodne.

W Timmy'im zaprojektowałem tor dźwiękowy z PSG typu AY-3-8910 w obudowie DIP40. Układ ten oraz jego klony są tańsze i łatwiej dostępne od mniejszego AY-3-8912, oraz są one w pełni zgodne programowo. Linie sterujące BC1 i BDIR oraz zegar układu PSG zostały podpięte to sygnałów dostępnych z SCLD, co powoduje zgodność Timmy'ego z rodziną Timexa, a nie Sinclaira. Tak, zamierzona niedogodność i odstępstwo od przyjętych standardów, ale takie podejście nie wymagało dodatkowego nakładu pracy i części do dekodera adresów PSG. Możliwe, że w kolejnym wydaniu Timmy'ego zmienię sposób sterowania "grajkiem".

Aby uruchomić tor PSG, należy wlutować wszystkie brakujące elementy o numerach z serii 100, np. R100, C100, itd. Dźwięk trzech kanałow A, B i C jest miksowany do dwóch z możliwością wyboru trybu miksowania: ABC/ACB przez zworkę JP100. Wyjście stereo zostało wyprowadzone na gniazdo J100. Do obu kanałów audio, zostały dodane dźwięki generowane przez BEEPer oraz zapis i odczyt z taśmy (zworka JP101). Jeśli w gnieździe audio nie ma wtyczki, cały dźwięk jako mono jest podawany na gniazdo RGB (MD1).

Programowanie PSG zostawiam innym, ale dla chcącego nic trudnego i każdy może spróbować własnych sił w napisaniu prostego programu w asemblerze, który zamiast portów ZX128K wykorzysta porty Timexa. Punkt startowy poniżej:

  ayctrl   equ    $FFFD     ; AY control port (0xFFFD)
  aydata   equ    $BFFD     ; AY data port (0xBFFD)
  ay_snd   ld bc,ayctrl     ; select control port
           out (c),d        ; send specified value
           ld bc,aydata     ; select data port
           out (c),e        ; send specified value
           ret

Górny RAM

Na początek dygresja na temat budowy pamięci w TC2048. W TC2048 wykorzystano pamięci dynamiczne o organizacji 4-bitów. Dolna pamięć została zbudowana z dwóch układów o pojemności 16K. W przypadku górnej pamięci Timex zastosował dwa rozwiązania.Pierwsze wymagało czterech układów o pojemności 16K typu 4416, a w drugim zastosowano dwa układy o pojemności 64K typu 4464. W komputerach z górną pamięcią złożoną z czterech szesnastek (2 x 4bity x 16K + 2 x 4bity x 16K) każdy z jej bloków 16K jest sterowany przez SCLD poprzez dedykowaną linię /CAS. Drugim przypadku organizacji górnej pamięci z wykorzystanie układów o pojemności 64K i tylko dwa układy scalone znajdziemy na płycie głównej. Poza tymi układami (4464 lub 41464) znajdziemy także dwie diody oraz rezystor tworzące bramkę AND dla linii /CAS górnego RAMu.

Odświeżaniem całej pamięci (dolnej i górnej) zajmuje się SCLD, które do linii adresowej A7 dokłada sygnał /RFSH. Sygnał ten znajdziemy na schemacie z oznaczeniem A7RB. Zastosowane pamięci dynamiczne przez Timexa wymagają multipleksowania szyny adresowej i w TC2048 znajdziemy dwa multipleksery typu 74LS157. Są one wspólne dla dolnego i górnego RAMu, oraz sterowane przez SCLD. Takie podejście jest diametralnie różne od tego z ZX Spectrum, w którym dolny RAM jest sterowany własną parą multiplekserów i przez ULA, a górny RAM zbudowano niezależnie z wydzieloną logiką. Z typem zastosowanych pamięci oraz multipleksacją adresów w Timexie są związane pewne niedogodności przy rozbudowie do 128K z bankowaniem pamięci zgodnym z ZX Spectrum 128K.

Od strony sprzętowej Timmy jest zgodny z drugim rozwiązaniem organizacji górnej pamięci RAM. Jeżeli wcześniej wlutowaliśmy rezystor R64 i diody D22, D23 nie mamy wiele do wykonania. Wystarczy włożyć układy U8 i U9 w podstawki. Po włączeniu Timmy powinien zachowywać się jak poprzednio i możemy ponownie wykonać test:

  PRINT PEEK 23732 + 256*PEEK 23733 - 16384

na ekranie powinna pojawić się odpowiedź 49151, która oznacza 48K [(49151+1)/1024] pamięci RAM. Dla pewności można przetestować cały RAM dowolnym ROMem diagnostycznym.

Ktoś może zapytać, po co układy o pojemności 64K, skoro wynikowo dostajemy 16K dolnego RAM + 2 x 16K górnego RAM = 48K. Konia z rzędem temu, kto znajdzie jednonapięciowe układy pamięci dynamicznych o pojemności 32K na 4 bitach. No chyba, że ktoś chce pobawić się w Sir Sinclaira i poszukać układów, które mają uszkodzoną połowę struktury.


80K na pokładzie

Projektując i budując Timmy'ego, odkopałem Bajtka, po raz n-ty przeczytałem oba artykuły i przeniosłem logikę na schemat Timmy'iego. Dla dociekliwych rozbudowa ZX Spectrum do 80K była opisana na łamach Bajtka nr 9-10/90. W numerze 11-12/90 Bajtka zajdnduje się opis przeróbki Timexa. Autorem obu artykułów był p. Stanisław Winiecki (STAVI). Muszę dodać, rozbudowa zaproponowana przez STAVI nie jest jedyną a jedną z kilku. W okolicy roku 1983, w Wielkiej Brytanii firma East London Robotics sprzedawała przystawki 80K do ZX Spectrum Issue 1 o nazwie SP80.

Od strony sprzętowej aby uruchomić dodatkowe 32K należy:

  • usunąć wcześniej wykonaną zworkę pomiędzy pomiędzy sygnałami A0 i BNK,
  • zamontować wszystkie brakujące elementy z serii 200 (prawy dolny róg płytki),
  • zworkę JP200 pozostawić w pozycji otwartej.

Po montażu sprawdzamy czy nie popełniliśmy błędu lub zwarcia i włączamy komputer. Jedyną zmianą do stanu poprzedniego jest świecąca się dioda BK0. Uruchamiając ROM diagnostyczny, zostanie on wykonany tak samo jak poprzednio, ponieważ nie obsługuje stronnicowania bloków 32K na porcie 255 (0xFF). Pozostaje nam samodzielne przetestowanie tę funkcjonalność wykonując poniższy progam w BASICu:

  10 CLEAR 32767
  20 POKE 50000,121
  30 OUT 255,32
  40 POKE 50000,212
  50 OUT 255,0
  60 PRINT PEEK 50000
  70 OUT 255,32
  80 PRINT PEEK 50000
  90 OUT 255,0

Po jego wykonaniu na ekranie powinniśmy zobaczyć dwie liczby: 121 i 212, które zostały zapisane i następnie odczytane z komórki pamięci o adresie 50000. Każda z tych liczb jest przechowywana pod tym samym adresem w oddzielnym banku pamięci. Dokładny opis działania programu jest w Bajtku.

Od strony wizualnej po wydaniu komendy OUT 255,32 dioda BK0 zgaśnie, a zaświeci się BK1, wskazując drugi bank 32K jako aktywny. Fajny bajer? I tak, i nie, ponieważ wykorzystanie portu 255 (0xFF) do przełączania banków jest niefortunnym rozwiązaniem w przypadku Timexa. Koliduje ono z przełączaniem trybów graficznych. Dowolne demo, które przełącza tryby graficzne Timexa oraz wystawia 1 na szóstym bicie na szynie danych (D5=1) spowoduje zawieszenie komputera przy włączonych 80K. Aby wyłączyć całe rozszerzenie, wystarczy włożyć zworkę JP200 i Timmy zachowuje się normalnie, tak jak przystało na komputer z 48K RAM.


Dokumentacja

  • schemat
  • lista materiałowa
  • rozmieszczenie elementów na PCB


Linki

Wątki na forum speccy.pl: