Dodatek - RAM i co dalej z 80KTimmy żyje swoim ślamazarnym, angielskim życiem, a mnie dopadło lenistwo, marazm lub według współczesnej diagnozy psychoza maniakalno-depresyjna. W ramach stanów euforycznych i gimnastyki wyprostowanych zwojów mózgowych, naszło mnie kilka myśli, w jaki sposób wykorzystać bezużyteczne 80K na pokładzie. Pierwsza myśl, była "128K tak jak w Toastraku", druga mniej optymistyczna "Po co? Skoro tyle klonów ZX128K żyje na wolności.", a trzecia "Nie ma sensu, bo i tak nie dam rady.". Fakt, nie dałem rady na pełne 128K z przełączanym bankiem drugiego obrazu. Proszę bardzo, można sobie poużywać, śmiać się i przytykać "A nie mówiłem? Wyszło tak jak zawsze.", "Przecież to można było przewidzieć!" albo "Ja dałem rade w Speccy, to jesteś cienki Bolo". Cała para w gwizdek i 128K w Timmym nie będzie.
Dlaczego nie i skąd te trudności? Niby wszystko jest na 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, napisałem:
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.
Moje twierdzenie było tylko częściowo prawdziwe i radzę zostawić 4416 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 Timmiego, a także każdego innengo Timexa (TC2048, TC2068, czy TS2068) wynika, że pamięci 4416 w dolnym RAMie wymagają adresowania 8 wierszy w 6 kolumnach, a 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:
Adres 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 w kolorze czerwonym 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 ten sam 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 4146 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 mamy dostęp do sygnału sterowania buforem na multipleksowanych liniach adresowych, 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. I tu zatrzymałem się.
Górne 64K RAM - czyli 80KB na pokładzie.
Zostawiam dolny RAM o pojemności 16K, ale nadal górny jest o pojeności 64KB, z 32K wykorzystanymi zgodnie z zamysłami inżynierów Sinclair Research. Drugie 32K jest bankowanie w Timmym, ale jak wspominałem, moim zdaniem bezużyteczne w praktyce. Było kilka innych rozwiązań 80K w ZX Spectrum, każde z nich opierało się o to, że całe 32K jest 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. Cały opis i schemat tego rozwiązania jest na stronie Yarka. Sprawdziłem w praktyce i działa ono po drobnych korektach w dekoderze adeesu portu. Nie jest to pełne przełączanie tak jak w Toaskracku, a pewna 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.
Konkuzja? Raczej w stronę Wonder80K pójdzie zmiana w Timmym.