| version 1.1.1.1, 2003/10/16 17:58:02 | version 1.7, 2004/01/22 01:10:04 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  | #include        "cpucore.h" | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 | #include        "sound.h" | #include        "sound.h" | 
| Line 26  void fmport_a(NEVENTITEM item) { | Line 27  void fmport_a(NEVENTITEM item) { | 
 | if (intreq) { | if (intreq) { | 
 | pcm86.write = 1; | pcm86.write = 1; | 
 | pic_setirq(fmtimer.irq); | pic_setirq(fmtimer.irq); | 
 |  | //                      TRACEOUT(("fm int-A")); | 
 | } | } | 
 | //              TRACE_("A: fifo = ", pcm86.fifo); | //              TRACE_("A: fifo = ", pcm86.fifo); | 
 | //              TRACE_("A: virbuf = ", pcm86.virbuf); | //              TRACE_("A: virbuf = ", pcm86.virbuf); | 
| Line 51  void fmport_b(NEVENTITEM item) { | Line 53  void fmport_b(NEVENTITEM item) { | 
 | if (intreq) { | if (intreq) { | 
 | pcm86.write = 1; | pcm86.write = 1; | 
 | pic_setirq(fmtimer.irq); | pic_setirq(fmtimer.irq); | 
 |  | //                      TRACEOUT(("fm int-B")); | 
 | } | } | 
 | //              TRACE_("B: fifo = ", pcm86.fifo); | //              TRACE_("B: fifo = ", pcm86.fifo); | 
 | //              TRACE_("B: virbuf = ", pcm86.virbuf); | //              TRACE_("B: virbuf = ", pcm86.virbuf); | 
| Line 60  void fmport_b(NEVENTITEM item) { | Line 63  void fmport_b(NEVENTITEM item) { | 
 |  |  | 
 | static void set_fmtimeraevent(BOOL absolute) { | static void set_fmtimeraevent(BOOL absolute) { | 
 |  |  | 
| long l = 18 * (1024 - fmtimer.timera); | SINT32  l; | 
 |  |  | 
| if (pc.cpumode & CPUMODE_8MHz) {                // 4MHz | l = 18 * (1024 - fmtimer.timera); | 
| l = (l * 1248 / 625) * pc.multiple; | if (pccore.cpumode & CPUMODE_8MHz) {            // 4MHz | 
|  | l = (l * 1248 / 625) * pccore.multiple; | 
 | } | } | 
| else {                                                                  // 5MHz | else {                                                                          // 5MHz | 
| l = (l * 1536 / 625) * pc.multiple; | l = (l * 1536 / 625) * pccore.multiple; | 
 | } | } | 
 | nevent_set(NEVENT_FMTIMERA, l, fmport_a, absolute); | nevent_set(NEVENT_FMTIMERA, l, fmport_a, absolute); | 
 | } | } | 
 |  |  | 
 | static void set_fmtimerbevent(BOOL absolute) { | static void set_fmtimerbevent(BOOL absolute) { | 
 |  |  | 
| long l = 288 * (256 - fmtimer.timerb); | SINT32  l; | 
 |  |  | 
| if (pc.cpumode & CPUMODE_8MHz) {                // 4MHz | l = 288 * (256 - fmtimer.timerb); | 
| l = (l * 1248 / 625) * pc.multiple; | if (pccore.cpumode & CPUMODE_8MHz) {            // 4MHz | 
|  | l = (l * 1248 / 625) * pccore.multiple; | 
 | } | } | 
| else {                                                                  // 5MHz | else {                                                                          // 5MHz | 
| l = (l * 1536 / 625) * pc.multiple; | l = (l * 1536 / 625) * pccore.multiple; | 
 | } | } | 
 | nevent_set(NEVENT_FMTIMERB, l, fmport_b, absolute); | nevent_set(NEVENT_FMTIMERB, l, fmport_b, absolute); | 
 | } | } | 
 |  |  | 
| void fmtimer_reset(BYTE irq) { | void fmtimer_reset(UINT irq) { | 
 |  |  | 
 | ZeroMemory(&fmtimer, sizeof(fmtimer)); | ZeroMemory(&fmtimer, sizeof(fmtimer)); | 
 |  |  | 
| #if 1 | #if 0                                                                                                   // move | 
| fmtimer.reg = 0x3f;                                                                     // !! | fmtimer.reg = 0x3f; | 
 | set_fmtimeraevent(NEVENT_ABSOLUTE); | set_fmtimeraevent(NEVENT_ABSOLUTE); | 
 | set_fmtimerbevent(NEVENT_ABSOLUTE); | set_fmtimerbevent(NEVENT_ABSOLUTE); | 
 | #endif | #endif | 
 | fmtimer.intr = irq & 0xc0; | fmtimer.intr = irq & 0xc0; | 
 | fmtimer.intdisabel = irq & 0x10; | fmtimer.intdisabel = irq & 0x10; | 
 | fmtimer.irq = irqtable[irq >> 6]; | fmtimer.irq = irqtable[irq >> 6]; | 
| pic_registext(fmtimer.irq); | //      pic_registext(fmtimer.irq); | 
 | } | } | 
 |  |  | 
| void fmtimer_setreg(BYTE reg, BYTE value) { | void fmtimer_setreg(REG8 reg, REG8 value) { | 
|  |  | 
|  | //      TRACEOUT(("fm %x %x [%.4x:%.4x]", reg, value, CPU_CS, CPU_IP)); | 
 |  |  | 
 | switch(reg) { | switch(reg) { | 
 | case 0x24: | case 0x24: |