Press "Enter" to skip to content

Ja stránkujem, ty stránkuješ …

Stránkovanie pamäte v ZXS +3 / +2A

Ako som sľúbil v článku o ZXS +3, dnes som vám prichystal popis stránkovania RAM pre tieto stroje, teda pre +3 a +2A. Ako asi všetci vieme, procesor Z80 dokáže obsluhovať maximálne 65535 bajtov RAM a tak bola v 128k modeloch použitá známa finta so stránkovaním. Princíp spočíva v tom, že pomocou príslušného portu, dokážeme softvérovo odopnúť jednu časť pamäte a namiesto nej pripnúť inú časť pamäte. Aby sa to dalo takto realizovať, je pamäť 128k ZX Spectra rozdelená do ôsmich stránok o veľkosti 16384 bajtov. Tie sa potom pomocou portu 32765 pripínajú na adresu 49152, pričom stránky 5 a 2 sa jednoducho zdvoja. To čo zapíšete na 49152 sa objaví aj na 32768 v prípade stránky 2 a na 16384 v prípade stránky 5. Na obrázku nájdete význam bitov portu 32765. Bity 0-2 určujú číslo stránky, bit3 určuje, ktorá VRAM bude použitá, bit4 určuje ktorá ROM bude použitá a bit5 povoľuje alebo zakazuje stránkovanie. Bity 6 a 7 sú nevyužité.
mem map
Keď si pozriete mapu rozloženia pamäte, hneď vám bude jasné ako to funguje. Tie číselká v ľavých rohoch sú čísla stránok, v pravých rohoch je už konkrétna hodnota pre OUT 32765,XX a platia pre VRAM1, ak chcete zároveň pristránkovať aj VRAM2, pripočítajte k príslušnému číslu 8. Teda ak chcete VRAM2 a stránku číslo 0, príkaz bude OUT 32765,16+8. Z BASICu stránkujte zásadne v móde USR0, v 128k BASICu vám to hneď samo odstránkuje, lebo 128ROM furt stránkuje. Ako je vidieť, v základe je stránkovanie RAM v +3 rovnaké, ako v klasickej stodvadsaťosme, ale pre potreby FDD však bola pridaná ďalšia ROM a tak muselo byť rozšírené i stránkovanie. Je to trocha zložitejšie než by sme čakali, a tak sa to pokúsim vysvetliť. V podstate ide o to, že Amstrad pridal ku klasickému stránkovaciemu portu 32765 ešte jeden port 8189, na ktorom sa stránkuje pridaná ROM a nastavuje rozloženie pamäte pri ALLRAM móde. V podstate by o nič nešlo, keby to Amstrad nevymyslel tým svojím debilným spôsobom, takže ROM sa stránkuje podľa mňa úplne úchylne a to nielen horizontálne ako RAM, ale i vertikálne a tak neviem, či sa mi to podarí dostatočne vysvetliť. Predstavte si ROM rozložené do štvorca ako dlaždice, viď obrázok. Horizontálnym stránkovaním určujeme ktorý riadok bude použitý, vertikálnym stránkovaním určíme ktorý stĺpec bude použitý. V prvom riadku sú ROM0 a ROM1, v druhom riadku sú ROM2 a ROM3. Z toho potom vyplýva, že v prvom stĺpci je ROM0 a ROM2 a v druhom stĺpci je ROM1 a ROM3. A teraz nastáva tá správna diskotéka. Horizontálne stránkovanie, teda stĺpec ktorý ideme použiť, určuje bit4 portu 32765, teda ten ktorý na klasickej 128k mašine určuje, ktorá ROM má byť naspodku. Ak je bit4 portu 32765 nulový, bude sa pracovať s prvým stĺpcom (teda ROM0 a ROM2), ak je nastavený, bude sa pracovať s druhým stĺpcom, teda s ROM1 a ROM3. Vertikálne stránkovanie určuje bit2 portu 8189. Ak je nulový pracujeme s prvým riadkom, čiže s ROM0 a ROM1, ak je nastavený, pracujeme s druhým riadkom, teda ROM2 a ROM3, ALE je to podmienené ešte nultým bitom portu 8189, ktorý musí byť nulový, čím určíme, že sa stránkuje ROM. Ak je nultý bit portu 8189 nastavený, znamená to, že sa bude stránkovať RAM (teda zapneme ALLRAM mód) a v tomto prípade sa mení aj význam bit2 portu 8189, ktorý teraz spolu s bitom1 určuje rozloženie štyroch stránok RAM, pekne od 0 až po 65535. A keďže sú to dva bity, máme 4 možnosti rozloženia RAM. bit1=0, bit2=0 – stránky 0,1,2,3; bit1=0, bit2=1 – stránky 4,5,6,7; bit1=1, bit2=0 – stránky 4,5,6,3 a nakoniec bit1=1, bit2=1 – stránky 4,7,6,3. Prvé rozloženie je na nič, lebo nemáte k dispozícii VRAM, zvyšné tri módy sú plne využiteľné, i keď posledný mód používa VRAM2. No a to by bolo asi tak všetko. Je to typicky Amstradovský guláš a treba si to stránkovanie odskúšať na vlastnej koži, ináč ho je veľmi ťažké pochopiť. Ak budem mať niekedy čas, doplním sem nejaké príklady, na ktoré som už nemal silu. 128k zdar!

5 Comments

  1. sweet128 sweet128

    clanek
    zajimavy clanek

  2. yep
    je to haluz to +3 strankovanie a ze som sa pri mojej +2A nasedel kym som ho pochopil uplne…

  3. poke poke

    CPM
    Ty +3 ALLRAM strankovaci modu tu jsou hlavne pro CPM, ktera vyzaduje mit full 64kb ram a navic v idealnim pripade i bez pristrankovane Videoramky.Na vypis znaku na obrazovku jsou v CPM dispozici sluzby, ktere si sami VRAM pristrankuji nakresli do VRAM znak a zase VRAM odstrankuji.

  4. Flyyn Flyyn

    oprava
    Zdar,clanek peknej, jen mala opravana portu 32765 se prepinaj chipy, takze ve tvem oznaceni rom 0,1 na rom 2,3dole je 128editor a nebo +3dosa na portu 8189 se prepina A14

  5. Flyyn Flyyn

    omluva
    jsem vul a napsal jsem blbost, to strankovani je dobre Flyyn

Leave a Reply

Your email address will not be published. Required fields are marked *