OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[csp-qt/common_source_project-fm7.git] / source / src / vm / pv1000 / joystick.cpp
index 60d1474..63b3b58 100644 (file)
-/*\r
-       CASIO PV-1000 Emulator 'ePV-1000'\r
-\r
-       Author : Takeda.Toshiya\r
-       Date   : 2006.11.16 -\r
-\r
-       [ joystick ]\r
-*/\r
-\r
-#include "joystick.h"\r
-\r
-void JOYSTICK::initialize()\r
-{\r
-       key = emu->key_buffer();\r
-       joy = emu->joy_buffer();\r
-       \r
-       // register event to interrupt\r
-       register_frame_event(this);\r
-}\r
-\r
-void JOYSTICK::reset()\r
-{\r
-       status = 0;\r
-}\r
-\r
-void JOYSTICK::write_io8(uint32 addr, uint32 data)\r
-{\r
-       switch(addr & 0xff) {\r
-       case 0xfc:\r
-//             status = data;\r
-               break;\r
-       case 0xfd:\r
-               column = data;\r
-               status |= 2;\r
-               break;\r
-       }\r
-//     emu->out_debug_log(_T("OUT\t%2x, %2x\n"), addr & 0xff, data);\r
-}\r
-\r
-uint32 JOYSTICK::read_io8(uint32 addr)\r
-{\r
-       uint32 val = 0xff;\r
-       \r
-       switch(addr & 0xff) {\r
-       case 0xfc:\r
-               val = status;\r
-               status &= ~1;\r
-               break;\r
-       case 0xfd:\r
-               val = 0;\r
-               if(column & 1) {\r
-                       if(joy[0] & 0x40) val |= 1;     // #1 select\r
-                       if(joy[0] & 0x80) val |= 2;     // #1 start\r
-                       if(joy[1] & 0x40) val |= 4;     // #2 select\r
-                       if(joy[1] & 0x80) val |= 8;     // #2 start\r
-               }\r
-               if(column & 2) {\r
-                       if(joy[0] & 0x02) val |= 1;     // #1 down\r
-                       if(joy[0] & 0x08) val |= 2;     // #1 right\r
-                       if(joy[1] & 0x02) val |= 4;     // #2 down\r
-                       if(joy[1] & 0x08) val |= 8;     // #2 right\r
-               }\r
-               if(column & 4) {\r
-                       if(joy[0] & 0x04) val |= 1;     // #1 left\r
-                       if(joy[0] & 0x01) val |= 2;     // #1 up\r
-                       if(joy[1] & 0x04) val |= 4;     // #2 left\r
-                       if(joy[1] & 0x01) val |= 8;     // #2 up\r
-               }\r
-               if(column & 8) {\r
-                       if(joy[0] & 0x10) val |= 1;     // #1 trig1\r
-                       if(joy[0] & 0x20) val |= 2;     // #1 trig2\r
-                       if(joy[1] & 0x10) val |= 4;     // #2 trig1\r
-                       if(joy[1] & 0x20) val |= 8;     // #2 trig2\r
-               }\r
-//             status &= ~2;\r
-               break;\r
-       }\r
-//     emu->out_debug_log(_T("IN\t%2x, %2x\n"), addr & 0xff, val);\r
-       return val;\r
-}\r
-\r
-void JOYSTICK::event_frame()\r
-{\r
-       status |= 1;\r
-}\r
+/*
+       CASIO PV-1000 Emulator 'ePV-1000'
+
+       Author : Takeda.Toshiya
+       Date   : 2006.11.16 -
+
+       [ joystick ]
+*/
+
+#include "joystick.h"
+#include "../../fileio.h"
+
+void JOYSTICK::initialize()
+{
+       key = emu->key_buffer();
+       joy = emu->joy_buffer();
+       
+       // register event to interrupt
+       register_frame_event(this);
+}
+
+void JOYSTICK::reset()
+{
+       status = 0;
+}
+
+void JOYSTICK::write_io8(uint32 addr, uint32 data)
+{
+       switch(addr & 0xff) {
+       case 0xfc:
+//             status = data;
+               break;
+       case 0xfd:
+               column = data;
+               status |= 2;
+               break;
+       }
+//     emu->out_debug_log(_T("OUT\t%2x, %2x\n"), addr & 0xff, data);
+}
+
+uint32 JOYSTICK::read_io8(uint32 addr)
+{
+       uint32 val = 0xff;
+       
+       switch(addr & 0xff) {
+       case 0xfc:
+               val = status;
+               status &= ~1;
+               break;
+       case 0xfd:
+               val = 0;
+               if(column & 1) {
+                       if(joy[0] & 0x40) val |= 1;     // #1 select
+                       if(joy[0] & 0x80) val |= 2;     // #1 start
+                       if(joy[1] & 0x40) val |= 4;     // #2 select
+                       if(joy[1] & 0x80) val |= 8;     // #2 start
+               }
+               if(column & 2) {
+                       if(joy[0] & 0x02) val |= 1;     // #1 down
+                       if(joy[0] & 0x08) val |= 2;     // #1 right
+                       if(joy[1] & 0x02) val |= 4;     // #2 down
+                       if(joy[1] & 0x08) val |= 8;     // #2 right
+               }
+               if(column & 4) {
+                       if(joy[0] & 0x04) val |= 1;     // #1 left
+                       if(joy[0] & 0x01) val |= 2;     // #1 up
+                       if(joy[1] & 0x04) val |= 4;     // #2 left
+                       if(joy[1] & 0x01) val |= 8;     // #2 up
+               }
+               if(column & 8) {
+                       if(joy[0] & 0x10) val |= 1;     // #1 trig1
+                       if(joy[0] & 0x20) val |= 2;     // #1 trig2
+                       if(joy[1] & 0x10) val |= 4;     // #2 trig1
+                       if(joy[1] & 0x20) val |= 8;     // #2 trig2
+               }
+//             status &= ~2;
+               break;
+       }
+//     emu->out_debug_log(_T("IN\t%2x, %2x\n"), addr & 0xff, val);
+       return val;
+}
+
+void JOYSTICK::event_frame()
+{
+       status |= 1;
+}
+
+#define STATE_VERSION  1
+
+void JOYSTICK::save_state(FILEIO* state_fio)
+{
+       state_fio->FputUint32(STATE_VERSION);
+       state_fio->FputInt32(this_device_id);
+       
+       state_fio->FputUint8(column);
+       state_fio->FputUint8(status);
+}
+
+bool JOYSTICK::load_state(FILEIO* state_fio)
+{
+       if(state_fio->FgetUint32() != STATE_VERSION) {
+               return false;
+       }
+       if(state_fio->FgetInt32() != this_device_id) {
+               return false;
+       }
+       column = state_fio->FgetUint8();
+       status = state_fio->FgetUint8();
+       return true;
+}
+