MemExt

Poslední aktualizace dokumentu: 16.12. 2005

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žka Počet Cena za kus Cena celkem Zdroj
74LS02 1 ks 8,- 8,- GM Elektronic
74LS04 1 ks 6,- 6,- GM Elektronic
74LS10 1 ks 7,- 7,- GM Elektronic
7489 2 ks 22,- 44,- Jaromír Buček
74LS138 1 ks 6,- 6,- GM Elektronic
74LS157 1 ks 8,- 8,- GM Elektronic
29F040 1 ks 58,- 58,- GM Elektronic
628512 1 ks 145,- 145,- GM Elektronic
DIL32 2 ks 18,- 36,- GM Elektronic
DIL28 - spojka 1 ks 40,- 40,- GM Elektronic
Plošný spoj 1 ks 130,- 130,- Jaromír Buček
kondenzátory a odpory 12,-  
CELKEM 500,-  

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.

0000h JP 748h C3 48 07 úprava počátečního skoku
0748h LD BC, 0E7h 01 E7 00 B=0 adresa stránkovací paměti, C=IO port stránkování
074Bh LD E, Bh 58 E=0 hodnota stránkovaní
074Ch OUT (C), E ED 59 ulož hodnotu pro stránkovaní
074Eh INC E 1C zvýšení hodnoty pro stránkovací paměť
074Fh LD A, B 78 zvýšení adresy stránkovací paměti
0750h ADD A, 10h C6 10
0752h LD B, A 47
0753h JR NZ, 074Ch 20 F7 smyčka poběží celkem 16x
0755h JP E800h C3 00 E8 pokrač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
4000h LD BC, 30E7h B=30 (logická paměť 3000-3FFF), C=port stránkování
4003h LD A, 0A3h A=A3 (stránka FLASH A3)
4005h OUT (C), A nastav stránkování
Hlavní smyčka
4007h LD HL, 2000h HL=data adresa zdroje
400Ah LD DE, 3000h DE=data adresa cíle (programování)
400Dh LD A, 0F0h RESET OBVODU FLASH - zápis bajtu F0 kamkoli
400Fh LD (DE), A
4010h LD A, (DE) Čte bajt z FLASH
4011h CP (HL) a pokud to není stejné s tím co tam máme dát
skočíme na programování
4012h JR NZ,401Ch
4014h INC HL další adresy
4015h INC DE
4016h LD A, H test jestli to už není vše
4017h CP 30h
4019h JR NZ, 4010h
401Bh RET
Programování bajtu
401Ch AND (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
401Dh CP (HL)
401Eh JR NZ,403Bh
4020h LD A, 0AAh Sequence programování - krok 1
na adresu ve FLASH xx555 zapiš AA
4022h LD (3555h), A
4025h CPL Sequence programování - krok 2
na adresu ve FLASH xx2AA zapiš 55
4026h LD (32AAh), A
4029h LD A, 0A0h Sequence programování - krok 3
na adresu ve FLASH xx555 zapiš A0
402Bh LD (3555h), A
402Eh LD A, (HL) Sequence programování - krok 4
na správnou adresu zapiš správný bajt
402Fh LD (DE), A
4030h LD C, A bajt dej i do C
4031h LD A, (DE) čti bajt z FLASH
4032h CP C pokud jsou tam správná data
konec programování bajtu
4033h JR Z, 400Dh
4035h BIT 5, A pokud je konec časového limitu
konec programování bajtu
4037h JR Z, 400Dh
4039h JR 4031h další průchod čtením a testováním
Mazání sektoru FLASH (!!! pozor maže celý sektor FLASH to je 16 stránek !!!)
403Bh LD A, 0AAh Sequence sektor erase - krok 1
na adresu ve FLASH xx555 zapiš AA
403Dh LD (3555h), A
4040h CPL Sequence sektor erase - krok 2
na adresu ve FLASH xx2AA zapiš 55
4041h LD (32AAh), A
4044h LD A, 80h Sequence sektor erase - krok 3
na adresu ve FLASH xx555 zapiš 80
4046h LD (3555h), A
4049h LD A, 0AAh Sequence sektor erase - krok 4
na adresu ve FLASH xx555 zapiš AA
404Bh LD (3555h), A
404Eh CPL Sequence sektor erase - krok 5
na adresu ve FLASH xx2AA zapiš 55
404Fh LD (32AAh), A
4052h LD A, 30h Sequence sektor erase - krok 6
na nějakou adresu ve správném sektoru zapiš 30
4054h LD (DE), A
4055h LD B, 0 chvilku počkej
4057h EX (SP), HL
4058h DJNZ 4057h
405Ah LD A, (DE) a pokud sektor není vymazán čekej dál
405Bh INC A
405Ch JR NZ, 4057h
405Eh JR 4007h vš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 FLASH Adresa FLASH v MZ800 Stránkovací adresa Mapování BIOSu
00000h 60000h E0:000h  
10000h 70000h F0:000h  
20000h 40000h C0:000h  
30000h 50000h D0:000h  
40000h 20000h A0:000h  
50000h 30000h B0:000h  
60000h 00000h 80:000h mód MZ800 stránky 80h, 81h, 82h a 83h
70000h 10000h 90:000h mód MZ700 stránky 90h, 91h, 92h a 93h