OSDN Git Service

aa9bb473e219a9a01d1bce93c34ad9324b11ba9f
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / joypad.h
1 /*
2         FUJITSU FM Towns Emulator 'eFMTowns'
3
4         Author : Kyuma.Ohta <whatisthis.sowhat _at_ gmail.com>
5         Date   : 2020.09.26 -
6     History : 2020.09.26 Separate from joystick.cpp/joystick.h .
7         [ Towns PAD ]
8
9 */
10 #pragma once
11
12 #include "device.h"
13
14 #define SIG_JOYPAD_SELECT_BUS           1
15 #define SIG_JOYPAD_ENABLE                       2
16 #define SIG_JOYPAD_QUERY                        3
17
18 namespace FMTOWNS {
19
20 class JOYPAD : public DEVICE {
21 protected:
22         outputs_t line_dat;
23         outputs_t line_com;
24
25         bool sel_line;
26         bool type_6buttons;
27         int pad_num;
28         bool enabled;
29         
30         const uint32_t* rawdata;
31         virtual void query_joystick();
32 public:
33         JOYPAD(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
34         {
35                 sel_line = false;
36                 type_6buttons = false;
37                 enabled = true;
38                 pad_num = 0;
39
40                 initialize_output_signals(&line_dat);
41                 initialize_output_signals(&line_com);
42                 rawdata = NULL;
43                 //set_device name moved to initialize().
44         }
45         ~JOYPAD() {}
46
47         virtual void reset(void);
48         virtual void initialize(void);
49
50         virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
51
52         virtual void update_config();
53         virtual bool process_state(FILEIO* state_fio, bool loading);
54         
55         // Unique functions
56         void set_context_port_num(int num)
57         {
58                 if((num >= 0) && (num <= 1)) {
59                         pad_num = num;
60                 }
61         }
62         void set_context_data(DEVICE* dev, int id, uint32_t mask)
63         {
64                 register_output_signal(&line_dat, dev, id, mask);
65         }
66         void set_context_com(DEVICE* dev, int id, uint32_t mask)
67         {
68                 register_output_signal(&line_com, dev, id, mask);
69         }
70
71 };
72 }