OSDN Git Service

[General] Tracking to upstream, rev 2015-01-14.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2500 / crtc.h
1 /*\r
2         SHARP MZ-2500 Emulator 'EmuZ-2500'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2006.12.03 -\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 #define EVENT_HSYNC     0\r
22 #define EVENT_BLINK     256\r
23 \r
24 #define SCRN_640x400    1\r
25 #define SCRN_640x200    2\r
26 #define SCRN_320x200    3\r
27 \r
28 class CRTC : public DEVICE\r
29 {\r
30 private:\r
31         DEVICE *d_mem, *d_int, *d_pio;\r
32         \r
33         // config\r
34         bool scan_line, scan_tmp;\r
35         bool monitor_200line;\r
36         bool monitor_digital, monitor_tmp;\r
37         \r
38         // vram\r
39         uint8 *vram_b, *vram_r, *vram_g, *vram_i;\r
40         uint8 *tvram1, *attrib, *tvram2;\r
41         // kanji rom, pcg\r
42         uint8 *kanji1, *kanji2;\r
43         uint8 *pcg0, *pcg1, *pcg2, *pcg3;\r
44         \r
45         // crtc\r
46         void set_hsync(int h);\r
47         uint8 textreg_num, textreg[16];\r
48         uint8 cgreg_num, cgreg[32];\r
49         uint8 scrn_size, cg_mask, cg_mask256;\r
50         bool cg_mask256_init;\r
51         bool font_size, column_size;\r
52         uint8 latch[4];\r
53         uint16 GDEVS, GDEVE;\r
54         uint8 GDEHS, GDEHE;\r
55         int GDEHSC, GDEHEC;\r
56         bool hblank, vblank, blink;\r
57         uint8 clear_flag;\r
58         uint8 palette_reg[16];\r
59         bool pal_select;\r
60         bool screen_mask;\r
61         \r
62         // priority and palette\r
63         uint8 priority16[16][9];\r
64         scrntype palette16[16+8], palette4096[16];\r
65         uint8 palette4096r[16], palette4096g[16], palette4096b[16];\r
66         scrntype palette16txt[9], palette4096txt[9];\r
67         scrntype palette16pri[16][9], palette4096pri[16][9];\r
68         uint8 prev16;\r
69         bool update16;\r
70         \r
71         uint16 priority256[256][16+64];\r
72         scrntype palette256[256+16+64];\r
73         scrntype palette256txt[16+64];\r
74         scrntype palette256pri[256][16+64];\r
75         scrntype prev256;\r
76         bool update256;\r
77         \r
78         // draw text\r
79         void draw_text();\r
80         void draw_80column_screen();\r
81         void draw_40column_screen();\r
82         void draw_80column_font(uint16 src, int dest, int y);\r
83         void draw_40column_font(uint16 src, int dest, int y);\r
84         uint8 text[640*480*2];\r
85         \r
86         // draw cg\r
87         void draw_cg();\r
88         void draw_320x200x16screen(uint8 pl);\r
89         void draw_320x200x256screen(uint8 pl);\r
90         void draw_640x200x16screen(uint8 pl);\r
91         void draw_640x400x4screen();\r
92         void draw_640x400x16screen();\r
93         void create_addr_map(int xmax, int ymax);\r
94         uint8 cg[640*400*2];\r
95         uint16 map_addr[400][80];\r
96         uint8 map_hdsc[400][80];\r
97         \r
98         // speed optimization\r
99         uint8 cg_matrix0[256][256][8];\r
100         uint8 cg_matrix1[256][256][8];\r
101         uint8 cg_matrix2[256][256][8];\r
102         uint8 cg_matrix3[256][256][8];\r
103         uint8 text_matrix[256][8][8];\r
104         uint8 text_matrixw[256][8][16];\r
105         uint8 trans_color;\r
106         \r
107         bool map_init, trans_init;\r
108         \r
109 public:\r
110         CRTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
111         ~CRTC() {}\r
112         \r
113         // common functions\r
114         void initialize();\r
115         void write_data8(uint32 addr, uint32 data);\r
116         uint32 read_data8(uint32 addr);\r
117         void write_io8(uint32 addr, uint32 data);\r
118         uint32 read_io8(uint32 addr);\r
119         void write_signal(int id, uint32 data, uint32 mask);\r
120         void event_callback(int event_id, int err);\r
121         void event_vline(int v, int clock);\r
122         void update_config();\r
123         void save_state(FILEIO* state_fio);\r
124         bool load_state(FILEIO* state_fio);\r
125         \r
126         // unique function\r
127         void set_context_mem(DEVICE* device)\r
128         {\r
129                 d_mem = device;\r
130         }\r
131         void set_context_int(DEVICE* device)\r
132         {\r
133                 d_int = device;\r
134         }\r
135         void set_context_pio(DEVICE* device)\r
136         {\r
137                 d_pio = device;\r
138         }\r
139         void set_vram_ptr(uint8* ptr)\r
140         {\r
141                 vram_b = ptr + 0x00000;\r
142                 vram_r = ptr + 0x08000;\r
143                 vram_g = ptr + 0x10000;\r
144                 vram_i = ptr + 0x18000;\r
145         }\r
146         void set_tvram_ptr(uint8* ptr)\r
147         {\r
148                 tvram1 = ptr + 0x0000;\r
149                 attrib = ptr + 0x0800;\r
150                 tvram2 = ptr + 0x1000;\r
151         }\r
152         void set_kanji_ptr(uint8* ptr)\r
153         {\r
154                 kanji1 = ptr + 0x00000;\r
155                 kanji2 = ptr + 0x20000;\r
156         }\r
157         void set_pcg_ptr(uint8* ptr)\r
158         {\r
159                 pcg0 = ptr + 0x0000;\r
160                 pcg1 = ptr + 0x0800;\r
161                 pcg2 = ptr + 0x1000;\r
162                 pcg3 = ptr + 0x1800;\r
163         }\r
164         void draw_screen();\r
165 };\r
166 \r
167 #endif\r
168 \r