8bit Projects For Everyone


Czy jest   dla  

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.

Imię: E-mail:
Zgadzam się z Polityką Prywatności

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


    Powiedz innym:

    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.

    E-mail:

    Hasło:



    Przypomnieć hasło?

    Rejestracja?
    CPC
    4MB RAM
    Flash ROM
    To 128
    Sam Coupé
    SAM512
    Portfix
    YABUS.Z80RTC
    Z80JOY
    MSX
    Mapper 4MB
    MSX-2 SVI738
    Spectrum
    FlashD0
    8251
    AY
    Eniac'owe
    Dock
    Gama 192
    Keyboard
    ROM replacer
    SamRam
    TC2144
    To 128K
    To +3
    Wonder RAM
    Z80JOY
    ZX 4MB
    ZXMUX
    Timex
    Memory
    Timex FDD
    YABUS.TF
    YABUS.TF3
    TI-of-TTL
    ZX81
    Memory

    Jeśli widzisz błąd na tej stronie, opisz tutaj:

    © 2009-12-28 21:50 Jarek Adamski, http://8bit.yarek.pl