MemExt

Obsah


Úvod

Modul MemExt umožní používat v MZ800 až 1 MB operační paměti. Obsahuje stránkovací systém, který převádí 16-ti bitovou adresu mikroprocesoru Z80 na 20-ti bitovou adresu paměti. Nastavení stránkovací paměti se provádí zápisem na I/O port E7h, kde se 8 bitů datové sběrnice zapisuje do buňky určené nejvyššími 4-mi bity 16-ti bitové adresní sběrnice, nastavení tedy musí být provedeno instrukcí OUT (C), r kdy vyšší 4 bity registru B určují adresu ve stránkovací paměti. Zapojení neumožňuje stránkovací paměť programově číst.

Popis zapojení


Instalace modulu


Rozpočet

PoložkaPočetCena za kusCena celkemZdroj
74LS021 ks8,-8,-GM Elektronic
74LS041 ks6,-6,-GM Elektronic
74LS101 ks7,-7,-GM Elektronic
74892 ks22,-44,-Jaromír Buček
74LS1381 ks6,-6,-GM Elektronic
74LS1571 ks8,-8,-GM Elektronic
29F0401 ks58,-58,-GM Elektronic
6285121 ks145,-145,-GM Elektronic
DIL322 ks18,-36,-GM Elektronic
DIL28 - spojka1 ks40,-40,-GM Elektronic
Plošný spoj1 ks130,-130,-Jaromír Buček
kondenzátory a odpory12,- 
CELKEM500,- 

Příklady nastavení stránkování

Ovládání stránkovacího mechanizmu je velice jednoduché tak jen pár příkladů:

Inicializace stránkování

Protože HW inicializace stránkování by byla příliš složitá je nutná úprava BIOSu. Následující program nastaví stránkovací paměť takto: logická paměť 0-FFFh bude mít přimapovanou stránku 00, logická paměť 1000-1FFFh bude mít přimapovanou stránku 01, ..., logická paměť F000-FFFFh bude mít přimapovanou stránku 0F.

0000hJP 748hC3 48 07úprava počátečního skoku
0748hLD BC, 0E7h01 E7 00B=0 adresa stránkovací paměti, C=IO port stránkování
074BhLD E, Bh58E=0 hodnota stránkovaní
074ChOUT (C), EED 59ulož hodnotu pro stránkovaní
074EhINC E1Czvýšení hodnoty pro stránkovací paměť
074FhLD A, B78zvýšení adresy stránkovací paměti
0750hADD A, 10hC6 10
0752hLD B, A47
0753hJR NZ, 074Ch20 F7smyčka poběží celkem 16x
0755hJP E800hC3 00 E8pokračovat na IPL

Postup při programování FLASH

Zadání:
1. mám v logické paměti na adrese 2000-2FFF něco co chci dostat do FLASH do stránky A3
2. stránka A3 ve FLASH je buď prázdná, a nebo mě nezajímá co se stane s obsahem stránek A0, A1, A2, A4 - AF
3. mohu si přistránkovat FLASH na adresy 3000-3FFF (program a zásobník je v logické paměti někde jinde)
Přistránkování FLASH
4000hLD BC, 30E7hB=30 (logická paměť 3000-3FFF), C=port stránkování
4003hLD A, 0A3hA=A3 (stránka FLASH A3)
4005hOUT (C), Anastav stránkování
Hlavní smyčka
4007hLD HL, 2000hHL=data adresa zdroje
400AhLD DE, 3000hDE=data adresa cíle (programování)
400DhLD A, 0F0hRESET OBVODU FLASH - zápis bajtu F0 kamkoli
400FhLD (DE), A
4010hLD A, (DE)Čte bajt z FLASH
4011hCP (HL)a pokud to není stejné s tím co tam máme dát
skočíme na programování
4012hJR NZ,401Ch
4014hINC HLdalší adresy
4015hINC DE
4016hLD A, Htest jestli to už není vše
4017hCP 30h
4019hJR NZ, 4010h
401BhRET
Programování bajtu
401ChAND (HL)kontrola zda bajt může být naprogramován:
nelze programovat log "1" na log "0"
pokud nelze musí se sektor paměti FLASH nejprve vymazat
401DhCP (HL)
401EhJR NZ,403Bh
4020hLD A, 0AAhSekvence programování - krok 1
na adresu ve FLASH xx555 zapiš AA
4022hLD (3555h), A
4025hCPLSekvence programování - krok 2
na adresu ve FLASH xx2AA zapiš 55
4026hLD (32AAh), A
4029hLD A, 0A0hSekvence programování - krok 3
na adresu ve FLASH xx555 zapiš A0
402BhLD (3555h), A
402EhLD A, (HL)Sekvence programování - krok 4
na správnou adresu zapiš správný bajt
402FhLD (DE), A
4030hLD C, Abajt dej i do C
4031hLD A, (DE)čti bajt z FLASH
4032hCP Cpokud jsou tam správná data
konec programování bajtu
4033hJR Z, 400Dh
4035hBIT 5, Apokud je konec časového limitu
konec programování bajtu
4037hJR Z, 400Dh
4039hJR 4031hdalší průchod čtením a testováním
Mazání sektoru FLASH (!!! pozor maže celý sektor FLASH to je 16 stránek !!!)
403BhLD A, 0AAhSekvence sektor erase - krok 1
na adresu ve FLASH xx555 zapiš AA
403DhLD (3555h), A
4040hCPLSekvence sektor erase - krok 2
na adresu ve FLASH xx2AA zapiš 55
4041hLD (32AAh), A
4044hLD A, 80hSekvence sektor erase - krok 3
na adresu ve FLASH xx555 zapiš 80
4046hLD (3555h), A
4049hLD A, 0AAhSekvence sektor erase - krok 4
na adresu ve FLASH xx555 zapiš AA
404BhLD (3555h), A
404EhCPLSekvence sektor erase - krok 5
na adresu ve FLASH xx2AA zapiš 55
404FhLD (32AAh), A
4052hLD A, 30hSekvence sektor erase - krok 6
na nějakou adresu ve správném sektoru zapiš 30
4054hLD (DE), A
4055hLD B, 0chvilku počkej
4057hEX (SP), HL
4058hDJNZ 4057h
405AhLD A, (DE)a pokud sektor není vymazán čekej dál
405BhINC A
405ChJR NZ, 4057h
405EhJR 4007hvše znova od začátku

Programování FLASH mimo MZ800

Vzhledem k tomu, že obvod 7489 neguje data jsou na výstupech zapojeny invertory 74LS04, ale výstupů je osm a invertorů jen šest. Proto se neshodují adresy FLASH v MZ800 s adresami v jiném programátoru - nejsou totiž invertovány nejvyšší adresní bity B17 a B18.

Skutečná adresa FLASHAdresa FLASH v MZ800Stránkovací adresaMapování BIOSu
00000h60000hE0:000h 
10000h70000hF0:000h 
20000h40000hC0:000h 
30000h50000hD0:000h 
40000h20000hA0:000h 
50000h30000hB0:000h 
60000h00000h80:000hmód MZ800 stránky 80h, 81h, 82h a 83h
70000h10000h90:000hmód MZ700 stránky 90h, 91h, 92h a 93h