| version 1.1, 2004/08/01 05:31:31 | version 1.6, 2008/06/02 20:07:32 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
| // #include     "wavefile.h" |  | 
|  | #if !defined(DISABLE_SOUND) | 
|  |  | 
|  | #include        "wavefile.h" | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
| // #include     "cpucore.h" | #include        "z80core.h" | 
| // #include     "pccore.h" | #include        "pccore.h" | 
| // #include     "iocore.h" |  | 
 | #include        "sound.h" | #include        "sound.h" | 
 | #include        "sndcsec.h" | #include        "sndcsec.h" | 
| // #include     "getsnd.h" | /* #include     "getsnd.h" */ | 
 |  |  | 
 |  |  | 
 | SOUNDCFG        soundcfg; | SOUNDCFG        soundcfg; | 
| Line 65  static void streamprepare(UINT samples) | Line 67  static void streamprepare(UINT samples) | 
 |  |  | 
 |  |  | 
 | #if defined(SUPPORT_WAVEREC) | #if defined(SUPPORT_WAVEREC) | 
| // ---- wave rec | /* wave rec */ | 
 |  |  | 
| BOOL sound_recstart(const char *filename) { | BRESULT sound_recstart(const OEMCHAR *filename) { | 
 |  |  | 
 | WAVEWR  rec; | WAVEWR  rec; | 
 |  |  | 
| Line 124  static void streamfilewrite(UINT samples | Line 126  static void streamfilewrite(UINT samples | 
 | else if (samp < -32768) { | else if (samp < -32768) { | 
 | samp = -32768; | samp = -32768; | 
 | } | } | 
| // little endianなので satuation_s16は使えない | /* little endianなので satuation_s16は使えない */ | 
 | buf[i*2+0] = (UINT8)samp; | buf[i*2+0] = (UINT8)samp; | 
 | buf[i*2+1] = (UINT8)(samp >> 8); | buf[i*2+1] = (UINT8)(samp >> 8); | 
 | } | } | 
| Line 164  static void filltailsample(UINT count) { | Line 166  static void filltailsample(UINT count) { | 
 | #endif | #endif | 
 |  |  | 
 |  |  | 
| // ---- | /* ---- */ | 
 |  |  | 
| BOOL sound_create(UINT rate, UINT ms) { | BRESULT sound_create(UINT rate, UINT ms) { | 
 |  |  | 
 | UINT    samples; | UINT    samples; | 
 | UINT    reserve; | UINT    reserve; | 
| Line 179  BOOL sound_create(UINT rate, UINT ms) { | Line 181  BOOL sound_create(UINT rate, UINT ms) { | 
 | soundmng_reset(); | soundmng_reset(); | 
 |  |  | 
 | soundcfg.rate = rate; | soundcfg.rate = rate; | 
 | sound_changeclock(); |  | 
 |  |  | 
 | #if defined(SOUNDRESERVE) | #if defined(SOUNDRESERVE) | 
 | reserve = rate * SOUNDRESERVE / 1000; | reserve = rate * SOUNDRESERVE / 1000; | 
| Line 225  void sound_reset(void) { | Line 226  void sound_reset(void) { | 
 | if (sndstream.buffer) { | if (sndstream.buffer) { | 
 | soundmng_reset(); | soundmng_reset(); | 
 | streamreset(); | streamreset(); | 
| //              soundcfg.lastclock = CPU_CLOCK; | soundcfg.lastclock = CPU_CLOCK; | 
| //              beep_eventreset(); |  | 
 | } | } | 
 | } | } | 
 |  |  | 
 | void sound_changeclock(void) { | void sound_changeclock(void) { | 
 |  |  | 
 | #if 0 |  | 
 | UINT32  clock; | UINT32  clock; | 
 | UINT    hz; | UINT    hz; | 
 | UINT    hzmax; | UINT    hzmax; | 
| Line 241  void sound_changeclock(void) { | Line 240  void sound_changeclock(void) { | 
 | return; | return; | 
 | } | } | 
 |  |  | 
| // とりあえず 25で割り切れる。 | /* とりあえず 25で割り切れる。 */ | 
 | clock = pccore.realclock / 25; | clock = pccore.realclock / 25; | 
 | hz = soundcfg.rate / 25; | hz = soundcfg.rate / 25; | 
 |  |  | 
| // で、クロック数に合せて調整。(64bit演算しろよな的) | /* で、クロック数に合せて調整。(64bit演算しろよな的) */ | 
 | hzmax = (1 << (32 - 8)) / (clock >> 8); | hzmax = (1 << (32 - 8)) / (clock >> 8); | 
 | while(hzmax < hz) { | while(hzmax < hz) { | 
 | clock = (clock + 1) >> 1; | clock = (clock + 1) >> 1; | 
| Line 256  void sound_changeclock(void) { | Line 255  void sound_changeclock(void) { | 
 | soundcfg.clockbase = clock; | soundcfg.clockbase = clock; | 
 | soundcfg.minclock = 2 * clock / hz; | soundcfg.minclock = 2 * clock / hz; | 
 | soundcfg.lastclock = CPU_CLOCK; | soundcfg.lastclock = CPU_CLOCK; | 
 | #endif |  | 
 | } | } | 
 |  |  | 
 | void sound_streamregist(void *hdl, SOUNDCB cbfn) { | void sound_streamregist(void *hdl, SOUNDCB cbfn) { | 
| Line 272  void sound_streamregist(void *hdl, SOUND | Line 270  void sound_streamregist(void *hdl, SOUND | 
 | } | } | 
 |  |  | 
 |  |  | 
| // ---- | /* ---- */ | 
 |  |  | 
 | #if 0 |  | 
 | void sound_sync(void) { | void sound_sync(void) { | 
 |  |  | 
 | UINT32  length; | UINT32  length; | 
| Line 282  void sound_sync(void) { | Line 279  void sound_sync(void) { | 
 | if (sndstream.buffer == NULL) { | if (sndstream.buffer == NULL) { | 
 | return; | return; | 
 | } | } | 
 |  |  | 
 | length = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK - soundcfg.lastclock; | length = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK - soundcfg.lastclock; | 
 | if (length < soundcfg.minclock) { | if (length < soundcfg.minclock) { | 
 | return; | return; | 
| Line 300  void sound_sync(void) { | Line 296  void sound_sync(void) { | 
 | #endif | #endif | 
 | streamprepare(length); | streamprepare(length); | 
 | soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase; | soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase; | 
 | beep_eventreset(); |  | 
 | SNDCSEC_LEAVE; |  | 
 |  |  | 
 | soundcfg.writecount += length; |  | 
 | if (soundcfg.writecount >= 100) { |  | 
 | soundcfg.writecount = 0; |  | 
 | soundmng_sync(); |  | 
 | } |  | 
 | } |  | 
 | #endif |  | 
 |  |  | 
 | void sound_makesample(UINT length) { |  | 
 |  |  | 
 | if (sndstream.buffer == NULL) { |  | 
 | return; |  | 
 | } |  | 
 | SNDCSEC_ENTER; |  | 
 | #if defined(SUPPORT_WAVEREC) |  | 
 | if (sndstream.rec) { |  | 
 | streamfilewrite(length); |  | 
 | } |  | 
 | else |  | 
 | #endif |  | 
 | streamprepare(length); |  | 
 | //      soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase; |  | 
 | SNDCSEC_LEAVE; | SNDCSEC_LEAVE; | 
 |  |  | 
 | soundcfg.writecount += length; | soundcfg.writecount += length; | 
| Line 342  const SINT32 *sound_pcmlock(void) { | Line 313  const SINT32 *sound_pcmlock(void) { | 
 | const SINT32 *ret; | const SINT32 *ret; | 
 |  |  | 
 | if (locks) { | if (locks) { | 
| //              TRACEOUT(("sound pcm lock: already locked")); | /* TRACEOUT(("sound pcm lock: already locked")); */ | 
 | return(NULL); | return(NULL); | 
 | } | } | 
 | locks++; | locks++; | 
| Line 358  const SINT32 *ret; | Line 329  const SINT32 *ret; | 
 | #endif | #endif | 
 | { | { | 
 | streamprepare(sndstream.remain - sndstream.reserve); | streamprepare(sndstream.remain - sndstream.reserve); | 
| //                      soundcfg.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; | soundcfg.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; | 
| //                      beep_eventreset(); |  | 
 | } | } | 
 | } | } | 
 | else { | else { | 
| Line 381  void sound_pcmunlock(const SINT32 *hdl) | Line 351  void sound_pcmunlock(const SINT32 *hdl) | 
 | } | } | 
 | sndstream.ptr = sndstream.buffer + (leng * 2); | sndstream.ptr = sndstream.buffer + (leng * 2); | 
 | sndstream.remain = sndstream.samples + sndstream.reserve - leng; | sndstream.remain = sndstream.samples + sndstream.reserve - leng; | 
| //              sndstream.remain += sndstream.samples; | /* sndstream.remain += sndstream.samples; */ | 
 | SNDCSEC_LEAVE; | SNDCSEC_LEAVE; | 
 | locks--; | locks--; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  | #endif | 
 |  |  |