2004.05.27 (Thursday)
間違いナイ!ボタン for MSX2
僕の見た秩序。 のヨシナガさんが リアルへぇボタン に続き 長井秀和 間違いナイ!ボタン を発表していたので、今回もMSX版を作ってみました。今回は頑張って喋らせてみました。それも、 ひどいガラガラ声 で。
MSX2以降の実機、及びMSXPLAYerで動きます。ダウンロードは こちら。
※事務所に怒られたらきっとすぐ消します。
VDPマクロを活用しましょう
うちのサークルで使っているMSXの開発環境 DMシステム2 の紹介がてら、ディスクイメージ版では開発素材も入れておきました。
そこで、タイマー割り込みでVDPコマンドを発行する「VDPマクロ」というDMシステム2の機能を紹介します。MSXのVDPコマンドは本来タイマー割り込み中に発行してはならないとされていますが、それはHMMMやLMMMなど、I/Oにドカドカと数値を出力してVDPのレジスタをオートインクリメントするコマンドの発行中にタイマー割り込みでまったく新しいコマンドを発行したらVDPが暴走→CPUも暴走してしまうからで、要はオートインクリメントしない処理の軽いVDPコマンドに関してはタイマー割り込み内でも発行できる(と僕は解釈しています)、わけです。
今回作ったVDPマクロは凄く単純です。内訳はこちら。
- 212ラインモードから192ラインモードに切り替える
- SCREEN 3に切り替える
- SCREEN 3のパターンジェネレータテーブルを1ブロックずつ増やす→コマを切り替えるようにアニメーションする
- すべてのコマを表示し終えたら、212ラインモードに戻す
- SCREEN 5に切り替える
- 終了
そのソースリストはこちら。(コンパイラは Mマガ1号 に同梱された、ASM.COM)
chgplt equ 0 ;0+n(0~63)
vdp equ 40h ;40h+n(0~46), xx
loop equ 70h ;70h+n(0~14)
looped equ 7Fh
lgwait equ 0C0h ;long wait (256 counts)
wait equ 0C1h ;0C0h+n(0~59)
newmcr equ 0FDh ;0FDh,xx,xx
mcrend equ 0FFh
org 0c000h
;blackout palette
plt0: defs 32
;screen 5 palette
plt1: defb 000h,000h,011h,001h,012h,001h,022h,001h
defb 032h,002h,043h,003h,053h,003h,064h,003h
defb 044h,004h,054h,004h,055h,005h,064h,004h
defb 064h,005h,074h,005h,075h,006h,076h,007h
;screen 3 palette
plt2: defb 000h,000h,011h,001h,021h,001h,022h,001h
defb 022h,002h,032h,002h,043h,003h,053h,003h
defb 054h,004h,064h,004h,065h,005h,074h,005h
defb 075h,005h,075h,006h,076h,006h,077h,007h
;blank palette
plt3: defs 32
;macro start
defb chgplt+128 ;chgplt(128+0)
;screen 3
defb vdp+9, 0 ;192 lines
defb vdp+0, 0
defb vdp+1, 68h ;screen 3
defb vdp+2, 58 ;pattern name table (E800h)
defb vdp+4, 16 ;pattern generator table (8000h)
defb chgplt+128+2 ;chgplt(128+2)
;animation
defb vdp+4, 16 ;frame 1
defb wait+3 ;wait 3/60sec.
defb vdp+4, 17 ;frame 2
defb wait+3
defb vdp+4, 18 ;frame 3
defb wait+3
defb vdp+4, 19 ;frame 4
defb wait+2
defb vdp+4, 20 ;frame 5
defb wait+2
defb vdp+4, 21 ;frame 6
defb wait+2
defb vdp+4, 22 ;frame 7
defb wait+2
defb vdp+4, 23 ;frame 8
defb wait+2
defb vdp+4, 24 ;frame 9
defb wait+2
defb vdp+4, 25 ;frame 10
defb wait+2
defb vdp+4, 26 ;frame 11
defb wait+2
defb vdp+4, 27 ;frame 12
defb wait+2
defb vdp+4, 28 ;frame 13
defb wait+10 ;wait 10/60sec.
;screen 5
defb vdp+9 ,80h ;212 lines
defb vdp+0, 06h
defb vdp+1, 60h ;screen 5
defb vdp+2, 1fh ;pattern name table (0000h)
defb chgplt+128+1 ;chgplt(128+1)
;macro end
defb mcrend
end
MSX BASIC上でまず画像データをVRAMに配置。このとき、スクリーンモードは SCREEN 5 にしておきます。SCREEN 3のアニメーション用データはページ1、PCMデータはページ2に配置。
このバイナリデータを0c000hに配置します。最初の128バイトはパレットデータで、実際のマクロはその後(0c080h)になります。そして
CALL VMON(&HC080)
という命令を実行すると、勝手にアニメーションしてくれます。勝手にアニメーションする間、予めVRAM上(SCREEN 5のページ2)に配置しておいたPCMデータを
CALL PCMON(@65536!,@65535!+10933,0)
という命令で再生します。これで、SCREEN 3のアニメーションしている裏で「間違いナイ!」と喋らせることが可能になります。
MSX版を作るのに頭を使うのはPCMやCGなどの素材をいかにMSX用に作り込むかということで、はっきり言ってプログラミングにはぜんぜん頭を使ってません。(^^;
投稿: nf_ban 2004.05.27 13:59 [パソコン・インターネット, MSXソフトレビュー] | 固定リンク 
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/30080/663350
この記事へのトラックバック一覧… 間違いナイ!ボタン for MSX2:
コメント
あなたのコメントをどうぞ!
メールアドレスの入力は必須ですが、URLを記入するとコメント公開時にURLの表示が優先されてメールアドレスは非表示となります。