;BEEP Ver4A [メロディー符用] NAO TECHUNOHUT	2001年11月
;簡易テスト用基板用にI/Oピン他調整		2007年11月03日(土)
;
;			     ┌─┰─┐
;	(未使用)	 RA2 ┥	     ┝ RA1	(未使用)
;	選択		 RA3 ┥	     ┝ RA0	(8PIN用MCLR)
;	スピーカー出力	 RA4 ┥	     ┝	RA7	選択
;	リセット	 MCLR┥16F   ┝ RA6	選択
;	GND		 Vss ┥  819 ┝ Vdd	(3～5.5V)
;	(未使用)	 RB0 ┥	     ┝ RB7	(未使用)
;	(未使用)	 RB1 ┥	     ┝ RB6	(未使用)
;	(未使用)	 RB2 ┥	     ┝ RB5	(未使用)
;	(未使用)	 RB3 ┥	     ┝ RB4	(未使用)
;			     └───┘
;
;-------PIC基本設定---------------------;
	include	'16f819.inc'

	fuses _intrc_io			;オシレーター設定→内蔵､ピンはra6設定
	fuses _wdt_off			;ウォッチドックタイマー→無効
	fuses _pwrte_on			;電源投入72ms間リセット→有効
	fuses _mclr_on			;MCLR端子(リセット)→設定する
	fuses _boden_off		;低電圧リセット(約4V以下)→無効
	fuses _lvp_off			;低電圧プログミング(5V)→無効
	fuses _cpd_off			;eepromのコードプロテクト→無効
	fuses _wrt_enable_off		;eeconのFlashメモリ可能→しない
	fuses _debug_off		;インサーキットデバックモード→無効
	fuses _ccp1_rb2			;PWMピン選定(or_rb3)
	fuses _cp_off			;コードプロテクト→無効

	id	'0819'			;

	org	1024-3			;(400h-3h)
;曲データー(合計449音符まで)
;=============================================================================;
;-------№1 音階DATA--------------------
rNo_1A	mov	mTEMPO,#130		;♪テンポ
	jmp	rNo_1X			;
wNo_1A	snb	mOVER_7.1		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ マイムマイム/M(テンポ=130 音符数:104)
	retw	DO5,RE5,MIf5,RE5,DO5,REs5,FA5,SO5,FA5
	retw	MIf5,SO5,SIf5,RAf5,SIf5,SO5,FA5,SO5
	retw	DO5,RE5,MIf5,RE5,DO5,REs5,FA5,SO5,FA5
	retw	DO6,DO6,SIf5,SO5,SIf5,SO5,SO5,DO6
	retw	DO6,DO6,DO6,DO6,DO6,DO6,DO6,DO6
	retw	KYU,DO6,SIf5,SIf5,SO5,SIf5,DO6
	retw	DO6,DO6,DO6,DO6,DO6,DO6,DO6,DO6
	retw	KYU,DO6,SIf5,SIf5,SO5,FA5,SO5
	retw	SIf5,SIf5,SIf5,SIf5
	retw	SIf5,SIf5,RAf5,SO5,FA5,SIf5,SIf5,RAf5,SO5,FA5
	retw	MIf5,FA5,SO5,RAf5,SO5,FA5,MIf5,SIf5
	retw	SIf5,SIf5,RAf5,SO5,FA5,SIf5,SIf5,RAf5,SO5,FA5
	retw	SO5,SO5,MIf5,RE5,DO5,MIf5,RE5,DO5

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№2 音階DATA--------------------
rNo_2A	mov	mTEMPO,#150		;♪テンポ
	jmp	rNo_2X			;
wNo_2A	snb	mOVER_7.2		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ 魔法使いサリー/M(テンポ=120 音符数:105)
	retw	RA4,DO5
	retw	MI5,RE5,DO5,MI5,RE5,DO5
	retw	RE5,MI5,RE5,DO5,SI4,RA4,RA4,DO5
	retw	MI5,RE5,DO5,MI5,RE5,DO5
	retw	RE5,MI5,RE5,DO5,SI4,RA4,RA3,DO4
	retw	MI4,RE4,DO4,MI4,RE4,DO4
	retw	RE4,DO4,SI3,RA3,RA3,DO4
	retw	MI4,RE4,DO4,MI4,RE4,DO4
	retw	RE4,MI4,RE4,DO4,SI3,RA3,SO4,MI4
	retw	SO4,RA4,SO4
	retw	RA4,KYU,MI4
	retw	FA4,FA4,FA4,SO4,RA4,RA4,DO5
	retw	SI4,SI4,SI4,RA4,SOs4,DO5,SI4
	retw	RA4,MI4,SO4,FA4,MI4,RE4
	retw	MI4,RE4,DO4,SI3,RA3,SO4,MI4
	retw	SO4,RA4,SO4
	retw	RA4,KYU,RA4
	retw	DO5,SI4,RA4,SI4,KYU,SOs4,MI4
	retw	RA4

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№3 音階DATA--------------------
rNo_3A	mov	mTEMPO,#172		;♪テンポ
	jmp	rNo_3X			;
wNo_3A	snb	mOVER_7.3		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ N64マリオタイトル/M(テンポ=172 音符数: 10)
	retw	MI5,MI5,KYU,MI5,KYU,DO5,MI5
	retw	SO5,KYU,SO4

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№4 音階DATA--------------------
rNo_4A	mov	mTEMPO,#144		;♪テンポ
	jmp	rNo_4X			;
wNo_4A	snb	mOVER_7.4		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ N64レースファンファーレ/M(テンポ=144 音符数: 11)
	retw	SO5,SO5,SO5,SO5
	retw	SI5,SO5,SI5
	retw	RE6,KYU,RE5
	retw	SO5

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№5 音階DATA--------------------
rNo_5A	mov	mTEMPO,#135		;♪テンポ
	jmp	rNo_5X			;
wNo_5A	snb	mOVER_7.5		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪いつも何度でも/M(テンポ=135 音符数:126)
	retw	FA4,SO4
	retw	RA4,FA4,DO5,RA4,SO4,DO5,SO4
	retw	FA4,RE4,RA4,FA4,MI4,MI4
	retw	RE4,MI4,FA4,SO4,DO4,FA4,SO4,RA4
	retw	SIf4,SIf4,RA4,SO4,FA4,SO4,FA4,SO4
	retw	RA4,FA4,DO5,RA4,SO4,DO5,SO4
	retw	FA4,RE4,RE4,MI4,FA4,DO4,KYU,DO4
	retw	RE4,MI4,FA4,SO4,DO4,FA4,SO4,RA4
	retw	SIf4,SIf4,RA4,SO4,FA4,FA4
	retw	KYU,RA4,SIf4,DO5,DO5,DO5
	retw	DO5,DO5,RE5,DO5,SIf4,RA4,RA4,RA4
	retw	RA4,RA4,SIf4,RA4,SO4,FA4,FA4,FA4,MI4
	retw	RE4,MI4,MI4,FA4,SO4,SO4,RA4,SO4,RA4
	retw	SO4,RA4,SIf4,DO5,DO5,DO5
	retw	DO5,DO5,RE5,DO5,SIf4,RA4,RA4,RA4
	retw	RA4,SIf4,RA4,SO4,FA4,MI4,RE4,RE4,MI4,FA4,SO4
	retw	DO4,FA4,SO4,RA4,SO4,SO4,SO4,FA4,FA4

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№6 音階DATA--------------------
rNo_6A	mov	mTEMPO,#112		;♪テンポ
	jmp	rNo_6X			;
wNo_6A	snb	mOVER_7.6		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ 森のクマさん前奏/M(テンポ=112 音符数:39 )
	retw	SO5,RA5,SI5
	retw	DO6,SO5,MI5,FA5,MI5,RE5,DO5,SI4,DO5
	retw	RA5,RA5,SI5,RA5
	retw	SO5,SO4,RA4,SO4,FA5,FA4,SO4,FA4,MI5,MI4,FA4,MI4,RE5,RE4,MI4
	retw	DO5,RE4,MI4,FA4,SO4,RA4,SI4,DO5

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№7 音階DATA--------------------
rNo_7A	mov	mTEMPO,#180		;♪テンポ
	jmp	rNo_7X			;
wNo_7A	snb	mOVER_7.7		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ タクトスイッチ用クリック音/Mのみ(テンポ=180 音符数:  1)
	retw	DO7

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;=============================================================================;
	org	1536-3			;(600h-3h)
;-------№1 音長DATA--------------------
rNo_1B	mov	mDUMMY,#000		;
	jmp	rNo_1B			;
wNo_1B	snb	mOVER_7.1		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ マイムマイム/M
	retw	L050,L050,L025,L025,L050,L050,L050,L050,L050
	retw	L050,L050,L050,L025,L025,L050,L050,L100
	retw	L050,L050,L025,L025,L050,L050,L050,L050,L050
	retw	L050,L050,L050,L025,L025,L050,L050,L100
	retw	L050,L050,L050,L050,L050,L050,L050,L050
	retw	L050,L050,L050,L050,L050,L050,L100
	retw	L050,L050,L050,L050,L050,L050,L050,L050
	retw	L050,L050,L050,L050,L050,L050,L100
	retw	L100,L100,L100,L100
	retw	L050,L050,L025,L025,L050,L050,L050,L025,L025,L050
	retw	L050,L050,L050,L025,L025,L050,L050,L100
	retw	L050,L050,L025,L025,L050,L050,L050,L025,L025,L050
	retw	L050,L050,L025,L025,L050,L050,L050,L100

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№2 音長DATA--------------------
rNo_2B	mov	mDUMMY,#000		;
	jmp	rNo_2B			;
wNo_2B	snb	mOVER_7.2		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ 魔法使いサリー/M
	retw	L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L050,L025,L025,L050,L050,L100,L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L050,L025,L025,L050,L050,L100,L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L050,L025,L025,L050,L050,L100,L050,L050
	retw	L300,L050,L050
	retw	L300,L050,L050
	retw	L050,L050,L050,L050,L050,L100,L050
	retw	L050,L050,L050,L050,L100,L050,L050
	retw	L100,L050,L050,L100,L050,L050
	retw	L050,L050,L050,L050,L100,L050,L050
	retw	L300,L050,L050
	retw	L300,L050,L050
	retw	L100,L050,L050,L050,L050,L050,L050
	retw	L400

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№3 音長DATA--------------------
rNo_3B	mov	mDUMMY,#000		;
	jmp	rNo_3B			;
wNo_3B	snb	mOVER_7.3		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ N64マリオタイトル/M
	retw	L050,L050,L050,L050,L050,L050,L100
	retw	L100,L100,L100

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№4 音長DATA--------------------
rNo_4B	mov	mDUMMY,#000		;
	jmp	rNo_4B			;
wNo_4B	snb	mOVER_7.4		;
	setb	pclath.0		;xx1b

	jmp	pc+w			;

;♪ N64レースファンファーレ/M
	retw	L050,L025,L025,L050
	retw	L050,L050,L050
	retw	L050,L050,L050
	retw	L150

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№5 音長DATA--------------------
rNo_5B	mov	mDUMMY,#000		;
	jmp	rNo_5B			;
wNo_5B	snb	mOVER_7.5		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪いつも何度でも/M
	retw	L050,L050
	retw	L050,L050,L150,L050,L100,L100,L100
	retw	L050,L050,L150,L050,L200,L100
	retw	L100,L100,L050,L050,L100,L100,L050,L050
	retw	L100,L050,L050,L050,L050,L200,L050,L050
	retw	L050,L050,L150,L050,L100,L100,L100
	retw	L050,L050,L100,L050,L050,L200,L050,L050
	retw	L100,L100,L050,L050,L100,L100,L050,L050
	retw	L100,L050,L050,L050,L050,L300
	retw	L200,L050,L050,L100,L100,L100
	retw	L100,L050,L050,L050,L050,L100,L100,L100
	retw	L100,L050,L050,L050,L050,L100,L100,L050,L050
	retw	L100,L100,L050,L050,L100,L050,L050,L050,L050
	retw	L200,L050,L050,L100,L100,L100
	retw	L100,L050,L050,L050,L050,L100,L100,L100
	retw	L050,L050,L050,L050,L050,L050,L100,L050,L050,L050,L050
	retw	L100,L100,L050,L050,L150,L050,L050,L050,L300

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№6 音長DATA--------------------
rNo_6B	mov	mDUMMY,#000		;
	jmp	rNo_6B			;
wNo_6B	snb	mOVER_7.6		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ 森のクマさん前奏/M
	retw	L050,L050,L050
	retw	L100,L100,L050,L025,L025,L025,L025,L025,L025
	retw	L250,L050,L050,L050
	retw	L025,L025,L025,L025,L025,L025,L025,L025,L025,L025,L025,L025,L025,L025,L050
	retw	L050,L025,L025,L025,L025,L025,L025,L200

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;-------№7 音長DATA--------------------
rNo_7B	mov	mDUMMY,#000		;
	jmp	rNo_7B			;
wNo_7B	snb	mOVER_7.7		;
	setb	pclath.0		;xx1b
	jmp	pc+w			;

;♪ タクトスイッチ用クリック音/Mのみ
	retw	L025

	mov	mPCL,pcl		;
	jmp	rCH_END			;

;=============================================================================;

;-------PIC初期状態確認-----------------;(変更必要部抜粋)
;Bank 1
;	option_reg	11111111	;プルアップ､プリスケーラー比率他､設定
;	trisa		11111111	;RAピンI/O制御設定(1は入力)
;	trisb		11111111	;RBピンI/O制御設定(1は入力)
;	osccon		-000-0--	;内部RCオシレーター周波数設定
;	osctune		--000000	;内蔵RCオシレーター微調整
;	adcon1		00--0000	;A/Dピン設定

;-------プログラム開始(初期設定他)------;

	org	0			;

	clr	ra			;RA出力すべてOFF(Lo)
	clr	rb			;RB　　　〃

	setb	rp0			;ページ変更

	mov	trisa,#11101001b	;RAピンは4を出力に設定
	mov	trisb,#00000000b	;RBピンはすべて出力に設定

	mov	option,#10000111b	;タイマー0使用他
	mov	osccon,#01100000b	;内蔵オシレーター周波数を4MHzに設定
	mov	osctune,#  001110b	;★オシレーター微調整★
	mov	adcon1,#00000110b	;すべてデジタルピンに設定

	clrb	rp0			;ページ変更

	clr	tmr0			;タイマーカウンターリセット
	clr	mTMR_CZ			;山数初期値リセット
	clr	mT_256Z			;1/256山初期値リセット
	clr	mST_No			;選曲保持記憶用リセット
	clr	mPCW			;pc+wカウントリセット
	clr	mOVER_7			;
	clrb	mCH_E_b			;

;-------選曲判定記憶--------------------;

	csne	ra,#01000001b		;RA6
	setb	mST_No.1		;
	csne	ra,#10000001b		;RA7
	setb	mST_No.2		;
	csne	ra,#11000001b		;RA6,RA7
	setb	mST_No.3		;
	csne	ra,#00001001b		;RA3
	setb	mST_No.4		;
	csne	ra,#01001001b		;RA3,RA6
	setb	mST_No.5		;
	csne	ra,#10001001b		;RA3,RA7
	setb	mST_No.6		;
	csne	ra,#11001001b		;RA3,RA6,RA7
	setb	mST_No.7		;
	cje	ra,#00000001b,rCH_END	;省電力待機モードへ

;-------pc+w255超自己診断---------------;

	setb	mCHAK_b			;
	setb	pclath.2		;1xxb

rN100	mov	w,mPCW			;
	call	wNo_1A			;
	jb	mCH_E_b,rN101		;
	inc	mPCW			;+1
	csne	mPCW,#253		;retwデーターは｢03h｣～
	setb	mOVER_7.1		;
	jmp	rN100			;
rN101	jz	rN102			;
	clrb	mCH_E_b			;
	jb	mOVER_7.1,rN102		;
	mov	mOVER_P,#248		;中途半端チェック
	sub	mOVER_P,mPCL		;
	jz	rN102			;
	jnc	rN102			;
	clr	mPCW			;
	jmp	rN200			;
rN102	mov	mOVER_7,#11111100b	;
	sb	mST_No.1		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN200	mov	w,mPCW			;
	call	wNo_2A			;
	jb	mCH_E_b,rN201		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.2		;
	jmp	rN200			;
rN201	jz	rN202			;
	clrb	mCH_E_b			;
	jb	mOVER_7.2,rN202		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN202			;
	jnc	rN202			;
	clr	mPCW			;
	jmp	rN300			;
rN202	mov	mOVER_7,#11111000b	;
	sb	mST_No.2		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN300	mov	w,mPCW			;
	call	wNo_3A			;
	jb	mCH_E_b,rN301		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.3		;
	jmp	rN300			;
rN301	jz	rN302			;
	clrb	mCH_E_b			;
	jb	mOVER_7.3,rN302		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN302			;
	jnc	rN302			;
	clr	mPCW			;
	jmp	rN400			;
rN302	mov	mOVER_7,#11110000b	;
	sb	mST_No.3		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN400	mov	w,mPCW			;
	call	wNo_4A			;
	jb	mCH_E_b,rN401		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.4		;
	jmp	rN400			;
rN401	jz	rN402			;
	clrb	mCH_E_b			;
	jb	mOVER_7.4,rN402		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN402			;
	jnc	rN402			;
	clr	mPCW			;
	jmp	rN500			;
rN402	mov	mOVER_7,#11100000b	;
	sb	mST_No.4		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN500	mov	w,mPCW			;
	call	wNo_5A			;
	jb	mCH_E_b,rN501		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.5		;
	jmp	rN500			;
rN501	jz	rN502			;
	clrb	mCH_E_b			;
	jb	mOVER_7.5,rN502		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN502			;
	jnc	rN502			;
	clr	mPCW			;
	jmp	rN600			;
rN502	mov	mOVER_7,#11000000b	;
	sb	mST_No.5		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN600	mov	w,mPCW			;
	call	wNo_6A			;
	jb	mCH_E_b,rN601		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.6		;
	jmp	rN600			;
rN601	jz	rN602			;
	clrb	mCH_E_b			;
	jb	mOVER_7.6,rN602		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN602			;
	jnc	rN602			;
	clr	mPCW			;
	jmp	rN700			;
rN602	mov	mOVER_7,#10000000b	;
	sb	mST_No.6		;
	clr	mOVER_P			;
	jmp	rCHKEND			;

rN700	mov	w,mPCW			;
	call	wNo_7A			;
	jb	mCH_E_b,rN701		;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.7		;
	jmp	rN700			;
rN701	jz	rN702			;
	clrb	mCH_E_b			;
	jb	mOVER_7.7,rN702		;
	mov	mOVER_P,#248		;
	sub	mOVER_P,mPCL		;
	jz	rN702			;
	jnc	rN702			;
	clr	mOVER_P			;pc+w255超無
	jmp	rCHKEND			;
rN702	mov	mOVER_7,#00000000b	;
	sb	mST_No.7		;
	clr	mOVER_P			;


rCHKEND
	clrb	mCHAK_b			;
	clr	mPCW			;
	clr	pclath			;


;-------選曲先ジャンプ------------------;

	jb	mST_No.1,rNo_1A		;
	jb	mST_No.2,rNo_2A		;
	jb	mST_No.3,rNo_3A		;
	jb	mST_No.4,rNo_4A		;
	jb	mST_No.5,rNo_5A		;
	jb	mST_No.6,rNo_6A		;
	jb	mST_No.7,rNo_7A		;


;-------曲データー読込プログラム--------;

rNo_1X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_1A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_1B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,#253		;1回目は253
	setb	mOVER_7.1		;
	jmp	rMAIN			;

rNo_2X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_2A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_2B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.2		;
	jmp	rMAIN

rNo_3X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_3A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_3B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.3		;
	jmp	rMAIN

rNo_4X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_4A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_4B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.4		;
	jmp	rMAIN

rNo_5X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_5A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_5B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.5		;
	jmp	rMAIN

rNo_6X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_6A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_6B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.6		;
	jmp	rMAIN

rNo_7X	setb	pclath.2		;1xxb
	mov	w,mPCW			;
	call	wNo_7A			;
	mov	mTONE,w			;音階

	clrb	pclath.0		;xx0b jmp pc+w行きのため必要
	setb	pclath.1		;x1xb
	mov	w,mPCW			;
	call	wNo_7B			;
	mov	mLONG,w			;音長
	clr	pclath			;
	inc	mPCW			;+1
	csne	mPCW,mOVER_P		;
	setb	mOVER_7.7		;

;-------- メインプログラム -------------;
rMAIN

;---定数÷テンポ計算---
	call	sLONG			;音長定数判定代入
	mov	mJOSU08,mTEMPO		;
	call	sWARIZAN		;割り算(定数÷テンポ)
	call	s4O5I			;四捨五入

;---周波数繰り返し数計算---
	clr	mWARI32			;
	mov	mWARI24,mSHOW24		;÷テンポ計算結果入れ
	mov	mWARI16,mSHOW16		;
	mov	mWARI08,mSHOW08		;
	mov	mJOSU08,mTONE		;音周波数
	call	sWARIZAN		;割り算(テンポ後定数÷音周波数)

;切り上げ判定･加算
	jnb	mSHOW08.0,rKUP_1	;偶奇数判定
	add	mSHOW08,#1		;+1
	jmp	rKUP_2			;
rKUP_1	test	mWARIXX			;割り算の余りチェック
	jz	rKUP_E			;
	add	mSHOW08,#2		;+2
rKUP_2	snc				;オーバーフローチェック
	inc	mSHOW16			;+1
rKUP_E					;

;周波数繰り返し数決定
	mov	mCT16,mSHOW16		;
	mov	mCT08,mSHOW08		;

;---全音部で1/256山値計算---
	call	sLONG			;音長定数判定代入
	mov	mJOSU08,mTEMPO		;
	call	sWARIZAN		;割り算(定数÷テンポ)と四捨五入
	call	s4O5I			;四捨五入

	clr	mWARI32			;
	mov	mWARI24,mSHOW24		;
	mov	mWARI16,mSHOW16		;
	mov	mWARI08,mSHOW08		;
	mov	mJOSU08,#12		;
	call	sWARIZAN		;割り算(テンポ後定数÷12)と四捨五入
	call	s4O5I			;四捨五入

	mov	mT_256Y,mSHOW08		;1/256山値
	mov	mFREE_C,mSHOW08		;1/256山値

;---無音部0.0625秒山と1/256山値計算---
	rr	mSHOW24			;
	rr	mSHOW16			;
	rr	mSHOW08			;1/2
	rr	mSHOW24			;
	rr	mSHOW16			;
	rr	mSHOW08			;1/4

	mov	mTMR_CY,mSHOW16		;山回数(÷256)
	mov	mFREE_B,mSHOW08		;1/256山値

;---次回1/256山タイミング値計算---
	add	mT_256Y,mT_256Z		;現在値に加算

;---有音部終了点算出---
	sub	mFREE_C,mFREE_B		;全音部点-無音部点

	add	mFREE_C,mT_256Z		;
	mov	mYOUE_Y,mFREE_C		;

;---計算中のポイントパスチェック補正---
	mov	mFREE_C,tmr0		;現在のtmr0値保存
	inc	mFREE_C			;現在のtmr0値+1
	mov	mFREE_B,mFREE_C		;      〃

;パターン1?判定
	sub	mFREE_C,mYOUE_Z		;tmr0値-有音部終了点
	jnc	rPATN_2			;

	cja	mYOUE_Z,mT_256Z,rPATN_N	;
	cja	mT_256Z,mFREE_B,rPATN_N	;
	jmp	rPATN_D			;

;パターン2?判定
rPATN_2	cja	mYOUE_Z,mT_256Z,rPATN_3	;
	jmp	rPATN_D			;

;パターン3?判定
rPATN_3	cja	mT_256Z,mFREE_B,rPATN_N	;

;-1判定
rPATN_D	test	mTMR_CZ			;
	sz				;
	dec	mTMR_CZ			;-1
rPATN_N

rCBR750	cjne	mFREE_B,tmr0,rCBR750	;tmr0値+1まで待つ

;---シンクロWAIT(待ち)---
rWAIT_0	cje	tmr0,mT_256Z,rWAIT_0	;
rWAIT_1	cjne	tmr0,mT_256Z,rWAIT_1	;
	test	mTMR_CZ			;
	jz	rWAIT_E			;
	dec	mTMR_CZ			;-1
	jmp	rWAIT_0			;
rWAIT_E

;---スピーカー行きON･OFF(Hi･Lo)---
	dec	mTONE			;-1

sBEEP	cjne	mTONE,#199,rBEEP	;[4] (5)
	nop				;[1]
	jmp	rBEEN			;[2]

rBEEP	xor	ra,#00010000b		;[2]★

rBEEN	mov	mLOOP,mTONE		;[2]

;周波数と回数処理ルーチン
rLOOP1	decsz	mLOOP			;[1] (2)
	jmp	rCT_A0			;[2]

	test	mCT08			;[1]
	jz	rCT_A1			;[2] (3)
	
	djnz	mCT08,rCT_A2		;[2] (3)
	test	mCT16			;[1]
	jz	rCTEND			;[2]	 <3>
	jmp	rCT_A4			;[2]

rCT_A1	dec	mCT08			;[1]
	dec	mCT16			;[1]
	jmp	rCT_A3			;[2]
rCT_A2	nop				;[1]
	nop				;[1]
rCT_A3	nop				;[1]
	nop				;[1]
rCT_A4	mov	mNOP,#2			;[2]
rCT_B4	djnz	mNOP,rCT_B4		;[5]
	nop				;[1]
	nop				;[1]
	jmp	sBEEP			;[2]
rCT_A0	mov	mNOP,#3			;[2]
rCT_B0	djnz	mNOP,rCT_B0		;[8]
	nop				;[1]
	jmp	rLOOP1			;[2]
rCTEND

;---無音部の山回数,1/256山値入れ---
	mov	mTMR_CZ,mTMR_CY		;山回数
	mov	mT_256Z,mT_256Y		;1/256山タイミング値

;---有音部の終了点計算値入れ---
	mov	mYOUE_Z,mYOUE_Y		;

;---次音符---
	jb	mST_No.1,rNo_1X		;※
	jb	mST_No.2,rNo_2X		;※
	jb	mST_No.3,rNo_3X		;※
	jb	mST_No.4,rNo_4X		;※
	jb	mST_No.5,rNo_5X		;※
	jb	mST_No.6,rNo_6X		;※
	jb	mST_No.7,rNo_7X		;※

rCH_END	jnb	mCHAK_b,rSLEEP		;pc+w255超チェックか?
	setb	mCH_E_b			;pc+w255超各曲終了チェックビット

	ret				;

rSLEEP	sleep				;終了

;---------------------------------------;


;------s 音長定数判定代入 s-------------;
sLONG

rLONG_0	cjne	mLONG,#1,rLONG_1	;16分音符(L025)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#00001011b	;
	mov	mWARI16,#01000000b	;
	mov	mWARI08,#00000000b	;(10進で   737,280)

rLONG_1	cjne	mLONG,#2,rLONG_2	;8分音符の3連符(L033)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#00001111b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で  983,040)

rLONG_2	cjne	mLONG,#3,rLONG_3	;8分音符(L050)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#00010110b	;
	mov	mWARI16,#10000000b	;
	mov	mWARI08,#00000000b	;(10進で 1,474,560)

rLONG_3	cjne	mLONG,#4,rLONG_4	;.8分音符(L075)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#00100001b	;
	mov	mWARI16,#11000000b	;
	mov	mWARI08,#00000000b	;(10進で 2,211,840)

rLONG_4	cjne	mLONG,#5,rLONG_5	;4分音符(L100)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#00101101b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で 2,949,120)

rLONG_5	cjne	mLONG,#6,rLONG_6	;.4分音符(L150)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#01000011b	;
	mov	mWARI16,#10000000b	;
	mov	mWARI08,#00000000b	;(10進で 4,423,680)

rLONG_6	cjne	mLONG,#7,rLONG_7	;2分音符(L200)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#01011010b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で 5,898,240)

rLONG_7	cjne	mLONG,#8,rLONG_8	;2分音符+8分音符(L250)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#01110000b	;
	mov	mWARI16,#10000000b	;
	mov	mWARI08,#00000000b	;(10進で 7,372,800)

rLONG_8	cjne	mLONG,#9,rLONG_9	;.2分音符(L300)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#10000111b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で 8,847,360)

rLONG_9	cjne	mLONG,#10,rLONG10	;.2分音符+8分音符(L350)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#10011101b	;
	mov	mWARI16,#10000000b	;
	mov	mWARI08,#00000000b	;(10進で10,321,920)

rLONG10	cjne	mLONG,#11,rLONG11	;全音符(L400)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#10110100b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で11,796,480)

rLONG11	cjne	mLONG,#12,rLONG12	;全音符+8分音符(L450)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#11001010b	;
	mov	mWARI16,#10000000b	;
	mov	mWARI08,#00000000b	;(10進で13,271,040)

rLONG12	cjne	mLONG,#13,rLONG13	;全音符+4分音符(L500)
	mov	mWARI32,#00000000b	;
	mov	mWARI24,#11100001b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で14,745,600)

rLONG13	cjne	mLONG,#14,rLONG14	;全音符x2(L800)
	mov	mWARI32,#00000001b	;
	mov	mWARI24,#01101000b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で23,592,960)

rLONG14	cjne	mLONG,#15,rLONG_E	;全音符x4(L1600)
	mov	mWARI32,#00000010b	;
	mov	mWARI24,#11010000b	;
	mov	mWARI16,#00000000b	;
	mov	mWARI08,#00000000b	;(10進で47,185,920)

rLONG_E
	ret				;

;-------s-------s-------s-------s-------;


;--------s 割り算(32bit/8bit) s---------;
sWARIZAN
;---桁移動比較---
	mov	mWARI_C,#32		;ループ数設定
	clr	mWARIXX			;
rWARI_0	rl	mWARI08			;
	rl	mWARI16			;
	rl	mWARI24			;
	rl	mWARI32			;
	rl	mWARIXX			;

	jc	rWARI_2			;比較8ビット超判定
	cjae	mWARIXX,mJOSU08,rWARI_1	;勝ち負け判定
	clrb	c			;キャリー0
	jmp	rWARI_4			;
rWARI_1	sub	mWARIXX,mJOSU08		;引き算(余りはここに残る)
	jmp	rWARI_3			;
rWARI_2	clr	mFREE_A			;0にする
	sub	mFREE_A,mJOSU08		;
	add	mWARIXX,mFREE_A		;
rWARI_3	setb	c			;キャリー1

;---計算結果入れ---
rWARI_4	rl	mSHOW08			;計算結果を入れる
	rl	mSHOW16			;　　　〃
	rl	mSHOW24			;　　　〃
	djnz	mWARI_C,rWARI_0		;ループ継続判定

	ret				;

;-------s-------s-------s-------s-------;


;--------s 四捨五入 s-------------------;
s4O5I	rl	mWARIXX			;
	jc	r4O5I_1			;
	cjb	mWARIXX,mJOSU08,r4O5I_E	;
r4O5I_1	add	mSHOW08,#1		;+1
	jnc	r4O5I_E			;
	add	mSHOW16,#1		;+1
	jnc	r4O5I_E			;
	add	mSHOW24,#1		;+1
r4O5I_E
	ret				;

;-------s-------s-------s-------s-------;


;-------代入数設定----------------------;
;---音階---
KYU		=	200		;休符
RES		=	200		;休符

DO7		=	 16		;
SI6		=	 17		;
SIf6		=	 18		;
RAs6		=	 18		;
RA6		=	 19		;
RAf6		=	 20		;
SOs6		=	 20		;
SO6		=	 21		;
SOf6		=	 22		;
FAs6		=	 22		;
FA6		=	 23		;
MI6		=	 25		;
MIf6		=	 26		;
REs6		=	 26		;
RE6		=	 28		;
REf6		=	 30		;
DOs6		=	 30		;
DO6		=	 31		;
SI5		=	 33		;
SIf5		=	 35		;
RAs5		=	 35		;
RA5		=	 37		;
RAf5		=	 39		;
SOs5		=	 39		;
SO5		=	 42		;
SOf5		=	 44		;
FAs5		=	 44		;
FA5		=	 47		;
MI5		=	 50		;
MIf5		=	 53		;
REs5		=	 53		;
RE5		=	 56		;
REf5		=	 59		;
DOs5		=	 59		;
DO5		=	 63		;
SI4		=	 66		;
SIf4		=	 70		;
RAs4		=	 70		;
RA4		=	 74		;
RAf4		=	 79		;
SOs4		=	 79		;
SO4		=	 84		;
SOf4		=	 89		;
FAs4		=	 89		;
FA4		=	 94		;
MI4		=	 99		;
MIf4		=	105		;
REs4		=	105		;
RE4		=	112		;
REf4		=	118		;
DOs4		=	118		;
DO4		=	125		;
SI3		=	133		;シ
SIf3		=	141		;■半音低
RAs3		=	141		;■半音高
RA3		=	149		;ラ
RAf3		=	158		;■半音低
SOs3		=	158		;■半音高
SO3		=	167		;ソ
SOf3		=	177		;■半音低
FAs3		=	177		;■半音高
FA3		=	188		;ファ
MI3		=	199		;ミ
MIf3		=	211		;■半音低
REs3		=	211		;■半音高
RE3		=	223		;レ
REf3		=	236		;■半音低
DOs3		=	236		;■半音高
DO3		=	251		;ド

;---音長---
L025		=	1		;16分音符
L033		=	2		; 8分音符の3連符
L050		=	3		; 8分音符
L075		=	4		;.8分音符
L100		=	5		; 4分音符
L150		=	6		;.4分音符
L200		=	7		; 2分音符
L250		=	8		; 2分音符+8分音符
L300		=	9		;.2分音符
L350		=	10		;.2分音符+8分音符
L400		=	11		;  全音符
L450		=	12		;  全音符+8分音符
L500		=	13		;  全音符+4分音符
L800		=	14		;  全音符x2
L1600		=	15		;  全音符x4

;-------データーメモリー予約割当--------;
mTEMPO	=	20h			;テンポ用
mTONE	=	21h			;周波数音階設定用
mLONG	=	22h			;曲データー音長用
mPCL	=	23h			;プログラムカウンター記憶用
mPCW	=	24h			;pc+wカウント用
mCHAK_b	=	25h.0			;pc+w255超チェック用
mCH_E_b	=	25h.1			;pc+w255超各曲チェック用
mOVER_7	=	26h			;pc+w255超曲に立てる
mOVER_P	=	27h			;pc+w255超ポイント算出用
mST_No	=	28h			;選曲保持記憶用
mLOOP	=	29h			;周波数ループ数カウント用
mCT16	=	2Ah			;音長実行用(9～16ビット)
mCT08	=	2Bh			;音長実行用(1～ 8ビット)

mWARIXX	=	2Ch			;割り算被除数桁移動比較用
mWARI32	=	2Dh			;割り算被除数用(25～32ビット)
mWARI24	=	2Eh			;割り算被除数用(17～24ビット)
mWARI16	=	2Fh			;割り算被除数用( 9～16ビット)
mWARI08	=	30h			;割り算被除数用( 1～ 8ビット)
mJOSU08	=	31h			;割り算除数用
mWARI_C	=	32h			;割り算ループ数カウント用
mSHOW24	=	33h			;割り算商用(17～24ビット)
mSHOW16	=	34h			;割り算商用( 9～16ビット)
mSHOW08	=	35h			;割り算商用( 1～ 8ビット)
mFREE_A	=	36h			;割り算比較値8ビット超時の計算用

mTMR_CY	=	37h			;0.0625秒山回数(計算値)
mT_256Y	=	38h			;1/256山(計算値)
mTMR_CZ	=	39h			;0.0625秒山回数(実行値)
mT_256Z	=	3Ah			;1/256山(実行値)

mFREE_B	=	3Bh			;有音部終了点算出用
mFREE_C	=	3Ch			;有音部終了点算出用
mYOUE_Y	=	3Dh			;有音部終了点(計算値)
mYOUE_Z	=	3Eh			;有音部終了点(実行値)

mNOP	=	3Fh			;nopのwords節約用
mDUMMY	=	40h			;音長プログラム領域調整ダミー用

;	(メモリー33個使用)
