今回は、登録できるキャラクタ数が少なく、再定義も時間が掛かり、垂直ブランキング期間以外に再定義するとノイズが発生するという、使いこなしが難しい PCG8100 のリアルタイム再定義の技術開発についてのお話です。
PCG-8100は、最大で128個のキャラ文字を書き換えられます。言い換えると同時に128個までしか定義できません。とっても少ないのです!
また、PCGはキャラクタ文字なので、普通に作ると動きはキャラクタ単位となります。
PCGを仮に画面全体に敷き詰めることが出来れば、後は普通のグラフィック画面のように扱えます。実際、そのような機種は MZ系などで存在します。ですが残念ながら PCG8100 では全く足りていません。その後発売された PC-8001mkⅡ専用の PCG8200 でも最大で256文字までです。少ないですよね…。
数が足りないのであれば、画像が必要な部分に動的にキャラ文字を配置して、PCGをその都度再定義すれば何個でも画像表示できるし、ドット単位で動かすこともできるよね?ってのが、最初の発想でした。下記の画像は PCG の OFF と ON の状態です。例えば PCG-8 の部分は同じキャラが使われているのが分かりますでしょうか。

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

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

アイディアは次々と膨らみ、その結果、データに移動タイミング情報も追加となりました。エディタがバカみたいに高機能になっていきました!
現在の PC-8001 を取り巻く環境では、ブラウン管モニタを使う事は少なく、何らかの形で液晶モニタを使用している事が多いです。私が用意できた実機環境のモニタは、中華の cocopar 液晶モニタでした。このモニタは 15kHzを食うという珍しい液晶モニタだったのです。そのため購入したのですが、このモニタ、ダブルバッファによる瞬間的な CRTC OFFでも反応して、とても正視出来ないレベルでちらつきまくるのです!
【広告】※ cocopar ではありませんが、今だとこれが映るという「噂」です。責任持てませんが…
流石にこれには完全にお手上げです。ただ、VRAMアドレスを切り替える際に、DMAC止めずに CRTC 更新しても、アドレスは切り替わる事が分かりました。問題は1行ズレる事ですが、それは最初から想定すればなんとかなりそうです。
1行ズレを前提にプログラムを組んでテストしてみたのですが、さらに分かった事がありました。それは、正確に1行ズレてなくて、1行の途中からズレているため、アトリビュートが正しく反映されていないと言う事です。これでは使えません。
さらに、DMAC 停止の正しい手順で切り替えても、なぜか左下にゴーストが発生しました。これではダブルバッファそのものが使えないです。なので、ダブルバッファを諦めて、バックバッファから画面転送でどうだと追加テストしました。
が、これもテストの結果、転送だけで 30ms 以上必要とわかりました。また、この方法では画面の真ん中で必ずたらつくのです。やはり、この方法も使えないと分かりました。すいません、少し叫ばせてください…
仕方がないので従来の作り方で実装します。描いたら消す。消してから描く。昔ながら技法に戻しました。ただ、黒色で消すだけだとみっともないため、バックバッファから以前の画面を復元するようにしてみました。
少しちらつきましたが、マップの建造物の上にキャラを動かしても、綺麗に移動する事に成功しましたので、この方法で妥協する事にしました。残念でしたが、ここら辺りが落とし所でした。
実験の結果、PCGが垂直ブランキング期間内での最大定義数は14個でした。それ以上の定義を行うと、表示期間中に突入するため、画面にノイズが発生します。PC-8001 は相変わらず遅いのですが、いやそれは分かってた事ではあるのですが、ヤバイ!4×4=16文字でキャラを構成してデータ作成を行っていたため、このままでは表示が出来ない。
急遽、しおQさんに14文字構成でデザイン変更できないか打診したところ…

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

昔はこういう制約は普通でしたし
そこのやりくりもまた楽しかったりします!
流石はプロです。大変助かりました。こうして、任意の位置に任意のキャラを、なんちゃってドット単位で画面に表示できるようになりました。諦めずにテストし続けた結果がここにあったりします。ちなみに、この後のプログラム改善で、垂直ブランキング期間内で16個の書き換えができるようになったのですが、未だにこの事実はしおQさんにはお伝えしていません💦 ※多分
※ 実は私は上記のような専用ボックスはお高いので、こちらを2個購入して代用しています。段ボールなので、左右にハサミで切り込みを入れて、そこにコンセントタップやケーブルを入れています。どうせ机の裏なんて、設置してしまったらもう見ないのでこれでいーのだ!
- PCG8100 というハードウェア
PCG-8100は、最大で128個のキャラ文字を書き換えられます。言い換えると同時に128個までしか定義できません。とっても少ないのです!

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

PCGを仮に画面全体に敷き詰めることが出来れば、後は普通のグラフィック画面のように扱えます。実際、そのような機種は MZ系などで存在します。ですが残念ながら PCG8100 では全く足りていません。その後発売された PC-8001mkⅡ専用の PCG8200 でも最大で256文字までです。少ないですよね…。
- PCG をリアルタイムで再定義する
数が足りないのであれば、画像が必要な部分に動的にキャラ文字を配置して、PCGをその都度再定義すれば何個でも画像表示できるし、ドット単位で動かすこともできるよね?ってのが、最初の発想でした。下記の画像は PCG の OFF と ON の状態です。例えば PCG-8 の部分は同じキャラが使われているのが分かりますでしょうか。


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


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


アイディアは次々と膨らみ、その結果、データに移動タイミング情報も追加となりました。エディタがバカみたいに高機能になっていきました!
- 描画方法の検討
現在の PC-8001 を取り巻く環境では、ブラウン管モニタを使う事は少なく、何らかの形で液晶モニタを使用している事が多いです。私が用意できた実機環境のモニタは、中華の cocopar 液晶モニタでした。このモニタは 15kHzを食うという珍しい液晶モニタだったのです。そのため購入したのですが、このモニタ、ダブルバッファによる瞬間的な CRTC OFFでも反応して、とても正視出来ないレベルでちらつきまくるのです!

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

1行ズレを前提にプログラムを組んでテストしてみたのですが、さらに分かった事がありました。それは、正確に1行ズレてなくて、1行の途中からズレているため、アトリビュートが正しく反映されていないと言う事です。これでは使えません。
さらに、DMAC 停止の正しい手順で切り替えても、なぜか左下にゴーストが発生しました。これではダブルバッファそのものが使えないです。なので、ダブルバッファを諦めて、バックバッファから画面転送でどうだと追加テストしました。
が、これもテストの結果、転送だけで 30ms 以上必要とわかりました。また、この方法では画面の真ん中で必ずたらつくのです。やはり、この方法も使えないと分かりました。すいません、少し叫ばせてください…
ぐわあああ!
なんてクッソ遅いんだ PC-8001!!
仕方がないので従来の作り方で実装します。描いたら消す。消してから描く。昔ながら技法に戻しました。ただ、黒色で消すだけだとみっともないため、バックバッファから以前の画面を復元するようにしてみました。
少しちらつきましたが、マップの建造物の上にキャラを動かしても、綺麗に移動する事に成功しましたので、この方法で妥協する事にしました。残念でしたが、ここら辺りが落とし所でした。
- PCG再定義の限界
実験の結果、PCGが垂直ブランキング期間内での最大定義数は14個でした。それ以上の定義を行うと、表示期間中に突入するため、画面にノイズが発生します。PC-8001 は相変わらず遅いのですが、いやそれは分かってた事ではあるのですが、ヤバイ!4×4=16文字でキャラを構成してデータ作成を行っていたため、このままでは表示が出来ない。
急遽、しおQさんに14文字構成でデザイン変更できないか打診したところ…

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

昔はこういう制約は普通でしたし
そこのやりくりもまた楽しかったりします!
流石はプロです。大変助かりました。こうして、任意の位置に任意のキャラを、なんちゃってドット単位で画面に表示できるようになりました。諦めずにテストし続けた結果がここにあったりします。ちなみに、この後のプログラム改善で、垂直ブランキング期間内で16個の書き換えができるようになったのですが、未だにこの事実はしおQさんにはお伝えしていません💦 ※多分
ちなみにボマーンさんもNCHのアニメについてツイートされていますので、是非ご参照ください。
この PCG再定義からをプレゼンした動画がぴす太™️さん @pista_TMにより公開されました。宜しければこちらもご参照ください。
Newシティヒーローメイキング・インデックス
【広告】※ 机の裏側、どうしてもごちゃごちゃしちゃうので、これで隠すと綺麗に見えます。
こんな感じでツールで描いていきます。 内藤さんのこだわりにより、移動時に足の位置が滑らないよう修正してゆきます。
— ボマーン (@bomarn) November 5, 2019
怪獣は2本ツノでしたが、PCG再定義時間の限界によりしおQさんに1本に修正していただきました。 #80mk2 pic.twitter.com/7Ssb1XyDp6
この PCG再定義からをプレゼンした動画がぴす太™️さん @pista_TMにより公開されました。宜しければこちらもご参照ください。
Newシティヒーローメイキング・インデックス
【広告】
NTONPOWER Technology Co.,Ltd
※ 実は私は上記のような専用ボックスはお高いので、こちらを2個購入して代用しています。段ボールなので、左右にハサミで切り込みを入れて、そこにコンセントタップやケーブルを入れています。どうせ机の裏なんて、設置してしまったらもう見ないのでこれでいーのだ!
コメント