OSDN Git Service

[VM][I286] Save cpustate without StateBuffer().
[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 class HC40_IO : public DEVICE
23 {
24 private:
25         DEVICE *d_cpu, *d_mem, *d_tf20, *d_beep, *d_drec;
26         uint8_t* ram;
27         
28         // registers
29         void update_intr();
30         uint32_t cur_clock;
31         uint8_t bcr, slbcr;
32         uint8_t isr, ier;
33         uint8_t bankr;
34         uint8_t ioctlr;
35         uint32_t icrc, icrb;
36         bool ear;
37         uint8_t vadr, yoff;
38         
39         // sub cpu
40         void send_to_7508(uint8_t val);
41         uint8_t rec_from_7508();
42         FIFO *cmd_buf, *rsp_buf;
43         // rtc
44         dll_cur_time_t cur_time;
45         int register_id_1sec;
46         bool onesec_intr, onesec_intr_enb;
47         bool alarm_intr, alarm_intr_enb;
48         uint8_t alarm[6];
49         // keyboard
50         void update_key(int code);
51         FIFO *key_buf;
52         bool kb_intr_enb;
53         bool kb_rep_enb, kb_caps;
54         uint8_t kb_rep_spd1, kb_rep_spd2;
55         // art
56         FIFO *art_buf;
57         uint8_t artsr, artdir;
58         bool txen, rxen, dsr;
59         int register_id_art;
60         // beep
61         bool beep;
62         // reset
63         bool res_z80, res_7508;
64         
65         // externam ram disk
66         uint8_t ext[0x40000];
67         uint32_t extar;
68         uint8_t extcr;
69         
70         // display
71         scrntype_t pd, pb;
72         
73 public:
74         HC40_IO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
75         {
76                 set_device_name(_T("I/O Bus"));
77         }
78         ~HC40_IO() {}
79         
80         // common functions
81         void initialize();
82         void release();
83         void reset();
84         void sysreset();
85         void write_signal(int id, uint32_t data, uint32_t mask);
86         void event_frame();
87         void event_callback(int event_id, int err);
88         void write_io8(uint32_t addr, uint32_t data);
89         uint32_t read_io8(uint32_t addr);
90         uint32_t get_intr_ack();
91         bool process_state(FILEIO* state_fio, bool loading);
92         
93         // unique functions
94         void set_context_cpu(DEVICE* device)
95         {
96                 d_cpu = device;
97         }
98         void set_context_mem(DEVICE* device, uint8_t* ptr)
99         {
100                 d_mem = device;
101                 ram = ptr;
102         }
103         void set_context_tf20(DEVICE* device)
104         {
105                 d_tf20 = device;
106         }
107         void set_context_beep(DEVICE* device)
108         {
109                 d_beep = device;
110         }
111         void set_context_drec(DEVICE* device)
112         {
113                 d_drec = device;
114         }
115         void draw_screen();
116         void key_down(int code);
117         void key_up(int code);
118 };
119
120 #endif