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 należy uruchamiać poszczególne moduły, oraz które elementy są niezbędne do ich poprawnego działania.


Zasilanie, elementy bierne i podstawki

Zanim cokolwiek zostanie przylutowane do płytki, warto sprawdzić, czy nie ma na niej zwać pomiędzy zasilaniem +9V i +5V na masą. Do tej czynności wystarczy multimetr ustawiony na pomiar rezystancji. Sprawdzamy: zasilanie z zasilacza - pomiędzy polami gniazda zasilania, linia +9V - pomiędzy polami kondensatora C18, linia +5V - pomiędzy polami dowolnego kondensatora odsprzęglającego, np. C20, linia +5V dla obwodów analogowych - pomiędzy polami kondensatora C12, Skoro nie ma zwarć, pierwszą należy przylutować podstawkę pod SCLD (U2). Jest ona typu PLCC68 w SMD i aby ułatwić sobie lutowanie można z niej usunąć wewnętrzną płytkę. Nie należy żałować topnika oraz zwrócić uwagę na orientację podstawki. W układach w obudowie PLCC68, noga numer 1 jest oznaczona kropką, a róg układu na lewo od kropki jest ścięty. Na płytce Timmy'ego, noga nr 1 jest od strony układu U16 (74LS32). Po jej przylutowaniu warto sprawdzić noga po nodze, czy jest przejście od podstawki do złącz kołkowych wokół niej.

Budowę układu zasilania zaczynamy od wlutowania mostka BR1, kondensatorów C18 i C20, rezystora R50, stabilizatora/przetwornicy DC +5V i gniazda zasilania. Po montażu tych elementów podłączamy zasilanie z zasilacza +9V o dowolnej polaryzacji. Jeśli nie mamy wyłącznika SW2, możemy zewrzeć na sztywno odpowiednie jego pola. Włączany zasilanie i jeśli zamontowaliśmy diodę LED LD1, powinna ona zaświecić się. Warto zmierzyć napięcia w kilku miejscach na płytce, aby potwierdzić, że zasilanie dochodzi do wszystkich miejsc.

Jeśli zasilanie działa tak jak powinno, montujemy:

  • wszystkie diody,
  • rezystory o numerach poniżej R100 bez R21, R28, R29, R30 i R49 (75R),
  • kondensator tantalowy C2,
  • kondensatory elektrolityczne poza C25, C38 i C47,
  • kwarc X2 14MHz,
  • kondensatory ceramiczne o numerach poniżej C100 bez C12, C33, C35, C36, C37 i C42,
  • drabinę rezystorową R56-R63,
  • tranzystory Q4 i Q6,
  • kołki pod zworki JP3 i JP101,
  • podstawki pod układy scalone o numerach poniżej U100 i bez U5,
  • gniazdo miniDIN-8 MD1,
  • gniazda audio J2 i J100,
  • przycisk RESET SW2,
  • złącze klawiatury KB1.

Sprawdzamy czy nie zrobiliśmy zwać, podłączamy zasilanie i sprawdzamy napięcia zasilania w kilku miejscach na płycie.


SCLD, procesor, ROM i dolny RAM

SCLD (U2): pierwszy z układów w podstawkę należy włożyć SLCD. Czynność ta może wymagać odrobiny siły, zależnie od tego czy układ został dobrze oczyszczony z resztek cyny. Warto usunąć z jego kontaktów nadmiar spoiwa przy użyciu plecionki i dobrego topnika, a następnie wymyć go w izopropanolu przed montażem. Należy pamiętać, żeby obchodzić się z SCLD z wyczuciem i przegrzać układu, bo zamienników nie ma!!! Przy jego wkładaniu w podstawkę, należy zwrócić uwagę na orientację. Jeśli podstawka została zamontowana poprawnie, kropka przy nodze 1 powinna być po prawej stronie.

Procesor (U1): tutaj nie ma filozofii i każdy Z80 w technologii CMOS z zegarem od 4MHz w górę powinien działać.

ROM (U3): Timmy został zaprojektowany pod układ typu 27C256, który ma dwa razy większą pojemność niż wielkość ROMu TC2048. Pozwala to na zaprogramowanie dwóch obrazów ROMu i przełączanie ich zworką JP3. ROMy można wybrać sobie dowolnie z jedną uwagą. ROM musi zerować port #FF (255) przy uruchomieniu lub resecie. Najprościej wziąć obraz ROMu z TC2048, a w drugą połówkę zaprogramować dowolny ROM diagnostyczny. Zamiast EPROMu typu 27C256 można wykorzystać EEPROM np. 27E257, 27C257 lub inny o takiej samej kolejności wyprowadzeń.

Dolny RAM (U6 i U7): Timmy tak samo jak TC2048 w swojej budowie wykorzystuje jednonapięciowe pamięci dynamiczne o organizacji 4-bitowej (seria 44xx). Dolny RAM jest zbudowany z układów 4416, które mają pojemność 16KB x 4 bity.

Układy logiczne: aby uruchomić komputer brakuje jeszcze kilku układów logicznych:

  • bufora szyny danych 74LS245 (U4),
  • multiplekserów 74LS157 (U13 i U14),
  • bufora szyny adresowej 74LS244 (U15),
  • logika linii /CS ROMu,

Jeśli nie mamy układu 74LS245, zamiast niego można zamontować osiem rezystorów 470R łącząc nimi: 2-18, 3-17, 4-16, 5-15, 6-14, 7-13, 8-12 i 9-11 U4.

Następnym elementem niezbędnym do uruchomienia jest jedna braka OR z układu U201 (74LS32). Jeśli mamy scalak pod ręką, wkładamy go w podstawkę i sprawa załatwiona. Jeśli nie, możemy zbudować taką bramkę z diody Schottky'ego (np. BAT82) i rezystora 1k0 w następujący sposób:

  • rezystorem 1k0 łączymy /MREQ z /ROM_INT: 1-3 układu U201,
  • diodą łączymy /ROMCS_EX z /ROM_INT: 2 (anoda) - 3 (katoda) układu U201

Ostatnią rzeczą wartą wykonania przez uruchomieniem Timmy'ego w minimalnej konfiguracji, jest wykonanie zwory pomiędzy linią adresową A0 i sygnałem BNK. Możemy zewrzeć nogi 13-14 układu U13 lub połączyć pole pod nogę nr 6 U200 (A0) z polem nr 5 U202 (BNK).

Klawiatura: jeśli mamy klawiaturę od TC2048 lub TC2068, podpinamy ją. Jeśli nie, można wykorzystać klawiaturę z ZX Spectrum. Złącze klawiatury ma 14 podłączeń a folia od ZX Spectrum ma ich 13 (5+8). Złącze Timexa na pierwszym polu jest podłączone do masy (GND), którą możemy zignorować. Następne 5 pozycji to złącza szyny danych klawiatury (KB0-KB4) i są one w takiej samej kolejności jak wyprowadzania folii klawiatury ZX Spectrum. Pozycje od 7 do 14, to jest 8 linii adresowych, w tej samej kolejności co w ZX Spectrum. Podłączamy:

  • taśma z danymi 5 połączeń: 1-6,
  • taśma z adresami 8 połączeń: 7-14.

Jeżeli mamy głośniczek o impedancji 32 omy, możemy podłączyć go pod pola LS1, a zworka JP101 powinna być w pozycji 2-3.

Pierwsze uruchomienie: sprawdzamy wszystko, podłączamy TV kablem takim samym jak HQ48, ustawiamy JP3, tak by był wybrany bank z ROMem TC2048 i włączamy Timmy'ego. Po włączeniu zasilania Timmy'ego TV powinien automatycznie przestawić się w trym RGB o proporcjach obrazu 4:3. Na ekranie po charakterystycznym teście pamięci powinien pojawić się znany komunikat:

(c) 1982 Sinclair Research Ltd

a po naciśnięciu dowolnego klawisza znak zachęty "K". Aby sprawdzić dostępną pojemność pamięci RAM wystarczy wykonać prosty program w BASICu:

  PRINT PEEK 23732 + 256*PEEK 23733 - 16384

W tej konfiguracji, w jakiej jest Timmy, na ekranie powinna pojawić się odpowiedź: 16383. Podczas pisania na klawiaturze, z głośniczka powinno dochodzić delikatne klikanie. Nasz Timmy działa tak samo jak ZX Spectrum 16K.

Zamiast ROMu TC2048 możemy uruchomić Timmy'iego z ROMem diagnostycznym. Powinien przejść wszystkie testy ULA, CPU, RAM, generowania kolorów łącznie z BRIGHT i FLASH dla ZX Spectrum 16/48K poza testem górnej pamięci, której fizycznie nie ma.

Jeśli nie pojawił się ekran powitalny ... "Houston, mamy problem". Diagnostyka i poszukiwanie błędów wykracza poza zakres tego opisu, ponieważ mogą one być powodowane wieloma czynnikami uzależnionymi od konkretnego egzemplarza, użytych części, montażu, itd.


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

Złącze RGB typu miniDIN8 (MD1) zostało zaprojektowane, aby do podłączenia Timmy'ego do TV przez SCART, można było wykorzystać taki sam kabel jak do Harlequina 48 i kilku innych klonów. Typu kabla nie należy mylić z nowszym kablem RGB(miniDIN9)-SCART przystosowanym do ZX Omni 128. Podłączenie Timmy'ego do TV przez SCART powinno przestawić telewizor w tryb RGB i przełączyć proporcje ekranu na standard 4:3. Wszystko jest uzależnione czy zastosowany kabel jest w pełnej konfiguracji, oraz czy model telewizora poprawnie rozpoznaje sygnały "RGB switch" i "blanking".

Jeżeli komuś wystarczy, że obraz jest dostępny tylko przez RGB, może pominąć poniższy opis układu wyjścia wideo.

Wyjście kompozytowe: SCLD generuje sygnał wideo w formie cyfrowej (sygnały TTL). Generowane są trzy składowe kolorów (R, G i B), sygnał BRIGHT oraz zespolony sygnał synchronizacji (CSYNC). W oryginalnej konstrukcji Timexa, koder PAL był zasilany +12V. W tym klonie zastosowałem nowszy układ AD724JR, który wymaga tylko zasilania +5V, ale jest w obudowie SMD. Aby podłączyć Timmy'ego pod TV z wejściem kompozytowym należy przylutować następujące elementy:

  • koder PAL AD724JR (U12),
  • kwarc 4.43MHz (X1),
  • empirycznie dobrany do kwarcu kondensator C33 - w moim przypadku 8pF było wystarczające, a 10pF było za dużo.
  • rezystory R28-R30 i R49,
  • kondensatory ceramiczne C12, C35-C37 i C42,
  • kondensatory elektrolityczne C25, C38 i C47,
  • gniazdo RCA (J4),
  • induktor osiowy (L2) lub zamiast niego rezystor 15R (R48).

Jeżeli Timmy wyświetla kolorowy obraz po RGB, uruchomienie układu zespolonego wyjścia wideo ogranicza się do poprawnego wzbudzenia kwarcu X1. Zamiast C33 można wlutować trymer 4-20pF i dostroić go tak, aby kolory po wyjściu kompozytowym były stabilne.

Wejście audio: tak samo jak TC2048, Timmy generuje dźwięki (w sumie piski) przez wbudowany głośniczek. Ponad to dźwięk można wyprowadzić na wyjścia audio na dwa sposoby:

  • przez gniazdo J100 (2 x mono),
  • na telewizor podpięty pod złącze RGB (mono).

Aby dźwięk generowany przez Timmiego wychodził na zewnętrzny wzmacniacz, głośniczek/słuchawki lub TV, należy wlutować kondensatory C103 i C104 oraz przestawić zworkę JP101 w pozycję 1-2. Jeżeli w gniazdo J100 nie zostanie wsadzona wtyczka, sygnał dźwiękowy popłynie do gniazda RGB i dalej do telewizora po SCART. Należy pamiętać, że w złączu RGB dźwięk jest zawsze monofoniczny.

We/wy magnetofonowe: sygnały EAR i MIC zostały podłączone do gniazda stereo J2. Tor ten jest wzorowany na tym z TC2048 w wydaniu 5 i w pozwala na wczytywanie programów z większości źródeł. Istotnymi zmianami w stosunku do TC2048 są: programy wczytywane przez EAR są słyszalne w wyjściu audio, do wczytywania i zapisu programów należy użyć kabelka mini jack stereo do 2 x mini jack mono. Taki sam kabelek był używany z ZX Spectrum +3. Jeśli komuś nie odpowiadają poziomy głośności BEEPera lub we/wy magnetofonowego wyprowadzone z Timmy'ego, należy samodzielnie dobrać nowe wartości rezystorów R32, R38 i R39.


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.


Dodatek

RAM

W jaki sposób wykorzystać bezużyteczne 80K na pokładzie. Pierwsza myśl, "128K tak jak w Toastraku", druga mniej optymistyczna "Po co? Skoro tyle klonów ZX128K żyje na wolności.". Nie jest to takie proste jakby mogło wydawać się. Kilka słów wyjaśnienia skąd te trudności. Niby wszystkie informacje są stronie Yarka, opisy, zdjęcia, ale Timex to nie ZX Spectrum. O ile rozbudowa górnego RAMu do pełnych 64K i jego dowolne szatkowanie na bloki 32K, albo 16K nie stanowi żadnego problemu. O tyle, grzebanie przy dolnym RAMie zaczyna się od różnic w adresowaniu pamięci 4416 i 4464, poprzez sposób multipleksacji adresów od strony procesora, do sposobu wewnętrznej multipleksacji adresów przez SCLD.

W Części 2 opisu Timmiego, na forum jest informacje :

Dolny RAM (U6 i U7): [...] Zamiast układów 4416 można użyć pamięci 4464 lub 41464. Mają one 4x większą pojemność, ale tylko 16KB będzie wykorzystane.

Stwiermdzienie to było tylko częściowo prawdziwe i nie należy zmieniać typu pamięci w obszarze dolnego RAM. Tak, Timmy ruszy z pamięciami 4464 w dolnym RAMie, ale tylko połowa obrazu będzie wyświetlana prawidłowo. Nie należy spodziewać się, że górna, lub dolna połowa będzie ze śmietnikiem, lecz dolna połowa każdej tercji. Na ekranie pojawi się 6 pasków, każdy o wysokości 4 znaków, z czego co drugi będzie zawierał poprawny obraz. Takie zachowanie Timmy'iego, a także każdego innengo Timexa (TC2048, TC2068, czy TS2068) wynika, z tego iż pamięci 4416 w dolnym RAMie wymagają adresowania 8 wierszy w 6 kolumnach, a pamięci 4464 adresowania 8 wierszy w 8 kolumnach. W ZX Spectrym pamięci 4116 wymagają adresowania 7 wierszy w 7 kolumnach, a 4146 i 4164 8 wierszy w 8 kolumnach. Tak to wygląda w praktyce:

Linia adresowa VRAM ZX Spectrum Timex (SCLD) Timex (CPU)
VA0 A0 i A7 A0 i A7* A0 i A0*
VA1 A1 i A8 A1 i A8 A1 i A8
...
VA6 A6 i A13 A6 i A13 A6 i A13
VA7 - A7 i A7* A7R i A14*

A7R linia adresowa A7 z sygnałem /RFSH

Adresy z gwiazdką są ignorowane przez pamięć typu 4416, ale zaczynają odgrywać istotną rolę, przy ich wymianie na 4464. Adresowanie przez CPU i przez SCLD nie zawsze będzie trafiało do komórek pod tym samym adresem, stąd druga połówka każdej tercji pamięci obrazu skutkuje śmietnikiem na ekranie.

Rozbudowa dolnego RAM w ZX Spectrum nie nastręcza większych trudności, ponieważ linia VA7 jest nieużywana dla układów 4116, multiplekser 'LS157 ma jedną linię wolną i poza detekcją oraz przełączaniem drugiego banku obrazu, nie nastręcza ona większych trudności technicznych. Układy 4146B są tożsame z 4116 dla linii VA0 do VA6, a VA7 możemy sobie wykorzystać według "własnego widzi mi się". Poza tym można żywcem podpatrzeć i skopiować dekoder portu 0x7FFD z Toastracka. Należy dodatkowo rozpoznać, czy jedna z multipleksowanych linii adresowych ULA podaje ustalony stan 0 albo 1, czy też jest w stanie wysokiej impedancji, kiedy pamięci są adresowane przez CPU.

W przypadku Timexa, sprawa komplikuje się. O ile sygnału sterowania buforem na multipleksowanych liniach adresowych jest dostępny wprost z SCLD, o tyle trzeba jeszcze oszukać SCLD i przekrosować odowiedno linie VA0 i VA7, oraz fizycznie rozdzielić je od linii MA0 i MA7 górnego RAM. Ilość układów scalonych potrzebnych do tego zadania, aż prosi o wykorzystanie układu programowalnego, np. CPLD, w tym celu.

Górne 64K RAM - czyli 80KB na pokładzie

Dolny RAM o pojemności 16K jest wystarczający, ale nadal górny jest o pojemności 64KB. 32K wykorzystane są z zamysłami inżynierów Sinclair Research ale drugie 32K jest bankowanie w Timmym w sposób "bajtkowy". Ten sposób bankowania jest niewygodny, chociaż była seria specjalnie zmodyfikowanych programów, które wykorzystywały to rozszerzenie.

Należy wspomnieć, że było kilka innych rozwiązań 80K w ZX Spectrum, każde z nich opierało się o to, że całe 32K było przełączane. Każde z nich wykorzystywało inny port do tego celu i w zasadzie żadne z nich nie było w jakikolwiek sposób zgodne z bankowaniem pamięci z Toastracka, poza jednym: Wonder 80K. Opis i schemat tego rozwiązania jest na stronie Yarka, został on sprawdzony w praktyce w prototypie Timmy'ego i działa poprawnie po po drobnych korektach w dekoderze adresu portu. Nie jest ono pełnym przełączaniem banków, tak jak w Toaskracku, ale zapewnia pewną zgodność z tym rozwiązaniem. W zakresie adresów 0xC000 - 0xFFFF są umieszczone 3 banki po 16kB każdy. Banki 1 i 2 są adresowane w miejsce par banków 1-4, 3-6 z bankowania Toastracka. Programy korzystające z tych par i tylko z tych par np. na muzykę do AYka, dostaną nowe życie, którego nie miałyby na 48K z dopiętym AYkiem.


Co dalej z 80K

Konkuzja? Możliwe że w w stronę Wonder80K pójdzie zmiana w Timmym.


Dokumentacja

  • schemat v.0.12
  • lista materiałowa i rozmieszczenie elementów na PCB


Linki

Wątki na forum speccy.pl: