--- np2/sound/fmtimer.c 2004/01/22 01:10:04 1.7 +++ np2/sound/fmtimer.c 2005/05/13 05:47:25 1.11 @@ -6,7 +6,7 @@ #include "fmboard.h" -static const BYTE irqtable[4] = {0x03, 0x0d, 0x0a, 0x0c}; +static const UINT8 irqtable[4] = {0x03, 0x0d, 0x0a, 0x0c}; void fmport_a(NEVENTITEM item) { @@ -14,18 +14,13 @@ void fmport_a(NEVENTITEM item) { BOOL intreq = FALSE; if (item->flag & NEVENT_SETEVENT) { + intreq = pcm86gen_intrq(); if (fmtimer.reg & 0x04) { fmtimer.status |= 0x01; intreq = TRUE; } - if (pcm86.fifo & 0x20) { - sound_sync(); - if (pcm86.virbuf <= pcm86.fifosize) { - intreq = TRUE; - } - } if (intreq) { - pcm86.write = 1; +// pcm86.write = 1; pic_setirq(fmtimer.irq); // TRACEOUT(("fm int-A")); } @@ -40,18 +35,21 @@ void fmport_b(NEVENTITEM item) { BOOL intreq = FALSE; if (item->flag & NEVENT_SETEVENT) { + intreq = pcm86gen_intrq(); if (fmtimer.reg & 0x08) { fmtimer.status |= 0x02; intreq = TRUE; } +#if 0 if (pcm86.fifo & 0x20) { sound_sync(); if (pcm86.virbuf <= pcm86.fifosize) { intreq = TRUE; } } +#endif if (intreq) { - pcm86.write = 1; +// pcm86.write = 1; pic_setirq(fmtimer.irq); // TRACEOUT(("fm int-B")); } @@ -66,7 +64,7 @@ static void set_fmtimeraevent(BOOL absol SINT32 l; l = 18 * (1024 - fmtimer.timera); - if (pccore.cpumode & CPUMODE_8MHz) { // 4MHz + if (pccore.cpumode & CPUMODE_8MHZ) { // 4MHz l = (l * 1248 / 625) * pccore.multiple; } else { // 5MHz @@ -80,7 +78,7 @@ static void set_fmtimerbevent(BOOL absol SINT32 l; l = 288 * (256 - fmtimer.timerb); - if (pccore.cpumode & CPUMODE_8MHz) { // 4MHz + if (pccore.cpumode & CPUMODE_8MHZ) { // 4MHz l = (l * 1248 / 625) * pccore.multiple; } else { // 5MHz @@ -92,19 +90,13 @@ static void set_fmtimerbevent(BOOL absol void fmtimer_reset(UINT irq) { ZeroMemory(&fmtimer, sizeof(fmtimer)); - -#if 0 // move - fmtimer.reg = 0x3f; - set_fmtimeraevent(NEVENT_ABSOLUTE); - set_fmtimerbevent(NEVENT_ABSOLUTE); -#endif fmtimer.intr = irq & 0xc0; fmtimer.intdisabel = irq & 0x10; fmtimer.irq = irqtable[irq >> 6]; // pic_registext(fmtimer.irq); } -void fmtimer_setreg(REG8 reg, REG8 value) { +void fmtimer_setreg(UINT reg, REG8 value) { // TRACEOUT(("fm %x %x [%.4x:%.4x]", reg, value, CPU_CS, CPU_IP)); @@ -122,7 +114,6 @@ void fmtimer_setreg(REG8 reg, REG8 value break; case 0x27: -#if 1 fmtimer.reg = value; fmtimer.status &= ~((value & 0x30) >> 4); if (value & 0x01) { @@ -144,16 +135,6 @@ void fmtimer_setreg(REG8 reg, REG8 value if (!(value & 0x03)) { pic_resetirq(fmtimer.irq); } -#else - fmtimer.reg = value; - fmtimer.status &= ~((value & 0x30) >> 4); - if ((value & 0x10) && (!nevent_iswork(NEVENT_FMTIMERA))) { - set_fmtimeraevent(NEVENT_ABSOLUTE); - } - if ((value & 0x20) && (!nevent_iswork(NEVENT_FMTIMERB))) { - set_fmtimerbevent(NEVENT_ABSOLUTE); - } -#endif break; } }