OSDN Git Service

[VM][MZ3500] Apply new state framework.
[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 #include "../../statesub.h"
57
58 void JOYSTICK::decl_state()
59 {
60         enter_decl_state(STATE_VERSION);
61
62         DECL_STATE_ENTRY_UINT32(mode);
63         
64         leave_decl_state();
65 }
66
67 void JOYSTICK::save_state(FILEIO* state_fio)
68 {
69         if(state_entry != NULL) {
70                 state_entry->save_state(state_fio);
71         }
72 //      state_fio->FputUint32(STATE_VERSION);
73 //      state_fio->FputInt32(this_device_id);
74         
75 //      state_fio->FputUint32(mode);
76 }
77
78 bool JOYSTICK::load_state(FILEIO* state_fio)
79 {
80         bool mb = false;
81         if(state_entry != NULL) {
82                 mb = state_entry->load_state(state_fio);
83         }
84         if(!mb) {
85                 return false;
86         }
87 //      if(state_fio->FgetUint32() != STATE_VERSION) {
88 //              return false;
89 //      }
90 //      if(state_fio->FgetInt32() != this_device_id) {
91 //              return false;
92 //      }
93 //      mode = state_fio->FgetUint32();
94         return true;
95 }
96