Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

[SharpMZ] MZ-1500 - mapovani pameti a zobrazovani grafiky

Michal Hucik - ORDOZ <ordoz@[doména skryta]> SHARP MZ-800


Ahoj, dnes jsem cele odpoledne a vecer venoval pruzkumu MZ-1500 a protoze nejsem sketa, tak se o sve nove poznatky podelim :)

Zde jsou me poznatky, ktere castecne vychazeji z toho co jsem si prelozil z japonstiny a castecne z mych experimentu.

Informace jsem sbiral predevsim tady http://www.maroon.dti.ne.jp/youkan/mz700/mziomap.html a na japonske wiki.


Pocitac ma 64 kB RAM, 4 kB VRAM, 24 kB PCG VRAM

Rozliseni 320x200, coz odpovida 40 x 25 znaku obrazu.


Organizace pameti:
================


-- dolni blok --

0000 - 0FFF: ROM/RAM


-- horni blok --

D000 - DFFF: VRAM, ta sklada se ze 4 casti (mimochodem v kazde zustava nevyuzito 24 bajtu na konci)

    D000 - D3FFF: textova VRAM (stejna jako na MZ-700)

    D400 - D7FF: PCG1_VRAM

    D800 - DBFFF: atributova VRAM (temer jako na MZ-700: 0. - 2. bit BG color, 4. - 6. bit FG color, 7. bit sada)

    DC00 - DFFF: PCG2_VRAM


E000 - E008: mapovane porty 8255, 8253 a status registr

    Se status registrem jsem neexperimentoval, ale podle popisu pri cteni od 7. bitu dolu: /HBLK, -, -, JOY_B, JOY_B, JOY_A, JOY_A, TEMPO, pri zapisu je na 0. bitu hradlovani zvuku z 8253


E009 - E000F: nevyuzito


E010 - E7FF: vyhrazeno pro ROM z periferii na MZ-700, ale mam pocit, ze u MZ-1500 je nevyuzito a nastaveno trvale na 0xFF


E800 - FFFF: horni ROM


Mapovani pameti:
================


Provadi se pres OUT, nejprve standardni:


E0 - nastavi dole RAM

E1 - nastavi nahore RAM

E2 - nastavi dole ROM

E3 - nastavi nahore VRAM/ROM

E4 - nastavi dole ROM a nahore VRAM/ROM

E5 - !!!! v zavislosti na predane hodnote namapuje na D000 - EFFFF specialni pamet, F000 - FFFF je nevyuzita a je nastavena na 0xff !

    0x00: CGROM (ma delku jen 0x1000 a je tam 2x za sebou)

    0x01: PCG_PLANE1

    0x01: PCG_PLANE2

    0x01: PCG_PLANE3

E6 - odpoji CGROM, nebo PCG_PLANEx (pokud po OUT (0xE5),a provedete napr OUT na port E3, nebo E4, tak se zmena neprojevi! nejprve je potreba pamet odpojit!)



Zobrazovani:
============


Zobrazovani ala MZ-700 neni potreba nijak rozebirat:

0xD000 -> 0x6B (zobraz na pozici 0,0 znak *)
0xD800 -> 0x71 (nastav na pozici 0,0 modre pozadi, bile popredi a 1. znakovou sadu)


1. znakova sada obsahuje velka pismena a rozsypany caj katakana
2. znakova sada obsahuje mala pismena a rozsypany caj hiragana

Obe znakove sady jsou k videni na vyse uvedene adrese.


Zobrazovani ala MZ-1500:

Je vylepseno o PCG, coz je neco jako CGRAM v MZ-700 provozovanem na MZ-800 :) akorat ze v MZ800 ji mame jen jako jednobarevnou masku, zatimco v MZ-1500 je znak 8x8 pixelu ulozen do 3 barevnych rovin a je tak tedy mozne zobrazit ve znaku 8x8 vsechny barvy najednou (v rezimu MZ-700 zobrazujeme jen 2 barvy najednou). Navic je mozne na jednom znaku aplikovat jak TXT (MZ-700), tak i PCG. Tuto vlastnost lze nastavovat zvlast pro kazdou jednotlivou pozici na obrazovce. Globalne pak pres port 0xF0 muzeme uplne povolit, nebo zakazat zobrazovani vsech PCG. Portem 0xF0 muzeme nastavit barvy palet podle jednotlivych rovin.

V PCG je mozno nadefinovat celkem 1024 znaku, z nihz kazdy zabira 8 bajtu v kazde ze 3 rovin.

Pozn: Vec, ktera dokaze zneprijemnit zivot a zkoumani pocitace - po resetu ta svine ROM vymaze obsah vsech PCG rovin!


Port 0xF0:
--------------

    0. bit - globalne povoluje/zakazuje zobrazovani PCG
    1. bit - urcuje prioritu zobrazovani:

        0 - nejprve se vykresli MZ-700  pozadi, pak PCG, pak MZ-700 TXT znak
        1 - nejprve se vykresli MZ-700  pozadi, pak MZ-700 TXT znak, pak PCG


Port 0xF1: (po resetu jsou uz palety nastaveny - zatim jsem nezkoumal, zda se o to stara ROM, nebo GDG)
---------------

    4. - 6. bit: kombinace rovin
    0. - 2. bit: barva

       

Kdyz mame v PCG vytvoreny nejake patterny, k paletam mame prideleny barvy, portem 0xF0 jsme povolili nejakou metodu zobrazovani PCG, tak:


V pameti PCG1_VRAM a PCG2_VRAM na pozici nejakeho znaku uvedeme cislo patternu 0 - 1023. V PCG1_VRAM se zapise dolnich 8 bitu a v pameti PCG2_VRAM se na pozici 6. - 7. bitu zapisou horni 2 bity z cisla patternu. Zaroven nastavenim 3. bitu v povolime, nebo zakazeme zobrazovani PCG na aktualni pozici. Upozornuji na to, ze v PCG2_VRAM mame tedy 1024 bajtu ze kterych se vyuzivaji jen 3 bity, coz je ponekud trapne...


Od teorie k praxi:
===============


Experimentoval jsem tak, ze jsem si kod nejprve zkompiloval na PC a pak jsem v monitoru MZ-1500 nabusil kod rucne. Monitor je starsi, nez na MZ-800, takze zrejme nezna prikaz Goto. Zna jen Jump. Pokud v programu pouzijete unstrukci RET, tak jde pocitac do resetu.

Kod berte s rezervou - prikazy jsou napsany v takovem poradi a takovym zpusobem, aby se dobre experimentovalo. Puvodni kod uz jsem smazal. Pisu to z hlavy, tak snad nenasekam moc chyb.



# Takhle by mel asi zacinat kazdy kod ... z monitoru to vsak neni nutne - stejne tak jako neni nutne nastavovat palety.
# out (0xe3),a    ; hore VRAM a ROM
# out (0xe6),a    ; pro jistotu deaktivujeme CGROM, ci PCG

ld a, 0x6B
ld (0xd000),a    ; na pozici 0,0 znak *

ld a, 0x70
ld (0xd800),a    ; na pozici 0,0 cerne pozadi, bile pismo

ld a, 0x00          ; k pozici 0,0 pridelime PCG pattern 0 a povolime jeho zobrazeni
ld (0xd400),a    ; dolnich 8 bitu PCG pozice
ld a, 0x08
ld (0xdc00),a    ; horni 2 bity PCG pozice do 6. a 7. bitu | 0x08 - povolit PCG na teto pozici


ld a,0x01
out (0xF0),a    ; urcime globalni prioritu zobrazovani PCG a TXT a globalne povolime zobrazeni PCG


ld a,0x02
out (0xe5),a    ; pripojime si 2. PCG rovinu


ld b,0xff            ; vyrobime si par velice jednoduchych patternu slozenych jen z 2. PCG roviny
ld hl,0xd000
$loop:
ld (hl),b
inc hl
djnz $loop

; nyni uz by jsme meli mit zobrazenu hvezdicku s cervenym patternem


; Konec pribehu - stop
di
halt

; a nebo:

; hokuspokus 1
ld a,0x24
out (0xf1),a    ; 2. paletu nastavime na zeleno


; hokuspokus 2
ld a,0x03
out (0xF0),a    ; zmenime globalni prioritu zobrazovani TXT a PCG


; pokud by jsme se chteli korektne vratit a opet namapovat VRAM
out (0xe3),a    ; hore VRAM a ROM
out (0xe6),a    ; deaktivujeme CGROM, ci PCG
di
halt


Zobrazit původní podobu

Vlákno · 2 zprávy

Zobrazit celé vlákno na jedné stránce

  1. [SharpMZ] MZ-1500 - mapovani pameti a zobrazovani grafiky Michal Hucik - ORDOZ <ordoz@[doména skryta]>
  2. Re: [SharpMZ] MZ-1500 - mapovani pameti a zobrazovani grafiky Michal Hucik - ORDOZ <ordoz@[doména skryta]>