Saturday, February 25, 2012

プチコンでMSXのタイトル画面 その2


プチコンでMSXのタイトル画面 その1のつづき。
絵は描けたので、次は表示のしかた。
MSX2は縦スクロール、2+は横スクロールし、いずれも1ドット単位。 GRAPHIC画面にはスクロール機能はないので、スクロール機能があるBGを使う。
(キャラクタを画面に敷きつめておき、パターンを書き換えする力技もあるにはある)

なのでGRPからBGを作成。
8x8ドット分GSPOITで読み取り、CHRSETの画像文字列にする。 これでいけるはずだったが、作ってみるとエラーになった。
BGU0のキャラ数256個では足りなかったのが原因。
黒い部分は(23,43)-(234,123)。
同じ位置に表示させるため、8ドット区切りにすると(16,40)-(240,128)。
つまり28x11=308キャラ必要だった。

意外と大きいタイトルロゴ

対策は2つ。
  1. BGU0に収まらない分はBGU1にいれる。プチコンは1024個BGキャラが作れるので余裕。
  2. なんとかして256キャラ以内に(BGU0)におさめる。
じゃあどうやっておさめるか、と画面を眺めると、黒や白だけのマス目が多い。
黒や白だけのマスを2つ定義しておけば、必要なキャラ数が減るのでは! (BGキャラを並べるのがめんどくさくなるけど)

  • あらかじめ、真っ黒と真っ白BGキャラは定義しておく
  • 左上から右下に向けてGRAPHIC画面からちまちま画像文字列を作成
  • 真っ黒か真っ白のBGキャラなら、BGキャラ定義しない
  • 真っ黒でも真っ白でもなかったら、BGキャラ定義
  • BGキャラ定義した場合、そのBGキャラコードをキャラ表示用配列に記録
  • BGキャラ定義しない場合、真っ黒/真っ白コードをキャラ表示用配列に記録
みたいなかんじでやってみると、210キャラぐらいに納まった。

ここまでできると、BGに"MSX"と表示し、BGOFSで好きにスクロールできる。

MSX2タイトル画面は、画面中央くらいから、MSXのロゴがせり上がってくるので、BGCLIPで表示範囲を制限して、縦スクロールさせれば完成。

MSX2+タイトル画面は、1ラインおきの画面が左右から横スクロールし、合成される。 (動画後半参照)

どうしたかというと、
  • GRAPHIC画面からの読取結果を偶数ラインならBGU0に、奇数ラインならBGU1に、BGキャラ定義 
  • BGキャラ表示用配列に従ってBGPAGE0にBGU0のBGキャラ、BGPAGE1にBGU1のBGキャラを配置 0,1ページとも256ドット左右にスクロールさせておく
  • 適当なスピードで0,1ページともBGOFSでスクロール表示