お笑い芸人の長井秀和さんの決め台詞「間違いナイ!」を喋る怪しいボタンがインターネットで話題騒然(なのか?)なので、MSXでも作ってみました。今回は頑張って喋らせてみました。それも、 ひどいガラガラ声 で。
いますぐダウンロード
MSX2以降の実機、及びMSXPLAYerで動きます。ダウンロードはこちら→ https://www.gigamix.jp/entry/download/gigamix/nagaimsx.php
SPACEバーで「間違いナイ!」、ESCキーで終了。
※事務所に怒られたらきっとすぐ消します。
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に切り替える
- 終了
VDPマクロのソースコードはこちら。コンパイラは Mマガ1号 にも同梱されていた MSX-DOS TOOLS の ASM.COM です。ご覧の通り、マクロは基本的に DEFB や DEFS の羅列です。
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のアニメーション用データはVRAMのページ1(8000h)、PCMデータはVRAMのページ2(10000h=@65536!)に配置。
このバイナリデータを0c000hに配置します。最初の128バイトはパレットデータで、実際のマクロはその後(0c080h)になります。そして
CALL VMON(&HC080)
…という命令を実行すると、上から順に勝手にアニメーションしてくれます。勝手にアニメーションする間、予めVRAM上(SCREEN 5のページ2)に配置しておいたPCMデータを
CALL PCMON(@65536!,@65535!+10933,0)
…という命令で再生します。これで、SCREEN 3のアニメーションしている裏で「間違いナイ!」と喋らせることが可能になります。
MSX版を作るのに頭を使うのはPCMやCGなどの素材をいかにMSX用に作り込むかということで、はっきり言ってプログラミングにはぜんぜん頭を使ってません。(^^;
開発の経緯
2003年9月頃、僕の見た秩序。 のヨシナガさんが リアルへぇボタン という一発ネタのFlash作品を発表したところ、なぜかいろんなプラットフォームでへぇボタンを再現するプログラムが次々と作られ、当時はちょっとしたインターネットムーヴメントとして話題になりました。私もせっかくだから MSX版のへぇボタンを即興で作って、そのブームに乗っかりました。
原作者・ヨシナガさんのWebページにて紹介されていたMSX版とは、私(nf_ban)が製作したものです。
その後、リアルへぇボタンに続き 長井秀和 間違いナイ!ボタン が発表され、またもやなぜかいろんなプラットフォームでリリースされていたので、今回もMSX版を作ってみました。
謝辞
「僕の見た秩序。」のヨシナガさん、面白いFlashを創作してくださり有難うございます。MSXの間違いナイ!ボタンを作る原動力になりました。