|
|
| version 1.11, 2004/03/14 23:45:44 | version 1.12, 2004/03/19 00:30:01 |
|---|---|
| Line 82 static void calc_mousexy(void) { | Line 82 static void calc_mousexy(void) { |
| void mouseint(NEVENTITEM item) { | void mouseint(NEVENTITEM item) { |
| if (item->flag & NEVENT_SETEVENT) { | if (item->flag & NEVENT_SETEVENT) { |
| if (!(mouseif.portc & 0x10)) { | if (!(mouseif.upd8255.portc & 0x10)) { |
| pic_setirq(0x0d); | pic_setirq(0x0d); |
| nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, | nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, |
| mouseint, NEVENT_RELATIVE); | mouseint, NEVENT_RELATIVE); |
| Line 92 void mouseint(NEVENTITEM item) { | Line 92 void mouseint(NEVENTITEM item) { |
| static void setportc(REG8 value) { | static void setportc(REG8 value) { |
| if ((value & 0x80) && (!(mouseif.portc & 0x80))) { | if ((value & 0x80) && (!(mouseif.upd8255.portc & 0x80))) { |
| calc_mousexy(); | calc_mousexy(); |
| mouseif.latch_x = mouseif.x; | mouseif.latch_x = mouseif.x; |
| mouseif.x = 0; | mouseif.x = 0; |
| Line 111 static void setportc(REG8 value) { | Line 111 static void setportc(REG8 value) { |
| mouseif.latch_y = -128; | mouseif.latch_y = -128; |
| } | } |
| } | } |
| if ((value ^ mouseif.portc) & 0x10) { | if ((value ^ mouseif.upd8255.portc) & 0x10) { |
| if (!(value & 0x10)) { | if (!(value & 0x10)) { |
| if (!nevent_iswork(NEVENT_MOUSE)) { | if (!nevent_iswork(NEVENT_MOUSE)) { |
| nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, | nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, |
| Line 119 static void setportc(REG8 value) { | Line 119 static void setportc(REG8 value) { |
| } | } |
| } | } |
| } | } |
| mouseif.portc = (UINT8)value; | mouseif.upd8255.portc = (UINT8)value; |
| } | } |
| // ---- I/O | // ---- I/O |
| static void IOOUTCALL mouseif_o7fd9(UINT port, REG8 dat) { | |
| mouseif.upd8255.porta = dat; | |
| (void)port; | |
| } | |
| static void IOOUTCALL mouseif_o7fdb(UINT port, REG8 dat) { | |
| mouseif.upd8255.portb = dat; | |
| (void)port; | |
| } | |
| static void IOOUTCALL mouseif_o7fdd(UINT port, REG8 dat) { | static void IOOUTCALL mouseif_o7fdd(UINT port, REG8 dat) { |
| setportc(dat); | setportc(dat); |
| Line 133 static void IOOUTCALL mouseif_o7fdd(UINT | Line 145 static void IOOUTCALL mouseif_o7fdd(UINT |
| static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) { | static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) { |
| if (!(dat & 0xf0)) { | REG8 portc; |
| if (dat & 1) { | UINT sft; |
| setportc((REG8)(mouseif.portc | (1 << (dat >> 1)))); | |
| } | portc = 0; |
| else { | if (dat & uPD8255_CTRL) { |
| setportc((REG8)(mouseif.portc & (~(1 << (dat >> 1))))); | mouseif.upd8255.mode = (UINT8)dat; |
| } | |
| } | |
| else if (dat & 0x80) { | |
| mouseif.mode = (UINT8)dat; | |
| pic_resetirq(0x0d); | pic_resetirq(0x0d); |
| nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, | nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing, |
| mouseint, NEVENT_ABSOLUTE); | mouseint, NEVENT_ABSOLUTE); |
| setportc(0); | |
| } | } |
| else { | |
| sft = (dat >> 1) & 7; | |
| portc = mouseif.upd8255.portc; | |
| portc &= (~(1 << sft)); | |
| portc |= (dat & 1) << sft; | |
| } | |
| setportc(portc); | |
| (void)port; | (void)port; |
| } | } |
| Line 158 static REG8 IOINPCALL mouseif_i7fd9(UINT | Line 172 static REG8 IOINPCALL mouseif_i7fd9(UINT |
| REG8 ret; | REG8 ret; |
| REG8 portc; | REG8 portc; |
| calc_mousexy(); | if (mouseif.upd8255.mode & uPD8255_PORTA) { |
| ret = mouseif.b; | calc_mousexy(); |
| if (np2cfg.MOUSERAPID) { | ret = mouseif.b; |
| ret |= mouseif.rapid; | if (np2cfg.MOUSERAPID) { |
| } | ret |= mouseif.rapid; |
| ret &= 0xf0; | } |
| ret |= 0x50; | ret &= 0xf0; |
| portc = mouseif.portc; | ret |= 0x50; |
| if (portc & 0x80) { | portc = mouseif.upd8255.portc; |
| x = mouseif.latch_x; | if (portc & 0x80) { |
| y = mouseif.latch_y; | x = mouseif.latch_x; |
| } | y = mouseif.latch_y; |
| else { | } |
| x = mouseif.x; | else { |
| y = mouseif.y; | x = mouseif.x; |
| } | y = mouseif.y; |
| if (portc & 0x40) { | } |
| x = y; | if (portc & 0x40) { |
| } | x = y; |
| if (!(portc & 0x20)) { | } |
| ret |= x & 0x0f; | if (!(portc & 0x20)) { |
| ret |= x & 0x0f; | |
| } | |
| else { | |
| ret |= (x >> 4) & 0x0f; | |
| } | |
| return(ret); | |
| } | } |
| else { | else { |
| ret |= (x >> 4) & 0x0f; | return(mouseif.upd8255.porta); |
| } | } |
| (void)port; | (void)port; |
| return(ret); | |
| } | } |
| static REG8 IOINPCALL mouseif_i7fdb(UINT port) { | static REG8 IOINPCALL mouseif_i7fdb(UINT port) { |
| if (mouseif.upd8255.mode & uPD8255_PORTB) { | |
| return(0x40); | |
| } | |
| else { | |
| return(mouseif.upd8255.portb); | |
| } | |
| (void)port; | (void)port; |
| return(0x40); | |
| } | } |
| static REG8 IOINPCALL mouseif_i7fdd(UINT port) { | static REG8 IOINPCALL mouseif_i7fdd(UINT port) { |
| REG8 ret; | |
| REG8 mode; | REG8 mode; |
| REG8 ret; | |
| ret = mouseif.portc; | mode = mouseif.upd8255.mode; |
| mode = mouseif.mode; | ret = mouseif.upd8255.portc; |
| if (mode & 8) { | if (mode & uPD8255_PORTCH) { |
| ret &= 0x1f; | ret &= 0x1f; |
| } | } |
| if (mode & 1) { | if (mode & uPD8255_PORTCL) { |
| ret &= 0xf0; | ret &= 0xf0; |
| ret |= 0x08; | ret |= 0x08; |
| ret |= (np2cfg.dipsw[2] >> 5) & 0x04; | ret |= (np2cfg.dipsw[2] >> 5) & 0x04; |
| Line 213 static REG8 IOINPCALL mouseif_i7fdd(UINT | Line 237 static REG8 IOINPCALL mouseif_i7fdd(UINT |
| return(ret); | return(ret); |
| } | } |
| static void IOOUTCALL mouseif_obfdb(UINT port, REG8 dat) { | static void IOOUTCALL mouseif_obfdb(UINT port, REG8 dat) { |
| mouseif.timing = dat & 3; | mouseif.timing = dat & 3; |
| Line 226 static void IOOUTCALL mouseif_obfdb(UINT | Line 249 static void IOOUTCALL mouseif_obfdb(UINT |
| void mouseif_reset(void) { | void mouseif_reset(void) { |
| ZeroMemory(&mouseif, sizeof(mouseif)); | ZeroMemory(&mouseif, sizeof(mouseif)); |
| mouseif.mode = 0x93; | mouseif.upd8255.porta = 0x00; |
| mouseif.portc = 0x10; | mouseif.upd8255.portb = 0x00; |
| mouseif.upd8255.portc = 0x10; | |
| mouseif.upd8255.mode = 0x93; | |
| mouseif.intrclock = pccore.realclock / 120; | mouseif.intrclock = pccore.realclock / 120; |
| mouseif.moveclock = pccore.realclock / 56400; | mouseif.moveclock = pccore.realclock / 56400; |
| } | } |
| void mouseif_bind(void) { | void mouseif_bind(void) { |
| iocore_attachout(0x7fd9, mouseif_o7fd9); | |
| iocore_attachout(0x7fdb, mouseif_o7fdb); | |
| iocore_attachout(0x7fdd, mouseif_o7fdd); | iocore_attachout(0x7fdd, mouseif_o7fdd); |
| iocore_attachout(0x7fdf, mouseif_o7fdf); | iocore_attachout(0x7fdf, mouseif_o7fdf); |
| iocore_attachinp(0x7fd9, mouseif_i7fd9); | iocore_attachinp(0x7fd9, mouseif_i7fd9); |