OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[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 namespace MZ2800 {
13
14 void JOYSTICK::initialize()
15 {
16         mode = 0xf;
17         joy_stat = emu->get_joy_buffer();
18 }
19
20 void JOYSTICK::write_io8(uint32_t addr, uint32_t data)
21 {
22         mode = data;
23 }
24
25 uint32_t JOYSTICK::read_io8(uint32_t addr)
26 {
27         uint32_t val = 0x3f;
28         int num = (mode & 0x40) ? 1 : 0;
29         bool dir = true;
30         
31         // trigger mask
32         if(num) {
33                 if(!(mode & 0x04)) val &= ~0x20;
34                 if(!(mode & 0x08)) val &= ~0x10;
35                 dir = ((mode & 0x20) == 0);
36         } else {
37                 if(!(mode & 0x01)) val &= ~0x20;
38                 if(!(mode & 0x02)) val &= ~0x10;
39                 dir = ((mode & 0x10) == 0);
40         }
41         
42         // direction
43         if(dir) {
44                 if(joy_stat[num] & 0x08) val &= ~0x08;
45                 if(joy_stat[num] & 0x04) val &= ~0x04;
46                 if(joy_stat[num] & 0x02) val &= ~0x02;
47                 if(joy_stat[num] & 0x01) val &= ~0x01;
48         }
49         
50         // trigger
51         if(joy_stat[num] & 0x10) val &= ~0x20;
52         if(joy_stat[num] & 0x20) val &= ~0x10;
53         return val;
54 }
55
56 #define STATE_VERSION   2
57
58 bool JOYSTICK::process_state(FILEIO* state_fio, bool loading)
59 {
60         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
61                 return false;
62         }
63         if(!state_fio->StateCheckInt32(this_device_id)) {
64                 return false;
65         }
66         state_fio->StateUint32(mode);
67         return true;
68 }
69
70 }