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 / fmr50 / memory.h
1 /*\r
2         FUJITSU FMR-50 Emulator 'eFMR-50'\r
3         FUJITSU FMR-60 Emulator 'eFMR-60'\r
4 \r
5         Author : Takeda.Toshiya\r
6         Date   : 2008.04.29 -\r
7 \r
8         [ memory ]\r
9 */\r
10 \r
11 #ifndef _MEMORY_H_\r
12 #define _MEMORY_H_\r
13 \r
14 #include "../vm.h"\r
15 #include "../../emu.h"\r
16 #include "../device.h"\r
17 \r
18 #define SIG_MEMORY_DISP         0\r
19 #define SIG_MEMORY_VSYNC        1\r
20 \r
21 #if defined(HAS_I286)\r
22 class I286;\r
23 #else\r
24 class I386;\r
25 #endif\r
26 \r
27 class MEMORY : public DEVICE\r
28 {\r
29 private:\r
30 #if defined(HAS_I286)\r
31         I286 *d_cpu;\r
32 #else\r
33         I386 *d_cpu;\r
34 #endif\r
35         DEVICE *d_crtc;\r
36         \r
37         uint8* rbank[8192];     // 16MB / 2KB\r
38         uint8* wbank[8192];\r
39         uint8 wdmy[0x800];\r
40         uint8 rdmy[0x800];\r
41         \r
42         uint8 ram[0x400000];    // RAM 1+3MB\r
43 #ifdef _FMR60\r
44         uint8 vram[0x80000];    // VRAM 512KB\r
45         uint8 cvram[0x2000];\r
46         uint8 avram[0x2000];\r
47 #else\r
48         uint8 vram[0x40000];    // VRAM 256KB\r
49         uint8 cvram[0x1000];\r
50         uint8 kvram[0x1000];\r
51         uint8 dummy[0x8000];    // dummy plane\r
52 #endif\r
53         uint8 ipl[0x4000];      // IPL 16KB\r
54 #ifdef _FMR60\r
55         uint8 ank24[0x3000];            // ANK(14x24)\r
56         uint8 kanji24[0x240000];        // KANJI(24x24)\r
57 #else\r
58         uint8 ank8[0x800];      // ANK(8x8) 2KB\r
59         uint8 ank16[0x1000];    // ANK(8x16) 4KB\r
60         uint8 kanji16[0x40000]; // KANJI(16x16) 256KB\r
61 #endif\r
62         uint8 machine_id;       // MACHINE ID\r
63         \r
64         // memory\r
65         uint8 protect, rst;\r
66         uint8 mainmem, rplane, wplane;\r
67         uint8 dma_addr_reg, dma_wrap_reg;\r
68         uint32 dma_addr_mask;\r
69         \r
70         // crtc\r
71         uint8* chreg;\r
72         bool disp, vsync;\r
73         int blink;\r
74         \r
75         // video\r
76         uint8 apal[16][3], apalsel, dpal[8];\r
77         uint8 outctrl;\r
78         \r
79 #ifndef _FMR60\r
80         // 16bit card\r
81         uint8 pagesel, ankcg;\r
82         uint8 dispctrl;\r
83         uint8 mix;\r
84         uint16 accaddr, dispaddr;\r
85         \r
86         // kanji\r
87         int kj_h, kj_l, kj_ofs, kj_row;\r
88         \r
89         // logical operation\r
90         uint8 cmdreg, imgcol, maskreg, compreg[8], compbit, bankdis, tilereg[3];\r
91         uint16 lofs, lsty, lsx, lsy, lex, ley;\r
92         void point(int x, int y, int col);\r
93         void line();\r
94 #endif\r
95         \r
96         uint8 screen_txt[SCREEN_HEIGHT][SCREEN_WIDTH + 14];\r
97         uint8 screen_cg[SCREEN_HEIGHT][SCREEN_WIDTH];\r
98 //      uint8 screen_txt[400][648];\r
99 //      uint8 screen_cg[400][640];\r
100         scrntype palette_txt[16];\r
101         scrntype palette_cg[16];\r
102         \r
103         void update_bank();\r
104         void update_dma_addr_mask();\r
105 #ifdef _FMR60\r
106         void draw_text();\r
107 #else\r
108         void draw_text40();\r
109         void draw_text80();\r
110 #endif\r
111         void draw_cg();\r
112         \r
113 public:\r
114         MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
115         ~MEMORY() {}\r
116         \r
117         // common functions\r
118         void initialize();\r
119         void reset();\r
120         void write_data8(uint32 addr, uint32 data);\r
121         uint32 read_data8(uint32 addr);\r
122         void write_dma_data8(uint32 addr, uint32 data);\r
123         uint32 read_dma_data8(uint32 addr);\r
124         void write_io8(uint32 addr, uint32 data);\r
125         uint32 read_io8(uint32 addr);\r
126         void write_signal(int id, uint32 data, uint32 mask);\r
127         void event_frame();\r
128         \r
129         // unitque function\r
130 #if defined(HAS_I286)\r
131         void set_context_cpu(I286* device)\r
132 #else\r
133         void set_context_cpu(I386* device)\r
134 #endif\r
135         {\r
136                 d_cpu = device;\r
137         }\r
138         void set_machine_id(uint8 id)\r
139         {\r
140                 machine_id = id;\r
141         }\r
142         void set_context_crtc(DEVICE* device)\r
143         {\r
144                 d_crtc = device;\r
145         }\r
146         void set_chregs_ptr(uint8* ptr)\r
147         {\r
148                 chreg = ptr;\r
149         }\r
150         uint8* get_vram()\r
151         {\r
152                 return vram;\r
153         }\r
154         uint8* get_cvram()\r
155         {\r
156                 return cvram;\r
157         }\r
158 #ifdef _FMR60\r
159         uint8* get_avram()\r
160         {\r
161                 return avram;\r
162         }\r
163 #else\r
164         uint8* get_kvram()\r
165         {\r
166                 return kvram;\r
167         }\r
168 #endif\r
169         void draw_screen();\r
170 };\r
171 \r
172 #endif\r
173 \r