Rozszerzenie pamięci ZX Spectrum: 4MB RAM
Przegląd
- Zgodność z ZX Spectrum 128K (poza dźwiękiem AY).
- Zgodnośc z Pentagonem 512kB.
- Pewna zgodność z Sinclair Z88 Cambridge Computer.
- Symulacja ROM w RAM. Inna wersja ROM może być wczytana do RAM i załączona jako ROM.
- Blokada zapisu sekcji A zgodna z Sam Coupé.
- Architektura odpowiednia do uruchomienia systemów operacyjnych jak CP/M, UZI (UZIX, UZIX2), +3e, NeOS, ZXVGS.
- Opcjonalny dostęp do kart ISA z własną pamięcią.
E-zin o ZX4MB i innych przeróbkach
W kolejnych odcinkach opisane są rozszerzenia ZX4MB, FlashD0 i inne oraz systemy operacyjne i programy wykorzystujące te rozszerzenia. Odcinki są przesyłane co kilka dni.
Szczegóły techniczne
- Sekcja - 16kB przestrzeni adresowej procesora.
- Bank - numer zapisywany do portu.
- Strona - konkretne 16kB pamięci.
64kB pamięci dostępne dla procesora Z80 jest podzielone na 4 sekcje po 16kB, nazwane A, B, C i D (A odpowiada adresom #0000..#3FFF, D - #C000..#FFFF).
Dla każdej sekcji może być wybrany jeden z 256 banków. Banki
#00..#7F (0..127) to 128 stron RAM wspólnych dla wszystkich sekcji, banki #80..#FF (128..255) z reguły mają różne znaczenie w poszczególnych sekcjach.
W obecnej wersji rozszerzenia dla ZX Spectrum banki #80..#FF (128..255) w sekcji A są przeznaczone na strony ROM, w sekcji B są zarezerwowane dla dostępu do architektury ISA, a w sekcjach C oraz
D są stronami kolejnymi 128 stronami RAM, wspólnymi dla obu tych sekcji. W przyszłości strony wspólne dla sekcji C i D mogą zostać rozdzielone, dając dodatkowe 2MB RAM.
Mapa rozszerzenia pamięci ZX Spectrum 4MB
Adres portu | bajt wpisany do portu |
#00..#7F 0..127 | #80..#FF 128..255 |
#D3 211 | sekcja D #C000..#FFFF |
128 stron RAM (2MB) wspólne dla wszystkich sekcji |
128 stron RAM (2MB) wspólne dla sekcji C oraz D |
#D2 210 | sekcja C #8000..#BFFF |
#D1 209 | sekcja B #4000..#7FFF |
128 stron - dostęp do architektury ISA |
#D0 208 | sekcja A #0000..#3FFF |
16 stron ROM - FlashD0 z 3 bitami konfiguracji |
Użycie banków
W trybie zgodności z ZX Spectrym 128K, używanych jest jedynie 8 banków o numerach #10..#17 (16..23). Zgodność z Pentagonem 512kB obejmuje dodatkowo 24 banki o numerach #50..#57 (80..87), #90..#97 (144..151) oraz #D0..#D7 (208..215). Jednak zapisem do portu #7FFD (32765) można uzyskać dostęp jeszcze do 32 banków: #30..#37 (48..55), #70..#77 (112..119), #B0..#B7 (176..183) oraz #F0..#F7 (240..247).
Banki #00..#0F (0..15) przeznaczone są do symulacji ROM, podobnie jak w komputerze Z88. Banki #18..#1F (24..31) nie są używane w Z88. Bank #1F (31) przeznaczony jest do przechowywania informacji o przydziale poszczególnych banków.
Systemy operacyjne, przeznaczone do uruchamiania programów napisanych dla ZX Spectrum nie powinny używać do własnych celów żadnego z banków dostępnych portem #7FFD (32765). Dla CP/M, zalecane jest użycie banków #40..#43 (64..67) jako pamięci podstawowej, oraz dalszych #44..#4F (68..79) do umieszczenia kodu i buforów.
Porty We/Wy sterujące pamięcią
Banki dla sekcji są sterowane następującymi portami:
#xxD0 - wybiera bank dla sekcji A (domyślnie #97 = ROM),
#xxD1 - wybiera bank dla sekcji B (domyślnie #15),
#xxD2 - wybiera bank dla sekcji C (domyślnie #12),
#xxD3 - wybiera bank dla sekcji D (domyślnie #10),
#xxFA - ustawiony bit 7 blokuje zapis do RAM w sekcji A,
#4xFD - jak #5xFD
#5xFD - podobnie jak #7xFD, ale wymusza bit 6 =0 dla lepszej
zgodności z ZX128,
#6xFD - jak #7xFD
#7xFD - wybiera bank dla sekcji D, ale wymusza bit 3 =0
oraz bit 4 =1, co zmniejsza ilość dostępnych w ten sposób stron
do 64 (1024kB).
Zawartość banków z numerami #15 (21) oraz #17 (23) może być wyświetlona jako dwa ekrany ZX128. Są one zdublowane, tak więc zapisywanie jest wykonywane zarówno do pamięci ekranu, jak i do banku pamięci, podczas gdy odczytywana jest jedynie pamięć 4MB.
Banku RAM w sekcjach B oraz C mają domyślne ustawienie odpowiednio na wartości #15 (21) oraz #12 (18). Nie muszą być więc ustawiane zapisem do portów #D1 (209) i #D2 (210). Niemniej bank w sekcji D musi być ustawiony zapisem do portu #7FFD (32765) albo #5xFD.
Zapis do któregokolwiek portu #D0..#D3 (208..211) wyłącza domyślne ustawienie, i wszystkie 4 porty muszą zostać zapisane, aby konfiguracja była stabilna.
Poprzednik - ZX512
Rozszerzenie pamięci do 4MB RAM jest następcą rozszerzenia ZX512. Pomysł był taki, aby dolne 16kB DRAM zastąpić pamięciami 32kB DRAM wyjętymi z górnego banku. Następnie, w górnym banku były montowane pamięci 41256, dając 256kB. Kolejne 256kB w układach 41256 mogłyby być przylutowane nad tymi pierwszymi, ale z nogą /CAS odgiętą ku górze. Pamięć ekranu była tylko do zapisu, a odczyt wykonywany był z kopii w pamięci 256kB.
Port #7FFD pracował jak w ZX Spectrum 128K oraz Pentago 512kB - dodatkowe banki były dostępne poprzes ustawianie bitów 6 i 7. Zapis do portu #5xFD wymuszał wyzerowanie bitu 6 w numerze banku.
Tylko jeden prototyp został zbudowany. Aby ograniczyć ilość dodatkowych drutów, cały układ logiki został zamontowany na płytce wstawianej w podstawkę ULA, podczas gdy ULA wkładana była w podstawkę na tej płytce.
Dodatkowy obwód na płytce był przeznaczony do generowania ekranu "high color", gdzie atrybuty są pobierane z drugiego obszaru wielkości 6kB, podobnie jak w komputerach Timex i Sam. To rozwiązanie nie zostało przetestowane.
Kolejne wersje płytki
W oparciu o wersję v001 płytki zostały zbudowane dwa prototypy. Niestety okazało się, że zastosowanie rezystorów do ustalania numeru banku w sekcjach A..C powoduje problemy. Numer strony (linie O0..O7 na schemacie) ustala się zbyt późno i ULA nie nadąża zatrzymać cykl zegarowy przed wystąpieniem stanu niskiego na linii /MREQ. Zostało to rozwiązane (v006) poprzez dodanie bufora sterującego liniami O0..O2 i O7 w sekcjach A..C. Linie O3..O6 są nadal sterowane rezystorami, ale za to do momentu aktywacji ich stan jest ustalony na stałe we wszystkich sekcjach. Przed aktywacją mamy więc tylko 256kB (port #7FFD).
Oprócz bufora działającego aż do aktywacji możliwe są inne rozwiązania. Wersja v106 zakładała zapisywanie numerów banków odpowiednią zawartością, w czasie gdy procesor adresuje kolejne 4 adresy pamięci (#0000..#0003). Układ inicjujący miał być wyłączany pierwszym cyklem zapisu do pamięci. Rozwiązanie wydaje się być idealne, jednak wymaga dodatkowych układów logiki. Być może zostanie to zrealizowane w wersji z układami GAL... W wersji v206 zamiast drugiego multipleksera ustalającego wartość zapisywaną został użyty bufor trójstanowy i rezystory.
Do finału przeszła wersja v315. W wersji tej numer banku ustalany jest podobnie jak w v006. Do tego układ kilku prostych bramek został zastąpiony multplekserem 74LS151. Dodatkowo na płytkach pojawiły się dwa układy, które w wersji v001 musiały być montowane w wolnym miejscu i podłączane kabelkami.
Jako następna, zostanie przygotowana płytka do zamontowania pod Z80CPU. Pozwoli to zainstalować ZX4MB wewnątrz komputerów Timex, ZX Spectrum 128K, ZX Spectrum +2 i wielu innych.
Również spodziewany jest zewnętrzny interfejs z własnym CPU.
Projekty powiązane
Dla rozszerzenia 4MB RAM zostało zaprojektowane (opcjonalne)
rozszerzenie 128kB PEROM - FlashD0. Port #D0 wybiera bank ROM oraz włącza i wyłącza zarówno przełączanie banku ROM bitem 4 portu #7FFD oraz użycie /M1 do wyboru banku (pułapki TR-DOS).
Zobacz linki poniżej.
Podziękowania dla Wojciecha Apela, którego artykuł "ENIAC'owe Spectrum" opisuje w szczegółach zagadnienia rozbudowy pamięci i był dla mnie inspiracją.
Jarek Adamski
Pliki do pobrania
- zx4mb-3b.jpg 198.9kB (2006-05-23 21:59)
- Trzeci egzemplarz ZX Spectrum z 4MB RAM. Widok z dołu na płytę.
- zx4mb-3t.jpg 164.5kB (2006-05-23 21:49)
- Trzeci egzemplarz ZX Spectrum z 4MB RAM i FlashD0. Widok z góry na płytę.
- howto-en.txt 7.4kB (2006-06-06 13:43)
- [en[ Opis wykonania przeróbki.
- zxi6-315.zip 73.0kB (2006-04-03 21:09)
- Druga płytka rozszerzenia 4MB RAM (v315) dla ZX Spectrum ISSUE 6A. Pliki danych Eagle oraz Tango PCB. Dwa błędy w ściezkach.
- zx4mb-2t.jpg 127.0kB (2006-02-17 13:40)
- Drugi egzemplarz ZX Spectrum z 4MB RAM. Poza tym: FlashD0, multiplekser ZXMUX, szpilkowe złącza klawiatury, nieoryginalny głośnik. Widok z góry na płytę.
- zx4mb-2b.jpg 154.5kB (2006-02-17 13:43)
- Drugi egzemplarz ZX Spectrum z 4MB RAM. Widok z dołu na płytę.
- work-pl.txt 8.1kB (2006-05-23 04:45)
- [pl] Description of working (in progress).
- problem.html 1.7kB (2006-01-14 14:30)
- [en] Opis problemu ze zbyt późnym ustalaniem stanu na A15ULA.
- zx4mb-1.jpg 38.5kB (2005-03-03 16:51)
- Pierwszy ZX Spectrum z 4MB RAM. Poza tym: 32kB EPROM, szpilkowe złącza klawiatury.
- zxi6-001.zip 56.9kB (2004-07-30 02:48)
- (stare) Pierwsza płytka rozszerzenia 4MB RAM (v001) dla ZX Spectrum ISSUE 6A z masą błędów. Pliki danych Eagle.
Linki do innych stron
Zobacz również
- 128KB - 512KB PEROM - FlashD0
- 128KB albo 512KB PEROM (albo Flash EPROM) dla komputerów zgodnych ze Spectrum. Może wspomagać rozszerzenie 4MB RAM i służyć do zainstalowania ZXVGS.
- YAMOD.AYLPT
- Płytka dla układu dźwiękowego AY-3-8910 (zgodność z ZX Spectrum 128K oraz Timex 2068) ze złączem drukarki oraz magistralą IIC.
- ZXMUX : PCF1306 : ZX8401 : 40058
- Zamiennik dla multiplekserów AMSTRAD 40058, PCF1306P, ZX8401. Używany w ZX Spectrum ISSUE 5, 6A, 128K, +2 oraz Sinclair QL.
- DRAM
- Pamięć dynamiczna o dostępie swobodnym (DRAM). Multipleksowane linie adresowe.
- ZX Spectrum / Timex - To 128K
- Rozbudowa ZX Spectrum 48K do zgodności z ZX Spectrum 128K. Równiez rozwiązania dla Timex Computer 2048.
- ENIAC'owe Spectrum - Wojciech Apel
- Rozbudowa do 80kB i zgodności z CP/M - Wojciech Apel, 1985.
| | CPC
Sam Coupé
MSX
Spectrum
Timex
Timex FDD
ZX81
|