|
|
| version 1.5, 2003/11/12 20:02:54 | version 1.6, 2003/11/21 06:51:11 |
|---|---|
| Line 44 static void setsystimerevent(BOOL absolu | Line 44 static void setsystimerevent(BOOL absolu |
| void systimer(NEVENTITEM item) { | void systimer(NEVENTITEM item) { |
| if (pit.intr[0]) { | |
| pit.intr[0] = 0; | |
| pic_setirq(0); | |
| // TRACEOUT(("int-08 [%.2x]", pit.mode[0])); | |
| } | |
| if (item->flag & NEVENT_SETEVENT) { | if (item->flag & NEVENT_SETEVENT) { |
| if ((pit.mode[0] & 0x0c) == 0x04) { | if ((pit.mode[0] & 0x0c) == 0x04) { |
| // レートジェネレータ | // レートジェネレータ |
| setsystimerevent(NEVENT_RELATIVE); | pit.intr[0] = 1; |
| } | |
| else { | |
| setsystimerevent_noint(NEVENT_RELATIVE); | |
| } | } |
| setsystimerevent(NEVENT_RELATIVE); | |
| } | } |
| pic_setirq(0); | |
| } | } |
| Line 215 BYTE itimer_getcount(int ch) { | Line 217 BYTE itimer_getcount(int ch) { |
| // system timer | // system timer |
| static void IOOUTCALL pit_o71(UINT port, BYTE dat) { | static void IOOUTCALL pit_o71(UINT port, BYTE dat) { |
| // TRACEOUT(("pic71: %d", dat)); | // TRACEOUT(("pic o71: %x [%.4x %.4x]", dat, I286_CS, I286_IP)); |
| if (itimer_setcount(0, dat)) { | if (itimer_setcount(0, dat)) { |
| return; | return; |
| } | } |
| pic.pi[0].irr &= (~1); | pic.pi[0].irr &= (~1); |
| pit.intr[0] = 1; | |
| setsystimerevent(NEVENT_ABSOLUTE); | setsystimerevent(NEVENT_ABSOLUTE); |
| (void)port; | (void)port; |
| } | } |
| Line 256 static void IOOUTCALL pit_o77(UINT port, | Line 259 static void IOOUTCALL pit_o77(UINT port, |
| int ch; | int ch; |
| // TRACEOUT(("pic77: %x", dat)); | // TRACEOUT(("pic o77: %x", dat)); |
| ch = (dat >> 6) & 3; | ch = (dat >> 6) & 3; |
| if (ch != 3) { | if (ch != 3) { |
| itimer_setflag(ch, dat); | itimer_setflag(ch, dat); |
| if (ch == 0) { // 書込みで itimerのirrがリセットされる… | if (ch == 0) { // 書込みで itimerのirrがリセットされる… |
| pic.pi[0].irr &= (~1); | pic.pi[0].irr &= (~1); |
| if (dat & 0x30) { // 一応ラッチ時は割り込みをセットしない | // if (dat & 0x30) { // 一応ラッチ時は割り込みをセットしない |
| setsystimerevent(NEVENT_ABSOLUTE); | pit.intr[0] = 1; |
| } | // setsystimerevent(NEVENT_ABSOLUTE); |
| // } | |
| } | } |
| if (ch == 1) { | if (ch == 1) { |
| beep_modeset(); | beep_modeset(); |
| Line 275 static void IOOUTCALL pit_o77(UINT port, | Line 279 static void IOOUTCALL pit_o77(UINT port, |
| static BYTE IOINPCALL pit_i71(UINT port) { | static BYTE IOINPCALL pit_i71(UINT port) { |
| if (port == 0x71) { | |
| BYTE x; | |
| x = itimer_getcount((port >> 1) & 3); | |
| // TRACEOUT(("pic i71 %x [%.4x %.4x]", x, I286_CS, I286_IP)); | |
| return(x); | |
| } | |
| return(itimer_getcount((port >> 1) & 3)); | return(itimer_getcount((port >> 1) & 3)); |
| } | } |