2 SHARP X1 Emulator 'eX1'
3 SHARP X1twin Emulator 'eX1twin'
4 SHARP X1turbo Emulator 'eX1turbo'
5 SHARP X1turboZ Emulator 'eX1turboZ'
7 Author : Takeda.Toshiya
17 #include "../../emu.h"
18 #include "../device.h"
20 #define SIG_DISPLAY_VBLANK 0
21 #define SIG_DISPLAY_COLUMN40 1
22 #define SIG_DISPLAY_DETECT_VBLANK 2
23 #define SIG_DISPLAY_DISP 3
27 class DISPLAY : public DEVICE
30 #ifdef _X1TURBO_FEATURE
35 uint8_t vram_t[0x800];
36 uint8_t vram_a[0x800];
37 #ifdef _X1TURBO_FEATURE
38 uint8_t vram_k[0x800];
41 uint8_t pcg_b[256][8];
42 uint8_t pcg_r[256][8];
43 uint8_t pcg_g[256][8];
44 #ifdef _X1TURBO_FEATURE
45 uint8_t gaiji_b[128][16];
46 uint8_t gaiji_r[128][16];
47 uint8_t gaiji_g[128][16];
50 uint8_t kanji[0x4bc00];
52 uint8_t cur_code, cur_line;
54 int kaddr, kofs, kflag;
58 uint8_t priority, pri[8][8]; // pri[cg][txt]
62 #ifdef _X1TURBO_FEATURE
83 #ifdef _X1TURBO_FEATURE
84 uint8_t text[400][640];
86 uint8_t pri_line[400][8][8];
89 uint8_t dr_text[400][640];
90 uint8_t dr_cg[400][640];
91 uint8_t dr_pri_line[400][8][8];
93 uint8_t text[200][640+8];
95 uint8_t pri_line[200][8][8];
97 uint8_t dr_text[200][640+8];
98 uint8_t dr_cg[200][640];
99 uint8_t dr_pri_line[200][8][8];
102 uint16_t zcg[2][400][640];
104 scrntype_t zpalette_pc[8+8+4096]; // 0-7:text, 8-15:cg, 16-:4096cg
106 uint16_t dr_zcg[2][400][640];
107 bool dr_aen_line[400];
108 scrntype_t dr_zpalette_pc[8+8+4096]; // 0-7:text, 8-15:cg, 16-:4096cg
110 scrntype_t palette_pc[8+8]; // 0-7:text, 8-15:cg
111 scrntype_t dr_palette_pc[8+8]; // 0-7:text, 8-15:cg
112 bool prev_vert_double;
115 int ch_height; // HD46505
116 int hz_total, hz_disp, vt_disp;
118 uint32_t vblank_clock;
124 uint8_t get_cur_font(uint32_t addr);
125 void get_cur_pcg(uint32_t addr);
126 void get_cur_code_line();
128 void draw_line(int v);
129 void draw_text(int y);
130 void draw_cg(int line, int plane);
133 int get_zpal_num(uint32_t addr, uint32_t data);
134 scrntype_t get_zpriority(uint8_t text, uint16_t cg0, uint16_t cg1);
137 // kanji rom (from X1EMU by KM)
138 void write_kanji(uint32_t addr, uint32_t data);
139 uint32_t read_kanji(uint32_t addr);
141 uint16_t jis2adr_x1(uint16_t jis);
142 uint32_t adr2knj_x1(uint16_t adr);
143 #ifdef _X1TURBO_FEATURE
144 uint32_t adr2knj_x1t(uint16_t adr);
146 uint32_t jis2knj(uint16_t jis);
147 uint16_t jis2sjis(uint16_t jis);
150 DISPLAY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
152 set_device_name(_T("Display"));
159 void write_io8(uint32_t addr, uint32_t data);
160 uint32_t read_io8(uint32_t addr);
161 void write_signal(int id, uint32_t data, uint32_t mask);
163 void event_vline(int v, int clock);
164 #ifdef _X1TURBO_FEATURE
165 void event_callback(int event_id, int err);
167 void save_state(FILEIO* state_fio);
168 bool load_state(FILEIO* state_fio);
171 #ifdef _X1TURBO_FEATURE
172 void set_context_cpu(DEVICE* device)
177 void set_context_crtc(HD46505* device)
181 void set_vram_ptr(uint8_t* ptr)
185 void set_regs_ptr(uint8_t* ptr)