diff options
| author | Takamichi Horikawa <takamichiho@gmail.com> | 2017-04-12 01:04:15 +0900 | 
|---|---|---|
| committer | Takamichi Horikawa <takamichiho@gmail.com> | 2017-04-12 01:04:15 +0900 | 
| commit | ab379f2bb081f3fe2ea77ed163f755f59a49e6cf (patch) | |
| tree | b06142d1b4f765e23531abc50ad229494b241a04 /fmdriver | |
| parent | c6c96944ae1bb1d7363349ec21be9dca76ee9ec4 (diff) | |
added wave output
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++;    }  } | 
