OSDN Git Service

c3de10aa7c76924d6f82e4340ffe8c97d3f527b4
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc2001 / io.h
1 /*
2         NEC PC-2001 Emulator 'ePC-2001'
3
4         Origin : PockEmul
5         Author : Takeda.Toshiya
6         Date   : 2016.03.18-
7
8         [ i/o ]
9 */
10
11 #ifndef _IO_H_
12 #define _IO_H_
13
14 #include "../vm.h"
15 #include "../../emu.h"
16 #include "../device.h"
17
18 #define SIG_IO_DREC_IN  0
19 #define SIG_IO_RTC_IN   1
20
21 class UPD16434;
22
23 class IO : public DEVICE
24 {
25 private:
26         UPD16434 *d_lcd[4];
27         DEVICE *d_drec;
28         DEVICE *d_rtc;
29         DEVICE *d_cpu;
30         
31         uint8_t port_a, port_b, port_s;
32         bool drec_in, rtc_in;
33         
34         const uint8_t *key_stat;
35         uint16_t key_strobe;
36         
37         uint8_t get_key();
38         bool key_hit(int code);
39         
40 public:
41         IO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
42         {
43                 set_device_name(_T("I/O Bus"));
44         }
45         ~IO() {}
46         
47         // common functions
48         void initialize();
49         void reset();
50         void write_io8(uint32_t addr, uint32_t data);
51         uint32_t read_io8(uint32_t addr);
52         void write_io16(uint32_t addr, uint32_t data);
53         void write_signal(int id, uint32_t data, uint32_t mask);
54         void event_callback(int event_id, int err);
55         void decl_state();
56         void save_state(FILEIO* state_fio);
57         bool load_state(FILEIO* state_fio);
58         
59         // unique functions
60         void set_context_lcd(int index, UPD16434* device)
61         {
62                 d_lcd[index] = device;
63         }
64         void set_context_drec(DEVICE* device)
65         {
66                 d_drec = device;
67         }
68         void set_context_rtc(DEVICE* device)
69         {
70                 d_rtc = device;
71         }
72         void set_context_cpu(DEVICE* device)
73         {
74                 d_cpu = device;
75         }
76 };
77
78 #endif