;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		８ビットＤＡＣによる音楽演奏プログラム
;
;		ＰＩＣ　ＤＡＣ　ＭＭＬ　Ｖｅｒ１．０
;
;		簡易ＭＭＬによる演奏
;		ＭＭＬはプログラムメモリ最後部に配置
;
;		PIC16F1705 32MHZ X'TAL発振
;
;		プログラムメモリ配置
;		BANK0	プログラム
;		BANK1	DAC用データ
;				MMLデータ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    LIST	P=PIC16F1705
    INCLUDE	P16F1705.INC

;
;CONFIGURATION WORD 1(ADDRESS:8007H)
;					設定
;bit13		FCMEN	0	Fail-Safe Clock Monitor
;						1=有効,0=無効
;bit12		IESO	0	内部･外部切替スイッチモード
;						1=有効,0=無効
;bit11		CLKOUTEN 1	クロックアウトイネーブルビット
;						1=無効　RA4I/O使用可
;						0=有効　FoscがCLKPUTピンに出力される
;bit10-9	BOREN	00	ブラウンアウト設定
;						11=有効
;						10=スリープ時以外有効
;		___			00=無効
;bit8		CPD		1	データメモリプロテクション
;			__			1=無効,0=有効
;bit7		CP		1	プログラムメモリプロテクション　
;						1=無効,0=有効
;bit6		MCLRE	0	RA3/MCLRピン選択ビット
;			_____		1=MCLR有効,0=RA3有効(Digital input)
;bit5		PWRTE	0	power_up timer　使います。
;						1=無効,0=有効
;bit4-3		WDTE	00	Watchdog Timer
;						11=有効
;						10=ランニング中に有効、スリープ中は無効
;						01=レジスタによるコントロール
;						00=無効
;bit2-0		FOSC	010	発振器選択ビット
;						111=ECH:外部クロック入力（4-32MHZ)、RA4I/O可
;						110=ECM:外部クロック入力（0.5-4MHZ)、RA4I/O可
;						101=ECL:外部クロック入力（0-0.5MHZ)、RA4I/O可
;						100=INTOSC:内部発振、RA4-RA5I/O可
;						011=EXTRC:外部RC発振、RA4I/O可、RA5不可
;						010=HS：外部発振子、I/O不可
;						001=XT：　〃
;						000=LP：　〃
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  0  1  0  0  1  1  0  0  0  0  0  1  0
;
;
	__CONFIG _CONFIG1,	B'0000100110000010'
;
;CONFIGURATION WORD 2(ADDRESS:8008H)マニュアル52ページ
;					設定
;bit13		LVP		0	低電圧プログラミング設定
;						1=有効
;			_____		0=無効、高電圧必要
;bit12		DEBUG	1	インサーキット･デバッガ モード設定
;						1=無効
;						0=有効、RA0-1をデバッガに使用
;bit11				0	Unimplemented
;bit10		BORV	0	ブラウンアウト･リセット電圧選択ビット（Vbor参照)
;						1=低電圧で動作
;						0=高電圧で動作
;bit9		STVREN	0	スタック･オーバーフロー･リセット設定
;						1=有効
;						0=無効
;bit8		PLLEN	0	PLL設定
;						1=4xPLL有効
;						0=4xPLL無効
;bit7       ZCDDIS  1   ZCDディセーブルビット
;                       1=ZCDを無効にする、ZCDCONで有効可
;                       0=ZCDを常に有効にする
;bit6-3					Unimplemented:read as 1
;bit2		PPS1WAY 0   PPSLOCKビット単方向セット･イネーブルビット
;                       1=ロック解除シーケンスを実行後に1度だけ解除できる
;                       0=ロック解除シーケンスを実行すると何度でも解除できる
;bit1-0		WRT		11	フラッシュメモリ プロテクション設定
;						11=無効
;						10=0h-1FFh有効、200H?1FFFHはPMCONで制御可
;						01=0h-FFFh有効、1000H?1FFFHはPMCONで制御可
;						00=0h-1FFFh有効、PMCON制御不可
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  1  0  0  0  0  1  1  1  1  1  0  1  1
;
;
    __CONFIG _CONFIG2,	B'0001000011111011'



;		ワークエリア定義
;
;		BANK0	20h-7Fh
;

;ウエイトルーチン内専用ワーク
cnt0		equ		020h		;時間待ちルーチン用専用ワーク
cnt1		equ		021h
cnt2		equ		022h
cnt3		equ		023h
;汎用ローカルワーク
tmp0		equ		024h		;サブルーチン内限定汎用ワーク
tmp1		equ		025h		;移動した場合、破壊されること有
tmp2		equ		026h
tmp3		equ		027h
;汎用広域ワーク
wrk0		equ		028h        ;演算用広域汎用ワーク
wrk1		equ		029h
wrk2		equ		02ah
wrk3		equ		02bh
;演算用ワーク
hex0		equ		030h		;
hex1		equ		031h		;
hex2		equ		032h		;
hex3		equ		033h		;
hexw0		equ		034h		;
hexw1		equ		035h		;
hexw2		equ		036h		;
hexw3		equ		037h		;
div0		equ		038h		;
div1		equ		039h		;
div2		equ		03ah		;
div3		equ		03bh		;
divw0		equ		03ch		;
divw1		equ		03dh		;
divw2		equ		03eh		;
divw3		equ		03fh		;
hexd		equ		040h		;
;可変ウエイト用ワーク
delay0		equ		041h
delay1		equ		042h
;MUSICサブルーチン専用ワーク
MLC0		equ		043H		;1次コマンドバッファ
MLC1		equ		044H		;2次コマンドバッファ
MLC2		equ		045H		;3次コマンドバッファ
MML_PT0		equ		046H		;MML読み込みポインタ下位8bit
MML_PT1		equ		047H		;MML読み込みポインタ上位8bit
;
MUTEL		equ		048H
MUTEH		equ		049H
;TEMPO専用変数
TEMPOL		equ		04AH
TEMPOH		equ		04BH
ON_TIME0	equ		04CH
ON_TIME1	equ		04DH
OFF_TIME0	equ		04EH
OFF_TIME1	equ		04FH
;
GAT			equ		050H		;消音長フラグ
ERCRD		equ		051H		;エラーフラグ
;DAC用配列データアクセス用ワーク
FDA0        equ     060h        ;周波数データアドレス下位8ビット
FDA1        equ     061h        ;周波数データアドレス上位8ビット
TBNO0       equ     062h        ;DACデータテーブルNO過去データ
TBNO1       equ     063h        ;DACデータテーブルNO現在データ
PSDT0       equ     064h        ;プリスケーラ過去データ
PSDT1       equ     065h        ;プリスケーラ現在データ
fdw0        equ     066h        ;専用ワーク
fdw1        equ     067h        ;専用ワーク
;音符用専用変数(BANK1)
ONP0L		equ		0A0H		;32分
ONP0H		equ		0A1H
ONP1L		equ		0A2H		;16部
ONP1H		equ		0A3H
ONP2L		equ		0A4H		;付点16分
ONP2H		equ		0A5H
ONP3L		equ		0A6H		;8分
ONP3H		equ		0A7H
ONP4L		equ		0A8H		;付点8分
ONP4H		equ		0A9H
ONP5L		equ		0AAH		;4分
ONP5H		equ		0ABH
ONP6L		equ		0ACH		;付点4分
ONP6H		equ		0ADH
ONP7L		equ		0AEH		;2分
ONP7H		equ		0AFH
ONP8L		equ		0B0H		;付点2分
ONP8H		equ		0B1H
ONP9L		equ		0B2H		;全音符
ONP9H		equ		0B3H
;発音時間
GON0L		equ		0B4H		;32分
GON0H		equ		0B5H
GON1L		equ		0B6H		;16部
GON1H		equ		0B7H
GON2L		equ		0B8H		;付点16分
GON2H		equ		0B9H
GON3L		equ		0BAH		;8分
GON3H		equ		0BBH
GON4L		equ		0BCH		;付点8分
GON4H		equ		0BDH
GON5L		equ		0BEH		;4分
GON5H		equ		0BFH
GON6L		equ		0C0H		;付点4分
GON6H		equ		0C1H
GON7L		equ		0C2H		;2分
GON7H		equ		0C3H
GON8L		equ		0C4H		;付点2分
GON8H		equ		0C5H
GON9L		equ		0C6H		;全音符
GON9H		equ		0C7H
;消音時間
GOF0L		equ		0C8H		;32分
GOF0H		equ		0C9H
GOF1L		equ		0CAH		;16部
GOF1H		equ		0CBH
GOF2L		equ		0CCH		;付点16分
GOF2H		equ		0CDH
GOF3L		equ		0CEH		;8分
GOF3H		equ		0CFH
GOF4L		equ		0D0H		;付点8分
GOF4H		equ		0D1H
GOF5L		equ		0D2H		;4分
GOF5H		equ		0D3H
GOF6L		equ		0D4H		;付点4分
GOF6H		equ		0D5H
GOF7L		equ		0D6H		;2分
GOF7H		equ		0D7H
GOF8L		equ		0D8H		;付点2分
GOF8H		equ		0D9H
GOF9L		equ		0DAH		;全音符
GOF9H		equ		0DBH
;共通RAM領域
DCX			equ		070h		;DAC X軸進行カウンタ
DCM			equ		071h		;DAC X軸分解能設定
DCR         equ     072h        ;TMR0リスタート情報
;
			ORG		0h			;リセットベクタ
			goto	init
			ORG		04h			;割り込みベクタ

;
;		ＰＩＣ１６Ｆ１７０５　３２ＭＨＺ
;       ＤＡＣ割込み処理ルーチン　Ｖｅｒ１．０
;
;       使用ワーク
;		DCR     TMR0リスタートデータ
;       DCX     X軸カウンタ
;       DCM     X軸分解能設定値
;       FSR1    DAC書込みデータテーブルアドレス
;
;		割込み発生から割込みベクタまで3サイクル程度（同期割込み）
;       FSRxはコアレジスタなので、自動で PUSH-POPされる
;       よって、割り込み終了後、元の設定値に戻る

INT
			movlb	02h			;DACレジスタ存在バンク
			incf	DCX,F		;X軸カウンタ
			movf	DCX,W
			addwf	FSR1L,F		;データアドレス設定(割込み終了後、元に戻る)
			movf	INDF1,W		;データテーブルから読み込み
			movwf	DAC1CON1	;DAC1へ書込み
			movf	DCM,W		;X軸分解能設定値
			xorwf	DCX,W
			btfsc	STATUS,Z
			clrf	DCX			;X軸カウンタリセット
;			TMR0リスタート処理
INTOUT		movlb	0h
            movf	DCR,W		;TMR0リスタート情報
			movwf	TMR0		;TMR0書込み、2cycの不感時間有
			bcf		INTCON,TMR0IF
			retfie				;




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PIC16F1705　イニシャライズ
;
;		OSCCON(BANK1　099H) 
;			bit7	SPLLEN	ソフトウエアPLL設定ビット
;							1 = 4xPLL有効
;							0 = 4xPLL無効(リセット後)
;			＊コンフィグレーションワードPLLEN=1の時、この設定は無視される。
;			bit6-3	IRCF	内部発振器クロック選択ビット
;							000x = 31KHZ LF
;							0010 = 31.25KHZ MF
;							0011 = 31.25KHZ HF
;							0100 = 62.5KHZ MF
;							0101 = 125KHZ MF
;							0110 = 250KHZ MF
;							0111 = 500KHZ MF（デフォルト）
;							1000 = 125kHZ HF
;							1001 = 250kHZ HF
;							1010 = 500kHZ HF
;							1011 = 1MHZ HF
;							1100 = 2MHZ HF
;							1101 = 4MHZ HF
;							1110 = 8MHZ or 32MHZ HF
;							1111 = 16MHZ HF
;			bit2			Unimplemented
;			bit1-0	SCS		システムクロック選択ビット
;							1x = 内部発振器
;							01 = タイマ1発振器
;							00 = FOSCで指定された発振器(リセット後)
;			(注)詳細はマニュアルあるいは当局HP内解説を参照
;							HF=HFINTOSC（16MHZ)
;							MF=MFINTOSC(500KHZ)
;							LF=LFINTOSC(32KHZ)
;
;
;			32MHZ内部発振設定
;		コンフィグレーションワード1		FOSC=100
;		OSCCON				SCS=00
;		OSCCON				IRCF=1110
;		OSCCON				SPLLEN=1(#1)
;		コンフィグレーションワード2		PLLEN=1(#1)
;						(#1)設定はどちらかでOKだが、PLLEN=1とすると、
;							OSCCONのSPLLEN=0の設定は無効となる。
;							また、8MHZのHFINTOSCは選択の余地が無い。
;
;		PORTA(BANK0　00CH）
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	デジタルI/O、アナログ入力
;			bit3	RA3		デジタルInputのみ
;			bit2	RA2-1	デジタルI/O、アナログ入力
;			bit0	RA0		デジタル･アナログI/O,DAコンバータ出力
;
;		PORTC(BANK0　00EH）
;			bit7-6	Unimplemented(read=0)
;			bit5-0	RC5-0	デジタルI/O、アナログ入力
;
;		TRISA(BANK1　08CH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	1=入力、0=出力
;			bit3	RA3		常に1
;			bit2	RA2-0	1=入力、0=出力
;
;		TRISC(BANK1　08EH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-0	1=入力、0=出力
;
;		LATA(BANK2　10CH)　データラッチレジスタ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	出力データ保持
;			bit3	Unimplemented(read=0)
;			bit2	RA2-0	出力データ保持
;		（このラッチデータはTRISAレジスタ設定で各ピンに反映される）
;
;		LATC(BANK2　10EH)　データラッチレジスタ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RC5-0	出力データ保持
;		（このラッチデータはTRISCレジスタ設定で各ピンに反映される）
;
;
;		ANSELA(BANK3　18CH)
;			bit7-5	Unimplemented(read=0)
;			bit4	ANSA3/RA4	アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			bit3	Unimplemented(read=0)
;			bit2-0	ANSA2-0/RA2-0アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトでは、すべて1(アナログ入力)となっている
;
;		ANSELC(BANK3　18EH)
;			bit7-6	Unimplemented(read=0)
;			bit5-0	ANSC5-0/RC5-0アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトでは、すべて1(アナログ入力)となっている
;
;
;		WPUA(BANK4　20CH)　ポートAプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTA各ビットプルアップ有効
;					 _____	0=PORTA各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		WPUC(BANK4　20EH)　ポートCプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTC各ビットプルアップ有効
;					 _____	0=PORTC各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		FVRCONレジスタ(BANK2　117H)
;			bit7	FVREN	FVRイネーブルビット
;							1=有効
;                           0=無効
;			bit6	FVRRDY	FVR準備フラグビット(#1)書込み不可
;							1=使用可能
;                           0=使用不可能あるいは禁止されている
;			bit5	TSEN	温度表示器イネーブルビット
;							1=有効
;                           0=無効
;			bit4	TSRNG	温度表示器測定レンジ選択ビット
;							1=High Range:Vout=VDD-4VT
;							0=Low Range:Vout=VDD-2VT
;			bit3-2	CDAFVR	コンパレータとDACへのFVR電圧選択ビット
;							11 = FVR出力　4x(4.096V)#2
;							10 = FVR出力　2x(2.048V)#2
;							01 = FVR出力 1x(1.024V)
;							00 = FVR出力OFF
;			bit1-0	ADFVR	ADCへのFVR電圧選択ビット
;							11 = FVR出力　4x(4.096V)#2
;							10 = FVR出力　2x(2.048V)#2
;							01 = FVR出力 1x(1.024V)
;							00 = FVR出力OFF
;
;							#1)16F1705/16F1709では常に"1"
;							#2)FVR電圧出力はVDDを超える事は出来ない
;
;		DAC1CON0レジスタ(BANK2　118H)
;		bit7	DACEN	DAC1イネーブルビット　P156 Fig17-1参照
;						1=許可
;						0=禁止
;		bit6	Unimplemented(read=0)
;		bit5	DAC1OE1	DAC1電圧出力1イネーブルビット
;						1=DAC1出力電圧をDACOUT1ピンにも出力される
;						0=DAC1出力電圧をDACOUT1ピンから切り離す
;		bit4	DAC1OE2	DAC1電圧出力2イネーブルビット
;						1=DAC1出力電圧をDACOUT2ピンにも出力される
;						0=DAC1出力電圧をDACOUT2ピンから切り離す
;		bit3-2	DAC1PSS	DAC1 正入力接続選択ビット
;						00 = VDD
;						01 = VREF+ピン(RA1)
;						10 = FVRバッファ2出力
;						11 = 使用不可
;		bit1	Un		Read as '0'
;       bit0    DAC1NSS DAC1 負入力選択ビット
;                       1=VREF-ピン(RA0)
;                       0=GND
;
;		ADCON0レジスタ(BANK1　09EH)
;		bit7	Unimplemented(read=0)
;		bit6-2	CHSx	アナログチャンネル入力選択ビット
;						11111 = FVRバッファ1出力
;						11110 = DAC_OUTPUT
;						11101 = 温度インジケータ
;						11100 = FVRバッファ2出力
;						11011 = 予約 未接続
;                              ?
;                       01100 = 予約 未接続
;						01011 = AN11
;						01010 = AN10
;						01001 = AN9
;						01000 = AN8
;						00111 = AN7
;						00110 = AN6
;						00101 = AN5
;						00100 = AN4
;						00011 = AN3
;						00010 = AN2
;						00001 = AN1
;						00000 = AN0
;		bit1	GO/DONE	A/D変換ステータスビット
;						1=変換開始指令（1にすると変換動作開始）
;						0=変換完了(変換完了すると0になる）
;		bit0	ADON	A/D変換ステータスビット
;						1=A/Dコンバータ動作
;						0=A/Dコンバータ停止
;
;		ADCON1レジスタ(BANK1　09EH)
;		bit7	ADFM	変換結果格納指定
;						1=右詰
;						0=左詰め
;		bit6-4	ADCS	A/D変換クロック選択ビット
;						111 = Frc
;						110 = Fosc/64
;						101 = Fosc/16
;						100 = Fosc/4
;						011 = Frc
;						010 = Fosc/32
;						001 = Fosc/8
;						000	= Fosc/2
;		bit3-2	Unimplemented(read=0)
;		bit1-0	ADPREF	参照正電圧指定
;						11 = 内部FVRモジュール
;						10 = 外部VREF+ピン (RA1)
;						01 = Reserved
;						00 = VDD
;
;
;       オペアンプ制御レジスタ(OPA1,OPA2)
;       OPAxCON(BANK10 0511H,0515H)
;		bit7	OPAxEN	OPAxイネーブルビット
;						1=有効
;						0=無効
;		bit6	OPAxSP  オペアンプ速度/消費電力選択ビット
;                       1=高GBWPモードで動作
;                       0=低GBWPモードで動作
;		bit5	Unimplemented(read=0)
;		bit4	OPAxUG	オペアンプ ユニティゲイン選択ビット
;						1=OPA出力を反転入力に接続。
;                         OPAxIN-ピンは汎用I/Oとして使用できる
;						0=反転入力をOPAxIN-ピンに接続する
;		bit3-2	Unimplemented(read=0)
;		bit1-0	OPAxCH	非反転チャンネル選択ビット
;						11 = 非反転入力にFVRバッファ2出力を接続
;						10 = 非反転入力にDAC_outputを接続
;						11 = 非反転入力にOPAxIN+を接続
;
;		OPTION_REG(BANK1　095H)
;					_____
;			bit7=1	WPUEN	プルアップ グローバル設定ビット
;							0=有効,1=無効
;			bit6=0	INTEDG	INTピン割り込み信号エッジ
;							1=↑
;							0=↓
;			bit5=0	TMR0CS	TMR0クロックソース選択ビット
;							1=外部入力RA2/T0CKI
;							0=内部システムクロック(Fosc/4)
;			bit4=1	TMR0SE	TMR0ソースエッジ選択ビット
;							1=RA4/T0CKIピンが↑の時インクリメント
;							0=RA4/T0CKIピンが↓の時インクリメント
;			bit3=0	PSA		プリスケーラ割当ビット
;							1=WDT
;							0=TMR0
;			bit2-0	PS		プリスケーラ分周比
;										000 1/2
;										001	1/4
;										010	1/8
;										011	1/16
;										100	1/32
;										101	1/64
;										110	1/128
;										111	1/256
;
;		INTCONレジスタ(#2)　コア　00BH
;			bit7	GIE		全割込制御
;							1許可、0禁止
;			bit6	PEIE	周辺装置割込制御
;							1許可、0禁止
;			bit5	TMR0IE	タイマ0割込許可制御
;							1許可、0禁止
;			bit4	INTE	RA2外部割込許可制御
;							1許可、0禁止
;			bit3	IOCIE	I/Oポート状態変化割込許可制御
;							1許可、0禁止
;			bit2	TMR0IF	タイマ0割込みフラグ(#1)
;							1オーバーフロー
;							0オーバーフローなし
;			bit1	INTF	RA2外部割込みフラグ(#1)
;							1割込み発生
;							0割込み発生なし
;			bit0	IOCIF	I/Oポート状態変化割込フラグ(#1)
;							1割込発生
;							0割込無
;
;							#1)ソフトウエアでリセット必要
;							#2)初期値=0なので、初期設定で0設定する必要は無い
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

init
;			各レジスタ初期設定(PIC16F1705)
			movlb	0h			;BANK0
			movlw	020h		;00100000B
			movwf	INTCON		;全割込みOFF、タイマ0割込みON
			clrf	PORTA		;Init PORT
			clrf	PORTC
			;クロック
			movlb	01h			;BANK１
			movlw	0f0h		;1111000B
			movwf	OSCCON		;内部発振器は8MHZに設定
								;4xPLL=ON
			;TMR0およびプルアップ
			movlw	088H		;10001000b
			movwf	OPTION_REG	;プルアップOFF
								;割込みエッジ↓
								;クロックソース内部（Fosc/4）
								;TMR0カウントエッジ↓
								;プリスケーラ割当→WDT
								;プリスケーラ分周1/2にセット
			;10ビットADC
			movlw	020h		;00100000B
			movwf	ADCON1		;左詰め、基準電圧VDD
								;ADCクロック　Fosc/32=1us(32MHZ)
			;I/Oポート(TRIS→BANK1、ANSEL→BANK3)
			movlw	03Fh		;00111111B
			movwf	TRISA		;RA0-5入力
			movlw	07h			;00000111B
			movwf	TRISC		;RC0-2入力、RC3-5出力
			movlb	03h			;BANK3
			movlw	00h			;00000000B
			movwf	ANSELA		;RA0-5=デジタル
			movlw	04h			;00000100B
			movwf	ANSELC		;RC0,1,3-5=デジタル、RC2=アナログ
;
			;FVR(BANK2)
			movlb	02h			;BANK2
			movlw	084h		;10000100B
			movwf	FVRCON		;FVRイネーブル
								;DACとCPSに1.24V
								;ADCにはOFF

			;8ビットDAC(BANK2)
			movlw	088h		;10001000B
			movwf	DAC1CON0	;DAC1イネーブル
			movlb	0h			;基準電圧はFVR
                                 ;DACOUTピン切り離し

			;オペアンプ1(BANK10)
			movlb	0ah			;BANK10
			movlw	0d2h		;11010010B
			movwf	OPA1CON		;OPA1イネーブル
								;高GBWPモード、ユニティゲイン
								;OPA1出力を反転入力に接続(電圧バッファ）
								;非反転入力にDAC1出力を接続
;			注意	オペアンプ出力ピンもアナログ入力に設定する事

			;初期設定終了
			clrf	BSR

;
;		メインプログラム
;
coldst
;			MUSICデフォルト設定
			movlw	04h				;無音時間1/4
			movwf	GAT
mloop		;メインループ

			大きな古時計
			movlw	LOW Furudokei
			movwf	MML_PT0
			movlw	HIGH Furudokei
			movwf	MML_PT1		;
			movlw	.90
			movwf	TEMPOL
			clrf	TEMPOH
			call	ONPBASE
			call	MUSIC
			call	wait1s
			call	wait1s

;			愛のロマンス(禁じられた遊び)
			movlw	LOW Romance2
			movwf	MML_PT0
			movlw	HIGH Romance2
			movwf	MML_PT1		;
			movlw	.120
			movwf	TEMPOL
			clrf	TEMPOH
			call	ONPBASE
			call	MUSIC
			call	wait1s
			call	wait1s

;			コンドルは飛んで行く
			movlw	LOW Condor
			movwf	MML_PT0
			movlw	HIGH Condor
			movwf	MML_PT1		;
			movlw	.100
			movwf	TEMPOL
			clrf	TEMPOH		;TEMPO=120
			call	ONPBASE
			call	MUSIC
			call	wait1s
			call	wait1s

;			goto	mloop
;			春の小川
demo1		movlw	LOW Harunoogawa
			movwf	MML_PT0
			movlw	HIGH Harunoogawa
			movwf	MML_PT1		;
			movlw	.100
			movwf	TEMPOL
			clrf	TEMPOH		;TEMPO=120
			call	ONPBASE
			call	MUSIC
			call	wait1s
			call	wait1s

			goto	mloop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		ＭＭＬ処理　Ｖｅｒ１．０
;
;		１データ領域からＭＭＬデータを逐次取得(FSR0でアドレス指定)
;		２指定の音域、音名から生成周波数を決定
;		３周波数テーブルアドレスをFSR1にセット(ISRに渡される)
;		４指定の音長時間が経過したら、１にもどる
;		
;	音程（半角大文字のみ判定)
;	ド　　　　レ　　　　ミ　ファ　　　ソ　　　　ラ　　　　シ
;	Ｃ　Ｃ＃、Ｄ　Ｄ＃、Ｅ、Ｆ　Ｆ＃、Ｇ　Ｇ＃、Ａ　Ａ＃、Ｂ
;
;	音長　音程の直後に０?９で指定（秒数はTEMPO=60の場合）
;	０：32分音符			1/32	0.125秒
;	１：16分音符			2/32	0.25秒
;	２：付点16分音符		3/32	0.375秒
;	３：8分音符			4/32	0.5秒
;	４：付点8分音符		6/32	0.75秒
;	５：4分音符			8/32	1秒
;	６：付点4分音符		12/32	1.5秒
;	７：2分音符			16/32	2秒
;	８：付点2分音符		24/32	3秒
;	９：全音符			32/32	4秒
;
;	休符　Ｒ０?Ｒ９、半角大文字で指定
;
;	オクターブ　Ｏ０?Ｏ９、半角大文字で指定（中央値はＯ４）
;
;	消音スイッチ　Ｔ０、Ｔ４の２種のみ
;
;	MMLコマンド展開整理
;		テンポ変数		TEMPOL,TEMPOHの16bit(MMLコマンドではない）
;		音長物理時間	TMM0,TMM1の16bit	※分解能は1ms
;						音長番号とテンポから演算
;		オクターブ変数	FDA1(1オクターブにつき、24ずつ増えていく)
;						デフォルトはＯ４、すなわちFDA1=96(C4)
;		音番号変数		FDA0(0-11)			※音番号配列参照
;						音程とオクターブから演算
;
;	MMLデータへのアクセス
;		FSR0を使用、FSR0値はMML_PTxに保存
;		アドレスポインタワーク　MML_PT0,MML_PT1
;
;	MMLデータの基本ブロック
;		O4		(O)=１次コマンド、(4)=2次コマンド
;		C#5		(C)=1次コマンド、(#)=2次コマンド、(5)=3次コマンド
;		R5		(R)=1次コマンド、(5)=2次コマンド
;		上記の例では、オクターブはＯ４
;		ド＃(262.63HZ)を四分音符として指定時間発生
;		その後指定時間無音となる
;		取得・実行中のコマンドブロックはMLC(0-2)に一時保管される
;		C#5の場合、MLC0='C'、MLC1='#'、MLC2='5'
;		R5の場合、MLC0='R'、MLC1=''、MLC2='5'
;
;	事前設定事項
;	テンポ　変数TEMPOL/TEMPOH(16bit)で事前に指定、数値60でC5が全長1秒
;
MUSIC
;			MMLコマンド先頭アドレスをFSR0にセット
			clrf	ERCRD		;エラーコード　リセット
			clrf	MLC0
			clrf	MLC1
			clrf	MLC2		;コマンドブロック リセット
			movf	MML_PT0,W
			movwf	FSR0L
			movf	MML_PT1,W
			movwf	FSR0H		;FSR0=MML_PT
MML_1ST
			moviw	FSR0++		;
			movwf	MLC0		;1次コマンド保存
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MML_END
;	英大文字の判定
			movlw	041H		;コマンドブロック先頭は半角大文字しか認めない
			subwf	MLC0,W
			btfss	STATUS,C	;F>=30H then C=1
			goto	MML_1ST		;Cord skip
			movlw	05BH
			subwf	MLC0,W
			btfsc	STATUS,C	;F>=5BH then C=1
			goto	MML_1ST		;半角大文字以外はスキップ
;	１次コマンド処理
			movf	MLC0,W
			xorlw	'O'			;MML=オクターブコマンド?
			btfsc	STATUS,Z
			goto	MML_OCT		;続く数値(2次コマンド)を取得しに行く

			movf	MLC0,W
			xorlw	'C'			;MML=C?
			btfsc	STATUS,Z
			goto	MML_C

			movf	MLC0,W
			xorlw	'D'			;MML=D?
			btfsc	STATUS,Z
			goto	MML_D

			movf	MLC0,W
			xorlw	'E'			;MML=E?
			btfsc	STATUS,Z
			goto	MML_E

			movf	MLC0,W
			xorlw	'F'			;MML=F?
			btfsc	STATUS,Z
			goto	MML_F

			movf	MLC0,W
			xorlw	'G'			;MML=G?
			btfsc	STATUS,Z
			goto	MML_G

			movf	MLC0,W
			xorlw	'A'			;MML=A?
			btfsc	STATUS,Z
			goto	MML_A

			movf	MLC0,W
			xorlw	'B'			;MML=B?
			btfsc	STATUS,Z
			goto	MML_B

			movf	MLC0,W
			xorlw	'R'			;MML=R?
			btfsc	STATUS,Z
			goto	MML_R

			movf	MLC0,W
			xorlw	'T'			;MML=T?
			btfsc	STATUS,Z
			goto	MML_T

			goto	MML_1ST		;スキップ



;	２次コマンド処理
MML_OCT
			moviw	FSR0++		;W=オクターブ数字コード
			movwf	MLC2		;入力データ保存
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MLO_ER
			;オクターブによる音階オフセット
			call	ASCTONUM	;数字コードを数値へ変換
			movwf	FDA1		;オクターブ値セット
			xorlw	0FFH		;数値変換エラー
			btfss	STATUS,Z
;			movf	FSR0L,W
;			movwf	MML_PT0
;			movf	FSR0H,W
;			movwf	MML_PT1		;MMLアドレスポインタ保存
			goto	MML_1ST		;オクターブコマンド処理終了
MLO_ER
			movlw	01h			;Oコマンド数値エラー
			goto	MML_END
MML_C		;ド
			clrf	FDA0		;FDA0値=Cコード値=0
			goto	CK_HUP		;続いて#が来るかチェック
MML_D		;レ
			movlw	02H
			movwf	FDA0
			goto	CK_HUP
MML_E		;ミ
			movlw	04H
			movwf	FDA0		;E#は無
			goto	ONP_SEL
MML_F		;ファ
			movlw	05H
			movwf	FDA0
			goto	CK_HUP
MML_G		;ソ
			movlw	07H
			movwf	FDA0
			goto	CK_HUP
MML_A		;ラ
			movlw	09H
			movwf	FDA0
			goto	CK_HUP
MML_B		;シ
			movlw	0BH			;11D
			movwf	FDA0		;B#は無
			goto	ONP_SEL
;
CK_HUP
			movf	INDF0,W		;とりあえずデータ取得してみる
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MML_END
			;
			xorlw	'#'			;MML=#?
			btfss	STATUS,Z
			bra		ONP_SEL		;#では無かったので、3次コマンド取得へ
			moviw	FSR0++		;FSR0をインクリメント
			movwf	MLC1		;2次コマンド保存
			incf	FDA0,F		;音程番号を1つ上げる(これが＃処理）
;	３次コマンド処理
ONP_SEL
			moviw	FSR0++		;W=音符数字コード0-9
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MML_END
			;
			movwf	MLC2		;3次コマンド保存(0-9)
			;音符選択
			movf	MLC2,W
			xorlw	'0'			;32分?
			btfss	STATUS,Z
			bra		ose01
			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose0g
			;32分消音時間有
			movlb	01h
			movf	GON0L,W		;GON0=32分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON0H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF0L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF0H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose0g		;32分消音時間無
			movlb	01h
			movf	ONP0L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP0H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC
			;16分
ose01
			movf	MLC2,W
			xorlw	'1'			;16分?
			btfss	STATUS,Z
			bra		ose02
			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose1g
			;16分消音時間有
			movlb	01h
			movf	GON1L,W		;GON1=16分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON1H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF1L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF1H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose1g		;16分消音時間無
			movlb	01h
			movf	ONP1L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP1H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC
			;付点16分
ose02
			movf	MLC2,W
			xorlw	'2'			;付点16分?
			btfss	STATUS,Z
			bra		ose03
			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose2g
			;付点16分消音時間有
			movlb	01h
			movf	GON2L,W		;GON2=付点16分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON2H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF2L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF2H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose2g		;付点16分消音時間無
			movlb	01h
			movf	ONP2L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP2H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC
;			8分
ose03
			movf	MLC2,W
			xorlw	'3'			;8分?
			btfss	STATUS,Z
			bra		ose04

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose3g

			movlb	01h
			movf	GON3L,W		;GON3=8分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON3H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF3L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF3H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose3g		;消音時間無
			movlb	01h
			movf	ONP3L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP3H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose04
			movf	MLC2,W
			xorlw	'4'			;付点8分?
			btfss	STATUS,Z
			bra		ose05

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose4g

			movlb	01h
			movf	GON4L,W		;GON4=付点8分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON4H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF4L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF4H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose4g		;消音時間無
			movlb	01h
			movf	ONP4L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP4H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose05
			movf	MLC2,W
			xorlw	'5'			;4分?
			btfss	STATUS,Z
			bra		ose06

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose5g

			movlb	01h
			movf	GON5L,W		;GON5=4分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON5H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF5L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF5H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose5g		;消音時間無
			movlb	01h
			movf	ONP5L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP5H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose06
			movf	MLC2,W
			xorlw	'6'			;付点4分?
			btfss	STATUS,Z
			bra		ose07

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose6g

			movlb	01h
			movf	GON6L,W		;GON6=付点4分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON6H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF6L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF6H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose6g		;消音時間無
			movlb	01h
			movf	ONP6L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP6H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose07
			movf	MLC2,W
			xorlw	'7'			;2分?
			btfss	STATUS,Z
			bra		ose08

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose7g

			movlb	01h
			movf	GON7L,W		;GON7=2分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON7H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF7L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF7H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose7g		;消音時間無
			movlb	01h
			movf	ONP7L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP7H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose08
			movf	MLC2,W
			xorlw	'8'			;付点2分?
			btfss	STATUS,Z
			bra		ose09

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose8g

			movlb	01h
			movf	GON8L,W		;GON8=付点2分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON8H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF8L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF8H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose8g		;消音時間無
			movlb	01h
			movf	ONP8L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP8H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose09
			movf	MLC2,W
			xorlw	'9'			;全分?
			btfss	STATUS,Z
			bra		ose10

			movf	GAT,W		;無音時間フラグ
			iorlw	0h
			btfsc	STATUS,Z
			bra		ose9g

			movlb	01h
			movf	GON9L,W		;GON9=1分音符音長
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	GON9H,W
			clrf	BSR
			movwf	ON_TIME1
			movlb	01h
			movf	GOF9L,W
			clrf	BSR
			movwf	OFF_TIME0
			movlb	01h
			movf	GOF9H,W
			clrf	BSR
			movwf	OFF_TIME1
			goto	MML_EXC
ose9g		;消音時間無
			movlb	01h
			movf	ONP9L,W
			clrf	BSR
			movwf	ON_TIME0
			movlb	01h
			movf	ONP9H,W
			clrf	BSR
			movwf	ON_TIME1
			clrf	OFF_TIME0
			clrf	OFF_TIME1
			goto	MML_EXC

ose10
			movlw	02H				;音符数値コードエラー
			goto	MML_END

;	音階発生コマンド実行
;		FDA0=オクターブ内音階番号
;		FDA1=オクターブ番号
;		delay(0-1)=音長処理
MML_EXC
			movf	FSR0L,W
			movwf	MML_PT0
			movf	FSR0H,W
			movwf	MML_PT1		;MMLアクセスポインタ保存
			;
			call	GET_FRD		;音周波数生成データ取得・設定
			movf	GAT,W
			iorlw	0h
			btfsc	STATUS,Z
			bra		mle02
			;消音時間有
			movf	ON_TIME0,W
			movwf	delay0
			movf	ON_TIME1,W
			movwf	delay1
			call	MUTE_OFF
			call	DELAY_MS	;音符発生時間内の発音時間
			movf	OFF_TIME0,W
			movwf	delay0
			movf	OFF_TIME1,W
			movwf	delay1
			call	MUTE_ON
			call	DELAY_MS	;音符発生時間内の消音時間
			goto	MUSIC		;次のMMLコマンドブロック取得へ
mle02		;消音時間無
			movf	ON_TIME0,W
			movwf	delay0
			movf	ON_TIME1,W
			movwf	delay1
			call	MUTE_OFF
			call	DELAY_MS	;音符発生時間内の発音時間
			goto	MUSIC

;	休符コマンド実行
MML_R
			moviw	FSR0++		;W=オクターブ数字コード
			clrf	MLC1		;2次コマンドクリア
			movwf	MLC2		;3次コマンド保存
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MML_END
			;
			movf	FSR0L,W
			movwf	MML_PT0
			movf	FSR0H,W
			movwf	MML_PT1		;MMLアクセスポインタ保存
			call	MUTE_ON		;消音スタート
			;休符選択
			movf	MLC2,W		;3次コマンド
			xorlw	'0'			;32分?
			btfss	STATUS,Z
			bra		mlr01
			movlb	01h
			movf	ONP0L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP0H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr01
			movf	MLC2,W		;
			xorlw	'1'			;16分?
			btfss	STATUS,Z
			bra		mlr02
			movlb	01h
			movf	ONP1L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP1H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr02
			movf	MLC2,W		;
			xorlw	'2'			;付点16分?
			btfss	STATUS,Z
			bra		mlr03
			movlb	01h
			movf	ONP2L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP2H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr03
			movf	MLC2,W		;
			xorlw	'3'			;8分?
			btfss	STATUS,Z
			bra		mlr04
			movlb	01h
			movf	ONP3L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP3H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr04
			movf	MLC2,W
			xorlw	'4'			;付点8分?
			btfss	STATUS,Z
			bra		mlr05
			movlb	01h
			movf	ONP4L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP4H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr05
			movf	MLC2,W		;
			xorlw	'5'			;4分?
			btfss	STATUS,Z
			bra		mlr06
			movlb	01h
			movf	ONP5L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP5H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr06
			movf	MLC2,W		;
			xorlw	'6'			;付点4分?
			btfss	STATUS,Z
			bra		mlr07
			movlb	01h
			movf	ONP6L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP6H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr07
			movf	MLC2,W		;
			xorlw	'7'			;2分?
			btfss	STATUS,Z
			bra		mlr08
			movlb	01h
			movf	ONP7L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP7H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr08
			movf	MLC2,W		;
			xorlw	'8'			;付点2分?
			btfss	STATUS,Z
			bra		mlr09
			movlb	01h
			movf	ONP8L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP8H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr09
			movf	MLC2,W		;
			xorlw	'9'			;全分?
			btfss	STATUS,Z
			bra		mlr10
			movlb	01h
			movf	ONP9L,W
			clrf	BSR
			movwf	delay0
			movlb	01h
			movf	ONP9H,W
			clrf	BSR
			movwf	delay1
			call	DELAY_MS	;音符発生時間
			goto	MUSIC
mlr10
			movlw	03H
			goto	MML_END

;
;		ＭＭＬ終了処理
;
;	終了コード
;	ERCRD=00	正常終了
;	ERCRD=01	Oコマンド数値エラー
;	ERCRD=02	音符数値コマンドエラー
;	ERCRD=03	休符コマンドエラー
;	ERCRD=04	Tコマンドエラー
;	ERCRD=05	TEMPOx設定エラー
;
MML_END
			movwf	ERCRD			;エラーコード保存
			call	MUTE_ON
			return

;
;		消音時間長 制御フラグ
;		GAT=0	OFF
;		GAT=4	1/4 約25%
;
MML_T
			moviw	FSR0++		;W=オクターブ数字コード
			clrf	MLC1		;2次コマンドクリア
			movwf	MLC2		;3次コマンド保存
			iorlw	0h			;ENDcord?
			btfsc	STATUS,Z
			goto	MML_END
			;
			movf	FSR0L,W
			movwf	MML_PT0
			movf	FSR0H,W
			movwf	MML_PT1		;MMLアクセスポインタ保存
			;機能選択
			movf	MLC2,W		;3次コマンド
			xorlw	'0'			;OFF?
			btfss	STATUS,Z
			bra		mlt01
			clrf	GAT
			goto	MUSIC
mlt01
			movf	MLC2,W		;
			xorlw	'4'			;1/4?
			btfss	STATUS,Z
			bra		mlt10
			movlw	04H
			movwf	GAT
			goto	MUSIC
mlt10
			movlw	04H
			goto	MML_END


;
;		ミュート制御
;
MUTE_ON
			bcf		INTCON,GIE	;割込み禁止
			return

MUTE_OFF
			bsf		INTCON,GIE	;割込み許可
			return



;
;           音周波数配列データアクセス
;
;           配列    1行2桁構成
;
;           入力    FDA0    音階　0(C)-12(B)(数値)
;                   FDA1    オクターブ値　0-9(数値)
;							このデータは保存される
;
;           出力    DCR     取得TMR0値
;                   TBNO1   取得DACデータテーブル
;                   PSDT1   取得プリスケーラ設定データ
;
;           使用ワーク  fdw0、fdw1
;			※FSR0値は破壊されます、呼び出す前に保存する事
;
GET_FRD
;           配列アドレス オフセット設定
			movlw	0h
			movwf	FSR0L
			movlw	08AH
			movwf	FSR0H		;間接アドレス8A00H
;           配列メモリアドレス演算
			movf	FDA0,W
			movwf	fdw0
			lslf	fdw0,F		;fdw0=fdw0*2
			movf	FDA1,W		;オクターブ値(0-9）
			call	MLT8_X24	;オクターブによるアドレス加算(Wreg)
			addwf	fdw0,W		;fdw0=音階相対アドレス(0-23)
			addwf	FSR0L,F		;配列行絶対アドレス指定
;           配列行へアクセス実行
			moviw	FSR0++
			movwf	DCR			;TMR0リスタート値
			moviw	FSR0++
			movwf	fdw0		;PS設定、TBL設定
;
;		プリスケーラ値およびテーブル番号展開
;
;		TBNO0   DACデータテーブル過去値
;		TBNO1   DACデータテーブル現在値
;		PSDT0   プリスケーラ過去値
;		PSDT1   プリスケーラ現在値
			andlw	0fh
			movwf	PSDT1		;取得プリスケーラ値
			swapf	fdw0,W
			andlw	0fh
			movwf	TBNO1		;取得DACテーブル番号
;
;		OPTION_REG 下位4ビット プリスケーラ再設定
;			1000:PS=0
;			0000:PS=1/2
;			0001:PS=1/4
;			0010:PS=1/8
;			0011:PS=1/16
;		DAC入力データテーブル再設定
;			TBNO1=0:TBL128
;			TBNO1=1:TBL64
;			TBNO1=2:TBL32
;			TBNO1=3:TBL16
;
;			プリスケーラ変更
			movlb	01h			;BANK1
			movf	OPTION_REG,W
			clrf	BSR
			andlw	0f0h
			iorwf	PSDT1,W
			movlb	01h
			movwf	OPTION_REG
			clrf	BSR			;BANK0
;			DAC入力テーブルアドレス変更
			movlw	01h
			subwf	TBNO1,F
			btfss	STATUS,C	;ボローチェック
			goto	setb128		;ボロー発生ならTBL128
			subwf	TBNO1,F
			btfss	STATUS,C	;
			goto	setb64
			subwf	TBNO1,F
			btfss	STATUS,C	;
			goto	setb32
			subwf	TBNO1,F
			btfss	STATUS,C	;
			goto	setb16
			retlw	01h			;エラー

setb128		movlw	0h
			movwf	FSR1L
			movlw	089h
			movwf	FSR1H
			movlw	080h		;X軸分解能設定
			movwf	DCM
			return
setb64		movlw	050h
			movwf	FSR1L
			movlw	088h
			movwf	FSR1H
			movlw	040h		;X軸分解能設定
			movwf	DCM
			return
setb32		movlw	020h
			movwf	FSR1L
			movlw	088h
			movwf	FSR1H
			movlw	020h		;X軸分解能設定
			movwf	DCM
			return
setb16		movlw	00h
			movwf	FSR1L
			movlw	088h
			movwf	FSR1H
			movlw	010h        ;X軸分解能設定
			movwf	DCM
			return



;
;		音符発音時間設定
;
;	入力		TEMPOL,TEMPOH(16bit)
;	各音符の発音時間および消音時間を演算、専用変数に保存
;							倍率		専用変数(時間全長）
;	出力	32分音符		OX=1	ONP0L、ONP0Hの16bit(ms)
;			16分音符		OX=2	ONP1L、ONP1H
;			付点16分音符	OX=3	ONP2L、ONP2H
;			8分音符			OX=4	ONP3L、ONP3H
;			付点8分音符		OX=6	ONP4L、ONP4H
;			4分音符			OX=8	ONP5L、ONP5H
;			付点4分音符		OX=12	ONP6L、ONP6H
;			2分音符			OX=16	ONP7L、ONP7H
;			付点2分音符		OX=24	ONP8L、ONP8H
;			全音符			OX=32	ONP9L、ONP9H
;	式
;		ONPxx(ms) = (7500 * OX) / TEMPOx
;		※　式に各種処理時間の補正分は含まれません
;
;	発音時間(3/4,4=ONPx全長時間)
;			GONxL、GONxH		x=0-9(ONPxと同じ)
;	消音時間(1/4)
;			GOFxL、GOFxH		x=0-9
;		※　現在の所、発音時間／全長時間の比率は変更できません
;		　　これら専用変数30byteはBANK1に存在、アクセス注意
;
ONPBASE
;32分(O0,OX=1)　分子=7500=1D4CH
			movlw	04CH		;7500=1D4CH
			movwf	hex0
			movlw	01DH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B		;音符全長演算　hex(0-1)
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP0L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP0H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF0L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF0H		;GOF0x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON0L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON0H		;GON0x=hex(0-1)
			clrf	BSR

;16分(O1,OX=2)　分子=15000=3A98H
			movlw	098H		;15000=3A98H
			movwf	hex0
			movlw	03AH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP1L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP1H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF1L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF1H		;GOF1x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON1L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON1H		;GON1x=hex(0-1)
			clrf	BSR

;付点16分(O2,OX=3)　分子=22500=57E4H
			movlw	0E4H		;hex(0-1)=57E4H
			movwf	hex0
			movlw	057H
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP2L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP2H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF2L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF2H		;GOF2x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON2L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON2H		;GON2x=hex(0-1)
			clrf	BSR

;8分(O3,OX=4)
			movlw	030H		;hex(0-1)=7530H
			movwf	hex0
			movlw	075H
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP3L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP3H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF3L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF3H		;GOF3x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON3L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON3H		;GON3x=hex(0-1)
			clrf	BSR

;付点8分(O4,OX=6)
			movlw	0C8H		;hex(0-1)=AFC8H
			movwf	hex0
			movlw	0AFH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP4L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP4H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF4L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF4H		;GOF4x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON4L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON4H		;GON4x=hex(0-1)
			clrf	BSR

;4分(O5,OX=8)
			movlw	060H		;hex(0-1)=EA60H
			movwf	hex0
			movlw	0EAH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP5L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP5H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF5L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF5H		;GOF5x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON5L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON5H		;GON5x=hex(0-1)
			clrf	BSR

;付点4分(O6,OX=12)
			movlw	04CH		;hex(0-1)=1D4CH(7500)
			movwf	hex0
			movlw	01DH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B		;hex(0-1)=7500/TEMPO
			call	MLT16_X12
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP6L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP6H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF6L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF6H		;GOF6x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON6L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON6H		;GON6x=hex(0-1)
			clrf	BSR

;2分(O7,OX=16)
			movlw	04CH		;hex(0-1)=1D4CH(7500)
			movwf	hex0
			movlw	01DH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B		;hex(0-1)=7500/TEMPO
			call	MLT16_X16
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP7L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP7H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF7L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF7H		;GOF7x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON7L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON7H		;GON7x=hex(0-1)
			clrf	BSR

;付点2分(O8,OX=24)
			movlw	04CH		;hex(0-1)=1D4CH(7500)
			movwf	hex0
			movlw	01DH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B		;hex(0-1)=7500/TEMPO
			call	MLT16_X24
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP8L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP8H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF8L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF8H		;GOF8x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON8L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON8H		;GON8x=hex(0-1)
			clrf	BSR

;1分(O9,OX=32)
			movlw	04CH		;hex(0-1)=1D4CH(7500)
			movwf	hex0
			movlw	01DH
			movwf	hex1
			movf	TEMPOL,W
			movwf	hexw0
			movf	TEMPOH,W
			movwf	hexw1
			call	DIV16B		;hex(0-1)=7500/TEMPO
			call	MLT16_X32
			;
			movf	hex0,W
			movwf	wrk0		;全長一時保存
			movlb	01h
			movwf	ONP9L
			clrf	BSR
			movf	hex1,W
			movwf	wrk1
			movlb	01h
			movwf	ONP9H		;全長保存
			clrf	BSR
			;音符消音部分のデータ処理
			call	DIV16_X4	;hex(0-1)=hex(0-1)/4
			movf	hex0,W		;消音部分(25%)の演算・保存
			movwf	hexw0
			movlb	01h
			movwf	GOF9L
			clrf	BSR
			movf	hex1,W
			movwf	hexw1
			movlb	01h
			movwf	GOF9H		;GOF9x=hex(0-1)
			clrf	BSR
			;音符発音部分のデータ処理
			movf	wrk0,W
			movwf	hex0
			movf	wrk1,W
			movwf	hex1		;hex(0-1)=全長、hexw(0-1)=消音25%
			call	SUB16B		;発音部分(75%)の演算　hex(0-1)
			movf	hex0,W
			movlb	01h
			movwf	GON9L
			clrf	BSR
			movf	hex1,W
			movlb	01h
			movwf	GON9H		;GON9x=hex(0-1)
			clrf	BSR

			return
			

;
;		数字コードを数値に変換
;
;		入出力はWreg
;		数字コード以外はFFHに変換
;
ASCTONUM
			movwf	wrk0
			movlw	030h		;'0'
			subwf	wrk0,W		;W=wrk0-W
			btfss	STATUS,C
			bra		NUMERR		;wrk0<W
			movwf	wrk1
			sublw	039h		;W=39H('9')-W
			btfss	STATUS,C
			bra		NUMERR
			movf	wrk1,W
			return
NUMERR		retlw	0FFh

;
;       8ビットバイナリ　24倍演算（符号無整数)
;
;       W=W*24
;		エラー発生しても対処されないので、W=<10までで使用
;
MLT8_X24
			movwf	wrk0
			movwf	wrk1
			lslf	wrk0,F		;X2
			lslf	wrk0,F		;X4
			lslf	wrk0,F		;X8
			movf	wrk1,W
			addwf	wrk0,F
			addwf	wrk0,F
			addwf	wrk0,F
			addwf	wrk0,F		;X12
			lslf	wrk0,W		;X24
			return

;
;       16ビットバイナリ　12倍演算（符号無整数)
;
;       hex(0-1)=hex(0-1)*12
;		W=0の時、正常終了
;		W=FFHの時、エラー発生、演算結果は保障されない
;		hexw(0-1)は破壊される
;
MLT16_X12
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C	;X4
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X8
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfsc	STATUS,C
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;元データを加算
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;元データを加算
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;元データを加算
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			retlw	0h			;演算正常終了


;
;       16ビットバイナリ　24倍演算（符号無整数)
;
;       hex(0-1)=hex(0-1)*24
;		W=0の時、正常終了
;		W=FFHの時、エラー発生、演算結果は保障されない
;		hexw(0-1)は破壊される
;
MLT16_X24
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C	;X4
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X8
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfsc	STATUS,C
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;X9
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;X10
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;X11
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			call	ADD16B		;X12
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
;
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			call	ADD16B		;X24
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			retlw	0h			;演算正常終了


;
;       16ビットバイナリ　16倍演算（符号無整数)
;
;       hex(0-1)=hex(0-1)*16
;		W=0の時、正常終了
;		W=FFHの時、エラー発生、演算結果は保障されない
;
MLT16_X16
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C	;X4
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X8
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X16
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfsc	STATUS,C
			retlw	0FFh		;演算オーバーフロー発生
			retlw	0h			;演算正常終了

;
;       16ビットバイナリ　32倍演算（符号無整数)
;
;       hex(0-1)=hex(0-1)*32
;		W=0の時、正常終了
;		W=FFHの時、エラー発生、演算結果は保障されない
;
MLT16_X32
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C	;X4
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X8
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;X16
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfsc	STATUS,C
			retlw	0FFh		;演算オーバーフロー発生
;
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			call	ADD16B		;X32
			iorlw	0h
			btfss	STATUS,Z
			retlw	0FFh		;演算オーバーフロー発生
			retlw	0h			;演算正常終了


;
;		16bitバイナリ　1/4除算(符号無整数）
;
;		hex(0-1)=hex(0-1)/4
;
DIV16_X4
			bcf		STATUS,C	;Cフラグクリア
			rrf		hex1,F		;右ローテート（上位8ビット÷２）
			rrf		hex0,F		;右ローテート（下位8ビット÷２）
			bcf		STATUS,C	;/4
			rrf		hex1,F		;
			rrf		hex0,F		;
			retlw	0h			;演算正常終了


;
;			16bitバイナリ除算（近似値）
;							Ver1.0
;		hex(0-1)=hex(0-1)÷hexw(0-1)
;		小数点以下は8bitまで演算(hexdに格納)、以下切り捨て
;		余りは出ない
;
;		使用ワーク
;		div0		商の下位8bit
;		div1		商の上位8bit
;		divw(0-1)	割られる数の演算途中保存
;		divw(2-3)	割る数の保存
;		hexd		商の小数点位以下8bit
;
DIV16B
			movf	hex0,W
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;割られる数hex(0-1)をdivw(0-1)に保存
			movf	hexw0,W		;割る数hexw(0-1)の保存
			movwf	divw2
			movf	hexw1,W
			movwf	divw3		;hexw(0-1)をdivw(2-3)に保存
			clrf	div0		;商の下位8bit
			clrf	div1		;商の上位8bit
			clrf	hexd		;商の小数点以下部

dv16b01		call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
			iorlw	0h			;W=0演算成功、W=FFHボロー発生演算不可
			btfss	STATUS,Z
			bra		DV16U		;減算不可で小数点以下処理へ
;			まだ減算可、商加算
ADDIV01
			movlw	01h			;W=1
			addwf	div0,F		;div0=div0+1　div(0-1)は商
			movlw	01h			;この命令はフラグ変化しない
			btfsc	STATUS,C
			addwf	div1,F		;キャリー発生、div1=div1+1
			movf	hex0,W		;減算後のhex(0-1)をdivw(0-1)に保存
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;hex(0-1)をdivw(0-1)に保存
			bra		dv16b01
;			小数点以下の処理
DV16U
			movf	divw0,W		;減算不可のhex(0-1)をdivw(0-1)から引出
			movwf	hex0
			movf	divw1,W
			movwf	hex1		;
			call	MLT16_X16	;hex(0-1)=hex(0-1)×16
			movf	hex0,W		;16倍後のhex(0-1)をdivw(0-1)に保存
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;hex(0-1)をdivw(0-1)に保存
			movf	divw2,W		;割る数のhexw(0-1)をdivw(2-3)から引出
			movwf	hexw0
			movf	divw3,W
			movwf	hexw1		;
;			小数点以下1位の除算
dv16u01
			call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
			iorlw	0h			;W=0演算成功、W=FFHボロー発生演算不可
			btfss	STATUS,Z
			bra		dv16u03		;減算不可で小数点以下2位処理へ
;			まだ減算可、商加算
dv16u02
			swapf	hexd,F
			movlw	01h			;W=1
			addwf	hexd,F		;div0=div0+1　div(0-1)は商
			swapf	hexd,F
			movf	hex0,W		;減算後のhex(0-1)をdivw(0-1)に保存
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;hex(0-1)をdivw(0-1)に保存
			bra		dv16u01
;			小数点以下2位の除算準備
dv16u03
			movf	divw0,W		;減算不可のhex(0-1)をdivw(0-1)から引出
			movwf	hex0
			movf	divw1,W
			movwf	hex1		;
			call	MLT16_X16	;hex(0-1)=hex(0-1)×16
			movf	hex0,W		;16倍後のhex(0-1)をdivw(0-1)に保存
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;hex(0-1)をdivw(0-1)に保存
			movf	divw2,W		;割る数のhexw(0-1)をdivw(2-3)から引出
			movwf	hexw0
			movf	divw3,W
			movwf	hexw1		;
;			小数点以下2位の除算
dv16u04
			call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
			iorlw	0h			;W=0演算成功、W=FFHボロー発生演算不可
			btfss	STATUS,Z
			bra		dv16u05		;減算不可で小数点以下3位処理へ
;
			movlw	01h			;W=1
			addwf	hexd,F		;div0=div0+1　div(0-1)は商
			movf	hex0,W		;減算後のhex(0-1)をdivw(0-1)に保存
			movwf	divw0
			movf	hex1,W
			movwf	divw1		;hex(0-1)をdivw(0-1)に保存
			bra		dv16u04
;
dv16u05
			movf	div0,W
			movwf	hex0
			movf	div1,W
			movwf	hex1
			retlw	00h

exchd32
			movf	hex0,W
			movwf	div0
			movf	hex1,W
			movwf	div1
			movf	hex2,W
			movwf	div2
			movf	hex3,W
			movwf	div3

			movf	hexw0,W
			movwf	divw0
			movf	hexw1,W
			movwf	divw1
			movf	hexw2,W
			movwf	divw2
			movf	hexw3,W
			movwf	divw3
			return

excdh32
			movf	div0,W
			movwf	hex0
			movf	div1,W
			movwf	hex1
			movf	div2,W
			movwf	hex2
			movf	div3,W
			movwf	hex3

			movf	divw0,W
			movwf	hexw0
			movf	divw1,W
			movwf	hexw1
			movf	divw2,W
			movwf	hexw2
			movf	divw3,W
			movwf	hexw3
			return

exchd16
			movf	hex0,W
			movwf	div0
			movf	hex1,W
			movwf	div1

			movf	hexw0,W
			movwf	divw0
			movf	hexw1,W
			movwf	divw1
			return

excdh16
			movf	div0,W
			movwf	hex0
			movf	div1,W
			movwf	hex1

			movf	divw0,W
			movwf	hexw0
			movf	divw1,W
			movwf	hexw1
			return


;			32ビットバイナリ加算(整数符号無）
;
;		事前に(hex0-3)、(hexw0-3)に数値を入れておく事
;		演算結果でエラー(桁上がり）が発生しても対処はしない
;		hexw(0-3)は保存される
;
;		演算
;		hex(0-3) = hex(0-3) + hexw(0-3)
;

ADD32B
			movf	hexw0,W		;hex0=hex0+hexw0
			addwf	hex0,F		;桁上がりでC=1
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C	;if c=1 then hex1=hex1+1
			goto	ad31		;桁上がり無
;			(hex0+W)に桁上がり発生、処理
			addwf	hex1,F		;hex1=hex1+1
			btfsc	STATUS,C	;桁上がり無なら、goto ad31
			addwf	hex2,F		;桁上がり発生、hex2=hex2+1
			btfsc	STATUS,C	;桁上がり無なら、goto ad31
			addwf	hex3,F		;桁上がり発生、hex3=hex3+1
								;ここで桁上がり発生しても対処しない
ad31		movf	hexw1,W
			addwf	hex1,F
			movlw	01h
			btfsc	STATUS,C
			addwf	hex2,F
			btfsc	STATUS,C
			addwf	hex3,F

ad32		movf	hexw2,W
			addwf	hex2,F
			movlw	01h
			btfsc	STATUS,C
			addwf	hex3,F
			movf	hexw3,W
			addwf	hex3,F
			retlw	0h


;
;
;			32ビットバイナリ減算(整数符号無)
;
;		事前にhex(0-3)、hexw(0-3)に数値を入れておく事
;		演算結果でエラー(マイナス）の場合W=1、OKの時はW=0でリターン
;		W=FFHの場合、演算結果は保障されない
;		hexw(0-3)は保存される
;
;		演算
;		hex(0-3) = hex(0-3) - hexw(0-3)
;

SUB32B
;			hex0-hexw0の減算
			movf	hexw0,W		;hex0=hex0-W(hexw0)
			subwf	hex0,F		;W>HEX0の時、ボロー(C=0)
								;W<=HEX0の時、無(C=1)
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C	;C=1なら、hex1-hexw1へ
;			(hex0-W)にボロー発生、hex1に桁借り処理
			subwf	hex1,F		;hex1=hex1-1
			btfss	STATUS,C	;C=1なら、goto sb31
			subwf	hex2,F		;(hex1-1)にボロー発生、hex2に桁借り
			btfss	STATUS,C	;C=1なら、goto sb31
			subwf	hex3,F		;(hex2-1）ボロー発生、hex3に桁借り
			btfss	STATUS,C
			retlw	0FFh		;hex3にボロー発生、エラー終了

;			hex1-hexw1の減算
sb31		movf	hexw1,W		;
			subwf	hex1,F
			movlw	01h
			btfss	STATUS,C
			subwf	hex2,F
			btfss	STATUS,C
			subwf	hex3,F
			btfss	STATUS,C
			retlw	0FFh
;			hex2-hexw2の減算
			movf	hexw2,W
			subwf	hex2,F
			movlw	01h
			btfss	STATUS,C
			subwf	hex3,F
			btfss	STATUS,C
			retlw	0FFh
;			hex3-hexw3の減算
			movf	hexw3,W
			subwf	hex3,F
			btfss	STATUS,C
			retlw	0FFh
			retlw	0h

;		16ビットバイナリ加算　ver1.1(バグ修正版)
;		hex(0-1)=hex(0-1)+hexw(0-1)
;		W=0の時、正常終了
;		W=FFHの時、エラー発生（キャリー）、演算結果は保障されない
;		hexw(0-1)は保存される
ADD16B
			movf	hexw0,W		;W=hexw0
			addwf	hex0,F		;hex0=hex0+hexw0
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C
			goto	ad11		;キャリー無で次の加算
			addwf	hex1,F		;キャリー発生、hex1=hex1+1
			btfsc	STATUS,C
			retlw	01h			;桁上がり発生、加算エラー終了
ad11		movf	hexw1,W		;W=hexw1
			addwf	hex1,F		;hex1=hex1+hexw1
			btfsc	STATUS,C
			retlw	0FFh		;キャリー発生、加算エラー終了
			retlw	0h			;加算正常終了


;		16ビットバイナリ減算
;		hex(0-1)=hex(0-1)-hexw(0-1)
;		W=0の時、正常終了
;		W=FFHの時、エラー発生（ボロー）、演算結果は保障されない
;		hexw(0-1)は保存される
SUB16B
			movf	hexw0,W		;W=hexw0
			subwf	hex0,F		;hex0=hex0-hexw0
			movlw	01h			;フラグ変化しない
			btfsc	STATUS,C
			goto	sb11		;ボロー無で次の減算
			subwf	hex1,F		;ボロー発生、hex1=hex1-1
			btfss	STATUS,C
			retlw	01h			;ボロー発生、減算エラー終了

sb11		movf	hexw1,W		;W=hexw1
			subwf	hex1,F		;hex1=hex1-hexw1
			btfss	STATUS,C
			retlw	0FFh		;ボロー発生、減算エラー終了
			retlw	0h			;減算正常終了



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			指定ディレイ　ミリセカンド　32MHZ
;
;		delay0、delay1の16bitで指定
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY_MS
			movf	delay1,W
			iorwf	delay0,W
			btfsc	STATUS,Z
			retlw	0h
dms01
			movlw	01h			;フラグ変化しない
			subwf	delay0,F	;delay0=delay0-1
			btfss	STATUS,C	;
			bra		dms02		;ボロー発生,桁下がり処理へ
			call	wait1m
			bra		dms01

dms02		movlw	01h			;
			subwf	delay1,F	;delay1=delay1-1
			btfss	STATUS,C
			retlw	0h			;ボロー発生、正常終了
			call	wait1m		;dalay0=256の補正
			movlw	0ffh
			movwf	delay0		;delay0=255
			bra		dms01		;





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			遅延時間サブルーチン	32MHZ用
;
;		1cycle	= 0.125us
;		使用レジスタ	= cnt2,cnt3
;		BSR		=0(BANK0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait100u						;呼び出しも含めて、100us
								;call is 2cycles
			clrf	BSR
			movlw	09h			;1
			movwf	cnt2		;1
			movlb	0h
;			nop
			nop					;3
w100u		nop					;
			call	wait10u		;10*9=90us(ここだけ命令ステップを数えない）
			decfsz	cnt2,F		;4*8+3=31cycles
			goto	w100u
			return				;2+5+31+2=40cycles=20us

wait50u							;呼び出しも含めて、50us
			call	wait25u
wait25u							;呼び出しも含めて、25us
			clrf	BSR
			call	wait10u
			call	wait10u
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt2		;
w25u		decfsz	cnt2,F		;ループ 2+10*3+2=34cycles
			goto	w25u
;			nop
			nop
			return				;2+34+2+2=40cycles=5us

wait5m							; 5ms
			clrf	BSR
			movlw	05h
			movwf	cnt2
w5m			call	wait1m
			decfsz	cnt2,F
			goto	w5m
			return

wait10m							; 10ms
			clrf	BSR
			movlw	d'10'
			movwf	cnt2
w10m		call	wait1m
			decfsz	cnt2,F
			goto	w10m
			return

wait20m							; 20ms
			clrf	BSR
			movlw	d'20'
			movwf	cnt2
w20m		call	wait1m
			decfsz	cnt2,F
			goto	w20m
			return
wait50m							; 50ms
			clrf	BSR
			movlw	d'50'
			movwf	cnt2
w50m		call	wait1m
			decfsz	cnt2,F
			goto	w50m
			return

wait100m						; 100ms
			clrf	BSR
			movlw	d'100'
			movwf	cnt2
w100m		call	wait1m
			decfsz	cnt2,F
			goto	w100m
			return

wait500m						; 500ms
			clrf	BSR
			movlw	05h
			movwf	cnt3
w500m		call	wait100m
			decfsz	cnt3,F
			goto	w500m
			return

wait1s							; 1s
			clrf	BSR
			movlw	d'10'
			movwf	cnt3
w1s			call	wait100m
			decfsz	cnt3,F
			goto	w1s
			return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			1ms 基本ウェイト
;			呼び出しを含めて1msとなる。
;
;		clock	= 32MHz(0.03125usec)
;		1cycle	= 0.125usec
;		1ms		= 0.125usec * 8000cycles
;
;			使用変数　cnt0,cnt1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wait1m
			clrf	BSR
			movlw	08h
			movwf	cnt0		;
;			外周ループ
w1m0		movlw	0c7h		;199d
			movwf	cnt1		;
;			内周ループ
w1m1		nop					;
			nop					;5cycles*cnt1
			decfsz	cnt1,F		;2+5*198+4=996c/s
			goto	w1m1		;
;
			decfsz	cnt0,F		;
			goto	w1m0		;2+7*999+998=7993cycles
			nop
			return					;other=(3+4)cycles
									;Total 8000*0.125us=1ms


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			10us 基本ウェイト
;			呼び出し（call　w10u)も含めて、10usとなる。
;
;		clock	= 32MHZ(0.03125us)
;		1cycle	= 0.125us
;		10us	= 0.125us * 80cycles
;		使用変数　cnt0,cnt1
;		'goto','call','return'は2サイクル消費する
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait10u
			clrf	BSR
			movlw	018h		;18H=24
			movwf	cnt0		;
w10u0		decfsz	cnt0,F		;3*23+2=71
			goto	w10u0		;
			nop
			nop
			return				;2+3+71+2+2=80cycles

wait05u
			clrf	BSR
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt0		;
w05u0		decfsz	cnt0,F		;ループ 2+3*10+2=34cycles
			goto	w05u0
;			nop
			nop
			return				;2+34+2+2=40cycles=5us

wait02u
			clrf	BSR
			movlw	04h			;2us=0.125us*16cycles
			movwf	cnt0		;
w02u0		decfsz	cnt0,F		;2+3*3+2+1+2=16cycles
			goto	w02u0
;			nop
			return				;
wait01u
			clrf	BSR			;1us=0.125us*8cycles
			nop					;2+4+2=8cycles
			nop
			nop
			return

;
;以下データエリア　0800HからのPAGE01を使用


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			DAC1用疑似サイン波データテーブル
;                           Ver1.0 JUL/2015 JA0QON
;
;	注意		FSR1にアクセスするアドレスを設定
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;       X軸=16用　FSR1=8800H
TBL16       ORG     0800h
			DW      00h		;0
			DW      0ah		;1
			DW      025h	;2
			DW      04eh	;3
			DW      07fh	;4
			DW      0b0h	;5
			DW      0d9h	;6
			DW      0f4h	;7

			DW      0feh	;8
			DW      0f4h	;9
			DW      0d9h	;A
			DW      0b0h	;B
			DW      07fh	;C
			DW      04eh	;D
			DW      025h	;E
			DW      0ah		;F
			DW      00h		;10



;       X軸=32用　FSR1=8820H
TBL32       ORG		0820h
			DW      00h		;0
			DW      02h		;1
			DW      0ah		;2
			DW      015h	;3
			DW      025h	;4
			DW      038h	;5
			DW      04eh	;6
			DW      066h	;7
			DW      07fh	;8
			DW      098h	;9
			DW      0b0h	;A
			DW      0c6h	;B
			DW      0d9h	;C
			DW      0e9h	;D
			DW      0f4h	;E
			DW      0fch	;F

			DW      0feh	;10
			DW      0fch	;11
			DW      0f4h	;12
			DW      0e9h	;13
			DW      0d9h	;14
			DW      0c6h	;15
			DW      0b0h	;16
			DW      098h	;17
			DW      07fh	;18
			DW      066h	;19
			DW      04eh	;1A
			DW      038h	;1B
			DW      025h	;1C
			DW      015h	;1D
			DW      0ah		;1E
			DW      02h		;1F
			DW      00h		;20

;       X軸=64用　FSR1=8850H
TBL64       ORG     0850h
			DW      00h		;00
			DW      01h     ;01
			DW      02h		;02
			DW      05h		;03
			DW      0ah     ;04
			DW      0fh     ;05
			DW      015h    ;06
			DW      01dh	;07
			DW      025h	;08
			DW      02eh	;09
			DW      038h	;0A
			DW      043h	;0B
			DW      04eh	;0C
			DW      05ah	;0D
			DW      066h	;0E
			DW      073h	;0F

			DW      07fh	;10
			DW      08bh	;11
			DW      098h	;12
			DW      0a4h	;13
			DW      0b0h	;14
			DW      0bbh	;15
			DW      0c6h	;16
			DW      0d0h	;17
			DW      0d9h	;18
			DW      0e1h	;19
			DW      0e9h	;1A
			DW      0efh	;1B
			DW      0f4h	;1C
			DW      0f9h	;1D
			DW      0fch    ;1E
			DW      0fdh	;1F

			DW      0feh	;20
			DW      0fdh	;21
			DW      0fch	;22
			DW      0f9h	;23
			DW      0f4h	;24
			DW      0efh	;25
			DW      0e9h	;26
			DW      0e1h	;27
			DW      0d9h	;28
			DW      0d0h	;29
			DW      0c6h	;2A
			DW      0bbh	;2B
			DW      0b0h	;2C
			DW      0a4h	;2D
			DW      098h	;2E
			DW      08bh	;2F

			DW      07fh	;30
			DW      073h	;31
			DW      066h	;32
			DW      05ah	;33
			DW      04eh	;34
			DW      043h	;35
			DW      038h	;36
			DW      02eh	;37
			DW      025h	;38
			DW      01dh	;39
			DW      015h	;3A
			DW      0fh 	;3B
			DW      0ah     ;3C
			DW      05h     ;3D
			DW      02h		;3E
			DW      01h     ;3F
			DW      0h		;40


;       X軸=128用　FSR1=8900H
TBL128      ORG     0900h
			DW      00h		;00
			DW      00h     ;01
			DW      01h		;02
			DW      01h		;03
			DW      02h     ;04
			DW      04h     ;05
			DW      05h     ;06
			DW      07h 	;07
			DW      0ah 	;08
			DW      0ch 	;09
			DW      0fh 	;0A
			DW      012h	;0B
			DW      015h	;0C
			DW      019h	;0D
			DW      01dh	;0E
			DW      021h	;0F

			DW      025h	;10
			DW      02ah    ;11
			DW      02eh	;12
			DW      033h	;13
			DW      038h    ;14
			DW      03eh    ;15
			DW      043h    ;16
			DW      049h	;17
			DW      04eh	;18
			DW      054h	;19
			DW      05ah	;1A
			DW      060h	;1B
			DW      066h	;1C
			DW      06ch	;1D
			DW      073h	;1E
			DW      078h	;1F

			DW      07fh	;20
			DW      085h	;21
			DW      08bh	;22
			DW      092h	;23
			DW      098h	;24
			DW      09eh	;25
			DW      0a4h	;26
			DW      0aah	;27
			DW      0b0h	;28
			DW      0b5h	;29
			DW      0bbh	;2A
			DW      0c0h	;2B
			DW      0c6h	;2C
			DW      0cbh	;2D
			DW      0d0h    ;2E
			DW      0d4h	;2F

			DW      0d9h	;30
			DW      0ddh	;31
			DW      0e1h	;32
			DW      0e5h	;33
			DW      0e9h	;34
			DW      0ech	;35
			DW      0efh	;36
			DW      0f2h	;37
			DW      0f4h	;38
			DW      0f7h	;39
			DW      0f9h	;3A
			DW      0fah	;3B
			DW      0fch	;3C
			DW      0fdh	;3D
			DW      0fdh    ;3E
			DW      0feh	;3F

			DW      0feh	;40
			DW      0feh	;41
			DW      0feh	;42
			DW      0fdh	;43
			DW      0fch	;44
			DW      0fah	;45
			DW      0f9h	;46
			DW      0f7h	;47
			DW      0f4h	;48
			DW      0f2h	;49
			DW      0efh	;4A
			DW      0ech	;4B
			DW      0e9h	;4C
			DW      0e5h	;4D
			DW      0e1h	;4E
			DW      0ddh	;4F

			DW      0d9h	;50
			DW      0d4h	;51
			DW      0d0h	;52
			DW      0cbh	;53
			DW      0c6h	;54
			DW      0c0h	;55
			DW      0bbh	;56
			DW      0b5h	;57
			DW      0b0h	;58
			DW      0aah	;59
			DW      0a4h	;5A
			DW      09eh	;5B
			DW      098h	;5C
			DW      092h	;5D
			DW      08bh	;5E
			DW      085h	;5F

			DW      07fh	;60
			DW      078h	;61
			DW      073h	;62
			DW      06ch	;63
			DW      066h	;64
			DW      060h	;65
			DW      05ah	;66
			DW      054h	;67
			DW      04eh	;68
			DW      049h	;69
			DW      043h	;6A
			DW      03eh 	;6B
			DW      038h    ;6C
			DW      033h    ;6D
			DW      02eh	;6E
			DW      02ah    ;6F

			DW      025h	;70
			DW      021h	;71
			DW      01dh	;72
			DW      019h	;73
			DW      015h	;74
			DW      012h	;75
			DW      0fh 	;76
			DW      0ch 	;77
			DW      0ah 	;78
			DW      07h 	;79
			DW      05h 	;7A
			DW      04h 	;7B
			DW      02h     ;7C
			DW      01h     ;7D
			DW      01h		;7E
			DW      0h      ;7F
			DW      0h		;80

;
;           音階周波数設定データ配列テーブル　Ｖｅｒ１．０
;                                   JUL/2017 JA0QON
;
;       データ配列フォーマット
;       WORD 0  DCR     TMR0値
;       WORD 1  TB/PS   下位4ビット　PS値
;                       1000:PS=0
;                       0000:PS=1/2
;                       0001:PS=1/4
;                       0010:PS=1/8
;                       0011:PS=1/16
;                       0100:PS=1/32
;                       上位4ビット　DACデータテーブル
;                       0000:TBL128
;                       0001:TBL64
;                       0010:TBL32
;                       0011:TBL16
;		1オクターブは24ワード周期です。
;		1音階は2ワード構成で、1オクターブに付、12音階です。
;
;		※音周波数は生成可能な近似値です
;
			ORG     0A00h

F0000		;C0=16.35HZ(FRQ=16.37HZ)
			DW		.18		;TMR0=137
			DW		014h		;TBL=64/PS=32
F0001		;C#0=17.32HZ(FRQ=17.32HZ)
			DW		.31			;TMR0=31
			DW		014h		;TBL=64/PS=32
F0002		;D0=18.35HZ(FRQ=18.38HZ)
			DW		.44			;TMR0=44
			DW		014h		;TBL=64/PS=32
F0003		;D#0=19.45HZ(FRQ=19.48HZ)
			DW		.56			;TMR0=56
			DW		014h		;TBL=64/PS=32
F0004		;E0=20.60HZ(FRQ=20.61HZ)
			DW		.67			;TMR0
			DW		014h		;TBL=64/PS=32
F0005		;F0=21.83HZ(FRQ=21.88HZ)
			DW		.78			;TMR0
			DW		014h		;TBL=64/PS=32
F0006		;F#0=23.12(FRQ=23.17HZ)
			DW		.88			;TMR0
			DW		014h		;TBL=64/PS=32
F0007		;G0=24.50HZ(FRQ=24.48HZ)
			DW		.97			;TMR0
			DW		014h		;TBL=64/PS=32
F0008		;G#0=25.96HZ(FRQ=25.94HZ)
			DW		.106		;TMR0
			DW		014h		;TBL=64/PS=32
F0009		;A0=27.50HZ(FRQ=27.59HZ)
			DW		.115		;TMR0
			DW		014h		;TBL=64/PS=32
F0010		;A#0=29.14HZ(FRQ=29.25HZ)
			DW		.123		;TMR0
			DW		014h		;TBL=64/PS=32
F0011		;B0=30.87HZ(FRQ=30.86HZ)
			DW		.4			;TMR0
			DW		013h		;TBL=64/PS=16
F0012		;C1=32.7HZ(FRQ=32.67HZ)
			DW		.18			;TMR0
			DW		013h		;TBL=64/PS=16
F0013		;C#1=34.65HZ(FRQ=34.70HZ)
			DW		.32			;TMR0
			DW		013h		;TBL=64/PS=16
F0014		;D1=36.71HZ(FRQ=36.66HZ)
			DW		.44			;TMR0
			DW		013h		;TBL=64/PS=16
F0015		;D#1=38.89HZ(FRQ=38.84HZ)
			DW		.56			;TMR0
			DW		013h		;TBL=64/PS=16
F0016		;E1=41.20HZ(FRQ=41.31HZ)
			DW		.68			;TMR0
			DW		013h		;TBL=64/PS=16
F0017		;F1=43.65HZ(FRQ=43.62HZ)
			DW		.78			;TMR0
			DW		013h		;TBL=64/PS=16
F0018		;F#1=46.25HZ(FRQ=46.19HZ)
			DW		.88			;TMR0
			DW		013h		;TBL=64/PS=16
F0019		;G1=49.00HZ(FRQ=49.10HZ)
			DW		.98			;TMR0
			DW		013h		;TBL=64/PS=16
F0020		;G#1=51.91HZ(FRQ=52.04HZ)
			DW		.107		;TMR0
			DW		013h		;TBL=64/PS=16
F0021		;A1=55.00HZ(FRQ=54.97HZ)
			DW		.115		;TMR0
			DW		013h		;TBL=64/PS=16
F0022		;A#1=58.27HZ(FRQ=58.25HZ)
			DW		.123		;TMR0
			DW		013h		;TBL=64/PS=16
F0023		;B1=61.74HZ(FRQ=61.70HZ)
			DW		.5			;TMR0
			DW		012h		;TBL=64/PS=8
F0024		;C2=65.41HZ(FRQ=65.31HZ)
			DW		.19			;TMR0
			DW		012h		;TBL=64/PS=8
F0025		;C#2=69.30HZ(FRQ=69.37HZ)
			DW		.21			;TMR0
			DW		012h		;TBL=64/PS=8
F0026		;D2=73.42HZ(FRQ=73.27HZ)
			DW		.45			;TMR0
			DW		012h		;TBL=64/PS=8
F0027		;D#2=77.78HZ(FRQ=77.64HZ)
			DW		.57			;TMR0
			DW		012h		;TBL=64/PS=8
F0028		;E2=82.41HZ(FRQ=82.56HZ)
			DW		.69			;TMR0
			DW		012h		;TBL=64/PS=8
F0029		;F2=87.31HZ(FRQ=87.17HZ)
			DW		.79			;TMR0
			DW		012h		;TBL=64/PS=8
F0030		;F#2=92.50HZ(FRQ=92.32HZ)
			DW		.89			;TMR0
			DW		012h		;TBL=64/PS=8
F0031		;G2=98.00HZ(FRQ=98.12HZ)
			DW		.99			;TMR0
			DW		012h		;TBL=64/PS=8
F0032		;G#2=103.83HZ(FRQ=103.99HZ)
			DW		.108		;TMR0
			DW		012h		;TBL=64/PS=8
F0033		;A2=110.00HZ(FRQ=109.84HZ)
			DW		.116		;TMR0
			DW		012h		;TBL=64/PS=8
F0034		;A#2=116.54HZ(FRQ=116.38HZ)
			DW		.124		;TMR0
			DW		012h		;TBL=64/PS=8
F0035		;B2=123.47HZ(FRQ=123.27HZ)
			DW		.7			;TMR0
			DW		011h		;TBL=64/PS=4
F0036		;C3=130.81HZ(FRQ=131.02HZ)
			DW		.22			;TMR0
			DW		011h		;TBL=64/PS=4
F0037		;C#3=138.59HZ(FRQ=138.58HZ)
			DW		.35			;TMR0
			DW		011h		;TBL=64/PS=4
F0038		;D3=146.83HZ(FRQ=147.06HZ)
			DW		.48			;TMR0
			DW		011h		;TBL=64/PS=4
F0039		;D#3=155.56HZ(FRQ=155.86HZ)
			DW		.60			;TMR0
			DW		011h		;TBL=64/PS=4
F0040		;E3=164.81HZ(FRQ=164.90HZ)
			DW		.71			;TMR0
			DW		011h		;TBL=64/PS=4
F0041		;F3=174.61HZ(FRQ=175.07HZ)
			DW		.82			;TMR0
			DW		011h		;TBL=64/PS=4
F0042		;F#3=185.00HZ(FRQ=185.46HZ)
			DW		.92			;TMR0
			DW		011h		;TBL=64/PS=4
F0043		;G3=196.00HZ(FRQ=195.92HZ)
			DW		.101		;TMR0
			DW		011h		;TBL=64/PS=4
F0044		;G#3=207.65HZ(FRQ=207.64HZ)
			DW		.110		;TMR0
			DW		011h		;TBL=64/PS=4
F0045		;A3=220.00HZ(FRQ=219.30HZ)
			DW		.118		;TMR0
			DW		011h		;TBL=64/PS=4
F0046		;A#3=233.08HZ(FRQ=232.34HZ)
			DW		.126		;TMR0
			DW		011h			;TBL=64/PS=4
F0047		;B3=246.94HZ(FRQ=247.03HZ)
			DW		.12			;TMR0
			DW		010h		;TBL=64/PS=2
F0048		;C4=261.63HZ(FRQ=261.51HZ)
			DW		.26			;TMR0
			DW		010h		;TBL=64/PS=2
F0049		;C#4=277.18HZ(FRQ=277.78HZ)
			DW		.40			;TMR0
			DW		010h		;TBL=64/PS=2
F0050		;D4=293.66HZ(FRQ=293.43HZ)
			DW		.52			;TMR0
			DW		010h		;TBL=64/PS=2
F0051		;D#4=311.13HZ(FRQ=310.95HZ)
			DW		.64			;TMR0
			DW		010h		;TBL=64/PS=2
F0052		;E4=329.63HZ(FRQ=328.95HZ)
			DW		.75			;TMR0
			DW		010h		;TBL=64/PS=2
F0053		;F4=349.23HZ(FRQ=349.16HZ)
			DW		.86			;TMR0
			DW		010h		;TBL=64/PS=2
F0054		;F#4=369.99HZ(FRQ=369.82HZ)
			DW		.96			;TMR0
			DW		010h		;TBL=64/PS=2
F0055		;G4=392.00HZ(FRQ=393.08HZ)
			DW		.106		;TMR0
			DW		010h		;TBL=64/PS=2
F0056		;G#4=415.30HZ(FRQ=416.67HZ)
			DW		.115		;TMR0
			DW		010h		;TBL=64/PS=2
F0057		;A4=440.00HZ(FRQ=440.14HZ)
			DW		.123		;TMR0
			DW		010h		;TBL=64/PS=2
F0058		;A#4=466.16HZ(FRQ=466.42HZ)
			DW		.131		;TMR0
			DW		010h		;TBL=64/PS=2
F0059		;B4=493.88HZ(FRQ=494.08HZ)
			DW		.21			;TMR0
			DW		018h		;TBL=64/PS=1
F0060		;C5=523.25HZ(FRQ=523.02HZ)
			DW		.35			;TMR0
			DW		018h		;TBL=64/PS=1
F0061		;C#5=554.37HZ(FRQ=553.10HZ)
			DW		.48			;TMR0
			DW		018h		;TBL=64/PS=1
F0062		;D5=587.33HZ(FRQ=586.86HZ)
			DW		.61			;TMR0
			DW		018h		;TBL=64/PS=1
F0063		;D#5=622.25HZ(FRQ=621.90HZ)
			DW		.73			;TMR0
			DW		018h		;TBL=64/PS=1
F0064		;E5=659.26HZ(FRQ=657.90HZ)
			DW		.84			;TMR0
			DW		018h		;TBL=64/PS=1
F0065		;F5=698.46HZ(FRQ=698.33HZ)
			DW		.95			;TMR0
			DW		018h		;TBL=64/PS=1
F0066		;F#5=739.99HZ(FRQ=739.65HZ)
			DW		.105		;TMR0
			DW		018h		;TBL=64/PS=1
F0067		;G5=783.99HZ(FRQ=781.26HZ)
			DW		.114		;TMR0
			DW		018h		;TBL=64/PS=1
F0068		;G#5=830.61HZ(FRQ=833.34HZ)
			DW		.124		;TMR0
			DW		018h		;TBL=64/PS=1
F0069		;A5=880.00HZ(FRQ=880.29HZ)
			DW		.132		;TMR0
			DW		018H		;TBL=64/PS=1
F0070		;A#5=932.33HZ(FRQ=932.85HZ)
			DW		.140		;TMR0
			DW		018h		;TBL=64/PS=1
F0071		;B5=987.77HZ(FRQ=984.26HZ)
			DW		.147		;TMR0
			DW		018h		;TBL=64/PS=1
F0072		;C6=1046.5HZ(FRQ=1041.6HZ)
			DW		.154		;TMR0
			DW		018h		;TBL=64/PS=1
F0073		;C#6=1108.73HZ(FRQ=1106.2HZ)
			DW		.161		;TMR0
			DW		018h		;TBL=64/PS=1
F0074		;D6=1174.66HZ(FRQ=1179.2HZ)
			DW		.168		;TMR0
			DW		018h		;TBL=64/PS=1
F0075		;D#6=1244.51HZ(FRQ=1250.0HZ)
			DW		.174		;TMR0
			DW		018h		;TBL=64/PS=1
F0076		;E6=1318.51HZ(FRQ=1315.8HZ)
			DW		.179		;TMR0
			DW		018h		;TBL=64/PS=1
F0077		;F6=1396.91HZ(FRQ=1404.5HZ)
            DW      .185        ;TMR0
			DW		018h		;TBL=64/PS=1
F0078		;F#6=1479.98HZ(FRQ=1488.1HZ)
			DW		.190		;TMR0
			DW		018h		;TBL=64/PS=1
F0079		;G6=1567.98HZ(FRQ=1562.5HZ)
			DW		.194		;TMR0
			DW		018h		;TBL=64/PS=1
F0080		;G#6=1661.22HZ(FRQ=1666.6HZ)
			DW		.199		;TMR0
			DW		018h		;TBL=64/PS=1
F0081		;A6=1760.00HZ=(FRQ=1760.5HZ)
			DW		.203		;TMR0
			DW		018h		;TBL=64/PS=1
F0082		;A#6=1864.66HZ(FRQ=1865.7HZ)
			DW		.207		;TMR0
			DW		018h		;TBL=64/PS=1
F0083		;B6=1975.53HZ(FRQ=1984.1HZ)
			DW		.211		;TMR0
			DW		018h		;TBL=64/PS=1
F0084		;C7=2093.00HZ(FRQ=2083.3HZ)
			DW		.214		;TMR0
			DW		018h		;TBL=64/PS=1
F0085		;C#7=2217.46HZ(FRQ=2232.1HZ)
			DW		.218		;TMR0
			DW		018h		;TBL=64/PS=1
F0086		;D7=2349.32HZ(FRQ=2358.5HZ)
			DW		.221		;TMR0
			DW		018h		;TBL=64/PS=1
F0087		;D#7=2489.02HZ(FRQ=2500.0HZ)
			DW		.224		;TMR0
			DW		018h		;TBL=64/PS=1
F0088		;E7=2637.02HZ(FRQ=2659.6HZ)
			DW		.227		;TMR0
			DW		018h		;TBL=64/PS=1
F0089		;F7=2793.83HZ(FRQ=2777.8HZ)
			DW		.229		;TMR0
			DW		018h		;TBL=64/PS=1
F0090		;F#7=2959.96HZ(FRQ=2976.2HZ)
			DW		.232		;TMR0
			DW		018h		;TBL=64/PS=1
F0091		;G7=3135.96HZ(FRQ=3125.0HZ)
			DW		.234		;TMR0
			DW		018h		;TBL=64/PS=1
F0092		;G#7=3322.44HZ(FRQ=3289.5HZ)
			DW		.236		;TMR0
			DW		018h		;TBL=64/PS=1
F0093		;A7=3520.00HZ(FRQ=3472.2HZ)
			DW		.238		;TMR0
			DW		018h		;TBL=64/PS=1
F0094		;A#7=3729.31HZ(FRQ=3676.5HZ)
			DW		.240		;TMR0
			DW		018h		;TBL=64/PS=1
F0095		;B7=3951.07HZ(FRQ=3906.3HZ)
			DW		.242		;TMR0
			DW		018h		;TBL=64/PS=1
F0096		;C8=4186.01HZ(FRQ=4166.7HZ)
			DW		.244		;TMR0
			DW		018h		;TBL=64/PS=1
F0097		;C#8=4434.92HZ(FRQ=4464.3HZ)
			DW		.218		;TMR0
			DW		028h		;TBL=32/PS=1
F0098		;D8=4698.64HZ(FRQ=4717.0HZ)
			DW		.221		;TMR0
			DW		028h		;TBL=32/PS=1
F0099		;D#8=4978.03HZ(FRQ=5000.0HZ)
			DW		.224		;TMR0
			DW		028h		;TBL=32/PS=1
F0100		;E8=5274.04HZ(FRQ=5319.2HZ)
			DW		.227		;TMR0
			DW		028h		;TBL=32/PS=1
F0101		;F8=5587.65HZ(FRQ=5555.6HZ)
			DW		.229		;TMR0
			DW		028h		;TBL=32/PS=1
F0102		;F#8=5919.91HZ(FRQ=5952.4HZ)
			DW		.232         ;TMR0
			DW		028h		;TBL=32/PS=1
F0103		;G8=6271.93HZ(FRQ=6250.0HZ)
			DW		.234		;TMR0
			DW		028h		;TBL=32/PS=1
F0104		;G#8=6644.88HZ(FRQ=6666.7HZ)
			DW		.199		;TMR0
			DW		038h		;TBL=16/PS=1
F0105		;A8=7040.00HZ(FRQ=7042.3HZ)
			DW		.203		;TMR0
			DW		038h		;TBL=16/PS=1
F0106		;A#8=7458.62HZ(FRQ=7462.7HZ)
			DW		.207		;TMR0
			DW		038h		;TBL=16/PS=1
F0107		;B8=7902.13HZ(FRQ=7936.6HZ)
			DW		.211		;TMR0
			DW		038h		;TBL=16/PS=1
F0108		;C9=8372.02HZ(FRQ=8333.4HZ)
			DW		.214		;TMR0
			DW		038h		;TBL=16/PS=1
F0109		;C#9=8869.84HZ(FRQ=8928.7HZ)
			DW		.218		;TMR0
			DW		038h		;TBL=16/PS=1
F0110		;D9=9397.27HZ(FRQ=9434.0HZ)
			DW		.221		;TMR0
			DW		038h		;TBL=16/PS=1
F0111		;D#9=9956.06HZ(FRQ=10000HZ)
			DW		.224		;TMR0
			DW		038h		;TBL=16/PS=1
F0112		;E9=10548.08HZ(FRQ=10638HZ)
			DW		.227		;TMR0
			DW		038h		;TBL=16/PS=1
F0113		;F9=11175.30HZ(FRQ=11628HZ)
			DW		.231		;TMR0
			DW		038h		;TBL=16/PS=1
F0114		;F#9=11839.82HZ(FRQ=11904HZ)
			DW		.232		;TMR0
			DW		038h		;TBL=16/PS=1
F0115		;G9=12543.85HZ(FRQ=12500HZ)
			DW		.234		;TMR0
			DW		038h		;TBL=16/PS=1
F0116		;G#9=13289.75HZ(FRQ=13158HZ)
			DW		.236		;TMR0
			DW		038h		;TBL=16/PS=1
F0117		;A9=14080.00HZ(FRQ=13889HZ)
			DW		.238		;TMR0
			DW		038h		;TBL=16/PS=1
F0118		;A#9=14917.24HZ(FRQ=14706HZ)
			DW		.240		;TMR0
			DW		038h		;TBL=16/PS=1
F0119		;B9=15804.27HZ(FRQ=15625HZ)
			DW		.242		;TMR0
			DW		038h		;TBL=16/PS=1
F0120		;C10=16744.04HZ(FRQ=16666HZ)
			DW		.244		;TMR0
			DW		038h		;TBL=16/PS=1

;			MML
			ORG		0B00H
;			愛のロマンス（禁じられた遊び）
Romance2
			DT		"O5B3O4B1G1 O5B3O4B1G1 O5B3O4B1G1"
			DT		"O5B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"
			DT		"O5E3O4B1G1 O5G3O4B1G1 O5B3O4B1G1"

			DT		"O6E3O4B1G1 O6E3O4B1G1 O6E3O4B1G1"
			DT		"O6E3O4B1G1 O6D3O4B1G1 O6C3O4B1G1"
			DT		"O6C3O5E1C1 O5B3O5E1C1 O5A3O5E1C1"
			DT		"O5A3O5E1C1 O5B3O5E1C1 O6C3O5E1C1"

			DT		"O5B3F#1D#1 O6C3O5F#1D1 O5B3F#1D1"
			DT		"O6D#3O5F#1D#1 O6C3O5F#1D1 B3F#1D1"
			DT		"B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"

			DT		"O5F#3O4B1A1 O5F#3O4B1A1 O5F#3O4B1A1"
			DT		"O5F#3O4B1A1 O5G3O4B1A1 O5F#3O4B1A1"
			DT		"O5E3O4B1G1 O5E3O4B1G1 O5E3O4B1G1 O5E8"
;
			DT		"O5B3O4B1G1 O5B3O4B1G1 O5B3O4B1G1"
			DT		"O5B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"
			DT		"O5E3O4B1G1 O5G3O4B1G1 O5B3O4B1G1"

			DT		"O6E3O4B1G1 O6E3O4B1G1 O6E3O4B1G1"
			DT		"O6E3O4B1G1 O6D3O4B1G1 O6C3O4B1G1"
			DT		"O6C3O5E1C1 O5B3O5E1C1 O5A3O5E1C1"
			DT		"O5A3O5E1C1 O5B3O5E1C1 O6C3O5E1C1"

			DT		"O5B3F#1D#1 O6C3O5F#1D1 O5B3F#1D1"
			DT		"O6D#3O5F#1D#1 O6C3O5F#1D1 B3F#1D1"
			DT		"B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"

			DT		"O5F#3O4B1A1 O5F#3O4B1A1 O5F#3O4B1A1"
			DT		"O5F#3O4B1A1 O5G3O4B1A1 O5F#3O4B1A1"
			DT		"O5E3O4B1G1 O5E3O4B1G1 O5E3O4B1G1 O5E5O4B5B5"
;
			DT		"O5G#3O4B1G1 O5G#3O4B1G1 O5G#3O4B1G1"
			DT		"O5G#3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"
			DT		"O5E3O4A1F#1 O5D#3O4A1F#1 O5D#3O4A1F#1"
			DT		"O5D#3O4A1F#1 O5D3O4A1F#1 O5D#3O4A1F#1"

			DT		"O6C#3O5F#1D#1 O6C#3O5F#1D#1O6C#3O5F#1D#1"
			DT		"O6C#3O5F#1D#1 O6D#3O5F#1D#1 O6C#3O5F#1D#1"
			DT		"O6C#3O5G#1E1 O5B3G#1E1 B3G#1E1"
			DT		"B3G#1E1 O6C#3O5G#1E1 O6D#3O5G#1E1"

			DT		"O6E3O5G#1E1 O6E3O5G#1E1 O6E3O5G#1E1"
			DT		"O6E3O5G#1E1 O6D#3O5G#1E1 O6D3O5G#1E1"
			DT		"O6C#3O5E1D#1 O6C#3O5E1D#1 O6C#3O5E1D#1"
			DT		"O6C#3O5E1D#1 O5B3E1D#1 A3E1D#1"

			DT		"O5G#3O4B1G1  O5G#3O4B1G1 O5G#3O4B1G1"
			DT		"O5G#3D#1O4A1 O5A3D#1O4A1  O5F#3D#1O4A1"
			DT		"O5E3O4B1G1 O5E3O4B1G1 O5E3O4B1G1"
			DT		"O5E5O4B5B5"
;
			DT		"O5G#3O4B1G1 O5G#3O4B1G1 O5G#3O4B1G1"
			DT		"O5G#3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"
			DT		"O5E3O4A1F#1 O5D#3O4A1F#1 O5D#3O4A1F#1"
			DT		"O5D#3O4A1F#1 O5D3O4A1F#1 O5D#3O4A1F#1"

			DT		"O6C#3O5F#1D#1 O6C#3O5F#1D#1O6C#3O5F#1D#1"
			DT		"O6C#3O5F#1D#1 O6D#3O5F#1D#1 O6C#3O5F#1D#1"
			DT		"O6C#3O5G#1E1 O5B3G#1E1 B3G#1E1"
			DT		"B3G#1E1 O6C#3O5G#1E1 O6D#3O5G#1E1"

			DT		"O6E3O5G#1E1 O6E3O5G#1E1 O6E3O5G#1E1"
			DT		"O6E3O5G#1E1 O6D#3O5G#1E1 O6D3O5G#1E1"
			DT		"O6C#3O5E1D#1 O6C#3O5E1D#1 O6C#3O5E1D#1"
			DT		"O6C#3O5E1D#1 O5B3E1D#1 A3E1D#1"

			DT		"O5G#3O4B1G1  O5G#3O4B1G1 O5G#3O4B1G1"
			DT		"O5G#3D#1O4A1 O5A3D#1O4A1  O5F#3D#1O4A1"
			DT		"O5E3O4B1G1 O5E3O4B1G1 O5E3O4B1G1"
			DT		"O5E8"
;
			DT		"O5B3O4B1G1 O5B3O4B1G1 O5B3O4B1G1"
			DT		"O5B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"
			DT		"O5E3O4B1G1 O5G3O4B1G1 O5B3O4B1G1"

			DT		"O6E3O4B1G1 O6E3O4B1G1 O6E3O4B1G1"
			DT		"O6E3O4B1G1 O6D3O4B1G1 O6C3O4B1G1"
			DT		"O6C3O5E1C1 O5B3O5E1C1 O5A3O5E1C1"
			DT		"O5A3O5E1C1 O5B3O5E1C1 O6C3O5E1C1"

			DT		"O5B3F#1D#1 O6C3O5F#1D1 O5B3F#1D1"
			DT		"O6D#3O5F#1D#1 O6C3O5F#1D1 B3F#1D1"
			DT		"B3O4B1G1 O5A3O4B1G1 O5G3O4B1G1"
			DT		"O5G3O4B1G1 O5F#3O4B1G1 O5E3O4B1G1"

			DT		"O5F#3O4B1A1 O5F#3O4B1A1 O5F#3O4B1A1"
			DT		"O5F#3O4B1A1 O5G3O4B1A1 O5F#3O4B1A1"
			DT		"O5E3O4B1G1 O5E3O4B1G1 O5E3O4B1G1 O5E8"

			DW		0

;			大きな古時計
Furudokei	;TEMPO=90
			DT		"O4D3D3 G5F#3G3A5G3A3 B3B3O5C3O4B3A3G3F#3E3"
			DT		"D5G3G3F#5D3F#3 T0G7T4G3R3D5"

			DT		"G5F#3G3A5G3A3 B3B3O5C3O4B3E5A3A3"
			DT		"G5G3G3F#5E3F#3 T0G7T4G3R3D3D3"

			DT		"G5F#3G3A5G3A3 B5O5C3O4B3E5A3A3"
			DT		"G5G3G3F#5E3F#3 T0G7T4G3R3G3B3"

			DT		"O5D5O4B3A3G5F#3G3 A3G3F#3E3D5G3B3"
			DT		"O5D5O4B3A3G5F#3G3 A8R3D3"

			DT		"G3G3R5A5R5 B3B3O5C3O4B3E5A3A3"
			DT		"G7F#7 T0G7T4G3R3D3D3"

			DT		"G5D3D3E3D3D5 O3B3R3O4D3R3O3B3R3O4D3D3"
			DT		"G5D3D3E5D3D3 O3B3R3O4D3R3O3B3R3O4D3D3"

			DT		"G3G3R5A5R5 B3B3O5C3O4B3E5A3A3"
			DT		"G7F#7 G7R5D5" 

			DT		"G5F#3G3A5G3A3 B3B3O5C3O4B3E5A3A3"
			DT		"G5G3G3F#5E3F#3 T0G7T4G3R3D3D3"

			DT		"G5F#3G3A5G3A3 B5O5C3O4B3E5A3A3"
			DT		"G5G3G3F#5E3F#3 T0G7T4G3R3G3B3"

			DT		"O5D5O4B3A3G5F#3G3 A3G3F#3E3D5G3B3"
			DT		"O5D5O4B3A3G5F#3G3 A8R3D3"

			DT		"G3G3R5A5R5 B3B3O5C3O4B3E5A3A3"
			DT		"G7F#7 T0G7T4G3R3D3D3"

			DT		"G5D3D3E3D3D5 O3B3R3O4D3R3O3B3R3O4D3D3"
			DT		"G5D3D3E5D3D3 O3B3R3O4D3R3O3B3R3O4D3D3"

			DT		"G3G3R5A5R5 B3B3O5C3O4B3E5A3A3"
			DT		"G7F#7 G8" 
			DW		0

Condor
;			4/4
			DT	"O3B5 O4E3D#3E3F#3G3F#3G3A3 B6R3R5O5D1D4"
			DT	"O4B7R5O5E3D3 O4B6R3R3B3A3G3 A1G1E7R3G5 A1G1E7R3O3B5"

			DT	"O4E3D#3E3F#3G3F#3G3A3 B4A1G5R5O5E1D4"
			DT	"O4B7R3O5E1D1E4D1 E1D1O4B6R3B3A3G3 A1G1E7R3A5 A1G1E7R3B5"

			DT	"O5E6D#3E4D1E4D1 E8E3E3 D8E3D3 O4B7R5B3"
			DT	"O5E6D#3E4D1E4F#1 G4F#1E7G3E3 D7R3D3E3D3 O4B7R3B3A3G3"
			DT	"A1G1E7R3B5 A1G1E7R3G5 A1G1E7R3R5 T0E5E5E5T4E5"
;			2/4
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B3O5D3 O4B6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B1A1G1F#1 E6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B3O5D3 O4B6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B1A1G1F#1 E6R3"

			DT	"B1O5D1C#1D1O4A3O5D3 O4B7 B1O5D1C#1D1O4A3O5D3 O4B7"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B1A1G1F#1 E6D3"
			DT	"G3G3B1O5D1O4B1A1 G6D3 G3G3B1O5D1O4B1A1 G6G3"
			DT	"O5E3E3G3E1D1 O4B1B3A1B3O5D3 O4G1G3A1B1A3G1 E6R3"
			DT	"O5E3E3G3E1D1 O4B1B3A1B3O5D3 O4G1G3A1B1A3G1 E6R1O3B1"
			DT	"O4E1D#1E1F#1G1F#1G1A1 B1O5E1D#1E1O4B1A1G1F#1 E1F#1G1A1B1A1G1F#1"
			DT	"E3R3R5"

			DW	0

Harunoogawa	;TEMPO=100
			DT	"O4E5G5A5G5 E5G5O5C5C5 O4A5A5G5E5 C5D5E5R5"
			DT	"E5G5A5G5 E5G5O5C5C5 O4A5A5G5E5 D5E5C5R5"
			DT	"D5E5D5G5 A5A5G5A5 O5C5C5O4B5A5 G5G5E5R5"
			DT	"E5G5A5G5 E5G5O5C5C5 O4A5A5G5E5 D5E5C5R5"
			DW	0

            END

;	予備のMML
Romance
			DT		"O5 B5B5B5 B5A5G5 G5F#5E5 E5G5B5"
			DT		"O6 E5E5E5 E5D5C5 C5O5B5A5 A5B5O6C5"
			DT		"O5 B5O6C5O5B5 O6D#5C5O5B5 B5A5G5 G5F#5E5"
			DT		"F#5F#5F#5 F#5G5F#5 E5E5E5 E8"

			DT		"O5 B5B5B5 B5A5G5 G5F#5E5 E5G5B5"
			DT		"O6 E5E5E5 E5D5C5 C5O5B5A5 A5B5O6C5"
			DT		"O5 B5O6C5O5B5 O6D#5C5O5B5 B5A5G5 G5F#5E5"
			DT		"F#5F#5F#5 F#5G5F#5 E5E5E5 E5O4B5B5"

			DT		"O5G#5G#5G#5 G#5F#5E5 E5D#5D#5 D#5D5D#5"
			DT		"O6 C#5C#5C#5 C#5D#5C#5 C#5O5B5B5 B5O6C#5D#5"
			DT		"E5E5E5 E5D#5D5 C#5C#5C#5 C#5O5B5A5"
			DT		"G#5G#5G#5 G#5A5F#5 E5E5E5 E5O4B5B5"

			DT		"O5G#5G#5G#5 G#5F#5E5 E5D#5D#5 D#5D5D#5"
			DT		"O6 C#5C#5C#5 C#5D#5C#5 C#5O5B5B5 B5O6C#5D#5"
			DT		"E5E5E5 E5D#5D5 C#5C#5C#5 C#5O5B5A5"
			DT		"G#5G#5G#5 G#5A5F#5 E5E5E5 E8"

			DT		"O5 B5B5B5 B5A5G5 G5F#5E5 E5G5B5"
			DT		"O6 E5E5E5 E5D5C5 C5O5B5A5 A5B5O6C5"
			DT		"O5 B5O6C5O5B5 O6D#5C5O5B5 B5A5G5 G5F#5E5"
			DT		"F#5F#5F#5 F#5G5F#5 E5E5E5 E8"
			DW		0
;
Condor0
			DT	"O5E8D3E3D3 O4B8A3G3A3 B8R3R3B3 O5D8E2D2O4B2A2 G2E2D2T0E2T4E8"
			DT	"G8O3B5 O4T0E9T4E8R3O3B5"

			DT	"O4E3D#3E3F#3G3F#3G3A3 B8O5D5"
			DT	"O4B8O5E3D3 O4T0B7T4B5A3G3 E8G5 E8R3O3B3"

			DT	"O4E3D#3E3F#3G3F#3G3A3 B8O5D5"
			DT	"O4B8O5E3D3 O4T0B7T4B5A3G3 E8G5 E8R3B3"

			DT	"O5E6D#1E4D1E4D1 E8G3E3 D8E3D3 O4B8R3O3B3 O4E6D#1E4D1E4D1"
			DT	"E8G3E3 D8E3D3 O3T0B7T4B5O4A3G3 E8G5 E8G5"

			DT	"O4T0E5E5 E5E5 E5T4E5 E5R5"

			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E3 E1F#1G1A1B3O5D3 O4B6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E3 E1F#1G1A1B1A1G1F#1 E6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E3 E1F#1G1A1B3O5D3 O4B6R3"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E3 E1F#1G1A1B1A1G1F#1 E6R3"

			DT	"B1O5D1C#1D1O4A3O5D3 O4B7 B1O5D1C#1D1O4A3O5D3 O4B7"
			DT	"B1O5E1D#1E1O4B3A3 G1E3D1E5 E1F#1G1A1B1A1G1F#1 E6D3"
			DT	"G3G3B1O5D1O4B1A1 G6D3 G3G3B1O5D1O4B1A1 G6G3 O5E3E3G3E1D1"
			DT	"O4B1B3A1B3O5D3 O4G1G3A1B1A3G1 E6R3 O5E3E3G3E1D1 O4B1B3A1B3O5D3"

			DT	"O4G1G3A1B1A3G1 E6R1O3B1"
			DT	"O4E1D#1E1F#1G1F#1G1A1 B1O5E1D#1E1O4B1A1G1F#1 E1F#1G1A1B1A1G1F#1"

			DT	"E3R3R5 O5E7 G3D3E3O4B3 O5D3O4A3B3G3 G7"

			DW	0






