| version 1.2, 2003/10/19 16:54:51 | version 1.6, 2003/11/14 05:26:53 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  | #include        "parts.h" | 
 | #include        "sound.h" | #include        "sound.h" | 
 | #include        "psggen.h" | #include        "psggen.h" | 
 |  |  | 
| Line 19  void SOUNDCALL psggen_getpcm(PSGGEN psg, | Line 20  void SOUNDCALL psggen_getpcm(PSGGEN psg, | 
 | UINT    i; | UINT    i; | 
 | UINT    noise; | UINT    noise; | 
 |  |  | 
| while(count--) { | if ((psg->mixer & 0x3f) == 0) { | 
|  | count = min(count, psg->puchicount); | 
|  | psg->puchicount -= count; | 
|  | } | 
|  | if (count == 0) { | 
|  | return; | 
|  | } | 
|  | do { | 
 | noisevol = 0; | noisevol = 0; | 
 | if (psg->envcnt) { | if (psg->envcnt) { | 
 | psg->envcnt--; | psg->envcnt--; | 
| Line 51  void SOUNDCALL psggen_getpcm(PSGGEN psg, | Line 59  void SOUNDCALL psggen_getpcm(PSGGEN psg, | 
 | countbak = psg->noise.count; | countbak = psg->noise.count; | 
 | psg->noise.count -= psg->noise.freq; | psg->noise.count -= psg->noise.freq; | 
 | if (psg->noise.count > countbak) { | if (psg->noise.count > countbak) { | 
| psg->noise.base = rand() & (1 << (1 << PSGADDEDBIT)); | //                                      psg->noise.base = GETRAND() & (1 << (1 << PSGADDEDBIT)); | 
|  | psg->noise.base = rand_get() & (1 << (1 << PSGADDEDBIT)); | 
 | } | } | 
 | noisetbl += psg->noise.base; | noisetbl += psg->noise.base; | 
 | noisetbl >>= 1; | noisetbl >>= 1; | 
| Line 59  void SOUNDCALL psggen_getpcm(PSGGEN psg, | Line 68  void SOUNDCALL psggen_getpcm(PSGGEN psg, | 
 | } | } | 
 | tone = psg->tone; | tone = psg->tone; | 
 | toneterm = tone + 3; | toneterm = tone + 3; | 
 | samp = 0; |  | 
 | do { | do { | 
 | psgvol = (*(tone->pvol)) & 15; | psgvol = (*(tone->pvol)) & 15; | 
 | if (psgvol) { | if (psgvol) { | 
 |  | samp = 0; | 
 | vol = psggencfg.volume[psgvol]; | vol = psggencfg.volume[psgvol]; | 
 | switch(mixer & 9) { | switch(mixer & 9) { | 
 | case 0:                                                 // no mix | case 0:                                                 // no mix | 
| Line 101  void SOUNDCALL psggen_getpcm(PSGGEN psg, | Line 110  void SOUNDCALL psggen_getpcm(PSGGEN psg, | 
 | } | } | 
 | break; | break; | 
 | } | } | 
 |  | if (!(tone->pan & 1)) { | 
 |  | pcm[0] += samp; | 
 |  | } | 
 |  | if (!(tone->pan & 2)) { | 
 |  | pcm[1] += samp; | 
 |  | } | 
 | } | } | 
 | mixer >>= 1; | mixer >>= 1; | 
 | } while(++tone < toneterm); | } while(++tone < toneterm); | 
 | pcm[0] += samp; |  | 
 | pcm[1] += samp; |  | 
 | pcm += 2; | pcm += 2; | 
| } | } while(--count); | 
 | } | } | 
 |  |  |