OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2800 / crtc.h
1 /*
2         SHARP MZ-2800 Emulator 'EmuZ-2800'
3
4         Author : Takeda.Toshiya
5         Date   : 2007.08.13 -
6
7         [ crtc ]
8 */
9
10 #ifndef _CRTC_H_
11 #define _CRTC_H_
12
13 #include "../vm.h"
14 #include "../../emu.h"
15 #include "../device.h"
16
17 #define SIG_CRTC_COLUMN_SIZE    0
18 #define SIG_CRTC_PALLETE        1
19 #define SIG_CRTC_MASK           2
20
21 namespace MZ2800 {
22
23 class CRTC : public DEVICE
24 {
25 private:
26         DEVICE *d_pic, *d_pio;
27         
28         // vram
29         uint8_t *vram_b, *vram_r, *vram_g, *vram_i;
30         uint8_t *tvram;
31         // kanji rom, pcg
32         uint8_t *kanji1, *kanji2;
33         uint8_t *pcg0, *pcg1, *pcg2, *pcg3;
34         
35         // crtc
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;
42         uint8_t latch[2][4];
43         uint16_t GDEVS, GDEVE;
44         uint8_t GDEHS, GDEHE;
45         int GDEHSC, GDEHEC;
46         bool blank, hblank, vblank, blink;
47         uint8_t clear_flag;
48         uint8_t palette_reg[16];
49         bool pal_select;
50         bool screen_mask;
51         
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
59         uint8_t prev16;
60         bool update16;
61         
62         // draw text
63         void draw_text();
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];
69         
70         // draw cg
71         void draw_cg();
72         uint16_t cg[640*400*2];
73         uint32_t map_addr[400][80];
74         uint8_t map_hdsc[400][80];
75         
76         // speed optimize
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];
83         uint8_t trans_color;
84         bool map_init, trans_init;
85         
86 public:
87         CRTC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
88         {
89                 set_device_name(_T("CRTC"));
90         }
91         ~CRTC() {}
92         
93         // common functions
94         void initialize();
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);
102         
103         // unique functions
104         void set_context_pic(DEVICE* device)
105         {
106                 d_pic = device;
107         }
108         void set_context_pio(DEVICE* device)
109         {
110                 d_pio = device;
111         }
112         void set_vram_ptr(uint8_t* ptr)
113         {
114                 vram_b = ptr + 0x00000;
115                 vram_r = ptr + 0x20000;
116                 vram_g = ptr + 0x40000;
117                 vram_i = ptr + 0x60000;
118         }
119         void set_tvram_ptr(uint8_t* ptr)
120         {
121                 tvram = ptr;
122         }
123         void set_kanji_ptr(uint8_t* ptr)
124         {
125                 kanji1 = ptr + 0x00000;
126                 kanji2 = ptr + 0x40000;
127         }
128         void set_pcg_ptr(uint8_t* ptr)
129         {
130                 pcg0 = ptr + 0x0000;
131                 pcg1 = ptr + 0x1000;
132                 pcg2 = ptr + 0x2000;
133                 pcg3 = ptr + 0x3000;
134         }
135         void draw_screen();
136 };
137
138 }
139 #endif
140