OSDN Git Service

[INITIAL] Import 20141226 version of http://homepage3.nifty.com/takeda-toshiya/common...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2800 / crtc.h
1 /*\r
2         SHARP MZ-2800 Emulator 'EmuZ-2800'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2007.08.13 -\r
6 \r
7         [ crtc ]\r
8 */\r
9 \r
10 #ifndef _CRTC_H_\r
11 #define _CRTC_H_\r
12 \r
13 #include "../vm.h"\r
14 #include "../../emu.h"\r
15 #include "../device.h"\r
16 \r
17 #define SIG_CRTC_COLUMN_SIZE    0\r
18 #define SIG_CRTC_PALLETE        1\r
19 #define SIG_CRTC_MASK           2\r
20 \r
21 class CRTC : public DEVICE\r
22 {\r
23 private:\r
24         DEVICE *d_pic, *d_pio;\r
25         \r
26         // vram\r
27         uint8 *vram_b, *vram_r, *vram_g, *vram_i;\r
28         uint8 *tvram;\r
29         // kanji rom, pcg\r
30         uint8 *kanji1, *kanji2;\r
31         uint8 *pcg0, *pcg1, *pcg2, *pcg3;\r
32         \r
33         // crtc\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
40         uint8 latch[2][4];\r
41         uint16 GDEVS, GDEVE;\r
42         uint8 GDEHS, GDEHE;\r
43         int GDEHSC, GDEHEC;\r
44         bool blank, hblank, vblank, blink;\r
45         uint8 clear_flag;\r
46         uint8 palette_reg[16];\r
47         bool pal_select;\r
48         bool screen_mask;\r
49         \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
57         uint8 prev16;\r
58         bool update16;\r
59         \r
60         // draw text\r
61         void draw_text();\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
67         \r
68         // draw cg\r
69         void draw_cg();\r
70         uint16 cg[640*400*2];\r
71         uint32 map_addr[400][80];\r
72         uint8 map_hdsc[400][80];\r
73         \r
74         // speed optimize\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
81         uint8 trans_color;\r
82         bool map_init, trans_init;\r
83         \r
84 public:\r
85         CRTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
86         ~CRTC() {}\r
87         \r
88         // common functions\r
89         void initialize();\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
96         \r
97         // unique function\r
98         void set_context_pic(DEVICE* device)\r
99         {\r
100                 d_pic = device;\r
101         }\r
102         void set_context_pio(DEVICE* device)\r
103         {\r
104                 d_pio = device;\r
105         }\r
106         void set_vram_ptr(uint8* ptr)\r
107         {\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
112         }\r
113         void set_tvram_ptr(uint8* ptr)\r
114         {\r
115                 tvram = ptr;\r
116         }\r
117         void set_kanji_ptr(uint8* ptr)\r
118         {\r
119                 kanji1 = ptr + 0x00000;\r
120                 kanji2 = ptr + 0x40000;\r
121         }\r
122         void set_pcg_ptr(uint8* ptr)\r
123         {\r
124                 pcg0 = ptr + 0x0000;\r
125                 pcg1 = ptr + 0x1000;\r
126                 pcg2 = ptr + 0x2000;\r
127                 pcg3 = ptr + 0x3000;\r
128         }\r
129         void draw_screen();\r
130 };\r
131 \r
132 #endif\r
133 \r