2 SHARP MZ-2800 Emulator 'EmuZ-2800'
\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 class CRTC : public DEVICE
\r
24 DEVICE *d_pic, *d_pio;
\r
27 uint8 *vram_b, *vram_r, *vram_g, *vram_i;
\r
30 uint8 *kanji1, *kanji2;
\r
31 uint8 *pcg0, *pcg1, *pcg2, *pcg3;
\r
34 void set_hsync(int h);
\r
35 uint8 textreg_num, textreg[16];
\r
36 uint8 rmwreg_num[2], rmwreg[2][32];
\r
37 uint8 cgreg_num, cgreg[32];
\r
38 uint8 scrn_size, cg_mask;
\r
39 bool font_size, column_size;
\r
41 uint16 GDEVS, GDEVE;
\r
44 bool blank, hblank, vblank, blink;
\r
46 uint8 palette_reg[16];
\r
50 // priority and palette
\r
51 uint8 priority16[16][9];
\r
52 scrntype palette16[16+8], palette4096[16];
\r
53 uint8 palette4096r[16], palette4096g[16], palette4096b[16];
\r
54 scrntype palette16txt[9], palette4096txt[9];
\r
55 scrntype palette16pri[16][9], palette4096pri[16][9];
\r
56 scrntype palette65536[0x10000]; // BRGI
\r
62 void draw_80column_screen();
\r
63 void draw_40column_screen();
\r
64 void draw_80column_font(uint16 src, int dest, int y);
\r
65 void draw_40column_font(uint16 src, int dest, int y);
\r
66 uint8 text[640*480*2];
\r
70 uint16 cg[640*400*2];
\r
71 uint32 map_addr[400][80];
\r
72 uint8 map_hdsc[400][80];
\r
75 uint8 cg_matrix0[256][256][8];
\r
76 uint8 cg_matrix1[256][256][8];
\r
77 uint8 cg_matrix2[256][256][8];
\r
78 uint8 cg_matrix3[256][256][8];
\r
79 uint8 text_matrix[256][8][8];
\r
80 uint8 text_matrixw[256][8][16];
\r
82 bool map_init, trans_init;
\r
85 CRTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
\r
90 void write_data8(uint32 addr, uint32 data);
\r
91 uint32 read_data8(uint32 addr);
\r
92 void write_io8(uint32 addr, uint32 data);
\r
93 void write_signal(int id, uint32 data, uint32 mask);
\r
94 void event_callback(int event_id, int err);
\r
95 void event_vline(int v, int clock);
\r
98 void set_context_pic(DEVICE* device)
\r
102 void set_context_pio(DEVICE* device)
\r
106 void set_vram_ptr(uint8* ptr)
\r
108 vram_b = ptr + 0x00000;
\r
109 vram_r = ptr + 0x20000;
\r
110 vram_g = ptr + 0x40000;
\r
111 vram_i = ptr + 0x60000;
\r
113 void set_tvram_ptr(uint8* ptr)
\r
117 void set_kanji_ptr(uint8* ptr)
\r
119 kanji1 = ptr + 0x00000;
\r
120 kanji2 = ptr + 0x40000;
\r
122 void set_pcg_ptr(uint8* ptr)
\r
124 pcg0 = ptr + 0x0000;
\r
125 pcg1 = ptr + 0x1000;
\r
126 pcg2 = ptr + 0x2000;
\r
127 pcg3 = ptr + 0x3000;
\r
129 void draw_screen();
\r