高い音(約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