| version 1.12, 2003/12/13 19:59:41 | version 1.14, 2004/01/13 05:30:58 | 
| Line 3 | Line 3 | 
 | // | // | 
 |  |  | 
 | #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 18 | Line 19 | 
 | // ver0.31 常に回す… | // ver0.31 常に回す… | 
 | static void setsystimerevent_noint(BOOL absolute) { | static void setsystimerevent_noint(BOOL absolute) { | 
 |  |  | 
| nevent_set(NEVENT_ITIMER, pc.multiple << 16, systimer_noint, absolute); | nevent_set(NEVENT_ITIMER, pccore.multiple << 16, | 
|  | systimer_noint, absolute); | 
 | } | } | 
 |  |  | 
 | void systimer_noint(NEVENTITEM item) { | void systimer_noint(NEVENTITEM item) { | 
| Line 34  static void setsystimerevent(BOOL absolu | Line 36  static void setsystimerevent(BOOL absolu | 
 |  |  | 
 | cnt = pit.value[0]; | cnt = pit.value[0]; | 
 | if (cnt > 8) {                                                                  // 根拠なし | if (cnt > 8) {                                                                  // 根拠なし | 
| cnt *= pc.multiple; | cnt *= pccore.multiple; | 
 | } | } | 
 | else { | else { | 
| cnt = pc.multiple << 16; | cnt = pccore.multiple << 16; | 
 | } | } | 
 | nevent_set(NEVENT_ITIMER, cnt, systimer, absolute); | nevent_set(NEVENT_ITIMER, cnt, systimer, absolute); | 
 | } | } | 
| Line 55  void systimer(NEVENTITEM item) { | Line 57  void systimer(NEVENTITEM item) { | 
 | setsystimerevent(NEVENT_RELATIVE); | setsystimerevent(NEVENT_RELATIVE); | 
 | } | } | 
 | else { | else { | 
| nevent_set(NEVENT_ITIMER, pc.multiple << 16, | nevent_set(NEVENT_ITIMER, pccore.multiple << 16, | 
 | systimer, NEVENT_RELATIVE); | systimer, NEVENT_RELATIVE); | 
 | } | } | 
 | } | } | 
| Line 71  static void setbeepeventex(BOOL absolute | Line 73  static void setbeepeventex(BOOL absolute | 
 |  |  | 
 | cnt = pit.value[1]; | cnt = pit.value[1]; | 
 | if (cnt > 2) { | if (cnt > 2) { | 
| cnt *= pc.multiple; | cnt *= pccore.multiple; | 
 | } | } | 
 | else { | else { | 
| cnt = pc.multiple << 16; | cnt = pccore.multiple << 16; | 
 | } | } | 
 | while(cnt < 0x100000) { | while(cnt < 0x100000) { | 
 | cnt <<= 1; | cnt <<= 1; | 
| Line 89  static void setbeepevent(BOOL absolute) | Line 91  static void setbeepevent(BOOL absolute) | 
 |  |  | 
 | cnt = pit.value[1]; | cnt = pit.value[1]; | 
 | if (cnt > 2) { | if (cnt > 2) { | 
| cnt *= pc.multiple; | cnt *= pccore.multiple; | 
 | } | } | 
 | else { | else { | 
| cnt = pc.multiple << 16; | cnt = pccore.multiple << 16; | 
 | } | } | 
 | nevent_set(NEVENT_BEEP, cnt, beeponeshot, absolute); | nevent_set(NEVENT_BEEP, cnt, beeponeshot, absolute); | 
 | } | } | 
| Line 103  void beeponeshot(NEVENTITEM item) { | Line 105  void beeponeshot(NEVENTITEM item) { | 
 | if (!(pit.mode[1] & 0x0c)) {                                                            // ver0.30 | if (!(pit.mode[1] & 0x0c)) {                                                            // ver0.30 | 
 | beep_lheventset(0); | beep_lheventset(0); | 
 | } | } | 
| #ifdef uPD71054 | #if defined(uPD71054) | 
 | if ((pit.mode[1] & 0x06) == 0x02) | if ((pit.mode[1] & 0x06) == 0x02) | 
 | #else | #else | 
 | if (pit.mode[1] & 0x02) | if (pit.mode[1] & 0x02) | 
| Line 126  static void setrs232cevent(BOOL absolute | Line 128  static void setrs232cevent(BOOL absolute | 
 | SINT32  cnt; | SINT32  cnt; | 
 |  |  | 
 | if (pit.value[2] > 1) { | if (pit.value[2] > 1) { | 
| cnt = pc.multiple * pit.value[2] * rs232c.mul; | cnt = pccore.multiple * pit.value[2] * rs232c.mul; | 
 | } | } | 
 | else { | else { | 
| cnt = (pc.multiple << 16) * rs232c.mul; | cnt = (pccore.multiple << 16) * rs232c.mul; | 
 | } | } | 
 | nevent_set(NEVENT_RS232C, cnt, rs232ctimer, absolute); | nevent_set(NEVENT_RS232C, cnt, rs232ctimer, absolute); | 
 | } | } | 
| Line 154  static UINT pit_latch(int ch) { | Line 156  static UINT pit_latch(int ch) { | 
 |  |  | 
 | if (ch == 1) { | if (ch == 1) { | 
 | switch(pit.mode[1] & 0x06) { | switch(pit.mode[1] & 0x06) { | 
 |  | #ifdef uPD71054                         // ? | 
 | case 0x00: | case 0x00: | 
 |  | #endif | 
 | case 0x04: | case 0x04: | 
 | return(pit.value[1]); | return(pit.value[1]); | 
 | #ifdef uPD71054 | #ifdef uPD71054 | 
| Line 167  static UINT pit_latch(int ch) { | Line 171  static UINT pit_latch(int ch) { | 
 | if (clock < 0) { | if (clock < 0) { | 
 | return(0); | return(0); | 
 | } | } | 
| clock /= pc.multiple; | clock /= pccore.multiple; | 
 | if (pit.value[1] > 2) { | if (pit.value[1] > 2) { | 
 | clock %= pit.value[1]; | clock %= pit.value[1]; | 
 | } | } | 
 | else { | else { | 
| clock >>= 16; | clock = LOW16(clock); | 
 | } | } | 
 | return(clock); | return(clock); | 
 | #endif | #endif | 
 | } | } | 
 | clock = nevent_getremain(NEVENT_ITIMER + ch); | clock = nevent_getremain(NEVENT_ITIMER + ch); | 
 | if (clock >= 0) { | if (clock >= 0) { | 
| return(clock / pc.multiple); | return(clock / pccore.multiple); | 
 | } | } | 
 | return(0); | return(0); | 
 | } | } | 
| Line 333  static const IOINP piti71[4] = { | Line 337  static const IOINP piti71[4] = { | 
 | void itimer_reset(void) { | void itimer_reset(void) { | 
 |  |  | 
 | ZeroMemory(&pit, sizeof(pit)); | ZeroMemory(&pit, sizeof(pit)); | 
| if (pc.cpumode & CPUMODE_8MHz) { | if (pccore.cpumode & CPUMODE_8MHz) { | 
 | pit.value[1] = 998;                             // 4MHz | pit.value[1] = 998;                             // 4MHz | 
 | } | } | 
 | else { | else { |