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 / mz2800 / joystick.cpp
1 /*\r
2         SHARP MZ-2800 Emulator 'EmuZ-2800'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2007.08.14 -\r
6 \r
7         [ joystick ]\r
8 */\r
9 \r
10 #include "joystick.h"\r
11 \r
12 void JOYSTICK::initialize()\r
13 {\r
14         mode = 0xf;\r
15         full_auto = 0;\r
16         joy_stat = emu->joy_buffer();\r
17         register_frame_event(this);\r
18 }\r
19 \r
20 void JOYSTICK::write_io8(uint32 addr, uint32 data)\r
21 {\r
22         mode = data;\r
23 }\r
24 \r
25 uint32 JOYSTICK::read_io8(uint32 addr)\r
26 {\r
27         uint32 val = 0x3f;\r
28         int num = (mode & 0x40) ? 1 : 0;\r
29         bool dir = true;\r
30         \r
31         // trigger mask\r
32         if(num) {\r
33                 if(!(mode & 0x04)) val &= ~0x20;\r
34                 if(!(mode & 0x08)) val &= ~0x10;\r
35                 dir = ((mode & 0x20) == 0);\r
36         } else {\r
37                 if(!(mode & 0x01)) val &= ~0x20;\r
38                 if(!(mode & 0x02)) val &= ~0x10;\r
39                 dir = ((mode & 0x10) == 0);\r
40         }\r
41         \r
42         // direction\r
43         if(dir) {\r
44                 if(joy_stat[num] & 0x08) val &= ~0x08;\r
45                 if(joy_stat[num] & 0x04) val &= ~0x04;\r
46                 if(joy_stat[num] & 0x02) val &= ~0x02;\r
47                 if(joy_stat[num] & 0x01) val &= ~0x01;\r
48         }\r
49         \r
50         // trigger\r
51         if(joy_stat[num] & 0x10) val &= ~0x20;\r
52         if(joy_stat[num] & 0x20) val &= ~0x10;\r
53         if(full_auto & 2) {\r
54                 if(joy_stat[num] & 0x40) val &= ~0x20;\r
55                 if(joy_stat[num] & 0x80) val &= ~0x10;\r
56         }\r
57         return val;\r
58 }\r
59 \r
60 void JOYSTICK::event_frame()\r
61 {\r
62         // synch to vsync\r
63         full_auto = (full_auto + 1) & 3;\r
64 }\r
65 \r