武田さんもいってますが、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 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 件のコメント:
コメントを投稿