--- np2/sound/psggenc.c 2003/10/20 06:36:33 1.3 +++ np2/sound/psggenc.c 2004/02/03 08:24:40 1.10 @@ -67,23 +67,32 @@ void psggen_reset(PSGGEN psg) { ZeroMemory(psg, sizeof(_PSGGEN)); for (i=0; i<3; i++) { - psg->tone[i].pvol = &psg->envvol; + psg->tone[i].pvol = psggencfg.volume + 0; } for (i=0; ireg)[i]); + } +} + +void psggen_setreg(PSGGEN psg, REG8 reg, REG8 value) { UINT freq; UINT ch; reg &= 15; - ((BYTE *)&psg->reg)[reg] = value; if (reg < 14) { sound_sync(); } + ((BYTE *)&psg->reg)[reg] = value; switch(reg) { case 0: case 1: @@ -113,6 +122,8 @@ void psggen_setreg(PSGGEN psg, BYTE reg, case 7: keydisp_psgmix(psg); psg->mixer = ~value; + psg->puchicount = psggencfg.puchidec; +// TRACEOUT(("psg %x 7 %d", (long)psg, value)); break; case 8: @@ -121,13 +132,14 @@ void psggen_setreg(PSGGEN psg, BYTE reg, ch = reg - 8; keydisp_psgvol(psg, (BYTE)ch); if (value & 0x10) { - psg->tone[ch].pvol = &psg->envvol; + psg->tone[ch].pvol = &psg->evol; } else { - psg->tone[ch].pvol = ((BYTE *)&psg->reg) + reg; + psg->tone[ch].pvol = psggencfg.volume + (value & 15); } psg->tone[ch].puchi = psggencfg.puchidec; -// TRACEOUT(("%d", value)); + psg->puchicount = psggencfg.puchidec; +// TRACEOUT(("psg %x %x %d", (long)psg, reg, value)); break; case 11: @@ -148,8 +160,15 @@ void psggen_setreg(PSGGEN psg, BYTE reg, } } -BYTE psggen_getreg(PSGGEN psg, BYTE reg) { +REG8 psggen_getreg(PSGGEN psg, REG8 reg) { return(((BYTE *)&psg->reg)[reg & 15]); } +void psggen_setpan(PSGGEN psg, UINT ch, REG8 pan) { + + if ((psg) && (ch < 3)) { + psg->tone[ch].pan = pan; + } +} +