MZ80を起動せよ!画面バッファを利用した高速書き換えプログラム
古いPCやゲーム機のプログラミングをしていると、その描画速度の遅さに四苦八苦することが度々あります。今回のMZ80もそうで、BASICで素直に描画するととんでもなく遅く、お話になりません。 そこで、アセンブラで描画処理の部分を描いてしまえばあとはどうにでもなるのでは?というかエミュレーターでテストできるならアセンブラでガリガリ書けば速度なんとかなるのでは? (MZ80のすごいところは、描画中にメモリアクセスのウェイトをかけていないことです。映像は乱れますが、強引かつ高速に描画を繰り返すことが可能です。) そう考えた結果、潤沢?なメモリを搭載しているMZ80のシステムを利用し、フレームバッファを用意して、スプライト画面・背景画面を合成、描画メモリへ転送するシステムを設計してみました。 メモリ転送とアドレス管理の考察 ■|そもそもMZ80はどうやってテキストを描画しているのか 上記の漫画にも記載したように、MZ80にはz80のメモリエリア上に画面に表示するテキストバッファが割り当てられている設計となっております。 そのメモリエリアはD000h~D3E7hまでの1000byteとなっております。 というのも、表示できる文字数が横に40文字、縦に25行となっているためですね。 そのため、疑似ドットグラフィックはこの2倍の(1文字に2ドット分配置されているため)縦50ドットx横80ドットの解像度として絵を表示することができるのです。 そして今のPCのようにラスターフォントで表示しているのではなく、VRAMには画面に表示するフォントのコードを書き込んでおります。そのため、任意のフォントグラフィックに書き換えて表示するといったような機能は搭載されておりません。 VRAMに書き込まれた文字コードがそのままグラフィックを記録しているROMにアドレスとして読み込まれ、フォントデータが出力される仕組みになっております。 そのため、搭載されているフォントグラフィックROMを差し替えれば、任意の文字グラフィックスに差し替えることが可能です。 ■|書き換え速度の問題と、VRAM転送問題 ゲームを作るうえでカギになるのはこの描画速度です。例えば、PRINT文で書き換えた場合は必ず1Fで1回しか処理されないため、描画速度がどうしても遅くなります。 ましてや、スクロール画面などの画面全体を書き...