2 SHARP MZ-2500 Emulator 'EmuZ-2500'
\r
4 Author : Takeda.Toshiya
\r
14 #include "../../emu.h"
\r
15 #include "../device.h"
\r
17 #define SIG_CRTC_COLUMN_SIZE 0
\r
18 #define SIG_CRTC_PALLETE 1
\r
19 #define SIG_CRTC_MASK 2
\r
21 #define EVENT_HSYNC 0
\r
22 #define EVENT_BLINK 256
\r
24 #define SCRN_640x400 1
\r
25 #define SCRN_640x200 2
\r
26 #define SCRN_320x200 3
\r
28 class CRTC : public DEVICE
\r
31 DEVICE *d_mem, *d_int, *d_pio;
\r
34 bool scan_line, scan_tmp;
\r
35 bool monitor_200line;
\r
36 bool monitor_digital, monitor_tmp;
\r
39 uint8 *vram_b, *vram_r, *vram_g, *vram_i;
\r
40 uint8 *tvram1, *attrib, *tvram2;
\r
42 uint8 *kanji1, *kanji2;
\r
43 uint8 *pcg0, *pcg1, *pcg2, *pcg3;
\r
46 void set_hsync(int h);
\r
47 uint8 textreg_num, textreg[16];
\r
48 uint8 cgreg_num, cgreg[32];
\r
49 uint8 scrn_size, cg_mask, cg_mask256;
\r
50 bool cg_mask256_init;
\r
51 bool font_size, column_size;
\r
53 uint16 GDEVS, GDEVE;
\r
56 bool hblank, vblank, blink;
\r
58 uint8 palette_reg[16];
\r
62 // priority and palette
\r
63 uint8 priority16[16][9];
\r
64 scrntype palette16[16+8], palette4096[16];
\r
65 uint8 palette4096r[16], palette4096g[16], palette4096b[16];
\r
66 scrntype palette16txt[9], palette4096txt[9];
\r
67 scrntype palette16pri[16][9], palette4096pri[16][9];
\r
71 uint16 priority256[256][16+64];
\r
72 scrntype palette256[256+16+64];
\r
73 scrntype palette256txt[16+64];
\r
74 scrntype palette256pri[256][16+64];
\r
80 void draw_80column_screen();
\r
81 void draw_40column_screen();
\r
82 void draw_80column_font(uint16 src, int dest, int y);
\r
83 void draw_40column_font(uint16 src, int dest, int y);
\r
84 uint8 text[640*480*2];
\r
88 void draw_320x200x16screen(uint8 pl);
\r
89 void draw_320x200x256screen(uint8 pl);
\r
90 void draw_640x200x16screen(uint8 pl);
\r
91 void draw_640x400x4screen();
\r
92 void draw_640x400x16screen();
\r
93 void create_addr_map(int xmax, int ymax);
\r
94 uint8 cg[640*400*2];
\r
95 uint16 map_addr[400][80];
\r
96 uint8 map_hdsc[400][80];
\r
98 // speed optimization
\r
99 uint8 cg_matrix0[256][256][8];
\r
100 uint8 cg_matrix1[256][256][8];
\r
101 uint8 cg_matrix2[256][256][8];
\r
102 uint8 cg_matrix3[256][256][8];
\r
103 uint8 text_matrix[256][8][8];
\r
104 uint8 text_matrixw[256][8][16];
\r
107 bool map_init, trans_init;
\r
110 CRTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
\r
113 // common functions
\r
115 void write_data8(uint32 addr, uint32 data);
\r
116 uint32 read_data8(uint32 addr);
\r
117 void write_io8(uint32 addr, uint32 data);
\r
118 uint32 read_io8(uint32 addr);
\r
119 void write_signal(int id, uint32 data, uint32 mask);
\r
120 void event_callback(int event_id, int err);
\r
121 void event_vline(int v, int clock);
\r
122 void update_config();
\r
123 void save_state(FILEIO* state_fio);
\r
124 bool load_state(FILEIO* state_fio);
\r
127 void set_context_mem(DEVICE* device)
\r
131 void set_context_int(DEVICE* device)
\r
135 void set_context_pio(DEVICE* device)
\r
139 void set_vram_ptr(uint8* ptr)
\r
141 vram_b = ptr + 0x00000;
\r
142 vram_r = ptr + 0x08000;
\r
143 vram_g = ptr + 0x10000;
\r
144 vram_i = ptr + 0x18000;
\r
146 void set_tvram_ptr(uint8* ptr)
\r
148 tvram1 = ptr + 0x0000;
\r
149 attrib = ptr + 0x0800;
\r
150 tvram2 = ptr + 0x1000;
\r
152 void set_kanji_ptr(uint8* ptr)
\r
154 kanji1 = ptr + 0x00000;
\r
155 kanji2 = ptr + 0x20000;
\r
157 void set_pcg_ptr(uint8* ptr)
\r
159 pcg0 = ptr + 0x0000;
\r
160 pcg1 = ptr + 0x0800;
\r
161 pcg2 = ptr + 0x1000;
\r
162 pcg3 = ptr + 0x1800;
\r
164 void draw_screen();
\r