Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

間違いナイ!ボタン for MSX2 「間違いナイ!」と確信したとき、わざわざMSXで!

間違いない!

 お笑い芸人の長井秀和さんの決め台詞「間違いナイ!」を喋る怪しいボタンがインターネットで話題騒然(なのか?)なので、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版のへぇボタンを即興で作って、そのブームに乗っかりました。

internet.watch.impress.co.jp

 原作者・ヨシナガさんのWebページにて紹介されていたMSX版とは、私(nf_ban)が製作したものです。

 その後、リアルへぇボタンに続き 長井秀和 間違いナイ!ボタン が発表され、またもやなぜかいろんなプラットフォームでリリースされていたので、今回もMSX版を作ってみました。

謝辞

 「僕の見た秩序。」のヨシナガさん、面白いFlashを創作してくださり有難うございます。MSXの間違いナイ!ボタンを作る原動力になりました。