clanky/pamet-zx

PAMĚŤ ZX Spectra

ZX Spectrum má 48 kb paměti RAM a 16 kb paměti ROM. Pamět je organizována následujícím způsobem:

0..16383
Na tomto místě je paměť ROM. Zde jsou uloženy prográmky ošetřující vstup a výstup, interpretaci BASICu a další základní úkony.

16384 .. 23295
Tato část paměti se používá pro VideoRAM. Protože zde obraz není uložen jako obyčejná bitová mapa, popíšeme si ji trochu blíže.

Spectrum má rozlišení 256x192 bodů, což při velikosti znaku 8x8 bodů znamená, že se na obrazovku vejde 32 znaků na šířku a 24 na výšku. Problém je v tom, že na ZX Spectru nemá každý bod přiřazenou svou barvu, ale pouze jeden bit, který určuje, zda tam je inkoust (když je bit nastavený) nebo podklad (papír, když je roven 0). Každému čtverci 8x8 bodů, což je právě jeden znak, je pak přiřazen jeden byte určující barvu papíru a barvu inkoustu. To umožňuje uložit jeden znak do 8 bytů (jeden byte je jeden mikrořádek znaku) + 1 byte jako barva.

Druhým problémem je způsob uložení jednotlivých bodů - opět je nezvykle krkolomné. Obraz totiž není uložen po znacích ani po mikrořádcích. Tedy po mikrořádcích ano, ale v přeházeném pořadí.

Obraz je rozdělen na 3 třetiny, tj. řádky 0-7 patří do první, 8-15 do druhé a 16 - 23 do třetí. Jeho uložení vypadá následovně: nejprve je uložen celý první mikrořádek (tj. 32 bytů - první mikrořádek první textové řádky), pak následuje devátý mikrořádek (tj. první mikrořádek druhé textové řádky), atd. až je uložen první mikrořádek osmé textové řádky. Poté jsou uloženy všechny druhé mikrořádky. Tak to pokračuje až k osmému a uložení celé třetiny obrazu. Stejně se potom ukládají i následující třetiny.

Nakonec jsou uloženy atributy, a to překvapivě postupně z levého horního rohu po řádcích.


Jak bylo řečeno, atribut je dlouhý jeden byte a má následující formát:

Bity76543210
VýznamFBPPPIII

kde

F znamená nastavení blikání
B nastavení jasu
PPP uchovávají číslo barvy papíru (z 8 možných)
III je číslo inkoustu (z 8 možných)

Samotný výpočet adresy bodu potom vypadá následovně:

Bity1514131211109876543210
Hodnota010TTMMMZZZSSSSS


kde
bity 15,14 a 13 ukazují na začátek VideoRAM (16384)
TT znamená číslo třetiny (možné pouze 0-2, tj. 00, 01 nebo 10)
MMM je číslo mikrořádku v rámci řádku (0-7)
ZZZ je pořadí znakového řádku na dané třetině obrazovky
SSSSS je číslo znakového sloupce (0 - 31)

Výpočet adresy atributu vypadá takto:

Bity1514131211109876543210
Hodnota010110TTZZZSSSSS

kde
bity 15 až 10 ukazují na začátek paměti pro atributy ve VideoRAM (22528)
TT znamená číslo třetiny (možné pouze 0-2, tj. 00, 01 nebo 10)
ZZZ je pořadí znakového řádku na dané třetině obrazovky
SSSSS je číslo znakového sloupce (0 - 31)


23552 .. 23750
Tahle část paměti je vyhrazena pro systémové proměnné. Ty obsahují informace o stavu systému a různých nastaveních, jako například pro vyhodnocení stištěné klávesy, adresu začátku fontu, používané barvy a také RAMTOP, což je adresa konce programu v BASICu a začátek oblasti používané strojovým kódem a daty.

23751 .. RAMTOP
Zde se ukládá program v BASICu, hodnoty proměnných a jsou zde také zásobníky pro skok, matematické výpočty a další pomocné operace.

RAMTOP .. 65535
Paměť od hodnoty RAMTOP až do konce paměti je vyhrazena pro různá data a programy ve strojovém kódu.

Rozdíl mezi pamětí ZX Spectra a Didaktika Gamy spočívá v tom, že Didaktik má celkem 80 kb RAM. Vzhledem k tomu, že procesor Z80 A má 16-ti bitovou adresovou sběrnici, není možné adresovat celých 80 kb najednou. Proto je paměť Gamy tak, že po 16 kb paměti ROM následuje 16 kb RAM organizované shodně s ZX Spectrem 48 kb. Na adrese 32769 jsou uložené dvě paměťové banky o velikosti 32 kb, které je možno pomocí příkazů BASICu OUT 127,1 nebo OUT 127,0 přepínat.

Trochu složitější situace nastává u ZX Spectra 128 a jeho následovníků (+2,+3). Všechny typy Spectra 128 kb mají svou paměť rozdělenou do 8 stránek o délce 16 kb, jejichž přepínání je u všech těchto verzí stejné. Rozdíl mezi verzemi 128/ +2 a +3 byl v rychlosti programu, běžícího v těchto stránkách. Některé stránky jsou totiž obnovovány ("refrešovány") obvodem ULA, některé procesorem. Ve stránkách, jejichž obnovu provádí ULA, běží programy pomaleji než v těch, jejichž obnovu obsahu provádí procesor. To je způsobeno tím, že když ULA obnovuje obsah paměti a procesor si chce ve stejnou dobu číst obsah této adresy, tak procesor musí počkat.

Rychlé stránkyPomalé stránky
ZX 128, ZX 128 +20, 2, 4, 61, 3, 5, 7
ZX 128 +30, 1, 2, 34, 5, 6, 7


Stránky jsou v paměti rozmístěny následovně:

0 .. 16383
U ZX 128 a následujících typů byla upravena ROM (například byl vylepšen BASIC - vylepšená editace, přidány příkazy pro ovládání čipu AY apod.), ovšem stále bylo nutno zachovat zpětnou kompatibilitu. Výsledkem jsou tedy dvě paměti ROM označované jako ROM0 (upravená) a ROM1 (kompatibilní s 48k modelem), které se dají přepínat (pouze ze strojového kódu, při pokusu o přepnutí z BASICu by nastal RESET).

16384 .. 32767
Na této adrese je vždy zobrazena stránka číslo 5

32768 .. 49151
Tady je vždy stránka číslo 2

49152 .. 65535
Na tuto adresu se dají zobrazit všechny stránky (samozřejmě kromě ROM), tj. stránky očíslované 0-7. Pokud se na tuto adresu přestránkují stránky 2 nebo 5, tak se jednoduše zdvojí. Pokud tedy na tuto adresu zobrazíme stránku číslo 5 a pak zapíšeme na adresu 49152 hodnotu 255, objeví se na obrazovce krátká čára (neboť stránka 5 se zobrazuje zároveň i od adresy 16384, kde je VideoRAM). Stejné zdvojení platí samozřejmě i pro stránku číslo 2.

Při stránkování z BASICu je nutné nastavit si RAMTOP maximálně na hodnotu 49151 (konec stránky 2), jinak dojde k "spadnutí" systému, neboť při přesahu RAMTOP by při přestránkování přišel systém o své zásobníky a proměnné... Aby nebylo málo zmatků při stránkování z BASICu, tak při použití BASICu 128 používají rutiny z ROM stránkování samy, a tedy ho pro BASICový program nemůžete použít. To se samozřejmě dá jednoduše obejít, a to tak, že přepnete do BASICu kompatibilního s původním Spectrem 48 příkazem USR 0, kde vám ovšem možnost stránkování zůstane zachována.

Další nespornou výhodou Spectra 128 oproti 48k typům je takzvaná VRAM2 , neboli druhá VideoRAM. To v praxi znamená, že místo VideoRAM ležící od adresy 16384 můžeme zobrazit stránku číslo 7 na adrese 49152, která může být samozřejmě i odstránkována. Takže budeme mít celou paměť pro sebe a přesto uvidíme obrázek. To umožňuje urychlit zobrazování, aniž by na obrazovce cokoliv blikalo nebo cukalo.

Přepínání dvou VideoRAM zároveň sloužilo i jako oblíbený zdroj zábav programátorů - faktu, že při RESETu počítače se přepíná VideoRAM vždy zpět na stránku číslo5 využil např. BUSYsoft k jednoduchému efektu - celý program používal pouze druhou VideoRAM, tedy stránku číslo 7. Do stránky číslo 5 uložil text, ve kterém si stěžuje program uživateli, že ho RESETuje. No a při stisku RESETu se místo stránky 7 zobrazila stránka číslo 5 a uživatel se divil, jak program reaguje na stisk RESETu.


Stránka byla už zobrazena: 647 ×
  Aktualizováno: 3. 5. 2018, 10:28



     psp-ikona.gif, 2 kB    Text to HTML converter and formatter  builder_ikonka.gif, 3 kB
           
  Best Old Games      kabelmanie.gif, 2 kB  root_ico.gif, 2 kB  český diskmag pro počítače ZX Spectrum a kompatibilní
synapse.gif, 4 kB   TuningPC.cz - Vše pro tuning a casemodding vašeho PC        pspad88x31.gif  delphix.gif, 1 kB
sgatlantis_88x31_3.jpg, 4 kB  atlan.gif, 22 kB  arkon.jpg, 12 kB  ico_abeceda.gif, 888B  blog.idnes.cz   
           
       
 
  torry_logo.gif, 4 kB  

Stránka načtena za 0.0007 sekund.