<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<p><font size="+1">Ahoj, dnes jsem cele odpoledne a vecer venoval pruzkumu
MZ-1500 a </font><font size="+1"><font size="+1">protoze nejsem
sketa, tak se o sve nove poznatky podelim :)</font></font></p>
<p><font size="+1">Zde jsou me poznatky, ktere castecne vychazeji z
toho co jsem si prelozil z japonstiny a castecne z mych
experimentu. <br>
</font></p>
<p><font size="+1">Informace jsem sbiral predevsim tady
<a class="moz-txt-link-freetext" href="http://www.maroon.dti.ne.jp/youkan/mz700/mziomap.html">http://www.maroon.dti.ne.jp/youkan/mz700/mziomap.html</a> a na
japonske wiki. <br>
</font></p>
<p><font size="+1"><br>
</font></p>
<p><font size="+1">Pocitac ma 64 kB RAM, 4 kB VRAM, 24 kB PCG VRAM</font></p>
<p><font size="+1">Rozliseni 320x200, coz odpovida 40 x 25 znaku
obrazu.</font></p>
<p><font size="+1"><br>
</font></p>
<p><font size="+1">Organizace pameti:<br>
================<br>
</font></p>
<p><font size="+1"><br>
</font></p>
<p><font size="+1">-- dolni blok --<br>
</font></p>
<p><font size="+1">0000 - 0FFF: ROM/RAM</font></p>
<p><font size="+1"><br>
</font></p>
<p><font size="+1">-- horni blok --<br>
</font></p>
<p><font size="+1">D000 - DFFF: VRAM, ta sklada se ze 4 casti
(mimochodem v kazde zustava nevyuzito 24 bajtu na konci)<br>
</font></p>
<p><font size="+1"> D000 - D3FFF: textova VRAM (stejna jako na
MZ-700)</font></p>
<p><font size="+1"><font size="+1"> D400 - D7FF: PCG1_VRAM</font></font></p>
<p><font size="+1"><font size="+1"></font> D800 - DBFFF: atributova
VRAM (temer jako na MZ-700: 0. - 2. bit BG color, 4. - 6. bit FG
color, </font><font size="+1"><font size="+1">7. bit sada</font>)</font></p>
<p><font size="+1"><font size="+1"> DC00 - DFFF: PCG2_VRAM</font></font></p>
<p><br>
</p>
<p>E000 - E008: mapovane porty 8255, 8253 a status registr</p>
<p> 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</p>
<p><br>
</p>
<p>E009 - E000F: nevyuzito<br>
</p>
<p><br>
</p>
<p>E010 - E7FF: vyhrazeno pro ROM z periferii na MZ-700, ale mam
pocit, ze u MZ-1500 je nevyuzito a nastaveno trvale na 0xFF</p>
<p><br>
</p>
<p>E800 - FFFF: horni ROM<br>
</p>
<p><br>
</p>
<p>Mapovani pameti:<br>
================</p>
<p><br>
</p>
<p>Provadi se pres OUT, nejprve standardni:</p>
<p><br>
</p>
<p>E0 - nastavi dole RAM</p>
<p>E1 - nastavi nahore RAM</p>
<p>E2 - nastavi dole ROM</p>
<p>E3 - nastavi nahore VRAM/ROM</p>
<p>E4 - nastavi dole ROM a nahore VRAM/ROM
</p>
<p>E5 - !!!! v zavislosti na predane hodnote namapuje na D000 -
EFFFF specialni pamet, F000 - FFFF je nevyuzita a je nastavena na
0xff !<br>
</p>
<p> 0x00: CGROM (ma delku jen 0x1000 a je tam 2x za sebou)</p>
<p> 0x01: PCG_PLANE1</p>
<p> 0x01: PCG_PLANE2
</p>
<p> 0x01: PCG_PLANE3 <br>
</p>
<p>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!)<br>
</p>
<p><br>
</p>
<p><br>
</p>
<p>Zobrazovani:<br>
============</p>
<p><br>
</p>
<p>Zobrazovani ala MZ-700 neni potreba nijak rozebirat:</p>
<p>0xD000 -> 0x6B (zobraz na pozici 0,0 znak *)<br>
0xD800 -> 0x71 (nastav na pozici 0,0 modre pozadi, bile popredi
a 1. znakovou sadu)</p>
<p><br>
1. znakova sada obsahuje velka pismena a rozsypany caj katakana<br>
2. znakova sada obsahuje mala pismena a rozsypany caj hiragana</p>
<p>Obe znakove sady jsou k videni na vyse uvedene adrese.</p>
<p><br>
</p>
<p>Zobrazovani ala MZ-1500:<br>
</p>
<p>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.</p>
<p>V PCG je mozno nadefinovat celkem 1024 znaku, z nihz kazdy zabira
8 bajtu v kazde ze 3 rovin.</p>
<p>Pozn: Vec, ktera dokaze zneprijemnit zivot a zkoumani pocitace -
po resetu ta svine ROM vymaze obsah vsech PCG rovin!<br>
</p>
<p><br>
Port 0xF0:<br>
--------------</p>
<p> 0. bit - globalne povoluje/zakazuje zobrazovani PCG<br>
1. bit - urcuje prioritu zobrazovani:</p>
<p> 0 - nejprve se vykresli MZ-700 pozadi, pak PCG, pak
MZ-700 TXT znak<br>
1 - nejprve se vykresli MZ-700 pozadi, pak MZ-700 TXT
znak, pak PCG<br>
</p>
<p><br>
</p>
<p>Port 0xF1: (po resetu jsou uz palety nastaveny - zatim jsem
nezkoumal, zda se o to stara ROM, nebo GDG)<br>
---------------</p>
<p> 4. - 6. bit: kombinace rovin<br>
0. - 2. bit: barva <br>
</p>
<p> <br>
</p>
<p>Kdyz mame v PCG vytvoreny nejake patterny, k paletam mame
prideleny barvy, portem 0xF0 jsme povolili nejakou metodu
zobrazovani PCG, tak:</p>
<p><br>
</p>
<p>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...</p>
<p><br>
</p>
<p>Od teorie k praxi:<br>
===============</p>
<p><br>
</p>
<p>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.<br>
</p>
<p>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.<br>
</p>
<p><br>
</p>
<p><br>
</p>
<p># Takhle by mel asi zacinat kazdy kod ... z monitoru to vsak neni
nutne - stejne tak jako neni nutne nastavovat palety.<br>
# out (0xe3),a ; hore VRAM a ROM<br>
# out (0xe6),a ; pro jistotu deaktivujeme CGROM, ci PCG</p>
<p>ld a, 0x6B<br>
ld (0xd000),a ; na pozici 0,0 znak *</p>
<p>ld a, 0x70<br>
ld (0xd800),a ; na pozici 0,0 cerne pozadi, bile pismo<br>
</p>
<p>ld a, 0x00 ; k pozici 0,0 pridelime PCG pattern 0 a
povolime jeho zobrazeni<br>
ld (0xd400),a ; dolnich 8 bitu PCG pozice<br>
ld a, 0x08<br>
ld (0xdc00),a ; horni 2 bity PCG pozice do 6. a 7. bitu | 0x08
- povolit PCG na teto pozici<br>
</p>
<p><br>
</p>
<p>
</p>
ld a,0x01<br>
out (0xF0),a ; urcime globalni prioritu zobrazovani PCG a TXT a
globalne povolime zobrazeni PCG<br>
<br>
<br>
ld a,0x02<br>
out (0xe5),a ; pripojime si 2. PCG rovinu <br>
<br>
<br>
ld b,0xff ; vyrobime si par velice jednoduchych patternu
slozenych jen z 2. PCG roviny<br>
ld hl,0xd000<br>
$loop:<br>
ld (hl),b<br>
inc hl<br>
djnz $loop<br>
<br>
<p>; nyni uz by jsme meli mit zobrazenu hvezdicku s cervenym
patternem</p>
<p><br>
; Konec pribehu - stop<br>
di<br>
halt<br>
</p>
<p>; a nebo:<br>
</p>
<p>; hokuspokus 1<br>
ld a,0x24<br>
out (0xf1),a ; 2. paletu nastavime na zeleno<br>
</p>
<p><br>
</p>
<p>; hokuspokus 2<br>
ld a,0x03<br>
out (0xF0),a ; zmenime globalni prioritu zobrazovani TXT a PCG</p>
<p><br>
</p>
<p>; pokud by jsme se chteli korektne vratit a opet namapovat VRAM<br>
out (0xe3),a ; hore VRAM a ROM<br>
out (0xe6),a ; deaktivujeme CGROM, ci PCG
<br>
di<br>
halt<br>
</p>
<p><br>
</p>
<p>
</p>
</body>
</html>