;BEEP Ver4A [メロディー符用] NAO TECHUNOHUT 2001年11月 ;簡易テスト用基板用にI/Oピン他調整 2007年11月03日(土) ; ; ┌─┰─┐ ; (未使用) RA2 ┥ ┝ RA1 (未使用) ; 選択 RA3 ┥ ┝ RA0 (8PIN用MCLR) ; スピーカー出力 RA4 ┥ ┝ RA7 選択 ; リセット MCLR┥ ┝ RA6 選択 ; GND Vss ┥16F88 ┝ Vdd (3〜5.5V) ; (未使用) RB0 ┥ ┝ RB7 (未使用) ; (未使用) RB1 ┥ ┝ RB6 (未使用) ; (未使用) RB2 ┥ ┝ RB5 (未使用) ; (未使用) RB3 ┥ ┝ RB4 (未使用) ; └───┘ ; ;-------PIC基本設定---------------------; include '16f88.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 ;コードプロテクト→無効 fuses _fcmen_off ;フェイルセーフクロックモニター? fuses _ieso_off ;内部/外部スイッチオーバーモード? id '0088' ; 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 -0000000 ;内部RCオシレーター周波数設定 ; osctune --000000 ;内蔵RCオシレーター微調整 ; ansel -1111111 ;アナログorデジタルI/O設定 ;-------プログラム開始(初期設定他)------; org 0 ; clr ra ;RA出力すべてOFF(Lo) clr rb ;RB   〃 setb rp0 ;ページ変更 mov trisa,#11101001b ;RAピンは4を出力に設定 mov trisb,#00000000b ;RBピンはすべて出力に設定 mov option_reg,#10000111b ;タイマー0使用他 mov osccon,#01100000b ;内蔵オシレーター周波数を4MHzに設定 mov osctune,# 001110b ;★オシレーター微調整★ mov ansel,#00000000b ;RAはすべてデジタルピンに設定 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個使用)