Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:memorymap

Rozšíření paměti

Procesor Z80 umí adresovat pouze 64 kB paměti. Proto u všech verzí 48 kB není stránkování paměti potřeba. 16 kB zabere pamět ROM, a zbytek 48 kB se zaplní RAM. U všech verzí nad 48 kB RAM je stránkování nutné. Nejkompatibilnější stránkování rozšířené paměti má ZX Spectrum 128 a ZX Spectrum +2. U verzí ZX Spectrum +2A/B a ZX Spectrum +3 je stránkování stejné, dokonce mají navíc další režimy které dovolují AllRAM. Bohužel s kompatibilitou tyto stroje pokulhávají jinde (časování, porty, systémová sběrnice). Proto jako vzor kompatibility se bere ZX Spectrum 128 a ZX Spectrum +2. Nejběžnější je ale varianta 48 KB (takzvaný „gumák“ nebo ZX Spectrum+).

V následujících popisech rozvržení pamětí platí vždy, že ROM se mapuje na adresy 0-16383, pokud je větší, stránkuje se. RAM není nikdy zpomalována, není-li napsáno jinak. VideoRAM je stránka RAM, ze které čte ULA obsah obrazovky, je vždy zpomalována, a má vždy velikost 16 kB. I přesto že je popsána jako VideoRAM, ve skutečnosti jsou obrazové data pouze v prvních 6912 bajtech, zbytek je volný.

ZX Spectrum 48K

Paměti RAM má jen 48 kB, proto není potřeba stránkování. RAM je namapovaná na adrese 16384-65535. ROM je na adrese 0-16383. Pro svou jednoduchost se často stávala obětí různých podomácku vytvořených pamětových rozšíření (například rozšíření podle Lamače, či Trollera).


R0 - ROM - 16 KB
0 - VideoRAM 16 KB
1,2 RAM 32 KB

ZX Spectrum 128K (ZX Spectrum +2)

ZX Spectrum 128 obsahuje krásných 128 kB RAM a 32 kB ROM. Rom se stránkuje na adresách 0-16383, Ram 16384-65535. RAM je v rozsahu 16384-49151 pevně nastavená (stránka 5 a 2), v rozsahu 49152-65535 se přepínají všechny RAM stránky (0-7), a to zápisem do bitů 0-2 na portu 32765 (7FFD). Dájí se tedy znovu namapovat stránky 2 a 5 od adresy 49152, přestože jsou pevně mapovány na adesách 16384-49151. ROM se mapuje podle bitu 4 (0=rozšířená ROM, 1=klasická ZX48 ROM). Jako VideoRAM může ULA použít bud standartní stránku 5 nebo alternativní na stránce 7. Přepíná se bitem 3. Pro větší kompatibilitu se ZX48 se stránkování dá trvale zablokovat a to zápisem hodnoty 1 do bitu 5. Stránkování v takovém případě vysvobodí až úplný reset počítače.


R0- ROM (128)
R1- ROM (klasická ROM ze ZX Spectrum 48)
0,2,4,6- RAM
1,3,5,7- RAM zpomalovaná ULA čipem
5 - VideoRAM, 7 - alternativní VideoRAM

Port 32765 (7FFD)
7 6 5 4 3 2 1 0
nic nic Zákaz stránkování Číslo stránky ROM (adresa 0-16383) Videoram na 5/7 Číslo stránky RAM (adresa 49152-65535)

Didaktik Gama 80K

Jedná se o Československý klon, který se vyráběl v Didaktik Skalica, a byl oficiálně dostupný v tehdejších obchodech. Obsahoval stejnou ULA Ferranti, jako ZX Spectrum 48. Díky tomu má stejné časování jako originál. V tomto klonu byl využit fakt, že do ZX Spectrum 48 byly montovány vadné (ale taky levnější) RAM čipy 64 kb, ale použila se jen ta část, která byla vpořádku. Do Gamy tedy osadily bezvadné čipy, a získaly tím dalších 32 kB navíc. Pamět je mapována na adresách 32768-65535, O přepínání se stará čip MHB 8255 a jeho port C (0 bit). Jeden ze způsobů jak tuto pamět přepnout je OUT 127,0/1, zde ale hrozí že si přepnete režimy ostatních portů. Další způsob je OUT 95,0/1 (C port musí být nastaven jako výstupní - OUT 127,0, dále se na řídící registr nesahá, tedy nehrozí přepnutí ostatních portů).

Nevýhoda stránkování u Gamy je, že se přepíná velký rozsah paměti (32768-65535). To je problém i pro programy psané ve strojovém kódu. U programů psaných v Basicu navíc u starší verze '87 docházelo k havárii, pokud programátor zapomněl nastavit RamTop pod 32768 a pokusil se přestránkovat z Basicu. A pokud na to nezapomněl, zůstalo mu jen málo místa pro jeho program v Basicu. Naštěstí to nebyl nijak zásadní prohřešek, protože využívat rozšířenou RAM z Basicu je přecijen trochu bizarní. Od verze '88 byl tento problém navíc vyřešen berličkou (při přepínání se rutina v ROM postarala o nakopírování obsahu jedné stránky do druhé, a to až po RamTop).


R0- ROM - 16 KB
0 - VideoRAM 16 kB
1,2 RAM 32 kB
3,4 alternativní RAM 32 kB

ZX Spectrum 528 kB (Lamač)

Rozšíření paměti podle Lamače existuje mnoho druhů. Rozšiřuje pamět nejméně na 80 kB, ale existují i verze s 528 kB. V LnxSpectrum je emulována právě tato největší varianta. Přepínání probíha zápisem na port 253, kam se posílá číslo stránky, které chceme namapovat do prostoru 0-32767. Bit 7 na tomto portu rozhoduje o tom, jestli bude připojena rozšířená RAM, nebo jestli bude připojena ROM a VideoRAM. Číslo stránky se zapisuje do bitů 6 až 3, na bitu 0 je softwarově ovládaná LED (tu v emulátoru nenajdete :) ). V některých případech se tento port může poprat se zvukovým čipem AY.

Kolik existuje takto upravených ZX Spectrum 48 nikdo netuší, návod jak tuto úpravu provést vyšel v několika dobových časopisech, jako třeba Amatérské rádio nebo Mikrobáze.

U rozšíření podle Lamače je problém s tím, že je příliš variant. Nejde ani tak o různé velikosti přidané RAM (existují schéma s 80, 112, 144, 272, 304, 336, 528 kB), bohužel existují i varianty s nahrazováním ROM za RAM se zakázaným zápisem, nebo varianta která umožňovala používat 2 VideoRAM podobně jako u ZX 128. Tohle všechno způsobuje, že software pro tento typ rozšíření nemusí být kompatibilní sám se sebou.


R0- ROM - 16 KB
0 - VideoRAM 16 kB
1-32 RAM 512 kB

Port 253 (FD)
7 6 5 4 3 2 1 0
Odpojuje ROM+VideoRAM a mapuje alternativní RAM Číslo stránky připojené RAM nic nic Softwarově ovládaná LED

ZX Spectrum 80 kB (Troller)

Rozšíření paměti podle Trollera přidalo k ZX Spectrum 48 dalších 32 kB RAM. Pamět je v tomto případě přidána na adresy 0-32767. Přepnutí paměti proběhne zápisem na port 255. Hodnota může být libovolná, zápisem na tento port se režim přepne z originálního režimu (ROM+VideoRam 0-32767) na alternativní (RAM 0-32767), dalším zápisem na port se přepne zase zpět.

Zvláštností této úpravy je že k přepnutí režimu dojde až o jednu instrukci později, takže je možné přepínat i z běžícího kódu na přepínané stránce, například takto:

	out (255),a	;nezáleží na hodnotě v registru A, zápis inicializuje přepnutí
	ret		;tato instrukce se ještě provede před přepnutím

	nop		;tato instrukce by se již neprovedla, bylo by přestránkováno

Bohužel mám také obavu, že existují i jiné varianty s drobnými odlišnostmi. Tuším že jsem se setkal s variantou přepínanou na portu 253, nebo dokonce bez zpoždění jedné instrukce (to ale možná nebylo pod názvem Troller, už je to dlouho :) ).


R0 - ROM 16kB
0 - VideoRam 16 kB
1,2 klasická RAM 32 kB
3,4 alternativní RAM 32 kB

Didaktik Gama 192K

Tento klon je vytvořen nadšencem, který chtěl Didaktik Gama 80 vylepšit, především udělat jej kompatibilní se ZX Spectrum 128, a to se mu také povedlo. A to včetně AY zvukového obvodu. Počítač obsahoval ROM 32 kB (obsah stejný jako u ZX Spectrum 128), DRAM 64 kB (v ní je VideoRam, je tedy ULA čipem zpomalována), jsou to stránky 1,3,5,7 (5=VideoRam, 7=alternativní VideoRam). Stránka 5 je zrcadlena na adresách 16384-32767. Dále byla v počítači SRAM o velikosti 128 kB. Jsou to stránky 0, 2, 4, 6, stránka 2 je zrcadlena na adresách 32768-49151. Všechny stránky jsou mapovány na adresách 49152-65535, stránka se vybírá portem 32765 (7FFD). Přepínání je kompatibilní se ZX Spectrum 128.

Tímto způsobem se používala jen jedna polovina SRAM (64 kB). Celá tato část 64 kB (stránky 0, 2, 4, 6) jde celá přestránkovat na dalších 64 kB (stránky 8, 9, 10, 11), díky tomu máme přístup ke 192 kB RAM. A to je hodně hezké číslo. Přehození poloviny SRAM se dělá na portu 255, bit 0. Tím že přehodíme tento bit, zaměníme stránky: 0 za 8, 2 za 9, 4 za 10, 6 za 11 s tím, že 2/9 se zrcadlí i v prostoru 32768-49151. Takže přehozením bitu na portu 255 se nám změní celý prostor od 32768-65535. A to je zase vlastnost původního Didktiku Gama 80. Takže malou úpravou software pro Didaktik Gama 80 (nahrazení OUT (127),X za OUT (255),X) spustíme na tomto klonu software určený pro Didaktik Gama 80.

Na světě těchto strojů nebude víc než 50, jedná se o velmi raritní záležitost. Oficiální webová stránka kde se dala Gama 192 ve formě částečné stavebnice zakoupit (k sestavení byl potřeba originální Didaktik Gama) již zmizela ze světa, ale i v roce 2017 se pár kusů sestavilo.

R0 - ROM 128
R1 - ROM 48
1,3,5,7 - DRAM, zpomalovaná ULA čipem
5 - VideoRAM, 7 - alternativní VideoRAM
0,2,4,6 - SRAM první polovina
8,9,10,11 - SRAM druhá polovina

Port 32765 (7FFD)
7 6 5 4 3 2 1 0
nic nic Zákaz stránkování Číslo stránky ROM (adresa 0-16383) Videoram na 5/7 Číslo stránky RAM (adresa 49152-65535)
Port 255 (FF)
7 6 5 4 3 2 1 0
nic nic nic nic nic nic nicstránkování SRAM, první / druhá polovina
lnxspectrum/memorymap.txt · Poslední úprava: 2018/08/29 16:45 autor: lanex