OSDN Git Service

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