--- xmil/io/sndboard.c 2004/08/02 11:48:14 1.2 +++ xmil/io/sndboard.c 2004/08/05 11:30:12 1.3 @@ -4,40 +4,60 @@ #include "iocore.h" #include "sndctrl.h" #include "keystat.h" +#include "x1f.h" -void IOOUTCALL sndboard_opmreg(UINT port, REG8 value) { +void IOOUTCALL opm_o(UINT port, REG8 dat) { -// TRACEOUT(("%.4x, %.2x", port, value)); - sndboard.opmreg = (UINT8)value; -} - -void IOOUTCALL sndboard_opmdat(UINT port, REG8 value) { + REG8 lsb; + REG8 reg; -// TRACEOUT(("%.4x, %.2x", port, value)); - opmgen_setreg(sndboard.opmreg, value); + lsb = (UINT8)port; + if (lsb == 0x00) { // 0700 + sndboard.opmreg = (UINT8)dat; + } + else if (lsb == 0x01) { // 0701 + reg = sndboard.opmreg; + sndboard.opmdat[reg] = dat; + x1f_opm(reg, dat); + opmgen_setreg(reg, dat); + } + else if ((lsb & (~3)) == 0x04) { // 0704-0707 + ctc_o(port, dat); + } } -REG8 IOINPCALL sndboard_opmsta(UINT port) { +REG8 IOINPCALL opm_i(UINT port) { + + REG8 lsb; - if (pccore.SOUND_SW) { - return(0x00); // ゼリアード対策 + lsb = (UINT8)port; + if ((lsb & (~1)) == 0x00) { // 0700/0701 + return(0x00); // ゼリアード + } + else if ((lsb & (~3)) == 0x04) { // 0704-0707 + return(ctc_i(port)); + } + else { + return(0xff); } - return(0xff); } -void IOOUTCALL sndboard_psgreg(UINT port, REG8 value) { +void IOOUTCALL sndboard_psgreg(UINT port, REG8 dat) { -// TRACEOUT(("OUT %.4x, %.2x", port, value)); - sndboard.psgreg = value; + sndboard.psgreg = dat; } -void IOOUTCALL sndboard_psgdat(UINT port, REG8 value) { +void IOOUTCALL sndboard_psgdat(UINT port, REG8 dat) { -// TRACEOUT(("OUT %.4x, %.2x", port, value)); - if (sndboard.psgreg < 0x0e) { - psggen_setreg(&psggen, sndboard.psgreg, value); + REG8 reg; + + reg = sndboard.psgreg; + if (reg < 0x0e) { + sndboard.psgdat[reg] = dat; + x1f_psg(reg, dat); + psggen_setreg(&psggen, reg, dat); } } @@ -46,7 +66,7 @@ REG8 IOINPCALL sndboard_psgsta(UINT port REG8 ret; if (sndboard.psgreg < 0x0e) { - return(psggen_getreg(&psggen, sndboard.psgreg)); + return(sndboard.psgdat[sndboard.psgreg]); } else if (sndboard.psgreg < 0x10) { ret = 0xff; @@ -75,8 +95,8 @@ REG8 IOINPCALL sndboard_psgsta(UINT port void sndboard_reset(void) { - sndboard.opmreg = 0; - sndboard.psgreg = 0; + ZeroMemory(&sndboard, sizeof(sndboard)); + CopyMemory(sndboard.psgdat, psggen_deftbl, sizeof(psggen_deftbl)); sndctrl_reset(); }