--- np2/io/mouseif.c 2003/10/23 18:33:13 1.4 +++ np2/io/mouseif.c 2004/03/06 18:25:36 1.10 @@ -1,8 +1,9 @@ #include "compiler.h" #include "mousemng.h" -#include "i286.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" +#include "keystat.h" // マウス ver0.28 @@ -19,12 +20,12 @@ 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; - mouseif.lastc = I286_CLOCK + I286_BASECLOCK + I286_REMCLOCK; + mouseif.lastc = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK; } static void calc_mousexy(void) { @@ -32,33 +33,42 @@ static void calc_mousexy(void) { UINT32 clock; SINT32 diff; - clock = I286_CLOCK + I286_BASECLOCK + I286_REMCLOCK; + clock = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK; diff = clock - mouseif.lastc; if (diff >= 2000) { - SINT16 dx; - SINT16 dy; + SINT32 dx; + SINT32 dy; mouseif.rapid ^= 0xa0; diff /= 1000; - dx = (SINT16)(mouseif.sx * diff / pc.frame1000); - if (dx >= 0) { // 正 + dx = mouseif.sx; + if (dx > 0) { + dx = dx * diff / mouseif.moveclock; if (dx > mouseif.rx) { dx = mouseif.rx; } } - else { // 負 + else if (dx < 0) { + dx *= -1; + dx = dx * diff / mouseif.moveclock; + dx *= -1; if (dx < mouseif.rx) { dx = mouseif.rx; } } mouseif.x += dx; mouseif.rx -= dx; - dy = (SINT16)(mouseif.sy * diff / pc.frame1000); - if (dy >= 0) { // 正 + + dy = mouseif.sy; + if (dy > 0) { + dy = dy * diff / mouseif.moveclock; if (dy > mouseif.ry) { dy = mouseif.ry; } } - else { // 負 + else if (dy < 0) { + dy *= -1; + dy = dy * diff / mouseif.moveclock; + dy *= -1; if (dy < mouseif.ry) { dy = mouseif.ry; } @@ -74,13 +84,13 @@ 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); } } } -static void setportc(BYTE value) { +static void setportc(REG8 value) { if ((value & 0x80) && (!(mouseif.portc & 0x80))) { calc_mousexy(); @@ -104,55 +114,54 @@ static void setportc(BYTE 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); } } } - mouseif.portc = value; + mouseif.portc = (UINT8)value; } // ---- I/O -static void IOOUTCALL mouseif_o7fdd(UINT port, BYTE dat) { +static void IOOUTCALL mouseif_o7fdd(UINT port, REG8 dat) { setportc(dat); (void)port; } -static void IOOUTCALL mouseif_o7fdf(UINT port, BYTE dat) { +static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) { - if (dat & 0xf0) { - mouseif.mode = dat; - if (dat == 0x93) { - setportc(0); - } - } - else { + if (!(dat & 0xf0)) { if (dat & 1) { - setportc((BYTE)(mouseif.portc | (1 << (dat >> 1)))); + setportc((REG8)(mouseif.portc | (1 << (dat >> 1)))); } else { - setportc((BYTE)(mouseif.portc & (~(1 << (dat >> 1))))); + setportc((REG8)(mouseif.portc & (~(1 << (dat >> 1))))); } } + else if (dat & 0x80) { + mouseif.mode = (UINT8)dat; + setportc(0); + } (void)port; } -static BYTE IOINPCALL mouseif_i7fd9(UINT port) { +static REG8 IOINPCALL mouseif_i7fd9(UINT port) { SINT16 x; SINT16 y; - BYTE ret; - BYTE portc; + REG8 ret; + REG8 portc; calc_mousexy(); - ret = mouseif.b & 0xf0; + ret = mouseif.b; if (np2cfg.MOUSERAPID) { ret |= mouseif.rapid; } - ret |= 0x40; + ret &= 0xf0; + ret |= 0x50; portc = mouseif.portc; if (portc & 0x80) { x = mouseif.latch_x; @@ -175,16 +184,16 @@ static BYTE IOINPCALL mouseif_i7fd9(UINT return(ret); } -static BYTE IOINPCALL mouseif_i7fdb(UINT port) { +static REG8 IOINPCALL mouseif_i7fdb(UINT port) { (void)port; return(0x40); } -static BYTE IOINPCALL mouseif_i7fdd(UINT port) { +static REG8 IOINPCALL mouseif_i7fdd(UINT port) { - BYTE ret; - BYTE mode; + REG8 ret; + REG8 mode; ret = mouseif.portc; mode = mouseif.mode; @@ -202,7 +211,7 @@ static BYTE IOINPCALL mouseif_i7fdd(UINT } -static void IOOUTCALL mouseif_obfdb(UINT port, BYTE dat) { +static void IOOUTCALL mouseif_obfdb(UINT port, REG8 dat) { mouseif.timing = dat & 3; (void)port; @@ -215,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) {