OSDN Git Service

[VM][WIP] Use namespace to devices per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / hc40 / io.h
1 /*
2         EPSON HC-40 Emulator 'eHC-40'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.02.23 -
6
7         [ i/o ]
8 */
9
10 #ifndef _HC40_IO_H_
11 #define _HC40_IO_H_
12
13 #include "../vm.h"
14 #include "../../emu.h"
15 #include "../device.h"
16
17 #define SIG_IO_DREC     0
18 #define SIG_IO_ART      1
19
20 class FIFO;
21
22 namespace HC40 {
23         
24 class IO : public DEVICE
25 {
26 private:
27         DEVICE *d_cpu, *d_mem, *d_tf20, *d_beep, *d_drec;
28         uint8_t* ram;
29         
30         // registers
31         void update_intr();
32         uint32_t cur_clock;
33         uint8_t bcr, slbcr;
34         uint8_t isr, ier;
35         uint8_t bankr;
36         uint8_t ioctlr;
37         uint32_t icrc, icrb;
38         bool ear;
39         uint8_t vadr, yoff;
40         
41         // sub cpu
42         void send_to_7508(uint8_t val);
43         uint8_t rec_from_7508();
44         FIFO *cmd_buf, *rsp_buf;
45         // rtc
46         dll_cur_time_t cur_time;
47         int register_id_1sec;
48         bool onesec_intr, onesec_intr_enb;
49         bool alarm_intr, alarm_intr_enb;
50         uint8_t alarm[6];
51         // keyboard
52         void update_key(int code);
53         FIFO *key_buf;
54         bool kb_intr_enb;
55         bool kb_rep_enb, kb_caps;
56         uint8_t kb_rep_spd1, kb_rep_spd2;
57         // art
58         FIFO *art_buf;
59         uint8_t artsr, artdir;
60         bool txen, rxen, dsr;
61         int register_id_art;
62         // beep
63         bool beep;
64         // reset
65         bool res_z80, res_7508;
66         
67         // externam ram disk
68         uint8_t ext[0x40000];
69         uint32_t extar;
70         uint8_t extcr;
71         
72         // display
73         scrntype_t pd, pb;
74         
75 public:
76         IO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
77         {
78                 set_device_name(_T("I/O Bus"));
79         }
80         ~IO() {}
81         
82         // common functions
83         void initialize();
84         void release();
85         void reset();
86         void sysreset();
87         void write_signal(int id, uint32_t data, uint32_t mask);
88         void event_frame();
89         void event_callback(int event_id, int err);
90         void write_io8(uint32_t addr, uint32_t data);
91         uint32_t read_io8(uint32_t addr);
92         uint32_t get_intr_ack();
93         bool process_state(FILEIO* state_fio, bool loading);
94         
95         // unique functions
96         void set_context_cpu(DEVICE* device)
97         {
98                 d_cpu = device;
99         }
100         void set_context_mem(DEVICE* device, uint8_t* ptr)
101         {
102                 d_mem = device;
103                 ram = ptr;
104         }
105         void set_context_tf20(DEVICE* device)
106         {
107                 d_tf20 = device;
108         }
109         void set_context_beep(DEVICE* device)
110         {
111                 d_beep = device;
112         }
113         void set_context_drec(DEVICE* device)
114         {
115                 d_drec = device;
116         }
117         void draw_screen();
118         void key_down(int code);
119         void key_up(int code);
120 };
121
122 }
123 #endif