今回は、登録できるキャラクタ数が少なく、再定義も時間が掛かり、垂直ブランキング期間以外に再定義するとノイズが発生するという、使いこなしが難しい PCG8100 のリアルタイム再定義の技術開発についてのお話です。


  • PCG8100 というハードウェア

PCG-8100は、最大で128個のキャラ文字を書き換えられます。言い換えると同時に128個までしか定義できません。とっても少ないのです!キャラクタ文字

また、PCGはキャラクタ文字なので、普通に作ると動きはキャラクタ単位となります。キャラ移動

PCGを仮に画面全体に敷き詰めることが出来れば、後は普通のグラフィック画面のように扱えます。実際、そのような機種は MZ系などで存在します。ですが残念ながら PCG8100 では全く足りていません。その後発売された PC-8001mkⅡ専用の PCG8200 でも最大で256文字までです。少ないですよね…。


  • PCG をリアルタイムで再定義する

数が足りないのであれば、画像が必要な部分に動的にキャラ文字を配置して、PCGをその都度再定義すれば何個でも画像表示できるし、ドット単位で動かすこともできるよね?ってのが、最初の発想でした。下記の画像は PCG の OFF と ON の状態です。例えば PCG-8 の部分は同じキャラが使われているのが分かりますでしょうか。PCG_OFFPCG_ON

このアイディアを生かすためには、相応のデータ作成が必要です。そして、このデータ作成は人間が対応できる範囲を軽く超えていると思われました。そのため、このアイディアを実現するため、最初に取り掛かったのがエディタの制作でした。このエディタの機能には、PCG定義データのキャラ単位での出力と、必要最小限のキャラ文字構成情報が必要でした。マップエディタ
キャラクタエディタ

そして、エディタを作りながらサンプルデータを動かして気がつきます。真面目にドット単位で動かさなくても、キャラが8パターン切り替えするのなら、そのパターン毎に予めズラしておけば勝手にドット単位移動に見える!正面パターン
アニメーション

アイディアは次々と膨らみ、その結果、データに移動タイミング情報も追加となりました。エディタがバカみたいに高機能になっていきました!


  • 描画方法の検討

現在の PC-8001 を取り巻く環境では、ブラウン管モニタを使う事は少なく、何らかの形で液晶モニタを使用している事が多いです。私が用意できた実機環境のモニタは、中華の cocopar 液晶モニタでした。このモニタは 15kHzを食うという珍しい液晶モニタだったのです。そのため購入したのですが、このモニタ、ダブルバッファによる瞬間的な CRTC OFFでも反応して、とても正視出来ないレベルでちらつきまくるのです!cocopar
※ cocopar ではありませんが、今だとこれが映るという「噂」です。責任持てませんが…

流石にこれには完全にお手上げです。ただ、VRAMアドレスを切り替える際に、DMAC止めずに CRTC 更新しても、アドレスは切り替わる事が分かりました。問題は1行ズレる事ですが、それは最初から想定すればなんとかなりそうです。1行ズレる

1行ズレを前提にプログラムを組んでテストしてみたのですが、さらに分かった事がありました。それは、正確に1行ズレてなくて、1行の途中からズレているため、アトリビュートが正しく反映されていないと言う事です。これでは使えません。

さらに、DMAC 停止の正しい手順で切り替えても、なぜか左下にゴーストが発生しました。これではダブルバッファそのものが使えないです。なので、ダブルバッファを諦めて、バックバッファから画面転送でどうだと追加テストしました。

が、これもテストの結果、転送だけで 30ms 以上必要とわかりました。また、この方法では画面の真ん中で必ずたらつくのです。やはり、この方法も使えないと分かりました。すいません、少し叫ばせてください…
ぐわあああ!
なんてクッソ遅いんだ PC-8001!!


仕方がないので従来の作り方で実装します。描いたら消す。消してから描く。昔ながら技法に戻しました。ただ、黒色で消すだけだとみっともないため、バックバッファから以前の画面を復元するようにしてみました。

少しちらつきましたが、マップの建造物の上にキャラを動かしても、綺麗に移動する事に成功しましたので、この方法で妥協する事にしました。残念でしたが、ここら辺りが落とし所でした。


  • PCG再定義の限界

実験の結果、PCGが垂直ブランキング期間内での最大定義数は14個でした。それ以上の定義を行うと、表示期間中に突入するため、画面にノイズが発生します。PC-8001 は相変わらず遅いのですが、いやそれは分かってた事ではあるのですが、ヤバイ!4×4=16文字でキャラを構成してデータ作成を行っていたため、このままでは表示が出来ない。

急遽、しおQさんに14文字構成でデザイン変更できないか打診したところ…

しおQさん
 問題ないです

と快く引き受けてくださいました。しかも続けてしおQさんは、

しおQさん
 昔はこういう制約は普通でしたし
 そこのやりくりもまた楽しかったりします!

流石はプロです。大変助かりました。こうして、任意の位置に任意のキャラを、なんちゃってドット単位で画面に表示できるようになりました。諦めずにテストし続けた結果がここにあったりします。ちなみに、この後のプログラム改善で、垂直ブランキング期間内で16個の書き換えができるようになったのですが、未だにこの事実はしおQさんにはお伝えしていません💦 ※多分

ちなみにボマーンさんもNCHのアニメについてツイートされていますので、是非ご参照ください。

この PCG再定義からをプレゼンした動画がぴす太™️さん @pista_TMにより公開されました。宜しければこちらもご参照ください。



Newシティヒーローメイキング・インデックス
  1. Newシティヒーローメイキング
  2. スタッフアサイン
  3. PCG再定義
  4. アトリビュート制御
  5. メモリ省力化
  6. マップデータの圧縮
  7. 動作の安定化
  8. 人間100人を動かすために

    ※ 机の裏側、どうしてもごちゃごちゃしちゃうので、これで隠すと綺麗に見えます。

    ※ 実は私は上記のような専用ボックスはお高いので、こちらを2個購入して代用しています。段ボールなので、左右にハサミで切り込みを入れて、そこにコンセントタップやケーブルを入れています。どうせ机の裏なんて、設置してしまったらもう見ないのでこれでいーのだ!