OSDN Git Service

33be9b520ebf330261ec35ba76dd4f7efd4c65a2
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr50 / fmr50.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 #else
59 #define SCREEN_WIDTH            640
60 #define SCREEN_HEIGHT           400
61 #endif
62 #define MAX_DRIVE               4
63 #define MAX_SCSI                8
64 #define MAX_MEMCARD             2
65 #if defined(HAS_I286)
66 #define I86_PSEUDO_BIOS
67 #else
68 #define I386_PSEUDO_BIOS
69 #endif
70 #define I8259_MAX_CHIPS         2
71 //#define SINGLE_MODE_DMA
72 #define MB8877_NO_BUSY_AFTER_SEEK
73 #define IO_ADDR_MAX             0x10000
74
75 // device informations for win32
76 #define USE_CPU_TYPE            2
77 #define USE_FD1
78 #define USE_FD2
79 #define USE_FD3
80 #define USE_FD4
81 #define NOTIFY_KEY_DOWN
82 #define USE_SHIFT_NUMPAD_KEY
83 #define USE_ALT_F10_KEY
84 #define USE_AUTO_KEY            5
85 #define USE_AUTO_KEY_RELEASE    6
86 #define USE_CRT_FILTER
87 #define USE_ACCESS_LAMP
88 #define USE_DEBUGGER
89 #define USE_STATE
90
91 #include "../../common.h"
92 #include "../../fileio.h"
93
94 class EMU;
95 class DEVICE;
96 class EVENT;
97
98 class HD46505;
99 #ifdef _FMR60
100 class HD63484;
101 #endif
102 class I8251;
103 class I8253;
104 class I8259;
105 #if defined(HAS_I286)
106 class I286;
107 #else
108 class I386;
109 #endif
110 class IO;
111 class MB8877;
112 class MSM58321;
113 class PCM1BIT;
114 class UPD71071;
115
116 class BIOS;
117 class CMOS;
118 class FLOPPY;
119 class KEYBOARD;
120 class MEMORY;
121 //class SERIAL;
122 class SCSI;
123 class TIMER;
124
125 class VM
126 {
127 protected:
128         EMU* emu;
129         
130         // devices
131         EVENT* event;
132         
133         HD46505* crtc;
134 #if defined(_FMR60)
135         HD63484* acrtc;
136 #endif
137         I8251* sio;
138         I8253* pit0;
139         I8253* pit1;
140         I8259* pic;
141 #if defined(HAS_I286)
142         I286* cpu;
143 #else
144         I386* cpu;
145 #endif
146         IO* io;
147         MB8877* fdc;
148         MSM58321* rtc;
149         PCM1BIT* pcm;
150         UPD71071* dma;
151         
152         BIOS* bios;
153         CMOS* cmos;
154         FLOPPY* floppy;
155         KEYBOARD* keyboard;
156         MEMORY* memory;
157         SCSI* scsi;
158 //      SERIAL* serial;
159         TIMER* timer;
160         
161 public:
162         // ----------------------------------------
163         // initialize
164         // ----------------------------------------
165         
166         VM(EMU* parent_emu);
167         ~VM();
168         
169         // ----------------------------------------
170         // for emulation class
171         // ----------------------------------------
172         
173         // drive virtual machine
174         void reset();
175         void run();
176         
177 #ifdef USE_DEBUGGER
178         // debugger
179         DEVICE *get_cpu(int index);
180 #endif
181         
182         // draw screen
183         void draw_screen();
184         int access_lamp();
185         
186         // sound generation
187         void initialize_sound(int rate, int samples);
188         uint16* create_sound(int* extra_frames);
189         int sound_buffer_ptr();
190         
191         // notify key
192         void key_down(int code, bool repeat);
193         void key_up(int code);
194         
195         // user interface
196         void open_disk(int drv, const _TCHAR* file_path, int bank);
197         void close_disk(int drv);
198         bool disk_inserted(int drv);
199         void set_disk_protected(int drv, bool value);
200         bool get_disk_protected(int drv);
201         bool now_skip();
202         
203         void update_config();
204         void save_state(FILEIO* state_fio);
205         bool load_state(FILEIO* state_fio);
206         
207         // ----------------------------------------
208         // for each device
209         // ----------------------------------------
210         
211         // devices
212         DEVICE* get_device(int id);
213         DEVICE* dummy;
214         DEVICE* first_device;
215         DEVICE* last_device;
216 };
217
218 #endif