OSDN Git Service

[General][Qt] Merge upstream, datarecorder with sound.
[csp-qt/common_source_project-fm7.git] / source / src / vm / hc80 / io.h
1 /*
2         EPSON HC-80 Emulator 'eHC-80'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.03.14 -
6
7         [ i/o ]
8 */
9
10 #ifndef _IO_H_
11 #define _IO_H_
12
13 #include "../vm.h"
14 #include "../../emu.h"
15 #include "../device.h"
16
17 #define SIG_IO_RXRDY    0
18 #define SIG_IO_BARCODE  1
19 #define SIG_IO_TF20     2
20
21 class FIFO;
22
23 class IO : public DEVICE
24 {
25 private:
26         DEVICE *d_cpu, *d_mem, *d_sio, *d_beep, *d_tf20;
27         
28         // registers
29         void update_intr();
30         uint32 cur_clock;
31         uint8 bcr, slbcr;
32         uint8 isr, ier;
33         uint8 ioctlr;
34         uint32 icrc, icrb;
35         bool ear;
36         uint8 vadr, yoff;
37         
38         // 7508
39         void send_to_7508(uint8 val);
40         uint8 rec_from_7508();
41         FIFO *cmd7508_buf, *rsp7508_buf;
42         // rtc
43         cur_time_t cur_time;
44         int register_id;
45         bool onesec_intr, onesec_intr_enb;
46         bool alarm_intr, alarm_intr_enb;
47         uint8 alarm[6];
48         // keyboard
49         void update_key(int code);
50         FIFO *key_buf;
51         bool kb_intr_enb;
52         bool kb_rep_enb, kb_caps;
53         uint8 kb_rep_spd1, kb_rep_spd2;
54         // beep
55         bool beep;
56         // reset
57         bool res_z80, res_7508;
58         
59         // 6303
60         void process_6303();
61         uint8 get_point(int x, int y);
62         void draw_point(int x, int y, uint16 dot);
63         void draw_line(int sx, int sy, int ex, int ey, uint16 ope);
64         uint8 cmd6303, psr;
65         FIFO *cmd6303_buf, *rsp6303_buf;
66         uint8 ram[0x10000];
67         uint8 basic[0x8000];
68         uint8 util[0x8000];
69         uint16 cs_addr;         // character screen starting address
70         uint16 gs_addr;         // graphics screen starting address
71         uint8 lcd_on;           // lcd on/off (0=off, others=on)
72         uint8 scr_mode;         // screen mode (0=graph, others=char)
73         uint16 scr_ptr;         // screen pointer (8000h-97ffh)
74         uint8 num_lines;        // number of lines
75         uint8 curs_mode;        // cursor mode
76         uint8 curs_x;           // cursor position
77         uint8 curs_y;
78         uint8 wnd_ptr_x;        // window pointer
79         uint8 wnd_ptr_y;
80         uint8 flash_block;      // block flashing
81         uint8 cs_blocks;        // for character screen
82         uint8 cs_block[40][3];
83         uint8 gs_blocks;        // for graphics screen
84         uint8 gs_block[144][3];
85         uint8 font[256*8];
86         uint8 udgc[256][255+2];
87         uint8 mov[64][80];
88         uint8 lcd[SCREEN_HEIGHT][SCREEN_WIDTH];
89         scrntype pd, pb;
90         int blink;
91         // tf20
92         FIFO *tf20_buf;
93         
94         // ramdisk
95         int device_type;
96         
97         // externam ram disk
98         uint8 ext[0x40000];
99         uint32 extar;
100         uint8 extcr;
101         
102         // intelligent ram disk
103         void iramdisk_write_data(uint8 val);
104         void iramdisk_write_cmd(uint8 val);
105         uint8 iramdisk_read_data();
106         uint8 iramdisk_read_stat();
107         uint8 iramdisk_sectors[15][64][128];
108         uint8 iramdisk_cmd;
109         int iramdisk_count,iramdisk_dest;
110         uint8 iramdisk_buf[130];
111         uint8 *iramdisk_ptr;
112         
113 public:
114         IO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
115         ~IO() {}
116         
117         // common functions
118         void initialize();
119         void release();
120         void reset();
121         void sysreset();
122         void write_signal(int id, uint32 data, uint32 mask);
123         void event_frame();
124         void event_callback(int event_id, int err);
125         void write_io8(uint32 addr, uint32 data);
126         uint32 read_io8(uint32 addr);
127         uint32 intr_ack();
128         void save_state(FILEIO* state_fio);
129         bool load_state(FILEIO* state_fio);
130         
131         // unique functions
132         void set_context_cpu(DEVICE* device)
133         {
134                 d_cpu = device;
135         }
136         void set_context_mem(DEVICE* device)
137         {
138                 d_mem = device;
139         }
140         void set_context_sio(DEVICE* device)
141         {
142                 d_sio = device;
143         }
144         void set_context_beep(DEVICE* device)
145         {
146                 d_beep = device;
147         }
148         void set_context_tf20(DEVICE* device)
149         {
150                 d_tf20 = device;
151         }
152         void draw_screen();
153         void key_down(int code);
154         void key_up(int code);
155 };
156
157 #endif