OSDN Git Service

[VM][EVENT] Specify CPU per VM.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / fmtowns.h
1 /*
2         FUJITSU FMR-50 Emulator 'eFMR-50'
3         FUJITSU FMR-60 Emulator 'eFMR-60'
4
5         Author : Takeda.Toshiya
6         Date   : 2008.04.28 -
7
8         [ virtual machine ]
9 */
10
11 #ifndef _FMR50_H_
12 #define _FMR50_H_
13
14 #if defined(_FMR50)
15 #if defined(HAS_I286)
16 #define DEVICE_NAME             "FUJITSU FMR-50 (i286)"
17 #define CONFIG_NAME             "fmr50_i286"
18 #elif defined(HAS_I386)
19 #define DEVICE_NAME             "FUJITSU FMR-50 (i386)"
20 #define CONFIG_NAME             "fmr50_i386"
21 #elif defined(HAS_I486)
22 #define DEVICE_NAME             "FUJITSU FMR-50 (i486)"
23 #define CONFIG_NAME             "fmr50_i486"
24 #elif defined(HAS_PENTIUM)
25 #define DEVICE_NAME             "FUJITSU FMR-250"
26 #define CONFIG_NAME             "fmr250"
27 #endif
28 #elif defined(_FMR60)
29 #if defined(HAS_I286)
30 #define DEVICE_NAME             "FUJITSU FMR-60"
31 #define CONFIG_NAME             "fmr60"
32 #elif defined(HAS_I386)
33 #define DEVICE_NAME             "FUJITSU FMR-70"
34 #define CONFIG_NAME             "fmr70"
35 #elif defined(HAS_I486)
36 #define DEVICE_NAME             "FUJITSU FMR-80"
37 #define CONFIG_NAME             "fmr80"
38 #elif defined(HAS_PENTIUM)
39 #define DEVICE_NAME             "FUJITSU FMR-280"
40 #define CONFIG_NAME             "fmr280"
41 #endif
42 #endif
43
44 // device informations for virtual machine
45 #define FRAMES_PER_SEC          55.4
46 #if defined(_FMR60)
47 #define LINES_PER_FRAME         784
48 #define CHARS_PER_LINE          98
49 #else
50 #define LINES_PER_FRAME         440
51 #define CHARS_PER_LINE          54
52 #endif
53 //#define CPU_CLOCKS            12000000
54 #define CPU_CLOCKS              8000000
55 #if defined(_FMR60)
56 #define SCREEN_WIDTH            1120
57 #define SCREEN_HEIGHT           750
58 #define WINDOW_HEIGHT_ASPECT    840
59 #else
60 #define SCREEN_WIDTH            640
61 #define SCREEN_HEIGHT           400
62 #define WINDOW_HEIGHT_ASPECT    480
63 #endif
64 #define MAX_DRIVE               4
65 #define MAX_SCSI                8
66 #define MAX_MEMCARD             2
67 #if defined(HAS_I286)
68 #define I86_PSEUDO_BIOS
69 #else
70 #define I386_PSEUDO_BIOS
71 #endif
72 #define I8259_MAX_CHIPS         2
73 #define SINGLE_MODE_DMA
74 #define MB8877_NO_BUSY_AFTER_SEEK
75 #define IO_ADDR_MAX             0x10000
76 #define SCSI_HOST_AUTO_ACK
77
78 // device informations for win32
79 #define USE_CPU_TYPE            2
80 #define USE_FD1
81 #define USE_FD2
82 #define USE_FD3
83 #define USE_FD4
84 #define NOTIFY_KEY_DOWN
85 #define USE_SHIFT_NUMPAD_KEY
86 #define USE_ALT_F10_KEY
87 #define USE_AUTO_KEY            5
88 #define USE_AUTO_KEY_RELEASE    6
89 #define USE_CRT_FILTER
90 #define USE_SOUND_FILES         1
91 #define USE_SOUND_FILES_FDD
92 #if defined(USE_SOUND_FILES)
93 #define USE_SOUND_VOLUME        5
94 #else
95 #define USE_SOUND_VOLUME        6
96 #endif
97 #define USE_DEBUGGER
98 #define USE_STATE
99 #define USE_CPU_I386
100
101 #include "../../common.h"
102 #include "../../fileio.h"
103
104 #ifdef USE_SOUND_VOLUME
105 static const _TCHAR *sound_device_caption[] = {
106         _T("Beep"), _T("FM SSG"), _T("FM OPNB"), _T("PCM"), _T("CD-DA"),
107 #if defined(USE_SOUND_FILES)
108         _T("FDD SEEK"),
109 #endif
110 };
111 #endif
112
113 class EMU;
114 class DEVICE;
115 class EVENT;
116
117 class I8251;
118 class I8253;
119 class I8259;
120 class I386;
121
122 class IO;
123 class TOWNS_CRTC;
124 class TOWNS_VRAM;
125 class TOWNS_SPRITE;
126 class TOWNS_JOYSTICK; // Mouse and Joystick.
127
128 class RF5C68;      // PCM
129 class YM2612;      // OPNB
130 class MB87078;     // VOLUME
131 //class AD7820KR;  // A/D Converter.
132 class MB8877;      // FDC
133 class MSM58321;    // RTC
134 class PCM1BIT;     // BUZZER
135 class UPD71071;    // DMAC
136 class TOWNS_CDROM; // CDROM Controller
137 class TOWNS_SERIALROM; // SERIAL ROM. May be 32 bytes.
138 class CMOS;
139 class FLOPPY;
140 class KEYBOARD;
141 class MEMORY;
142 //class SERIAL;
143 class SCSI;
144 class SCSI_HOST;
145 class SCSI_HDD;
146 class SCSI_CDROM;
147 class TIMER;
148
149 class VM
150 {
151 protected:
152         EMU* emu;
153         
154         // devices
155         EVENT* event;
156         
157         TOWNS_CRTC *crtc;
158         
159         I8251* sio;
160         I8253* pit0;
161         I8253* pit1;
162         
163         I8259* pic0;
164         I8259* pic1;
165         
166         I386* cpu; // i386DX/SX/486DX/486SX?/Pentium with FPU?
167
168         IO* io;
169         MB8877* fdc;
170         MSM58321* rtc;
171         PCM1BIT* pcm;
172         SCSI_HOST* scsi_host;
173         UPD71071* dma;
174
175         
176         //BIOS* bios;
177         CMOS* cmos;
178
179         FLOPPY* floppy;
180         KEYBOARD* keyboard;
181         MEMORY* memory;
182         
183         SCSI* scsi;
184         SCSI_HDD *hdd[4]; // 
185         SCSI_CDROM *cdrom; // 
186 //      SERIAL* serial;
187         TIMER* timer;
188         
189 public:
190         // ----------------------------------------
191         // initialize
192         // ----------------------------------------
193         
194         VM(EMU* parent_emu);
195         ~VM();
196         
197         // ----------------------------------------
198         // for emulation class
199         // ----------------------------------------
200         
201         // drive virtual machine
202         void reset();
203         void run();
204         
205 #ifdef USE_DEBUGGER
206         // debugger
207         DEVICE *get_cpu(int index);
208 #endif
209         
210         // draw screen
211         void draw_screen();
212         
213         // sound generation
214         void initialize_sound(int rate, int samples);
215         uint16_t* create_sound(int* extra_frames);
216         int get_sound_buffer_ptr();
217 #ifdef USE_SOUND_VOLUME
218         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
219 #endif
220         
221         // notify key
222         void key_down(int code, bool repeat);
223         void key_up(int code);
224         
225         // user interface
226         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
227         void close_floppy_disk(int drv);
228         bool is_floppy_disk_inserted(int drv);
229         void is_floppy_disk_protected(int drv, bool value);
230         bool is_floppy_disk_protected(int drv);
231         bool is_frame_skippable();
232         
233         void update_config();
234         void save_state(FILEIO* state_fio);
235         bool load_state(FILEIO* state_fio);
236         
237         // ----------------------------------------
238         // for each device
239         // ----------------------------------------
240         
241         // devices
242         DEVICE* get_device(int id);
243         DEVICE* dummy;
244         DEVICE* first_device;
245         DEVICE* last_device;
246 };
247
248 #endif