テクノウを作るに当たり機能ごとに書くのもいいんですが、画面周りが非常に大変そうなので...
とりあえずI/Oポート順に攻めてみたいと思います。
参考文献:Mr.PCテクニカルコレクション 秀和システムトレーディング
○ポート0x40:色番号16(HGRB=1111)のパレット色設定
○ポート0x41:色番号15(HGRB=1110)のパレット色設定
○ポート0x42:色番号14(HGRB=1101)のパレット色設定
○ポート0x43:色番号13(HGRB=1100)のパレット色設定
(ポート0x44〜0x4F:ポート0x40〜0x43のイメージ)
・SR以降のみに存在するI/Oポートです。
・SRモード(ポート0xC8:bit0=0)以外でも動作します。
・書き込みのみ。読み出しはできません(読み出すと0xFFになる)。
書き込むデータは次の通り。
bit7-4:don't care
bit3:Hの反転
bit2:Gの反転
bit1:Rの反転
bit0:Bの反転
◎解説
いろいろとユーザには理解しがたい仕様のパレット設定です。
なぜ、4色だけなのか?せめて8色なら88からの移植がラクなのに。
なぜ、色番号13〜16なのか?せめて色番号1〜8なら、88で出せる色はそのまま使えるのに。
と、88からの移植にすごく不向きなパレットです。
設定する値は出したい色の反転を設定します。これもなぜ反転か不明ですが...
例えば、色番号13に白(HGRB=1111)の設定する場合は、ポート0x43 に 0x00を出力します。
また、SR-BASICのグラフィック全般に言える事ですが、SR-BASICではVSYNC割り込みを使って、常に画面設定をしています。
そのため、SR-BASICのコマンドラインから、
SCREEN 2,2,2:LINE (0,0)-(319,199),16,BF
の後に
OUT &H40,&H05
としても、色番号16の白(HGRB=1111)が、赤(HGRB=1010)になりません。
SR-BASICではなく、N66-BASIC(MODE5)で同じ事を実行した場合、ちゃんと所望の動作をします。
(ただし、SCREEN 2,2,2 → SCREEN 3,2,2 とする)
SR-BASICでは、ポート0x40〜0x43に出力した値をワークエリアに持っています。
ポート0x40:0xED1F
ポート0x41:0xED20
ポート0x42:0xED21
ポート0x43:0xED22
これを使って、
10 SCREEN 2,2,2:LINE (0,0)-(319,199),16,BF
20 POKE &HED1F,&H05
30 GOTO 30
とすると、色番号16の白(HGRB=1111)が、赤(HGRB=1010)になります。
このパレットが性能を発揮するのは、MODE5の320x200ドット表示の色を変える時ぐらいかも知れません。
2015年11月08日
この記事へのコメント
コメントを書く

