OSDN Git Service

[General] Tracking to upstream, rev 2015-01-14.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pv1000 / joystick.cpp
1 /*\r
2         CASIO PV-1000 Emulator 'ePV-1000'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2006.11.16 -\r
6 \r
7         [ joystick ]\r
8 */\r
9 \r
10 #include "joystick.h"\r
11 #include "../../fileio.h"\r
12 \r
13 void JOYSTICK::initialize()\r
14 {\r
15         key = emu->key_buffer();\r
16         joy = emu->joy_buffer();\r
17         \r
18         // register event to interrupt\r
19         register_frame_event(this);\r
20 }\r
21 \r
22 void JOYSTICK::reset()\r
23 {\r
24         status = 0;\r
25 }\r
26 \r
27 void JOYSTICK::write_io8(uint32 addr, uint32 data)\r
28 {\r
29         switch(addr & 0xff) {\r
30         case 0xfc:\r
31 //              status = data;\r
32                 break;\r
33         case 0xfd:\r
34                 column = data;\r
35                 status |= 2;\r
36                 break;\r
37         }\r
38 //      emu->out_debug_log(_T("OUT\t%2x, %2x\n"), addr & 0xff, data);\r
39 }\r
40 \r
41 uint32 JOYSTICK::read_io8(uint32 addr)\r
42 {\r
43         uint32 val = 0xff;\r
44         \r
45         switch(addr & 0xff) {\r
46         case 0xfc:\r
47                 val = status;\r
48                 status &= ~1;\r
49                 break;\r
50         case 0xfd:\r
51                 val = 0;\r
52                 if(column & 1) {\r
53                         if(joy[0] & 0x40) val |= 1;     // #1 select\r
54                         if(joy[0] & 0x80) val |= 2;     // #1 start\r
55                         if(joy[1] & 0x40) val |= 4;     // #2 select\r
56                         if(joy[1] & 0x80) val |= 8;     // #2 start\r
57                 }\r
58                 if(column & 2) {\r
59                         if(joy[0] & 0x02) val |= 1;     // #1 down\r
60                         if(joy[0] & 0x08) val |= 2;     // #1 right\r
61                         if(joy[1] & 0x02) val |= 4;     // #2 down\r
62                         if(joy[1] & 0x08) val |= 8;     // #2 right\r
63                 }\r
64                 if(column & 4) {\r
65                         if(joy[0] & 0x04) val |= 1;     // #1 left\r
66                         if(joy[0] & 0x01) val |= 2;     // #1 up\r
67                         if(joy[1] & 0x04) val |= 4;     // #2 left\r
68                         if(joy[1] & 0x01) val |= 8;     // #2 up\r
69                 }\r
70                 if(column & 8) {\r
71                         if(joy[0] & 0x10) val |= 1;     // #1 trig1\r
72                         if(joy[0] & 0x20) val |= 2;     // #1 trig2\r
73                         if(joy[1] & 0x10) val |= 4;     // #2 trig1\r
74                         if(joy[1] & 0x20) val |= 8;     // #2 trig2\r
75                 }\r
76 //              status &= ~2;\r
77                 break;\r
78         }\r
79 //      emu->out_debug_log(_T("IN\t%2x, %2x\n"), addr & 0xff, val);\r
80         return val;\r
81 }\r
82 \r
83 void JOYSTICK::event_frame()\r
84 {\r
85         status |= 1;\r
86 }\r
87 \r
88 #define STATE_VERSION   1\r
89 \r
90 void JOYSTICK::save_state(FILEIO* state_fio)\r
91 {\r
92         state_fio->FputUint32(STATE_VERSION);\r
93         state_fio->FputInt32(this_device_id);\r
94         \r
95         state_fio->FputUint8(column);\r
96         state_fio->FputUint8(status);\r
97 }\r
98 \r
99 bool JOYSTICK::load_state(FILEIO* state_fio)\r
100 {\r
101         if(state_fio->FgetUint32() != STATE_VERSION) {\r
102                 return false;\r
103         }\r
104         if(state_fio->FgetInt32() != this_device_id) {\r
105                 return false;\r
106         }\r
107         column = state_fio->FgetUint8();\r
108         status = state_fio->FgetUint8();\r
109         return true;\r
110 }\r
111 \r