|
|
| version 1.1, 2003/10/16 17:58:05 | 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 |
| if (tone->puchi) { | if (tone->puchi) { |
| tone->puchi--; | tone->puchi--; |
| samp += vol; | samp += vol << PSGADDEDBIT; |
| } | } |
| break; | break; |
| 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); |
| } | } |