ZX81 32K: Różnice pomiędzy wersjami

Z ZX Spectrum Wiki
(Linki)
 
(Nie pokazano 7 wersji utworzonych przez jednego użytkownika)
Linia 1: Linia 1:
 +
[[File:ZX81_32KB_01.png|thumb|300px|Rendering]]
 +
 
== Opis ==
 
== Opis ==
Modyfikcja ta polega na rozszerzeniu wewnętrznej pamięci w ZX81/TS1000 z 1KB/2KB do 32KB w obszarze 8K - 40K.  
+
[[File:ZX81_32K_02.jpg|thumb|300px|Moduł 32KB]]
 +
 
 +
Modyfikcja ta polega na rozszerzeniu wewnętrznej pamięci w ZX81/TS1000 z 1KB/2KB do 32KB w obszarze 8K - 40K. Do tego celu została zaprojektowany moduł na którym znajduje się układ pamięci statycznej o pojemności 32KB oraz dekoder adresów (74HC251).  Schemat jego jest dość dobrze znany w świecie ZX81 nazwą: "Barebones Internal 32K RAM mapped 8K-40K". Cała idea wykorzystania multiplexera 8:1 została stworzona przez Wilfa Rigtera w 2005r.
 +
 
 +
Należy zacząć do pobieżnego opisu organizacji pamięci w ZX81 oraz paru wyjaśnień:
 +
 
 +
'''0K-8K''' - obszar ROMu
 +
 
 +
'''8K-16K'''  - zakres ten może być wykorzystany przez programy w kodzie maszynowym i jest wykorzystywany przez programy z Hi-Res oparte o WRX. Ten obszar pamięci nie jest inicjowany i sprawdzany przez procedury ROMu po resecie czy włączeniu zasilania, a także przez wydaniu komendy "NEW"
 +
 
 +
'''16K-32K''' - typowy zakres adresów gdzie urzędują programy w BASICu, łącznie z tymi, które mają wstawki w kodzie maszynowym.  Programy Hi-Res mogą być wykonywane z tego obszaru o ile RAM jest dostępny podczas wykonywania RFSH.
 +
 +
'''32K-40K''' - zakres ten można wykorzystać jako obszar zmiennych w przypadku dużych programów (np. deklaracja zmiennych DIM). Programy w kodzie maszynowym mogą być przechowywane w tym obszarze pamięci, ale przed ich wykonaniem, należy przenieść je poniżej 32K. Ten zakres można też wykorzystać dla zmienionej zawartości ROMu, ale tablica znaków i semigrafiki zostaje niezmienna i będzie pobierana z oryginalnej zawartości ROMu w obszarze 0K-8K.
 +
 
 +
Wracając do dekodera, układ 74HC251 posiada 8 wejść, które zostały wykorzystane do wyboru obszarów pamięci ZX81 w następujący sposób:
 +
 
 +
*I0 = 00-08K =  Vcc = RAM wyłączony, ROM włączony
 +
*I1 = 08-16K = GND = RAM włączony, ROM wyłączony
 +
*I2 = 16-24K = GND = RAM włączony, ROM wyłączony
 +
*I3 = 24-32K = GND = RAM włączony, ROM wyłączony
 +
*I4 = 32-40K = GND = RAM włączony, ROM wyłączony
 +
*I5 = 40-48K =  Vcc = RAM wyłączony, ROM włączony 
 +
*I6 = 48-56K = M1 = jeżeli M1 = 0 -> echo obszaru RAM 16-24K
 +
*I7 = 56-64K = M1 = jeżeli M1 = 0 -> echo obszaru RAM 24-32K
 +
 
 +
Po zainstalowaniu modułu i wydaniu komendy:
 +
  PRINT PEEK 16388+256*PEEK 16389
 +
 
 +
Otrzymamy odpowiedź:
 +
  32768
 +
 
 +
Co jest prawidłową odpowiedzią, ponieważ jest to standardowa wartość dla RAMTOPu przy 16K pamięci RAM. Z zasady konstrukcji ZX81, BASIC korzysta z obszaru 16K-32K. W takim razie gdzie pozostałe 16K? Miało być przecież 32K? 8K jest w obszarze poza dostępem dla BASICa (8K-16K), a do drugiego 8K które jest pomiędzy 32K a 40K musimy dostać się. Należy podnieść RAMTOP:
 +
  POKE 16389,160
 +
  NEW
 +
 
 +
Sprawdzenie:
 +
  PRINT PEEK 16388+256*PEEK 16389
 +
 
 +
Na ekranie zobaczymy:
 +
  40960
 +
 
 +
W efekcie mamy wiecej miejsca dla zmiennych BASICa czy linii programu.
 +
 
 +
 
 +
== Montaż ==
 +
[[File:ZX81_32K_03.jpg|thumb|300px|Układ 32KB zamontowany na PCB wydanie 1]]
 +
 
 +
W zasadzie pierwsze kroki są identyczne z rozszerzeniem RAMu do 16KB i zostały one opisane na stronie [http://speccy.pl/wiki/index.php?title=ZX81_16K ZX81 16K]. Po wlutowaniu nowej podstawki pod układ pamięci i zworki L2, instalujemy moduł w podstawce oraz wykonujemy 8 połączeń kynarem. Pięć linii adresowych A11 do A15 jest dostępne przy złączu klawiatury i podłączamy je następująco:
 +
* A11 - D1
 +
* A12 - D3
 +
* A13 - D5
 +
* A14 - D7
 +
* A15 - D8
 +
 
 +
Dodatkowo odnajdujemy na płytce ZX81 dogodne miejsca do których należy podłączyć się pod linie:
 +
* [[Sygnał MREQ|/MREQ]]
 +
* [[Sygnał M1|/M1]]
 +
* [[Sygnał ROMCS|/ROMCS]]
 +
 
 +
 
 +
==Dokumentacja==
 +
* [https://drive.google.com/open?id=1wA_l2307M0ludw8_YoNip8hFV4amNfl6 schemat]
 +
* Projekt PCB w formacie [https://drive.google.com/open?id=1gM-5Uq49OHbmR5ntoqMfLQtz_yLl8ego KiCADa] oraz na [https://oshpark.com/shared_projects/9v9FFtOZ OSHPark]
  
  
 
== Linki ==
 
== Linki ==
* Wątek na forum speccy.pl: [http://www.speccy.pl/forum/index.php?topic=4115.0 ZX81 wewnętrzne 32KB RAM]
 
 
* Wątek na forum Timex Sinclair 1000 - ZX81: [http://forum.tlienhard.com/TS1000/www.ts1000.us/cgi-bin/yabb/YaBB.pl-board=HARDWARE;action=display;num=1159658155.htm Wilf's 64K rampack - (battery backup not working)]
 
* Wątek na forum Timex Sinclair 1000 - ZX81: [http://forum.tlienhard.com/TS1000/www.ts1000.us/cgi-bin/yabb/YaBB.pl-board=HARDWARE;action=display;num=1159658155.htm Wilf's 64K rampack - (battery backup not working)]
  
 
[[Kategoria:Sprzęt]][[Kategoria:Modyfikacje]][[Kategoria:Projekty]]
 
[[Kategoria:Sprzęt]][[Kategoria:Modyfikacje]][[Kategoria:Projekty]]

Aktualna wersja na dzień 14:20, 18 paź 2018

Rendering

Opis

Moduł 32KB

Modyfikcja ta polega na rozszerzeniu wewnętrznej pamięci w ZX81/TS1000 z 1KB/2KB do 32KB w obszarze 8K - 40K. Do tego celu została zaprojektowany moduł na którym znajduje się układ pamięci statycznej o pojemności 32KB oraz dekoder adresów (74HC251). Schemat jego jest dość dobrze znany w świecie ZX81 nazwą: "Barebones Internal 32K RAM mapped 8K-40K". Cała idea wykorzystania multiplexera 8:1 została stworzona przez Wilfa Rigtera w 2005r.

Należy zacząć do pobieżnego opisu organizacji pamięci w ZX81 oraz paru wyjaśnień:

0K-8K - obszar ROMu

8K-16K - zakres ten może być wykorzystany przez programy w kodzie maszynowym i jest wykorzystywany przez programy z Hi-Res oparte o WRX. Ten obszar pamięci nie jest inicjowany i sprawdzany przez procedury ROMu po resecie czy włączeniu zasilania, a także przez wydaniu komendy "NEW"

16K-32K - typowy zakres adresów gdzie urzędują programy w BASICu, łącznie z tymi, które mają wstawki w kodzie maszynowym. Programy Hi-Res mogą być wykonywane z tego obszaru o ile RAM jest dostępny podczas wykonywania RFSH.

32K-40K - zakres ten można wykorzystać jako obszar zmiennych w przypadku dużych programów (np. deklaracja zmiennych DIM). Programy w kodzie maszynowym mogą być przechowywane w tym obszarze pamięci, ale przed ich wykonaniem, należy przenieść je poniżej 32K. Ten zakres można też wykorzystać dla zmienionej zawartości ROMu, ale tablica znaków i semigrafiki zostaje niezmienna i będzie pobierana z oryginalnej zawartości ROMu w obszarze 0K-8K.

Wracając do dekodera, układ 74HC251 posiada 8 wejść, które zostały wykorzystane do wyboru obszarów pamięci ZX81 w następujący sposób:

  • I0 = 00-08K = Vcc = RAM wyłączony, ROM włączony
  • I1 = 08-16K = GND = RAM włączony, ROM wyłączony
  • I2 = 16-24K = GND = RAM włączony, ROM wyłączony
  • I3 = 24-32K = GND = RAM włączony, ROM wyłączony
  • I4 = 32-40K = GND = RAM włączony, ROM wyłączony
  • I5 = 40-48K = Vcc = RAM wyłączony, ROM włączony
  • I6 = 48-56K = M1 = jeżeli M1 = 0 -> echo obszaru RAM 16-24K
  • I7 = 56-64K = M1 = jeżeli M1 = 0 -> echo obszaru RAM 24-32K

Po zainstalowaniu modułu i wydaniu komendy:

 PRINT PEEK 16388+256*PEEK 16389

Otrzymamy odpowiedź:

 32768

Co jest prawidłową odpowiedzią, ponieważ jest to standardowa wartość dla RAMTOPu przy 16K pamięci RAM. Z zasady konstrukcji ZX81, BASIC korzysta z obszaru 16K-32K. W takim razie gdzie pozostałe 16K? Miało być przecież 32K? 8K jest w obszarze poza dostępem dla BASICa (8K-16K), a do drugiego 8K które jest pomiędzy 32K a 40K musimy dostać się. Należy podnieść RAMTOP:

 POKE 16389,160
 NEW

Sprawdzenie:

 PRINT PEEK 16388+256*PEEK 16389

Na ekranie zobaczymy:

 40960

W efekcie mamy wiecej miejsca dla zmiennych BASICa czy linii programu.


Montaż

Układ 32KB zamontowany na PCB wydanie 1

W zasadzie pierwsze kroki są identyczne z rozszerzeniem RAMu do 16KB i zostały one opisane na stronie ZX81 16K. Po wlutowaniu nowej podstawki pod układ pamięci i zworki L2, instalujemy moduł w podstawce oraz wykonujemy 8 połączeń kynarem. Pięć linii adresowych A11 do A15 jest dostępne przy złączu klawiatury i podłączamy je następująco:

  • A11 - D1
  • A12 - D3
  • A13 - D5
  • A14 - D7
  • A15 - D8

Dodatkowo odnajdujemy na płytce ZX81 dogodne miejsca do których należy podłączyć się pod linie:


Dokumentacja


Linki