--- np2/io/mouseif.c 2003/12/08 00:55:32 1.6 +++ np2/io/mouseif.c 2004/03/06 18:25:36 1.10 @@ -3,6 +3,7 @@ #include "cpucore.h" #include "pccore.h" #include "iocore.h" +#include "keystat.h" // マウス ver0.28 @@ -19,7 +20,7 @@ void mouseif_sync(void) { // 今回の移動量を取得 mouseif.b = mousemng_getstat(&mouseif.sx, &mouseif.sy, 1); if (np2cfg.KEY_MODE == 3) { - mouseif.b &= keyext_getmouse(&mouseif.sx, &mouseif.sy); + mouseif.b &= keystat_getmouse(&mouseif.sx, &mouseif.sy); } mouseif.rx = mouseif.sx; mouseif.ry = mouseif.sy; @@ -41,14 +42,14 @@ static void calc_mousexy(void) { diff /= 1000; dx = mouseif.sx; if (dx > 0) { - dx = dx * diff / pc.frame1000; + dx = dx * diff / mouseif.moveclock; if (dx > mouseif.rx) { dx = mouseif.rx; } } else if (dx < 0) { dx *= -1; - dx = dx * diff / pc.frame1000; + dx = dx * diff / mouseif.moveclock; dx *= -1; if (dx < mouseif.rx) { dx = mouseif.rx; @@ -59,14 +60,14 @@ static void calc_mousexy(void) { dy = mouseif.sy; if (dy > 0) { - dy = dy * diff / pc.frame1000; + dy = dy * diff / mouseif.moveclock; if (dy > mouseif.ry) { dy = mouseif.ry; } } else if (dy < 0) { dy *= -1; - dy = dy * diff / pc.frame1000; + dy = dy * diff / mouseif.moveclock; dy *= -1; if (dy < mouseif.ry) { dy = mouseif.ry; @@ -83,7 +84,7 @@ void mouseint(NEVENTITEM item) { if (item->flag & NEVENT_SETEVENT) { if (!(mouseif.portc & 0x10)) { pic_setirq(0x0d); - nevent_set(NEVENT_MOUSE, pc.mouseclock << mouseif.timing, + nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, mouseint, NEVENT_RELATIVE); } } @@ -113,7 +114,7 @@ static void setportc(REG8 value) { if ((value ^ mouseif.portc) & 0x10) { if (!(value & 0x10)) { if (!nevent_iswork(NEVENT_MOUSE)) { - nevent_set(NEVENT_MOUSE, pc.mouseclock << mouseif.timing, + nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, mouseint, NEVENT_ABSOLUTE); } } @@ -132,13 +133,7 @@ static void IOOUTCALL mouseif_o7fdd(UINT static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) { - if (dat & 0xf0) { - mouseif.mode = (UINT8)dat; - if (dat == 0x93) { - setportc(0); - } - } - else { + if (!(dat & 0xf0)) { if (dat & 1) { setportc((REG8)(mouseif.portc | (1 << (dat >> 1)))); } @@ -146,6 +141,10 @@ static void IOOUTCALL mouseif_o7fdf(UINT setportc((REG8)(mouseif.portc & (~(1 << (dat >> 1))))); } } + else if (dat & 0x80) { + mouseif.mode = (UINT8)dat; + setportc(0); + } (void)port; } @@ -181,7 +180,6 @@ static REG8 IOINPCALL mouseif_i7fd9(UINT else { ret |= (x >> 4) & 0x0f; } -// TRACEOUT(("%x %x mouse [%x] %d -> %x", CPU_CS, CPU_IP, portc & 0x20, y, ret)); (void)port; return(ret); } @@ -226,7 +224,9 @@ void mouseif_reset(void) { ZeroMemory(&mouseif, sizeof(mouseif)); mouseif.mode = 0x93; - mouseif.portc = 0x10; // ver0.28 + mouseif.portc = 0x10; + mouseif.intrclock = pccore.realclock / 120; + mouseif.moveclock = pccore.realclock / 56400; } void mouseif_bind(void) {