--- /dev/null
+/*\r
+ SHARP MZ-2500 Emulator 'EmuZ-2500'\r
+\r
+ Author : Takeda.Toshiya\r
+ Date : 2004.09.05 -\r
+\r
+ [ mouse ]\r
+*/\r
+\r
+#include "mouse.h"\r
+#include "../z80sio.h"\r
+#include "../../fileio.h"\r
+\r
+void MOUSE::initialize()\r
+{\r
+ stat = emu->mouse_buffer();\r
+ select = false;\r
+}\r
+\r
+void MOUSE::write_signal(int id, uint32 data, uint32 mask)\r
+{\r
+ if(id == SIG_MOUSE_SEL) {\r
+ select = ((data & mask) != 0);\r
+ } else if(id == SIG_MOUSE_DTR) {\r
+ if(!select || (data & mask)) {\r
+ return;\r
+ }\r
+ // Z80SIO Ch.B DTR H->L\r
+ uint32 d0 = (stat[0] >= 128 ? 0x10 : stat[0] < -128 ? 0x20 : 0) |\r
+ (stat[1] >= 128 ? 0x40 : stat[1] < -128 ? 0x80 : 0) |\r
+ ((stat[2] & 1) ? 1 : 0) | ((stat[2] & 2) ? 2 : 0);\r
+ uint32 d1 = (uint8)stat[0];\r
+ uint32 d2 = (uint8)stat[1];\r
+ \r
+ d_sio->write_signal(SIG_Z80SIO_CLEAR_CH1, 1, 1);\r
+ d_sio->write_signal(SIG_Z80SIO_RECV_CH1, d0, 0xff);\r
+ d_sio->write_signal(SIG_Z80SIO_RECV_CH1, d1, 0xff);\r
+ d_sio->write_signal(SIG_Z80SIO_RECV_CH1, d2, 0xff);\r
+ }\r
+}\r
+\r
+#define STATE_VERSION 1\r
+\r
+void MOUSE::save_state(FILEIO* state_fio)\r
+{\r
+ state_fio->FputUint32(STATE_VERSION);\r
+ state_fio->FputInt32(this_device_id);\r
+ \r
+ state_fio->FputBool(select);\r
+}\r
+\r
+bool MOUSE::load_state(FILEIO* state_fio)\r
+{\r
+ if(state_fio->FgetUint32() != STATE_VERSION) {\r
+ return false;\r
+ }\r
+ if(state_fio->FgetInt32() != this_device_id) {\r
+ return false;\r
+ }\r
+ select = state_fio->FgetBool();\r
+ return true;\r
+}\r
+\r