他のアカウント

twitter

無料ブログはココログ

« 自分のココログをケータイで読みたい | トップページ | 松田聖子、HITBITを語る »

2004.05.27

間違いナイ!ボタン 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用に作り込むかということで、はっきり言ってプログラミングにはぜんぜん頭を使ってません。(^^;

« 自分のココログをケータイで読みたい | トップページ | 松田聖子、HITBITを語る »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/30080/663350

この記事へのトラックバック一覧です: 間違いナイ!ボタン for MSX2:

« 自分のココログをケータイで読みたい | トップページ | 松田聖子、HITBITを語る »