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
23 class CRTC : public DEVICE
26 DEVICE *d_pic, *d_pio;
29 uint8_t *vram_b, *vram_r, *vram_g, *vram_i;
32 uint8_t *kanji1, *kanji2;
33 uint8_t *pcg0, *pcg1, *pcg2, *pcg3;
36 void set_hsync(int h);
37 uint8_t textreg_num, textreg[16];
38 uint8_t rmwreg_num[2], rmwreg[2][32];
39 uint8_t cgreg_num, cgreg[32];
40 uint8_t scrn_size, cg_mask;
41 bool font_size, column_size;
43 uint16_t GDEVS, GDEVE;
46 bool blank, hblank, vblank, blink;
48 uint8_t palette_reg[16];
52 // priority and palette
53 uint8_t priority16[16][9];
54 scrntype_t palette16[16+8], palette4096[16];
55 uint8_t palette4096r[16], palette4096g[16], palette4096b[16];
56 scrntype_t palette16txt[9], palette4096txt[9];
57 scrntype_t palette16pri[16][9], palette4096pri[16][9];
58 scrntype_t palette65536[0x10000]; // BRGI
64 void draw_80column_screen();
65 void draw_40column_screen();
66 void draw_80column_font(uint16_t src, int dest, int y);
67 void draw_40column_font(uint16_t src, int dest, int y);
68 uint8_t text[640*480*2];
72 uint16_t cg[640*400*2];
73 uint32_t map_addr[400][80];
74 uint8_t map_hdsc[400][80];
77 uint8_t cg_matrix0[256][256][8];
78 uint8_t cg_matrix1[256][256][8];
79 uint8_t cg_matrix2[256][256][8];
80 uint8_t cg_matrix3[256][256][8];
81 uint8_t text_matrix[256][8][8];
82 uint8_t text_matrixw[256][8][16];
84 bool map_init, trans_init;
87 CRTC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
89 set_device_name(_T("CRTC"));
95 void write_data8(uint32_t addr, uint32_t data);
96 uint32_t read_data8(uint32_t addr);
97 void write_io8(uint32_t addr, uint32_t data);
98 void write_signal(int id, uint32_t data, uint32_t mask);
99 void event_callback(int event_id, int err);
100 void event_vline(int v, int clock);
101 bool process_state(FILEIO* state_fio, bool loading);
104 void set_context_pic(DEVICE* device)
108 void set_context_pio(DEVICE* device)
112 void set_vram_ptr(uint8_t* ptr)
114 vram_b = ptr + 0x00000;
115 vram_r = ptr + 0x20000;
116 vram_g = ptr + 0x40000;
117 vram_i = ptr + 0x60000;
119 void set_tvram_ptr(uint8_t* ptr)
123 void set_kanji_ptr(uint8_t* ptr)
125 kanji1 = ptr + 0x00000;
126 kanji2 = ptr + 0x40000;
128 void set_pcg_ptr(uint8_t* ptr)