6-5 PWM音源の利用


高い音(約781Hz)と低い音(約342Hz)を交互に発生させます。

このサンプルの本質は、72行目以降のサブルーチンです。

SndInitでは、PWMを利用できるようにしています。Snd1(2)Startでは、タイマー1に発生する周波数を設定し、カウント動作を開始させます。SndStopでは、カウント動作を停止し音声出力を停止します。

001	; Tab width = 4
002	
003	;----------------------------------------------------------------------------
004	; ** サウンド使用サンプル1 **
005	;
006	; ・2種類の音(高/低音)を断続的に出力する
007	;   (低い音 0.5秒 - 無音 0.5秒 - 高い音 0.5秒 - 無音 0.5秒 …)
008	;----------------------------------------------------------------------------
009	; 1.01 990208 SEGA Enterprises,LTD.
010	;----------------------------------------------------------------------------
011	
012	chip	LC868700			; チップの種類をアセンブラに指定
013	world	external			; 外部メモリ用プログラム
014	
015	public	main				; ghead.asm から参照されるシンボル
016	
017	extern	_game_end			; アプリケーション終了
018	
019	
020	; **** システム定数の定義 ***************************************************
021	
022								; OCR(発振制御レジスタ)設定値
023	osc_rc		equ 04dh		;	システムクロックに内蔵RC発振を指定
024	osc_xt		equ 0efh		;	システムクロックに水晶発振を指定
025	
026	
027	; *** データセグメント ******************************************************
028	
029			dseg				; データセグメント開始
030	
031	r0:		ds		1			; 間接アドレッシングレジスタ r0
032	r1:		ds		1			; 間接アドレッシングレジスタ r1
033	r2:		ds		1			; 間接アドレッシングレジスタ r2
034	r3:		ds		1			; 間接アドレッシングレジスタ r3
035			ds		12			; その他のシステム予約レジスタ
036	
037	
038	; *** コードセグメント ******************************************************
039	
040			cseg				; コードセグメント開始
041			
042	; *-------------------------------------------------------------------------*
043	; * ユーザープログラム														*
044	; *-------------------------------------------------------------------------*
045	main:
046			call	SndInit		; サウンド初期化
047			
048	loop0:	
049			call	Snd1Start	; 約342Hz の発音開始
050			set1	PCON,0		; ベースタイマ割り込みまでHALT(0.5秒)
051	
052			call	SndStop		; ブザー音停止
053			set1	PCON,0		; ベースタイマ割り込みまでHALT(0.5秒)
054	
055			call	Snd2Start	; 約781Hz の発音開始
056			set1	PCON,0		; ベースタイマ割り込みまでHALT(0.5秒)
057			
058			call	SndStop		; ブザー音停止
059			set1	PCON,0		; ベースタイマ割り込みまでHALT(0.5秒)
060	
061	
062								; ** [M](モード)ボタンチェック **
063			ld		P3
064			bn		acc,6,finish ; [M]ボタンが押されていたらアプリ終了
065	
066			br		loop0		; 繰り返し
067	
068	finish:						; ** アプリケーション終了処理 **
069			jmp		_game_end	; アプリケーション終了
070			
071	
072	; *-------------------------------------------------------------------------*
073	; * 音声出力関係															*
074	; *-------------------------------------------------------------------------*
075	SndInit:					; *** 音声出力ハードの初期化 ***
076			clr1	P1,7		; 音声出力ポートセット
077		
078			ret
079			
080	Snd1Start:					; *** 約342Hz の発音開始 ***
081			mov		#0f0h,T1LR	; 周期 = 100h-0f0h = 16
082			mov		#0f8h,T1LC	; Lレベル幅 = 100h-0f8h = 8
083			mov		#0D0h,T1CNT	; 音声出力開始
084			
085			ret
086	
087	Snd2Start:					; *** 約781Hz の発音開始 ***
088			mov		#0f9h,T1LR	; 周期 = 100h-0f9h = 7
089			mov		#0fch,T1LC	; Lレベル幅 = 100h-0fch = 4
090			mov		#0D0h,T1CNT	; 音声出力開始
091			
092			ret
093	
094	SndStop:					; *** 発音停止 ***
095			mov		#0,T1CNT	; 音声出力停止
096			
097			ret

[]   [INDEX]   []

(C)SEGA ENTERPRISES, LTD., 1998