2012年3月16日金曜日

パソピアのV-RAM

今回は、パソピアのV-RAMについて備忘録

武田さんもいってますが、V-RAMのアドレス配置は変態的

一番左端1バイトは、色を指定するためのアトリビュートエリアで、1ライン81バイトの領域。
8ラインで1文字だが、V-RAMは0800h単位で跳び番。
こんな配置なので、07E9h~07FFhなど未使用部分があって、そこはアクセスしても何も起きない

例えば画面の一番左上8x8ドットの場合、
0001h
0801h
1001h
1801h
2001h
2801h
3001h
3801h
の8バイトにデータを書き込むことになる
書き込むデータは、スクリーンモードによって異なる。

Screen 0の場合
V-RAMには、アスキーコードを書き込む。色を指定するアトリビュートキャラクターは以下の通り
コード
F8h
F9h
FAh
FBh
FCh
FDh水色
FEh
FFh
アトリビュートはライン単位で有効で、ラインの途中にアトリビュート・キャラクタがあると、それ以降の文字色が変化する

Screen 1/1.5の場合
8255-1のCポート(=0Ah)7bitで、V-RAMのデータタイプを指定
7bitデータタイプ書き込むデータ
0テキストScreen 0と同じように、アスキーコードを書き込む
1グラフィック1バイトで2ドット分の色を指定(1ドット分の色は4bitで指定)
Screen 1では1バイトで2ライン分の指定になり、Screen 1.5では1バイトで1ライン分の指定

Screen 2の場合
8255-1のCポート(=0Ah)7bitで、V-RAMのデータタイプを指定
7bitデータタイプ書き込むデータ
0テキストScreen 0と同じように、アスキーコードを書き込む
1グラフィック1バイトで8ドット分のパターンを指定。表示される色は単色で、そのラインのアトリビュートキャラクターに依存。

V-RAMを直接読み書きできるプログラムで試したところ、ライン単位でアトリビュートを指定できる。
色が飛んで見にくいが、実機でのScreen 2画面
アトリビュートキャラクターを書き込んだ8ドット分は抜けてしまうが、ラインの途中でも色を変更できる

Screen 1の場合は、2ライン単位で変化する

テキストとグラフィックが重なった場合、ライン単位でグラフィックかテキストが表示される

エミュレータも、この辺を対応して再現できるように



特に初代パソピアのゲームは、このV-RAM特性を活かしたゲームがあったりするので。

0 件のコメント:

コメントを投稿