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 / fmr50.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.28 -\r
7 \r
8         [ virtual machine ]\r
9 */\r
10 \r
11 #ifndef _FMR50_H_\r
12 #define _FMR50_H_\r
13 \r
14 #if defined(_FMR50)\r
15 #if defined(HAS_I286)\r
16 #define DEVICE_NAME             "FUJITSU FMR-50 (i286)"\r
17 #define CONFIG_NAME             "fmr50_i286"\r
18 #elif defined(HAS_I386)\r
19 #define DEVICE_NAME             "FUJITSU FMR-50 (i386)"\r
20 #define CONFIG_NAME             "fmr50_i386"\r
21 #elif defined(HAS_I486)\r
22 #define DEVICE_NAME             "FUJITSU FMR-50 (i486)"\r
23 #define CONFIG_NAME             "fmr50_i486"\r
24 #elif defined(HAS_PENTIUM)\r
25 #define DEVICE_NAME             "FUJITSU FMR-250"\r
26 #define CONFIG_NAME             "fmr250"\r
27 #endif\r
28 #elif defined(_FMR60)\r
29 #if defined(HAS_I286)\r
30 #define DEVICE_NAME             "FUJITSU FMR-60"\r
31 #define CONFIG_NAME             "fmr60"\r
32 #elif defined(HAS_I386)\r
33 #define DEVICE_NAME             "FUJITSU FMR-70"\r
34 #define CONFIG_NAME             "fmr70"\r
35 #elif defined(HAS_I486)\r
36 #define DEVICE_NAME             "FUJITSU FMR-80"\r
37 #define CONFIG_NAME             "fmr80"\r
38 #elif defined(HAS_PENTIUM)\r
39 #define DEVICE_NAME             "FUJITSU FMR-280"\r
40 #define CONFIG_NAME             "fmr280"\r
41 #endif\r
42 #endif\r
43 \r
44 // device informations for virtual machine\r
45 #define FRAMES_PER_SEC          55.4\r
46 #if defined(_FMR60)\r
47 #define LINES_PER_FRAME         784\r
48 #define CHARS_PER_LINE          98\r
49 #else\r
50 #define LINES_PER_FRAME         440\r
51 #define CHARS_PER_LINE          54\r
52 #endif\r
53 //#define CPU_CLOCKS            12000000\r
54 #define CPU_CLOCKS              8000000\r
55 #if defined(_FMR60)\r
56 #define SCREEN_WIDTH            1120\r
57 #define SCREEN_HEIGHT           750\r
58 #else\r
59 #define SCREEN_WIDTH            640\r
60 #define SCREEN_HEIGHT           400\r
61 #endif\r
62 #define MAX_DRIVE               4\r
63 #define MAX_SCSI                8\r
64 #define MAX_MEMCARD             2\r
65 #if defined(HAS_I286)\r
66 #define I86_BIOS_CALL\r
67 #else\r
68 #define I386_BIOS_CALL\r
69 #endif\r
70 #define I8259_MAX_CHIPS         2\r
71 //#define SINGLE_MODE_DMA\r
72 #define IO_ADDR_MAX             0x10000\r
73 \r
74 // device informations for win32\r
75 #define USE_CPU_TYPE            2\r
76 #define USE_FD1\r
77 #define USE_FD2\r
78 #define USE_FD3\r
79 #define USE_FD4\r
80 #define NOTIFY_KEY_DOWN\r
81 #define USE_SHIFT_NUMPAD_KEY\r
82 #define USE_ALT_F10_KEY\r
83 #define USE_AUTO_KEY            5\r
84 #define USE_AUTO_KEY_RELEASE    6\r
85 #define USE_CRT_FILTER\r
86 #define USE_ACCESS_LAMP\r
87 // i386 core will support debugger later\r
88 //#if defined(HAS_I286)\r
89 #define USE_DEBUGGER\r
90 //#endif\r
91 \r
92 #include "../../common.h"\r
93 \r
94 class EMU;\r
95 class DEVICE;\r
96 class EVENT;\r
97 \r
98 class HD46505;\r
99 #ifdef _FMR60\r
100 class HD63484;\r
101 #endif\r
102 class I8251;\r
103 class I8253;\r
104 class I8259;\r
105 #if defined(HAS_I286)\r
106 class I286;\r
107 #else\r
108 class I386;\r
109 #endif\r
110 class IO;\r
111 class MB8877;\r
112 class MSM58321;\r
113 class PCM1BIT;\r
114 class UPD71071;\r
115 \r
116 class BIOS;\r
117 class CMOS;\r
118 class FLOPPY;\r
119 class KEYBOARD;\r
120 class MEMORY;\r
121 //class SERIAL;\r
122 class SCSI;\r
123 class TIMER;\r
124 \r
125 class VM\r
126 {\r
127 protected:\r
128         EMU* emu;\r
129         \r
130         // devices\r
131         EVENT* event;\r
132         \r
133         HD46505* crtc;\r
134 #if defined(_FMR60)\r
135         HD63484* acrtc;\r
136 #endif\r
137         I8251* sio;\r
138         I8253* pit0;\r
139         I8253* pit1;\r
140         I8259* pic;\r
141 #if defined(HAS_I286)\r
142         I286* cpu;\r
143 #else\r
144         I386* cpu;\r
145 #endif\r
146         IO* io;\r
147         MB8877* fdc;\r
148         MSM58321* rtc;\r
149         PCM1BIT* pcm;\r
150         UPD71071* dma;\r
151         \r
152         BIOS* bios;\r
153         CMOS* cmos;\r
154         FLOPPY* floppy;\r
155         KEYBOARD* keyboard;\r
156         MEMORY* memory;\r
157         SCSI* scsi;\r
158 //      SERIAL* serial;\r
159         TIMER* timer;\r
160         \r
161 public:\r
162         // ----------------------------------------\r
163         // initialize\r
164         // ----------------------------------------\r
165         \r
166         VM(EMU* parent_emu);\r
167         ~VM();\r
168         \r
169         // ----------------------------------------\r
170         // for emulation class\r
171         // ----------------------------------------\r
172         \r
173         // drive virtual machine\r
174         void reset();\r
175         void run();\r
176         \r
177 #ifdef USE_DEBUGGER\r
178         // debugger\r
179         DEVICE *get_cpu(int index);\r
180 #endif\r
181         \r
182         // draw screen\r
183         void draw_screen();\r
184         int access_lamp();\r
185         \r
186         // sound generation\r
187         void initialize_sound(int rate, int samples);\r
188         uint16* create_sound(int* extra_frames);\r
189         int sound_buffer_ptr();\r
190         \r
191         // notify key\r
192         void key_down(int code, bool repeat);\r
193         void key_up(int code);\r
194         \r
195         // user interface\r
196         void open_disk(int drv, _TCHAR* file_path, int offset);\r
197         void close_disk(int drv);\r
198         bool disk_inserted(int drv);\r
199         bool now_skip();\r
200         \r
201         void update_config();\r
202         \r
203         // ----------------------------------------\r
204         // for each device\r
205         // ----------------------------------------\r
206         \r
207         // devices\r
208         DEVICE* get_device(int id);\r
209         DEVICE* dummy;\r
210         DEVICE* first_device;\r
211         DEVICE* last_device;\r
212 };\r
213 \r
214 #endif\r