2014年01月14日

テキストのアトリビュージョン

年始バージョンでかなりの確率でゲームが「動く」様になったのですが、
テキスト周りで少しおかしなところがあります。
それはテキストの「アトリビュージョン」なのですが、
資料を読んでいるのですが今一よく分かりません。

僕の実装では、テキスト画面は完全にエミュレーションになっています。
テキスト画面は実際には80文字×25行×2(文字/アトリビュート)の
独立したアドレス空間を持っており(特定のIOの設定でCPUのメモリ空間に
マップすることも出来るのですが)、文字、アトリビュート、文字、アトリビュート...
と1バイト毎交互に書く仕様になっています。
(元々は文字色8色、バック色8色、ブリンク、背景透明で計8bit使う設計でしたが
一部8801の仕様に合わせ、文字色8色とブリンクのみ残して他のbitは別の用途に
割り当てた為RTLのシグナル名称等が実際とは異なっている)

PC-8801/8001(uPD3301)では文字×80byte、アトリビュート×40byteが順番に
書かれていますので、垂直非表示期間あたりからシコシコとメインメモリや
テキストVRAMにデータを持ちに行って、アトリビュートも変換しながら
表示用RAMに書き込んでいます。(実機と同じようにメインメモリからの場合は
CPUにBUSRQを出してCPUを止め、データを持ちに行っていますがDMAコントローラではなく
変換ロジック自体が処理。TVRAMは2ポートRAMなのでTVRAMの時はCPUは止めない)

現在の実装では、RAMから読んだアトリビュートの桁と現在処理中の桁数と比較し、
合致したら次のアトリビュートを読み込んで更新する、という処理をしている為
少なくともアトリビュートの桁数が減る数字になっていると
それ以降アトリビュートを読みにすら行かなくなるのですが、
実機ではそれでもアトリビュートが変化するようです。また、アトリビュートの
桁に0x80以上の値が入っているときと入っていないときで動作が違うようです。
詳細な(ピンアサインやAC/DC特性ではない)データシートが入手できれば
それにあわせて直したいのですが。。。
posted by プー at 20:16| Comment(0) | CRTC/画面 | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。