Vše o MZ-800 -  Ramdisk MZ-1R18

 

Zpět Nahoru Další

 

 

        Obsah této stránky:

bullet

RamDisk MZ-1R18

bullet

Přepínání paměti (stránkování paměti)

RAMDISK MZ-1R18
Ramdisk MZ=1R18 je hardwarový přídavek, který připojuje 64k bytový disk. Tento ale není přímo přístupný, ale je adresovatelný pouze přes porty. Z-80 CPU tuto oblast také může adresovat. Na to se musí napsat podprogram, aby se na adresu na ramdisku dala napsat ev. přečíst nějaká hodnota. Adresa by měla být v HL, příslušná hodnota musí být v akumulátoru.

K tomu malý příklad:

 

Program pro psaní na ramdisk
1200 F5     PUSH AF
1201 C5     PUSH BC

1202 6F     LD A,L
1203 44     LD B,H
1204 0E EB  LD C,EBH
1206 ED 79  OUT (C),A
1208 C1     POP BC
1209 F1     POP AF
120A D3 EA  OUT (EAH),A
120C C9     RET

Program pro čtení z ramdisku
1210 F5     PUSH AF
1211 C5     PUSH BC
1212 6F     LD A,L
1213 44     LD B,H
1214 0E EB  LD C,EBH
1216 ED 79  OUT (C),A
1218 C1     POP BC
1219 F1     POP AF
121A DB EA  IN A,(EAH)
121C C9     RET

Důležitý je program, kterým se dá přenést oblast z paměti do libovolné oblasti ramdisku.

K tomu jsou zapotřebí tři hodnoty:

a) počáteční adresa bloku v paměti (HL registr)
b)    "        "      "   v ramdisku (DE registr)
c) délka bloku.

Používáme přitom již napsaný program, který píše 1 byte na adresu v ramdisku. Chceme například oblast od 2000H do 3000H napsat na ramdisk od adresy 0000H

Zde program k tomu:
2000 21 00 20   LD HL,2000H   ;počáteční adresa v paměti
2003 11 00 00   LD DE,0000H   ;   "        " v ramdisku
2006 01 00 10   LD BC,1000H   ;délka bloku
2009 1A         LD A,(HL)
200A E5         PUSH HL       ;zachraň HL
200B D5         PUSH DE       ;HL = DE
200C E1         POP HL
200D CD 00 12   CALL 1200H    ;napiš obsah akumulátoru na ramdisk
2010 E1         POP HL
2011 23         INC HL
2012 0B         DEC BC
2013 13         INC DE
2014 78         LD A,C        ;BC = 0 ?
2015 B1         OR C
2016 C2 09 20   JP NZ,2009H   
2019 C3 AD 00   JP 00ADH      ;skok do monitoru

Nyní chceme tento blok z ramdisku opět načíst do paměti.Potřebujeme znovu ty samé tři parametry, ale tentokrát má být blok přenesen na adresu 7000H v paměti. Také tentokrát použijeme znovu podprogram, který čte 1 byte z ramdisku.

2020 11 00 70   LD DE,7000H   ;poč.adresa v paměti
2023 21 00 00   LD HL,0000H   ; "     "   v ramdisku
2026 01 00 10   LD BC,1000H   ;délka bloku
2029 CD 10 12   CALL 1210H    ;čti byte z ramdisku
202C 12         LD (DE),A
202D 23         INC HL
202E 13         INC DE
202F 0B         DEC BC
2030 78         LD A,B        ;BC = 0 ?
2031 B1         OR C
2032 C2 29 20   JP NZ,2029H   ;když ne, čti dál
2035 C3 AD 00   JP 00ADH      ;skok do monitoru

Tyto podprogramy lze bez úprav vložit do vašich programů. Musíte jen v každém programu změnit adresu bloku.
 

Přepínání paměti (stránkování paměti)
MZ-800 má různé paměti, které leží vzájemně paralelně. Tyto mohou být přes přepínání paměti (stránkování paměti) vypínány ev. zapínány. Protože CPU je adresovatelný pouze na 64k bytů je toto přepínání nezbytností. Normálně se toto provádí pomocí určitých povelů IN a OUT. Důležité je, že program pro přepínání paměti nesmí být v té oblasti kde se přepínání provádí. Výsledek by zpravidla bylo zhroucení programu. Nyní se podívejme co jednotlivé povely IN a OUT způsobují:

a) OUT  (CEH),A
Jestliže byla předtím do akumulátoru vložena hodnota 8H, přepne se MZ-800 do módu MZ-700. Při uložení jiných hodnot v akumulátoru (možno pouze 0 až 7) přepne se MZ-800 do specifického grafického módu. K tomu blíže v kapitole o grafice.

b) OUT  (E0H),A
Při tomto povelu OUT se oblast paměti 0000H-8000H přepne jako RAM. Zbytek paměti se nezmění.

c) OUT  (E1H),A
Zde jsou opět dva módy:
  1) MZ-700 mód (přes LD A,8H OUT (CEH),A)
  Oblast od D000H do FFFFH se zapojí jako RAM.

  2) MZ-800 mód
  Oblast od E000H do FFFFH se zapojí jako RAM.

d) OUT  (E2H),A
Oblast od 0000H do FFFFH se zapojí jako RAM.

e) OUT  (E3H),A
  1) MZ-700 mód
  Oblast od D000H do DFFFH se zapojí jako VRAM.
  Aktivuje se horní monitor od E000H do FFFFH.

  2) MZ-800 mód
  Aktivuje se pouze horní monitor ROM.

f) OUT  (E4H),A
  1) MZ-700 mód
  Oblasti 0000H-1000H a E000H-FFFFH se zapojí jako ROM.
  Aktivuje se VRAM od D000H do DFFFH. Tento mód odpovídá módu MZ-80 K.

  2) MZ-800 mód
  Oblasti 0000H-1000H a E000H-FFFFH se zapojí jako ROM.
  Oblast od 1000H do 1FFFH se aktivuje jako CGROM.
  Aktivuje se vysoká rozlišitelnost VRAM od 8000H nahoru
  (podle rozšíření grafické paměti). Zbytek paměti je RAM.

g) OUT  (E5H),A
Jako OUT  (E1H),A ale příslušná oblast se zcela odpojí.

h) OUT  (E6H),A
Jako OUT  (E5H),A , ale návrat ke stavu před zabráněním přístupu.

i) IN   A,(E0H)
Aktivuje uvnitř OUT (E4H) módu grafiku.

j) IN   A,(E1H)
Vypíná grafiku uvnitř OUT (E4H) módu.

Nyní bychom k tomuto chtěli uvést příklad.ROM Monitor MZ-800 má být přemístěn z ROM do paralelní RAM. Potom budeme mít software monitor, který můžeme libovolně měnit.

Nejprve program:

1200 21 00 00   LD HL,0000H   ;počáteční adresa ROM monitoru
1203 11 00 20   LD DE,2000H   ;volná oblast v paměti
1026 01 00 10   LD BC,1000H   ;délka ROM monitoru
1209 E5         PUSH HL       ;zachraň HL
120A C5         PUSH BC       ;   "    BC
120B D5         PUSH DE       ;   "    DE
120C ED B0      LDIR          ;přenos do volné paměti
120E E1         POP HL        ;HL=2000H
120F C1         POP BC        ;BC=1000H
1210 D1         POP DE        ;DE=0000H
1211 D3 E0      OUT (E0H),A   ;zapoj oblast 0000H-1000H jako RAM
1213 ED B0      LDIR          ;přenes do RAM monitor
1215 C3 AD 00   JP    00ADH   ;horký start RAM monitoru

Pro vysvětlení. Nejprve přeneseme ROM monitor, který leží v oblasti od 0000H-1000H do volné oblasti paměti od adresy 2000H. Potom zapojíme oblast od 0000H do 1000H jako RAM a přeneseme sem program ROM monitoru a odstartujeme ho. Je těžké uvnitř oblasti 0000H-1000H a E000H-FFFFh, když jsou tyto zapojeny jako RAM vyvolat podprogramy jako 0015H, protože tyto podprogramy potřebují mód provozního systému MZ-80 K. Musí se buď upravit software nebo vytvořit specielní podprogramy. Mimochodem můžete, chcete-li, manipulovat pouze s RAM monitorem. Každou buňku paměti v oblasti 0000H-1000H můžete změnit M-povelem.

 

Domů | Sharp MZ-800 | 8 bit klub Brno | Download | Kniha návštěv | Obchod SCAV | Vyhledání na těchto stránkách | Mapa stránek

 

Tyto stránky byli naposledy aktualizovány dne 08. 02. 2014      Copyright © 05/2006 - Brázda Pavel - Scav - webmaster(c)scav.cz

 

 

Google