OSDN Git Service

[INITIAL] Import 20141226 version of http://homepage3.nifty.com/takeda-toshiya/common...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2500 / mouse.cpp
diff --git a/source/src/vm/mz2500/mouse.cpp b/source/src/vm/mz2500/mouse.cpp
new file mode 100644 (file)
index 0000000..7bae711
--- /dev/null
@@ -0,0 +1,63 @@
+/*\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