diff --git a/src/NDP/NDP_DRV/NDP.s b/src/NDP/NDP_DRV/NDP.s index c9525d42..7df6f50a 100644 --- a/src/NDP/NDP_DRV/NDP.s +++ b/src/NDP/NDP_DRV/NDP.s @@ -45,7 +45,7 @@ ;; _NDP_NDPINI == NDPINI ;ドライバ初期化 (タイマ割り込みフックにドライバを接続) _NDP_MSTART == MSTART ;演奏開始 (ワークエリアをゼロクリアし演奏開始。フックは操作しない) _NDP_MSTOP == MSTOP ;演奏停止 (演奏停止してPSGレジスタを初期化。フックは操作しない) - _NDP_INTRPT == INTRPT ;割り込み処理 (フックに接続せずに自前で割り込みルーチンを呼ぶ際に使用) + ;; _NDP_INTRPT == INTRPT ;割り込み処理 (フックに接続せずに自前で割り込みルーチンを呼ぶ際に使用) ※ドライバ内で退避した旧フックと共に実行 ;; _NDP_U_ADR == U_ADR ;(※)曲データ開始アドレス設定 (引数で指定。デフォルトの04000Hなら設定不要) ;; _NDP_U_OFF1 == U_OFF1 ;(※)Ch.A 一時ミュート (ミュートするフレーム数を引数で指定 [2~255]) ;; _NDP_U_OFF2 == U_OFF2 ;(※)Ch.B 〃 @@ -69,7 +69,7 @@ _NDP_SYSVER == SYSVER ;ドライバのバージョン番号→HL (L=小数点以下、H=整数部。整数部が0なら0.9として扱う) ;; _NDP_NDPOFF == NDPOFF ;ドライバ終了 (タイマ割り込みフックからドライバを切り離して発音停止) ;; _NDP_SETHF == SETHF ;タイマ割り込みフック接続フラグ←A - ;; _NDP_KSSPLY == KSSPLY ;退避したH.TIMIをRETで潰して演奏開始 (KSSプレイヤー用) + _NDP_IMAIN == IMAIN ;割り込み処理・メイン部 (旧フックのCALLは行わずに割り込みルーチン本体のみ処理) ※DI状態のままRET ;; C APIs for libmsx _NDP_fadeout == _NDP_MFOSET ; void NDP_fadeout(uint8_t wait) diff --git a/src/NDP/NDP_DRV/NDP_DRV.ASM b/src/NDP/NDP_DRV/NDP_DRV.ASM index d3011bb5..47726b27 100755 --- a/src/NDP/NDP_DRV/NDP_DRV.ASM +++ b/src/NDP/NDP_DRV/NDP_DRV.ASM @@ -35,13 +35,6 @@ .area _CODE -;------ KSS用にフックを無効化して再生 - -;; KSSPLY: -;; LD A,#0x0C9 -;; LD (OLDTH),A -;; JP MSTART - ;------ 曲データのアドレス設定 ;USR関数用 (HL<-曲データをアドレスを格納しているメモリのアドレス-2) @@ -425,7 +418,7 @@ RDLOOP: ;------ バージョン取得 SYSVER: - LD HL,#0x0100 ;v1.00 + LD HL,#0x0101 ;v1.01 ;上位バイトがメジャーバージョン、下位バイトがマイナーバージョン ;上位バイトが0なら0.9として扱い、下位バイトはビルドバージョンとする @@ -486,9 +479,15 @@ WPSG: RET -;------ タイマ割り込みルーチン +;------ タイマ割り込みルーチン呼び出し&旧フックコール + +;; INTRPT: +;; CALL IMAIN +;; CALL OLDTH +;; EI +;; RET -INTRPT: +IMAIN: ;; DI ;; PUSH AF @@ -514,9 +513,9 @@ MINT: MLOOP: PUSH BC - LD A,+10(IX) ;チャンネル有効ならMAINを呼ぶ + LD A,+10(IX) ;チャンネル有効ならNMAINを呼ぶ OR A - CALL NZ,MAIN + CALL NZ,NMAIN LD DE,#WSIZE ;CHワークのインデックスをワークサイズ分進める ADD IX,DE @@ -570,7 +569,7 @@ SINT: LD B,#CHNUM-1 LD IX,#SE1WRK SECHK1: - LD A,+10(IX) ;チャンネル有効ならMAINを呼ぶ + LD A,+10(IX) ;チャンネル有効ならSE用MAINを呼ぶ OR A CALL NZ,MAINSE @@ -588,9 +587,6 @@ INTEND: ;; POP BC ;; POP AF - ;; CALL OLDTH - - ;; EI RET ;------ ドライバ本体 @@ -599,7 +595,7 @@ MAINSE: LD HL,#SECNT INC (HL) ;効果音の使用トラック数を加算 -MAIN: +NMAIN: CP #2 ;トラック有効フラグを確認 (IX+10の内容がAに入ってくる) JR C,MAIN01 ;2未満なら通常処理にジャンプ @@ -1643,7 +1639,13 @@ RHYOFF: LD A,(RVREG) ;リズム発音前の音量に戻す LD E,A + LD A,(MVOL) + LD C,A LD A,(RSVOL) + SUB C + JR NC,RHYOFM + XOR A +RHYOFM: CALL WPSGM CP #16 ;音量が16(ハードエンベ)なら diff --git a/src/NDP/NDP_DRV/NDP_WRK.ASM b/src/NDP/NDP_DRV/NDP_WRK.ASM index 8ab866b3..3daf06bd 100755 --- a/src/NDP/NDP_DRV/NDP_WRK.ASM +++ b/src/NDP/NDP_DRV/NDP_WRK.ASM @@ -66,7 +66,7 @@ ;; JP NDPOFF ;; JP SETHF - ;; JP KSSPLY + ;; JP IMAIN ;------ ワークエリア .area _DATA diff --git a/src/NDP/NDP__internal.h b/src/NDP/NDP__internal.h index c199b28e..50bb1a7d 100644 --- a/src/NDP/NDP__internal.h +++ b/src/NDP/NDP__internal.h @@ -27,7 +27,7 @@ struct NDP_ { extern struct NDP_ NDP_; -extern void NDP_INTRPT(void); +extern void NDP_IMAIN(void); extern void NDP_ADRSET(void * ptr); extern void NDP__set_song_ptr(uint8_t bank, void * ptr); diff --git a/src/NDP/NDP_play.c b/src/NDP/NDP_play.c index 64409778..f3f277a8 100644 --- a/src/NDP/NDP_play.c +++ b/src/NDP/NDP_play.c @@ -17,5 +17,5 @@ void NDP_play(void) { if (NDP_.paused) return; - NDP_INTRPT(); + NDP_IMAIN(); } diff --git a/src/NDP/NDP_play_bmem.c b/src/NDP/NDP_play_bmem.c index 637fb4f4..52b5c653 100644 --- a/src/NDP/NDP_play_bmem.c +++ b/src/NDP/NDP_play_bmem.c @@ -21,10 +21,10 @@ void NDP_play_bmem(void) { // Play the song in MegaROM const uint8_t bank = bmem_get_bank(); bmem_set_bank(NDP_.song_bank); - NDP_INTRPT(); + NDP_IMAIN(); bmem_set_bank(bank); } else { - NDP_INTRPT(); + NDP_IMAIN(); } }