diff options
Diffstat (limited to 'fmdriver')
-rw-r--r-- | fmdriver/fmdriver.h | 5 | ||||
-rw-r--r-- | fmdriver/fmdriver_fmp.c | 3 | ||||
-rw-r--r-- | fmdriver/fmdriver_pmd.c | 5 |
3 files changed, 13 insertions, 0 deletions
diff --git a/fmdriver/fmdriver.h b/fmdriver/fmdriver.h index 9f3afee..aebe27e 100644 --- a/fmdriver/fmdriver.h +++ b/fmdriver/fmdriver.h @@ -100,6 +100,11 @@ struct fmdriver_work { bool pcmerror[2]; uint8_t ssg_noise_freq; struct fmdriver_track_status track_status[FMDRIVER_TRACK_NUM]; + uint8_t loop_cnt; + // current timerb count + uint32_t timerb_cnt; + // loop length + uint32_t loop_timerb_cnt; // fm3ex part map }; diff --git a/fmdriver/fmdriver_fmp.c b/fmdriver/fmdriver_fmp.c index cc6f1a6..41d0a48 100644 --- a/fmdriver/fmdriver_fmp.c +++ b/fmdriver/fmdriver_fmp.c @@ -875,6 +875,7 @@ static bool fmp_cmd74_loop(struct fmdriver_work *work, }
// 248c
fmp->loop_cnt++;
+ work->loop_cnt = fmp->loop_cnt;
fmp->part_loop_bit = fmp->part_playing_bit;
// al=2; 1b64();
}
@@ -891,6 +892,7 @@ static bool fmp_cmd74_loop(struct fmdriver_work *work, // 3e16();
fmp->status.stopped = true;
fmp->status.looped = true;
+ work->loop_cnt = -1;
}
// 24f0
if (!part->type.rhythm) {
@@ -3148,6 +3150,7 @@ static void fmp_opna_interrupt(struct fmdriver_work *work) { struct driver_fmp *fmp = (struct driver_fmp *)work->driver;
if (work->opna_status(work, 0) & 0x02) {
fmp_timerb(work, fmp);
+ work->timerb_cnt++;
}
}
diff --git a/fmdriver/fmdriver_pmd.c b/fmdriver/fmdriver_pmd.c index 7090fc8..14459a5 100644 --- a/fmdriver/fmdriver_pmd.c +++ b/fmdriver/fmdriver_pmd.c @@ -5486,6 +5486,9 @@ static void pmd_proc_parts( struct fmdriver_work *work, struct driver_pmd *pmd ) { + pmd->loop.looped = true; + pmd->loop.ended = true; + pmd->loop.env = false; if (!pmd->opm_flag) { for (int c = 0; c < 3; c++) { pmd->proc_ch = c+1; @@ -5538,6 +5541,7 @@ static void pmd_proc_parts( } else { pmd->status2 = 0xff; } + work->loop_cnt = pmd->status2; } // 3e2e @@ -5623,6 +5627,7 @@ static void pmd_timer( } if (status & 2) { pmd_timerb(work, pmd); + work->timerb_cnt++; } } |