<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 -&gt; 0x6B (zobraz na pozici 0,0 znak *)<br>
      0xD800 -&gt; 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>