OSDN Git Service

10d17d7db11f8f9a6e817e1f53a9778c6ba9e739
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2800 / joystick.cpp
1 /*
2         SHARP MZ-2800 Emulator 'EmuZ-2800'
3
4         Author : Takeda.Toshiya
5         Date   : 2007.08.14 -
6
7         [ joystick ]
8 */
9
10 #include "joystick.h"
11
12 void JOYSTICK::initialize()
13 {
14         mode = 0xf;
15         joy_stat = emu->get_joy_buffer();
16 }
17
18 void JOYSTICK::write_io8(uint32_t addr, uint32_t data)
19 {
20         mode = data;
21 }
22
23 uint32_t JOYSTICK::read_io8(uint32_t addr)
24 {
25         uint32_t val = 0x3f;
26         int num = (mode & 0x40) ? 1 : 0;
27         bool dir = true;
28         
29         // trigger mask
30         if(num) {
31                 if(!(mode & 0x04)) val &= ~0x20;
32                 if(!(mode & 0x08)) val &= ~0x10;
33                 dir = ((mode & 0x20) == 0);
34         } else {
35                 if(!(mode & 0x01)) val &= ~0x20;
36                 if(!(mode & 0x02)) val &= ~0x10;
37                 dir = ((mode & 0x10) == 0);
38         }
39         
40         // direction
41         if(dir) {
42                 if(joy_stat[num] & 0x08) val &= ~0x08;
43                 if(joy_stat[num] & 0x04) val &= ~0x04;
44                 if(joy_stat[num] & 0x02) val &= ~0x02;
45                 if(joy_stat[num] & 0x01) val &= ~0x01;
46         }
47         
48         // trigger
49         if(joy_stat[num] & 0x10) val &= ~0x20;
50         if(joy_stat[num] & 0x20) val &= ~0x10;
51         return val;
52 }
53
54 #define STATE_VERSION   2
55
56 bool JOYSTICK::process_state(FILEIO* state_fio, bool loading)
57 {
58         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
59                 return false;
60         }
61         if(!state_fio->StateCheckInt32(this_device_id)) {
62                 return false;
63         }
64         state_fio->StateUint32(mode);
65         return true;
66 }