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 / mz700 / memory.h
1 /*\r
2         SHARP MZ-700 Emulator 'EmuZ-700'\r
3         SHARP MZ-800 Emulator 'EmuZ-800'\r
4         SHARP MZ-1500 Emulator 'EmuZ-1500'\r
5 \r
6         Author : Takeda.Toshiya\r
7         Date   : 2008.06.05 -\r
8 \r
9         [ memory ]\r
10 */\r
11 \r
12 #ifndef _MEMORY_H_\r
13 #define _MEMORY_H_\r
14 \r
15 #include "../vm.h"\r
16 #include "../../emu.h"\r
17 #include "../device.h"\r
18 \r
19 #if defined(_MZ800)\r
20 class DISPLAY;\r
21 #endif\r
22 \r
23 class MEMORY : public DEVICE\r
24 {\r
25 private:\r
26         DEVICE *d_cpu, *d_pit, *d_pio;\r
27 #if defined(_MZ800)\r
28         DEVICE *d_pio_int;\r
29 #endif\r
30         \r
31         // memory\r
32         uint8* rbank[32];\r
33         uint8* wbank[32];\r
34         uint8 wdmy[0x800];\r
35         uint8 rdmy[0x800];\r
36         \r
37         uint8 ipl[0x1000];      // IPL 4KB\r
38 #if defined(_MZ800)\r
39         uint8 ext[0x2000];      // MZ-800 IPL 8KB\r
40 #elif defined(_MZ1500)\r
41         uint8 ext[0x1800];      // MZ-1500 EXT 6KB\r
42 #endif\r
43         uint8 font[0x1000];     // CGROM 4KB\r
44 #if defined(_MZ1500)\r
45         uint8 pcg[0x6000];      // MZ-1500 PCG 8KB * 3\r
46 #endif\r
47         uint8 ram[0x10000];     // Main RAM 64KB\r
48 #if defined(_MZ800)\r
49         uint8 vram[0x8000];     // MZ-800 VRAM 32KB\r
50 #else\r
51         uint8 vram[0x1000];     // MZ-700/1500 VRAM 4KB\r
52 #endif\r
53         uint8 mem_bank;\r
54 #if defined(_MZ800)\r
55         uint8 wf, rf;\r
56         uint8 dmd;\r
57         uint32 vram_addr_top;\r
58         bool is_mz800;\r
59 #elif defined(_MZ1500)\r
60         uint8 pcg_bank;\r
61 #endif\r
62         \r
63         void update_map_low();\r
64         void update_map_middle();\r
65         void update_map_high();\r
66 #if defined(_MZ800)\r
67         int vram_page_mask(uint8 f);\r
68         int vram_addr(int addr);\r
69 #endif\r
70         \r
71         // crtc\r
72 #if defined(_MZ800)\r
73         uint16 sof;\r
74         uint8 sw, ssa, sea;\r
75         uint8 palette_sw, palette[4], palette16[16];\r
76 #elif defined(_MZ1500)\r
77         uint8 priority, palette[8];\r
78 #endif\r
79         bool blink, tempo;\r
80         bool hblank, hsync;\r
81         bool vblank, vsync;\r
82 #if defined(_MZ700) || defined(_MZ1500)\r
83         bool hblank_vram;\r
84 #if defined(_MZ1500)\r
85         bool hblank_pcg;\r
86 #endif\r
87 #endif\r
88         void set_vblank(bool val);\r
89         void set_hblank(bool val);\r
90         \r
91         // renderer\r
92 #if defined(_MZ800)\r
93         uint8 screen[200][640];\r
94         scrntype palette_mz800_pc[16];\r
95 #else\r
96         uint8 screen[200][320];\r
97 #endif\r
98         scrntype palette_pc[8];\r
99         \r
100 #if defined(_MZ800)\r
101         void draw_line_320x200_2bpp(int v);\r
102         void draw_line_320x200_4bpp(int v);\r
103         void draw_line_640x200_1bpp(int v);\r
104         void draw_line_640x200_2bpp(int v);\r
105         void draw_line_mz700(int v);\r
106 #else\r
107         void draw_line(int v);\r
108 #endif\r
109         \r
110 public:\r
111         MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
112         ~MEMORY() {}\r
113         \r
114         // common functions\r
115         void initialize();\r
116         void reset();\r
117 #if defined(_MZ800)\r
118         void update_config();\r
119 #endif\r
120         void event_vline(int v, int clock);\r
121         void event_callback(int event_id, int err);\r
122         \r
123         void write_data8(uint32 addr, uint32 data);\r
124         uint32 read_data8(uint32 addr);\r
125         void write_data8w(uint32 addr, uint32 data, int* wait);\r
126         uint32 read_data8w(uint32 addr, int* wait);\r
127         \r
128         void write_io8(uint32 addr, uint32 data);\r
129 #if defined(_MZ800)\r
130         uint32 read_io8(uint32 addr);\r
131 #endif\r
132         \r
133         // unitque functions\r
134         void set_context_cpu(DEVICE* device)\r
135         {\r
136                 d_cpu = device;\r
137         }\r
138         void set_context_pit(DEVICE* device)\r
139         {\r
140                 d_pit = device;\r
141         }\r
142         void set_context_pio(DEVICE* device)\r
143         {\r
144                 d_pio = device;\r
145         }\r
146 #if defined(_MZ800)\r
147         void set_context_pio_int(DEVICE* device)\r
148         {\r
149                 d_pio_int = device;\r
150         }\r
151 #endif\r
152         void draw_screen();\r
153 };\r
154 \r
155 #endif\r
156 \r