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_t *vram_b, *vram_r, *vram_g, *vram_i;
30 uint8_t *kanji1, *kanji2;
31 uint8_t *pcg0, *pcg1, *pcg2, *pcg3;
34 void set_hsync(int h);
35 uint8_t textreg_num, textreg[16];
36 uint8_t rmwreg_num[2], rmwreg[2][32];
37 uint8_t cgreg_num, cgreg[32];
38 uint8_t scrn_size, cg_mask;
39 bool font_size, column_size;
41 uint16_t GDEVS, GDEVE;
44 bool blank, hblank, vblank, blink;
46 uint8_t palette_reg[16];
50 // priority and palette
51 uint8_t priority16[16][9];
52 scrntype_t palette16[16+8], palette4096[16];
53 uint8_t palette4096r[16], palette4096g[16], palette4096b[16];
54 scrntype_t palette16txt[9], palette4096txt[9];
55 scrntype_t palette16pri[16][9], palette4096pri[16][9];
56 scrntype_t palette65536[0x10000]; // BRGI
62 void draw_80column_screen();
63 void draw_40column_screen();
64 void draw_80column_font(uint16_t src, int dest, int y);
65 void draw_40column_font(uint16_t src, int dest, int y);
66 uint8_t text[640*480*2];
70 uint16_t cg[640*400*2];
71 uint32_t map_addr[400][80];
72 uint8_t map_hdsc[400][80];
75 uint8_t cg_matrix0[256][256][8];
76 uint8_t cg_matrix1[256][256][8];
77 uint8_t cg_matrix2[256][256][8];
78 uint8_t cg_matrix3[256][256][8];
79 uint8_t text_matrix[256][8][8];
80 uint8_t text_matrixw[256][8][16];
82 bool map_init, trans_init;
85 CRTC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
87 set_device_name(_T("CRTC"));
93 void write_data8(uint32_t addr, uint32_t data);
94 uint32_t read_data8(uint32_t addr);
95 void write_io8(uint32_t addr, uint32_t data);
96 void write_signal(int id, uint32_t data, uint32_t mask);
97 void event_callback(int event_id, int err);
98 void event_vline(int v, int clock);
99 bool process_state(FILEIO* state_fio, bool loading);
102 void set_context_pic(DEVICE* device)
106 void set_context_pio(DEVICE* device)
110 void set_vram_ptr(uint8_t* ptr)
112 vram_b = ptr + 0x00000;
113 vram_r = ptr + 0x20000;
114 vram_g = ptr + 0x40000;
115 vram_i = ptr + 0x60000;
117 void set_tvram_ptr(uint8_t* ptr)
121 void set_kanji_ptr(uint8_t* ptr)
123 kanji1 = ptr + 0x00000;
124 kanji2 = ptr + 0x40000;
126 void set_pcg_ptr(uint8_t* ptr)