mz-80K Display


V−RAM  ディスプレイコードとアスキーコード    左がディスレイコード、右がアスキーコード  ディスプレイコードの並び方が一見バラバラにみえますが  Aにはクローバー、チ、Bには逆三角、コ...と000H−0BFHまで  通常、シフト、カナと040Hスライドしていきます  この方式は海外仕様の本体でもCGROMの変更だけで済みます      40×25の1000文字を0D000H−0D3E7HのV−RAMに割り当てられています。  ここにディスプレイコードを書込むとキャラクタ文字が出るわけです。  また、CPUメモリなのでプログラムを書いて実行もできますが  その部分は当然ディスプレイコードで表示されます。  領域は1KBなので0D3E8H−0D3FFHは未使用(空き)となります  またミラーとなるので0D400H、0D800H、0DC00Hは0D000Hと同じになります  VRAMに直接書き込むデータはディスプレイコードを書き込みますが  システムコールではアスキーコードで書き込む場合があります  ディスプレイコード040Hと080Hのスペースにはmz−700で新たにキャラクタが定義されています  ここをスペースとして使うとMZ−700以降では画面が化けます  したがって通常のスペースは000Hを使用する事が望ましい事になります。
アクセス方法  VRAM領域にある0D000H−0D3FFHにディスプレイコードを書き込むだけなのですが  /VBLANK期間内(4ms)に書き込まないと一瞬画面にゴミのようなものが出てチラツキが発生します  そこでPPI /VBLANK PC7=1からPC=0になるまで監視する必要があります  この監視部分が、かなりの速度低下につながります。  なにしろ全VRAMをLDIRのブロック転送でチラツキ無しでは  3回ほど分けないといけません  またmz−80A/1200/700/1500では  CRTCによるサイクルスチールで監視する必要はなくなりました。(ただしWAITが入る様になります)  監視はPC=0のチェックだけでは、すぐに/VBLANKが切り換わってしまう場合(PC7=1)もあるので  PC7=1からPC=0のチェックになります。   LOOP0:LD A,(0E002H) ;Waiting /VBLANK=1         RLCA         JR NC,LOOP0   LOOP1:LD A,(0E002H) ;Waiting /VBLANK=0         RLCA         JR NC,LOOP1             |
mz−80Kのコーナへ Home へ戻る