From 47081860f6bd565f9d8f1042472312206c380942 Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Mon, 28 Jun 2021 00:11:57 +0900 Subject: [PATCH] [VM][FMTOWNS][MOUSE][JOYSTICK] More integrate to common interface. --- source/src/vm/fmtowns/fmtowns.cpp | 20 +++----- source/src/vm/fmtowns/joypad.cpp | 35 ++++++++++++-- source/src/vm/fmtowns/joypad.h | 16 ++----- source/src/vm/fmtowns/joystick.cpp | 89 ++++++++++++++++++++++++++---------- source/src/vm/fmtowns/joystick.h | 36 +++++---------- source/src/vm/fmtowns/mouse.cpp | 93 +++++++++++++++++--------------------- source/src/vm/fmtowns/mouse.h | 12 ++--- 7 files changed, 165 insertions(+), 136 deletions(-) diff --git a/source/src/vm/fmtowns/fmtowns.cpp b/source/src/vm/fmtowns/fmtowns.cpp index fd7fcdb48..74d91ad3d 100644 --- a/source/src/vm/fmtowns/fmtowns.cpp +++ b/source/src/vm/fmtowns/fmtowns.cpp @@ -420,24 +420,16 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu) timer->set_context_rtc(rtc); timer->set_context_halt_line(cpu, SIG_CPU_HALTREQ, 0xffffffff); - joystick->set_context_mouse(mouse, SIG_MOUSE_STROBE, 0xff); + joystick->set_context_mouse(mouse); + joystick->set_context_joypad(0, joypad[0]); + joystick->set_context_joypad(1, joypad[1]); - joystick->set_context_enable0(joypad[0], SIG_JOYPAD_ENABLE, 0xffffffff); - joystick->set_context_enable1(joypad[1], SIG_JOYPAD_ENABLE, 0xffffffff); - joystick->set_context_mask(joypad[0], SIG_JOYPAD_SELECT_BUS, 0x10); // Mouse0 or joypad0 - joystick->set_context_mask(joypad[1], SIG_JOYPAD_SELECT_BUS, 0x20); // Mouse1 or joypad1 - joystick->set_context_query(joypad[0], SIG_JOYPAD_QUERY, 0x1); - joystick->set_context_query(joypad[1], SIG_JOYPAD_QUERY, 0x2); - joystick->set_context_query(mouse, SIG_MOUSE_QUERY, (0x03 | 0x04)); joypad[0]->set_context_port_num(0); joypad[1]->set_context_port_num(1); - joypad[0]->set_context_data(joystick, SIG_JOYPORT_CH0 | SIG_JOYPORT_TYPE_2BUTTONS | SIG_JOYPORT_DATA, 0xffffffff); - joypad[1]->set_context_data(joystick, SIG_JOYPORT_CH1 | SIG_JOYPORT_TYPE_2BUTTONS | SIG_JOYPORT_DATA, 0xffffffff); - - joypad[0]->set_context_com(joystick, SIG_JOYPORT_CH0 | SIG_JOYPORT_TYPE_2BUTTONS | SIG_JOYPORT_COM, 0xffffffff); - joypad[1]->set_context_com(joystick, SIG_JOYPORT_CH1 | SIG_JOYPORT_TYPE_2BUTTONS | SIG_JOYPORT_COM, 0xffffffff); - mouse->set_context_com(joystick); + joypad[0]->set_context_joyport(joystick); + joypad[1]->set_context_joyport(joystick); + mouse->set_context_joyport(joystick); // cpu bus cpu->set_context_mem(memory); diff --git a/source/src/vm/fmtowns/joypad.cpp b/source/src/vm/fmtowns/joypad.cpp index 51b470330..e4e655668 100644 --- a/source/src/vm/fmtowns/joypad.cpp +++ b/source/src/vm/fmtowns/joypad.cpp @@ -26,7 +26,13 @@ void JOYPAD::reset() { query_joystick(); if(enabled) { - write_signals(&line_com, (sel_line) ? 0xffffffff : 0x00000000); + if(d_joyport != nullptr) { + int com_d = SIG_JOYPORT_TYPE_2BUTTONS; + com_d |= (SIG_JOYPORT_CH1 & ((pad_num & 1) << 24)); + d_joyport->write_signal(com_d | SIG_JOYPORT_COM, + (sel_line) ? 0xffffffff : 0x00000000, + 0xffffffff); + } } } @@ -70,7 +76,13 @@ void JOYPAD::query_joystick(void) } emu->release_joy_buffer(rawdata); if(__sigf) { - write_signals(&line_dat, stat); + if(d_joyport != nullptr) { + int com_d = SIG_JOYPORT_TYPE_2BUTTONS; + com_d |= (SIG_JOYPORT_CH1 & ((pad_num & 1) << 24)); + d_joyport->write_signal(com_d | SIG_JOYPORT_DATA, + stat, + 0xffffffff); + } } } @@ -83,7 +95,13 @@ void JOYPAD::write_signal(int id, uint32_t data, uint32_t mask) if(ndata == (1 << pad_num)) { if((enabled) && ((ndata & 0x0c) == 0)) { query_joystick(); - write_signals(&line_com, (sel_line) ? 0xffffffff : 0x00000000); + if(d_joyport != nullptr) { + int com_d = SIG_JOYPORT_TYPE_2BUTTONS; + com_d |= (SIG_JOYPORT_CH1 & ((pad_num & 1) << 24)); + d_joyport->write_signal(com_d | SIG_JOYPORT_COM, + (sel_line) ? 0xffffffff : 0x00000000, + 0xffffffff); + } } } break; @@ -115,13 +133,20 @@ void JOYPAD::write_signal(int id, uint32_t data, uint32_t mask) case SIG_JOYPAD_SELECT_BUS: // out_debug_log(_T("SIG_JOYPAD_SELECT_BUS, VALUE=%08X"), ndata); if(enabled) { - if(ndata != 0) { + if(data & 0x04 != 0) { sel_line = true; } else { sel_line = false; } query_joystick(); - write_signals(&line_com, (sel_line) ? 0xffffffff : 0x00000000); + if(d_joyport != nullptr) { + int com_d = SIG_JOYPORT_TYPE_2BUTTONS; + com_d |= (SIG_JOYPORT_CH1 & ((pad_num & 1) << 24)); + d_joyport->write_signal(com_d | SIG_JOYPORT_COM, + (sel_line) ? 0xffffffff : 0x00000000, + 0xffffffff); + } + } break; } diff --git a/source/src/vm/fmtowns/joypad.h b/source/src/vm/fmtowns/joypad.h index aa9bb473e..870bbb28a 100644 --- a/source/src/vm/fmtowns/joypad.h +++ b/source/src/vm/fmtowns/joypad.h @@ -19,8 +19,7 @@ namespace FMTOWNS { class JOYPAD : public DEVICE { protected: - outputs_t line_dat; - outputs_t line_com; + DEVICE* d_joyport; bool sel_line; bool type_6buttons; @@ -36,9 +35,8 @@ public: type_6buttons = false; enabled = true; pad_num = 0; - - initialize_output_signals(&line_dat); - initialize_output_signals(&line_com); + + d_joyport = NULL; rawdata = NULL; //set_device name moved to initialize(). } @@ -59,13 +57,9 @@ public: pad_num = num; } } - void set_context_data(DEVICE* dev, int id, uint32_t mask) - { - register_output_signal(&line_dat, dev, id, mask); - } - void set_context_com(DEVICE* dev, int id, uint32_t mask) + void set_context_joyport(DEVICE* dev) { - register_output_signal(&line_com, dev, id, mask); + d_joyport = dev; } }; diff --git a/source/src/vm/fmtowns/joystick.cpp b/source/src/vm/fmtowns/joystick.cpp index 841593564..31e5f8f04 100644 --- a/source/src/vm/fmtowns/joystick.cpp +++ b/source/src/vm/fmtowns/joystick.cpp @@ -9,6 +9,7 @@ */ #include "./joystick.h" +#include "./joypad.h" #include "./mouse.h" namespace FMTOWNS { @@ -19,12 +20,7 @@ void JOYSTICK::reset() update_config(); // Update MOUSE PORT. for(int i = 0; i < 2; i++) { - if(connected_type[i] == SIG_JOYPORT_TYPE_2BUTTONS) { - write_signals(&outputs_query, 1 << i); - } else if(connected_type[i] == SIG_JOYPORT_TYPE_MOUSE) { - write_signals(&outputs_query, (1 << i) | 0x04); - } - + send_signals(i, 0x00); } } @@ -35,13 +31,29 @@ void JOYSTICK::initialize() // Force reset pads. connected_type[0] = 0xffffffff; connected_type[1] = 0xffffffff; - stat_com[0] = stat_com[1] = false; + stat_com[0] = stat_com[1] = true; } void JOYSTICK::release() { } + +void JOYSTICK::send_signals(int ch, uint32_t data) +{ + uint32_t _d = (data >> (ch + 2)) & 0x04; // COM + _d |= ((data >> (ch << 1)) & 0x03); // TRIG + if(connected_type[ch] == SIG_JOYPORT_TYPE_2BUTTONS) { + if(d_joypad[ch] != nullptr) { + d_joypad[ch]->write_signal(SIG_JOYPAD_SELECT_BUS, _d, 0x07); + } + } else if(connected_type[ch] == SIG_JOYPORT_TYPE_MOUSE) { + if(d_mouse != nullptr) { + d_mouse->write_signal(SIG_MOUSE_DATA, _d, 0x07); + } + } + +} void JOYSTICK::write_io8(uint32_t address, uint32_t data) { @@ -49,7 +61,9 @@ void JOYSTICK::write_io8(uint32_t address, uint32_t data) if(address == 0x04d6) { if(mouse_mask != data) { mouse_mask = data; - write_signals(&outputs_mask, data); + for(int ch = 0; ch < 2; ch++) { + send_signals(ch, data); + } } } } @@ -66,29 +80,32 @@ uint32_t JOYSTICK::read_io8(uint32_t address) uint8_t trig = (mouse_mask >> (port_num << 1)) & 0x03; uint8_t mask2 = (mouse_mask >> (port_num + 4)) & 0x01; retval = 0x0f; + retval |= (mask2 << 6); + retval |= ((trig << 4) & 0x30); if(connected_type[port_num] == SIG_JOYPORT_TYPE_2BUTTONS) { - write_signals(&outputs_query, 1 << port_num); + if(d_joypad[port_num] != nullptr) { + d_joypad[port_num]->write_signal(SIG_JOYPAD_QUERY, (1 << port_num) | 0x00, 0x0f); + } } else if(connected_type[port_num] == SIG_JOYPORT_TYPE_MOUSE) { if(emulate_mouse[port_num]) { - write_signals(&outputs_query, (1 << port_num) | 0x04); + if(d_mouse != nullptr) { + d_mouse->write_signal(SIG_MOUSE_QUERY, (1 << port_num) | 0x04, 0x0f); + } } } else { // None Connected - if(mask2 != 0) { // COM - retval |= 0x40; - } - retval |= 0x30; return retval; } - if((mask2 != 0) && (stat_com[port_num])) { // COM - retval |= 0x40; + + if(!(stat_com[port_num])) { // COM + retval &= ~0x40; } // Trigger independents from direction keys. - if(((trig & 0x02) != 0) && ((joydata[port_num] & LINE_JOYPORT_B) == 0)) { - retval = retval | 0x20; + if(((joydata[port_num] & LINE_JOYPORT_B) != 0)) { + retval = retval & ~0x20; } - if(((trig & 0x01) != 0) && ((joydata[port_num] & LINE_JOYPORT_A) == 0)) { - retval = retval | 0x10; + if(((joydata[port_num] & LINE_JOYPORT_A) != 0)) { + retval = retval & ~0x10; } //if((mask & (0x10 << port_num)) == 0) { // if((mask2 & 0x01) == 0) { // COM @@ -177,18 +194,32 @@ void JOYSTICK::update_config(void) ntype[1] = SIG_JOYPORT_TYPE_MOUSE; } - write_signals(&outputs_mask, mouse_mask); for(int i = 0; i < 2; i++) { -// if(connected_type[i] != ntype[i]) { - write_signals(&outputs_enable[i], 1 << ntype[i]); -// } switch(ntype[i]) { + // Already disabled a mouse. case SIG_JOYPORT_TYPE_2BUTTONS: case SIG_JOYPORT_TYPE_6BUTTONS: connected_type[i] = SIG_JOYPORT_TYPE_2BUTTONS; + if(d_joypad[i] != nullptr) { + uint32_t _d = (mouse_mask >> (i + 2)) & 0x04; // COM + _d |= ((mouse_mask >> (i << 1)) & 0x03); // TRIG + d_joypad[i]->write_signal(SIG_JOYPAD_ENABLE, + (1 << SIG_JOYPORT_TYPE_2BUTTONS), + 0x0f); + d_joypad[i]->write_signal(SIG_JOYPAD_SELECT_BUS, _d, 0x07); + } + break; + case SIG_JOYPORT_TYPE_MOUSE: + // Already disabled a joypad. + connected_type[i] = ntype[i]; break; default: connected_type[i] = ntype[i]; + if(d_joypad[i] != nullptr) { + d_joypad[i]->write_signal(SIG_JOYPAD_ENABLE, + 0x00, + 0x0f); + } break; } } @@ -201,6 +232,11 @@ void JOYSTICK::set_emulate_mouse() case 1: emulate_mouse[0] = true; emulate_mouse[1] = false; + if(d_joypad[0] != nullptr) { + d_joypad[0]->write_signal(SIG_JOYPAD_ENABLE, + 0x00, + 0x0f); + } if(d_mouse != nullptr) { d_mouse->write_signal(SIG_MOUSE_ENABLE, 0xfffffffe, 0xffffffff); } @@ -208,6 +244,11 @@ void JOYSTICK::set_emulate_mouse() case 2: emulate_mouse[0] = false; emulate_mouse[1] = true; + if(d_joypad[1] != nullptr) { + d_joypad[1]->write_signal(SIG_JOYPAD_ENABLE, + 0x00, + 0x0f); + } if(d_mouse != nullptr) { d_mouse->write_signal(SIG_MOUSE_ENABLE, 0xffffffff, 0xffffffff); } diff --git a/source/src/vm/fmtowns/joystick.h b/source/src/vm/fmtowns/joystick.h index ac1670194..55fc08890 100644 --- a/source/src/vm/fmtowns/joystick.h +++ b/source/src/vm/fmtowns/joystick.h @@ -46,10 +46,7 @@ class JOYSTICK : public DEVICE { private: DEVICE* d_mouse; - - outputs_t outputs_mask; - outputs_t outputs_query; - outputs_t outputs_enable[2]; + DEVICE* d_joypad[2]; bool emulate_mouse[2]; uint32_t joydata[2]; @@ -59,16 +56,17 @@ private: uint32_t connected_type[2]; void set_emulate_mouse(); + void __FASTCALL send_signals(int ch, uint32_t data); + public: JOYSTICK(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu) { d_mouse = NULL; - initialize_output_signals(&outputs_query); - initialize_output_signals(&outputs_mask); - initialize_output_signals(&outputs_enable[0]); - initialize_output_signals(&outputs_enable[1]); + d_joypad[0] = NULL; + d_joypad[1] = NULL; connected_type[0] = SIG_JOYPORT_CH0 | SIG_JOYPORT_TYPE_NULL; connected_type[1] = SIG_JOYPORT_CH1 | SIG_JOYPORT_TYPE_NULL; + set_device_name(_T("FM-Towns PAD Port")); } ~JOYSTICK() {} @@ -84,31 +82,19 @@ public: uint32_t __FASTCALL read_signal(int id); void update_config(); - bool process_state(FILEIO* state_fio, bool loading); // unique functions - void set_context_enable0(DEVICE* dev, int id, uint32_t mask) - { - register_output_signal(&outputs_enable[0], dev, id, mask); - } - void set_context_enable1(DEVICE* dev, int id, uint32_t mask) + void set_context_joypad(int num, DEVICE* dev) { - register_output_signal(&outputs_enable[1], dev, id, mask); - } - void set_context_mask(DEVICE* dev, int id, uint32_t mask) - { - register_output_signal(&outputs_mask, dev, id, mask); - } - void set_context_query(DEVICE* dev, int id, uint32_t mask) - { - register_output_signal(&outputs_query, dev, id, mask); + if((d_joypad[num] == nullptr) && (dev != nullptr)) { + d_joypad[num] = dev; + } } - void set_context_mouse(DEVICE* dev, int id, uint32_t mask) + void set_context_mouse(DEVICE* dev) { if((d_mouse == nullptr) && (dev != nullptr)) { d_mouse = dev; - register_output_signal(&outputs_mask, dev, id, mask); } } diff --git a/source/src/vm/fmtowns/mouse.cpp b/source/src/vm/fmtowns/mouse.cpp index 36c0af3ea..fb2a8676e 100644 --- a/source/src/vm/fmtowns/mouse.cpp +++ b/source/src/vm/fmtowns/mouse.cpp @@ -20,7 +20,7 @@ namespace FMTOWNS { void MOUSE::initialize() { phase = 0; - strobe = false; + mouse_state = NULL; mouse_connected = false; port_num = 0; @@ -30,6 +30,10 @@ void MOUSE::initialize() event_timeout = -1; event_sampling = -1; axisdata = 0x0f; + strobe = false; + trig_a = false; + trig_b = false; + } void MOUSE::release() @@ -37,24 +41,14 @@ void MOUSE::release() } -void MOUSE::reset() -{ - // Values around mouse aren't initialized on reset. - update_config(); // Update MOUSE PORT. -} - -void MOUSE::update_strobe() +void MOUSE::update_strobe(uint8_t data, bool force) { bool _bak = strobe; uint8_t _mask = ((port_num & 1) != 0) ? 0x20 : 0x10; - strobe = ((mouse_mask & _mask) != 0) ? true : false; - int com_d = SIG_JOYPORT_TYPE_MOUSE; - if(port_num != 0) { - com_d |= SIG_JOYPORT_CH1; - } - com_d |= SIG_JOYPORT_COM; - if((_bak != strobe)/* && (flag)*/) { + strobe = ((data & 0x01) != 0) ? true : false; + com_d |= ((port_num & 1) << 24); + if((_bak != strobe) || (force)) { if(phase == 0) { if(strobe) { // Sample data from MOUSE to registers. @@ -73,7 +67,7 @@ void MOUSE::update_strobe() phase++; } if(d_joyport != nullptr) { - d_joyport->write_signal(com_d, !(strobe) ? 0x00000000 : 0xffffffff, 0xffffffff); + d_joyport->write_signal(com_d | SIG_JOYPORT_COM, (strobe) ? 0xffffffff : 0x00000000, 0xffffffff); } } } @@ -116,16 +110,8 @@ uint32_t MOUSE::read_signal(int ch) switch(ch) { case SIG_MOUSE_DATA: if(mouse_connected) { - uint8_t trig = (mouse_mask >> (port_num << 1)) & 0x03; - uint8_t rval = 0xf0; - + uint8_t rval = 0x70; rval |= (update_mouse() & 0x0f); - if((trig & 0x01) == 0) { - rval &= ~0x10; // Button LEFT - } - if((trig & 0x02) == 0) { - rval &= ~0x20; // Button RIGHT - } int32_t stat = emu->get_mouse_button(); if((stat & 0x01) == 0) { rval &= ~0x10; // Button LEFT @@ -133,9 +119,6 @@ uint32_t MOUSE::read_signal(int ch) if((stat & 0x02) == 0) { rval &= ~0x20; // Button RIGHT } - if(!(strobe)) { // COM - rval = rval & ~0x40; - } return rval; } break; @@ -151,19 +134,16 @@ uint32_t MOUSE::read_signal(int ch) uint32_t MOUSE::check_mouse_data(bool is_send_data) { + // Do Not reply COM (0x40) : 20210627 K.O axisdata = axisdata & 0x0f; int32_t stat = emu->get_mouse_button(); - uint8_t trig = (mouse_mask >> (port_num << 1)) & 0x03; - if(((stat & 0x01) == 0) && ((trig & 0x01) != 0)) { + + if(((stat & 0x01) == 0) && (trig_a)) { axisdata |= LINE_JOYPORT_A; // Button LEFT } - if(((stat & 0x02) == 0) && ((trig & 0x02) != 0)) { + if(((stat & 0x02) == 0) && (trig_b)) { axisdata |= LINE_JOYPORT_B; // Button RIGHT } - if(strobe) { // COM - axisdata |= 0x40; - } - if((d_joyport != nullptr) && (is_send_data)) { int _id = SIG_JOYPORT_DATA | ((port_num & 0x01) << 24) | SIG_JOYPORT_TYPE_MOUSE; @@ -186,23 +166,25 @@ void MOUSE::write_signal(int id, uint32_t data, uint32_t mask) dx = dy = 0; lx = ly = 0; sample_mouse_xy(); - strobe = false; + axisdata = 0x0f; clear_event(this, event_timeout); // sample_mouse_xy(); // Sample next value. if(d_joyport != nullptr) { int com_d = SIG_JOYPORT_TYPE_MOUSE; - if(port_num != 0) { - com_d |= SIG_JOYPORT_CH1; - } + com_d |= ((port_num & 1) << 24); // First, Set 0 to port d_joyport->write_signal(com_d | SIG_JOYPORT_COM, 0x00000000, 0xffffffff); - d_joyport->write_signal(com_d | SIG_JOYPORT_DATA, 0xffffffff, 0xffffffff); +// d_joyport->write_signal(com_d | SIG_JOYPORT_DATA, 0xffffffff, 0xffffffff); + d_joyport->write_signal(com_d | SIG_JOYPORT_DATA, 0x00000000, 0xffffffff); // Second, read port value. - mouse_mask = d_joyport->read_signal(com_d | SIG_JOYPORT_MASK); - - update_strobe(); + uint8_t mouse_mask = d_joyport->read_signal(com_d | SIG_JOYPORT_MASK); + uint8_t trig = (mouse_mask >> (port_num << 1)) & 0x03; + uint8_t mask2 = (mouse_mask >> (port_num + 4)) & 0x01; + trig_a = ((trig & 0x01) != 0) ? true : false; + trig_b = ((trig & 0x02) != 0) ? true : false; + update_strobe(mask2, true); axisdata = ~(update_mouse()); check_mouse_data(true); } @@ -211,8 +193,11 @@ void MOUSE::write_signal(int id, uint32_t data, uint32_t mask) dx = dy = 0; lx = ly = 0; strobe = false; - axisdata = 0x00; - mouse_mask = 0xff; + axisdata = 0x0f; + + trig_a = false; + trig_b = false; + clear_event(this, event_timeout); } } @@ -223,16 +208,19 @@ void MOUSE::write_signal(int id, uint32_t data, uint32_t mask) if(((data & mask) & 0x0c) == 0x04) { int num = (data & mask) & 1; if(num == port_num) { -// axisdata = ~(update_mouse()); + //axisdata = ~(update_mouse()); check_mouse_data(true); } } } break; - case SIG_MOUSE_STROBE: - mouse_mask = data; + case SIG_MOUSE_DATA: if(mouse_connected) { - update_strobe(); + uint8_t trig = data & 0x03; + uint8_t mask2 = (data & 0x04) >> 2; + trig_a = ((trig & 0x01) != 0) ? true : false; + trig_b = ((trig & 0x02) != 0) ? true : false; + update_strobe(mask2, false); axisdata = ~(update_mouse()); check_mouse_data(true); } @@ -279,7 +267,7 @@ void MOUSE::event_callback(int event_id, int err) } } -#define STATE_VERSION 2 +#define STATE_VERSION 3 bool MOUSE::process_state(FILEIO *state_fio, bool loading) { @@ -296,12 +284,15 @@ bool MOUSE::process_state(FILEIO *state_fio, bool loading) state_fio->StateValue(phase); state_fio->StateValue(strobe); + state_fio->StateValue(trig_a); + state_fio->StateValue(trig_b); + state_fio->StateValue(dx); state_fio->StateValue(dy); state_fio->StateValue(lx); state_fio->StateValue(ly); - state_fio->StateValue(mouse_mask); + state_fio->StateValue(event_timeout); state_fio->StateValue(event_sampling); diff --git a/source/src/vm/fmtowns/mouse.h b/source/src/vm/fmtowns/mouse.h index 8b3623ce7..4fe6a7745 100644 --- a/source/src/vm/fmtowns/mouse.h +++ b/source/src/vm/fmtowns/mouse.h @@ -13,7 +13,6 @@ #include "../device.h" #define SIG_MOUSE_ENABLE 1 -#define SIG_MOUSE_STROBE 2 #define SIG_MOUSE_NUM 3 #define SIG_MOUSE_DATA 4 #define SIG_MOUSE_QUERY 5 @@ -28,22 +27,24 @@ private: int phase; bool strobe; + bool trig_a; + bool trig_b; int dx, dy; int lx, ly; bool mouse_connected; int port_num; - uint8_t mouse_mask; + uint8_t axisdata; int event_timeout; int event_sampling; void sample_mouse_xy(); - void update_strobe(); + void __FASTCALL update_strobe(uint8_t data, bool force = false); uint32_t update_mouse(); - uint32_t check_mouse_data(bool is_send_data); + uint32_t __FASTCALL check_mouse_data(bool is_send_data); public: MOUSE(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu) @@ -56,7 +57,6 @@ public: void initialize(); void release(); - void reset(); void __FASTCALL event_callback(int event_id, int err); uint32_t __FASTCALL read_signal(int ch); @@ -64,7 +64,7 @@ public: bool process_state(FILEIO* state_fio, bool loading); - void set_context_com(DEVICE* dev) + void set_context_joyport(DEVICE* dev) { d_joyport = dev; } -- 2.11.0