PC-8001でBGMを演奏しようのコーナー

PC-8001のBEEPで音階を表現するにはBEEPを高速にON・OFFしなければならないので、通常、なめらかなBGMの演奏は不可能です。

しかし、割り込みを使うことにより、これがある程度可能になります。


知らない人も多いと思いますが、PC-8001には、1/60秒毎の「垂直同期割り込み」よりも速い、1/600秒毎の「クロック割り込み」があります。これを使うと、1/300秒や1/150秒といった周期でブザーをON・OFFすることが可能になり、プログラムを工夫すれば(例えばON・OFFの比率を変えるとか)、その中間の周波数も表現できます。こうすると、あたかもBEEPそのものに音階が付いたように扱えるので、BGMの演奏も十分可能になります。しかも、割り込みを使うので周期が正確になり、DMAをONにしたままでも奇麗な音を出せるので、テキスト画面のゲームにも使えます。


<<プログラム例>>
CFFDhに20h,CFFEhに音程(16〜255),CFFFhにCFFEのコピーを入れて、D000をコール すると音をON,D050をコールするとOFFします。音程は、16か8の倍数だと綺麗な 音になります。

(インタラプト処理)

D000	F3		DI
D001	3E 80		LD A,80h
D003	ED 57		LD I,A
D005	3E 07		LD A,7
D007	D3 E4		OUT 0E4h,A
D009	3E 05		LD A,5
D00B	D3 E6		OUT 0E6h,A
D00D	21 20 D0	LD HL,main
D010	22 04 80	LD (8004h),HL
D013	FB		EI
D014	C9		RET

(メイン)

D020	F3	main:	DI
D021	08		EX AF,AF'
D022	D9		EXX
D023	3A 55 EA	LD A,(0EA55h)
D026	F5		PUSH AF
D027	3A FF CF	LD A,(0CFFFh)
D02A	D6 10		SUB 10h
D02C	30 0F		JR NC,aaa
D02E	47		LD B,A
D02F 	3A FD CF	LD A,(0CFFDh)
D032	EE 20		XOR 20h
D034	D3 40		OUT 40h,A
D036	32 FD CF	LD (0CFFDh),A
D039	3A FE CF	LD A,(0CFFEh)
D03C	80		ADD A,B
D03D	32 FF CF    aaa:LD (0CFFFh),A
D040	FB		EI
D041	F1		POP AF
D042	32 55 EA	LD (0EA55h),A
D045	D3 E4		OUT 0E4h,A
D047	D9		EXX
D048	08		EX AF,AF'
D049	ED 4D		RETI

(ストップ)

D050	F3		DI
D051	3E 04		LD A,4
D053	D3 E6		OUT 0E6h,A
D055	FB		EI
D056	3E 00		LD A,0
D058	D3 40		OUT 40h,A
D05A	C9		RET

戻る