◆野球拳2000 for MZ-700◆

◆続・MZ-700でビットマップ表示

 Oh!X 1999年夏号の『無改造MZ-700でビットマップ表示を』という記事で、文字しか表示できないMZ-700で48×200ドットの擬似ビットマップ表示をするプログラムを発表しました。この記事では、理論的に可能であることを実証した段階であり、MZ-700のハードウェアに最適化したプログラムでもなかったため、もうちょっと改善できるのではないか、また次は実際にアプリケーションを作らねば、との思いがありました。そこで、88×176ドットの擬似ビットマップ表示を応用した『野球拳2000』を製作してみました。(2002/9/1のコミティアX2で、実機による展示を行いました) Title

◆擬似ビットマップ表示の原理

 詳しくは前記事を参照してもらうことにして、原理を簡単に説明すると、「ラスタごとにテキストVRAMの内容を書き換える」です。TVは上から1ラスタずつ表示しているため、ある文字の1ラスタ目が表示された後、2ラスタ目が表示される前にその文字を別の文字に置き換えると、今度は別の文字の2ラスタ目が表示されることになります。例えば"U"→"I"→"U"と1/3ずつ置き換えながら表示してやれば、顔のような文字が表示できる、という感じです。■■□■□□■□という8ドットのパターンを表示したければ、そのパターンを持っている文字をそのラスタだけ表示してやればよいのです。そう都合のいい文字がなくても、似たパターンを持つ文字を表示してやることで「それっぽい」表示にすることは可能です。
Janken

◆表示領域88×176

 前記事を書いた時点では、表示期間中でも時分割でVRAMの読み書きは可能である、と思い込んでおり、ソフトウェアで水平ブランク期間をチェックしてラスタごとにデータを書き換えるタイミングをとっていました(そして計算通りに動かなかった)。ところがハタと「ブランク期間中しかVRAMアクセスできないのではないか?」と思い当たりました。つまり、表示期間中にVRAMアクセスをするとウェイトがかかり、ブランク期間まで待たされるということです。これは逆にいえば、ソフトウェアでブランク期間のチェックをしなくても、ハードウェアでタイミングを取ってくれるということを意味しています。そこで試してみたところ、表示期間中にVRAMアクセスを行っ(たメモリライトサイクルが終了し)てから60クロック以内であればノーウェイトでVRAMアクセスが可能だと分かりました。擬似ビットマップ表示の横幅をどれだけ広くできるかは、この期間にどれだけVRAMを書き換えられるかにかかっています。Z80においてメモリライトサイクルを最も集積させることができる命令は、PUSH ss ですので、表示期間中に書き換えデータをレジスタに転送しておき、ノーウェイトアクセスが可能な期間にひたすらPUSHするのが基本方針となります。PUSH ss は11クロックのため、11×5で55クロック、裏レジスタも使うので EXX も必要で+4クロック、計59クロックが最大限です。合計の転送バイト数は、表示期間中の1+ブランク期間中の10=計11バイト、つまり88ドットまで表示できることになります。
Nugi  さらに、擬似ビットマップの質を上げるためにアトリビュートVRAMを使うことを考えてみます。文字色と背景色を反転すれば、CGROMにあるパターンの反転パターンもカバーでき、ひらがな・英小文字の分のパターンも使用できます。といってもラスタごとに書き換える余裕はもうないので、キャラクタ単位(8×8ドット単位)での最適な割り当てで妥協します。Nラスタを表示に使うとすると、N÷8ラスタ分の処理をアトリビュート書き換えに当てなければなりません。そこで、176ラスタ(22×8)を表示に使い、残り24ラスタのうち22ラスタ分でアトリビュートを書き換えるようにしました。

◆その他細々したこと

 手の表示は、ラスタ技そのままに途中で書き換え位置をずらして88×88ドット2個分の表示に見せています。また、お互いの手の表示データはキーが押されてから作ってやらねばならないので、じゃんけんの予備動作(?)表示中の垂直ブランク期間中に少しずつ作成しています。約1/3ずつ転送できたところで「じゃん」「けん」「ぽん」とメッセージを出すことで遅れをごまかしています。
 表示データの各フレームにコールバック関数(というかアドレス)を持たせ、垂直ブランク期間中に呼び出すことで「キーが押されるまで表示を続ける」「このフレームを表示したらメッセージを表示」「次の絵が用意できるまでループ」などの処理を実現しています。
 イベントでの展示に間に合わなかったため画像データが途中までしか入っていない状態で中座していますが、それでもまだ32Kバイト程度なので、最後まで入れようと思えば入れられそうな感じです。
Game Over

◆ダウンロード

野球拳2000 for MZ-700

MZT形式のファイルになっています。なんとかして実機にロードしてください。
 操作は[1]グー [2]チョキ [3]パー、これだけです。
※まだ画像データが全部は入っていないので、2枚しか脱ぎません
※実機の動作タイミングにべったり依存しているので、エミュレータによっては正しく表示がされません。武田さんによるEmuZ-700では期待通りに動作しますので、エミュレータ上で実行したい方はこちらをお使いください。

MZGRAPH2(おまけ)

Oh!X 1999夏号に載ったアニメーションデモです。ANIM.MZTをロードした後MZGRAPH2.MZTをロードしてください。

◆参考リンク

ハドソンHuPack・野球拳の世界
 すぎもとさんの素晴らしいサイト『MZ-700友の会』内のコンテンツ。当時ハドソンから発売されていた野球拳についての解説があります。実は野球拳2000の制作動機は、10才頃このソフトのスクリーンショットを見て子供心に「それはないだろう」とショックを受けたことに始まっているのではないかと思われます(笑)


もどる