2 SHARP MZ-2800 Emulator 'EmuZ-2800'
4 Author : Takeda.Toshiya
14 #include "../../emu.h"
15 #include "../device.h"
17 #define SIG_CRTC_COLUMN_SIZE 0
18 #define SIG_CRTC_PALLETE 1
19 #define SIG_CRTC_MASK 2
21 class CRTC : public DEVICE
24 DEVICE *d_pic, *d_pio;
27 uint8 *vram_b, *vram_r, *vram_g, *vram_i;
30 uint8 *kanji1, *kanji2;
31 uint8 *pcg0, *pcg1, *pcg2, *pcg3;
34 void set_hsync(int h);
35 uint8 textreg_num, textreg[16];
36 uint8 rmwreg_num[2], rmwreg[2][32];
37 uint8 cgreg_num, cgreg[32];
38 uint8 scrn_size, cg_mask;
39 bool font_size, column_size;
44 bool blank, hblank, vblank, blink;
46 uint8 palette_reg[16];
50 // priority and palette
51 uint8 priority16[16][9];
52 scrntype palette16[16+8], palette4096[16];
53 uint8 palette4096r[16], palette4096g[16], palette4096b[16];
54 scrntype palette16txt[9], palette4096txt[9];
55 scrntype palette16pri[16][9], palette4096pri[16][9];
56 scrntype palette65536[0x10000]; // BRGI
62 void draw_80column_screen();
63 void draw_40column_screen();
64 void draw_80column_font(uint16 src, int dest, int y);
65 void draw_40column_font(uint16 src, int dest, int y);
66 uint8 text[640*480*2];
71 uint32 map_addr[400][80];
72 uint8 map_hdsc[400][80];
75 uint8 cg_matrix0[256][256][8];
76 uint8 cg_matrix1[256][256][8];
77 uint8 cg_matrix2[256][256][8];
78 uint8 cg_matrix3[256][256][8];
79 uint8 text_matrix[256][8][8];
80 uint8 text_matrixw[256][8][16];
82 bool map_init, trans_init;
85 CRTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
90 void write_data8(uint32 addr, uint32 data);
91 uint32 read_data8(uint32 addr);
92 void write_io8(uint32 addr, uint32 data);
93 void write_signal(int id, uint32 data, uint32 mask);
94 void event_callback(int event_id, int err);
95 void event_vline(int v, int clock);
96 void save_state(FILEIO* state_fio);
97 bool load_state(FILEIO* state_fio);
100 void set_context_pic(DEVICE* device)
104 void set_context_pio(DEVICE* device)
108 void set_vram_ptr(uint8* ptr)
110 vram_b = ptr + 0x00000;
111 vram_r = ptr + 0x20000;
112 vram_g = ptr + 0x40000;
113 vram_i = ptr + 0x60000;
115 void set_tvram_ptr(uint8* ptr)
119 void set_kanji_ptr(uint8* ptr)
121 kanji1 = ptr + 0x00000;
122 kanji2 = ptr + 0x40000;
124 void set_pcg_ptr(uint8* ptr)