OSDN Git Service

[GENERAL] Merge upstream 2018-02-27.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr30 / fmr30.h
1 /*
2         FUJITSU FMR-30 Emulator 'eFMR-30'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.12.29 -
6
7         [ virtual machine ]
8 */
9
10 #ifndef _FMR30_H_
11 #define _FMR30_H_
12
13 #if defined(HAS_I86)
14 #define DEVICE_NAME             "FUJITSU FMR-30 (i86)"
15 #define CONFIG_NAME             "fmr30_i86"
16 #elif defined(HAS_I286)
17 #define DEVICE_NAME             "FUJITSU FMR-30 (i286)"
18 #define CONFIG_NAME             "fmr30_i286"
19 #endif
20
21 // device informations for virtual machine
22 #define FRAMES_PER_SEC          55.4
23 #define LINES_PER_FRAME         440
24 #define CPU_CLOCKS              8000000
25 #define SCREEN_WIDTH            640
26 #define SCREEN_HEIGHT           400
27 #define MAX_DRIVE               2
28 #define MAX_SCSI                8
29 #define MAX_MEMCARD             2
30 #define I86_PSEUDO_BIOS
31 #define HAS_I8254
32 #define I8259_MAX_CHIPS         2
33 #define SINGLE_MODE_DMA
34 #define HAS_MB89311
35 #define MB8877_NO_BUSY_AFTER_SEEK
36 #define IO_ADDR_MAX             0x10000
37 #define SCSI_HOST_AUTO_ACK
38
39 // device informations for win32
40 #define USE_FD1
41 #define USE_FD2
42 #define USE_HARD_DISK           7
43 #define NOTIFY_KEY_DOWN
44 #define USE_SHIFT_NUMPAD_KEY
45 #define USE_ALT_F10_KEY
46 #define USE_AUTO_KEY            5
47 #define USE_AUTO_KEY_RELEASE    6
48 #define USE_AUTO_KEY_NUMPAD
49 #define USE_SOUND_VOLUME        2
50 #define USE_DEBUGGER
51 #define USE_STATE
52
53 #include "../../common.h"
54 #include "../../fileio.h"
55
56 #ifdef USE_SOUND_VOLUME
57 static const _TCHAR *sound_device_caption[] = {
58         _T("PSG"), _T("Noise (FDD)"),
59 };
60 #endif
61
62 class EMU;
63 class DEVICE;
64 class EVENT;
65
66 class I8237;
67 class I8251;
68 class I8253;
69 class I8259;
70 //#if defined(HAS_I86)
71 //class I86;
72 //#else
73 class I286;
74 //#endif
75 class IO;
76 class MB8877;
77 class SCSI_HDD;
78 class SCSI_HOST;
79 class SN76489AN;
80
81 class BIOS;
82 class CMOS;
83 class FLOPPY;
84 class KEYBOARD;
85 class MEMORY;
86 class RTC;
87 class SCSI;
88 class SERIAL;
89 class SYSTEM;
90 class TIMER;
91
92 class VM
93 {
94 protected:
95         EMU* emu;
96         
97         // devices
98         EVENT* event;
99         
100         I8237* dma;
101         I8251* sio_kb;
102         I8251* sio_sub;
103         I8251* sio_ch1;
104         I8251* sio_ch2;
105         I8253* pit;
106         I8259* pic;
107 //#if defined(HAS_I86)
108 //      I86* cpu;
109 //#else
110         I286* cpu;
111 //#endif
112         IO* io;
113         MB8877* fdc;
114         SCSI_HDD* scsi_hdd[7];
115         SCSI_HOST* scsi_host;
116         SN76489AN* psg;
117         
118         BIOS* bios;
119         CMOS* cmos;
120         FLOPPY* floppy;
121         KEYBOARD* keyboard;
122         MEMORY* memory;
123         RTC* rtc;
124         SCSI* scsi;
125         SERIAL* serial;
126         SYSTEM* system;
127         TIMER* timer;
128         
129 public:
130         // ----------------------------------------
131         // initialize
132         // ----------------------------------------
133         
134         VM(EMU* parent_emu);
135         ~VM();
136         
137         // ----------------------------------------
138         // for emulation class
139         // ----------------------------------------
140         
141         // drive virtual machine
142         void reset();
143         void run();
144         
145 #ifdef USE_DEBUGGER
146         // debugger
147         DEVICE *get_cpu(int index);
148 #endif
149         
150         // draw screen
151         void draw_screen();
152         
153         // sound generation
154         void initialize_sound(int rate, int samples);
155         uint16_t* create_sound(int* extra_frames);
156         int get_sound_buffer_ptr();
157 #ifdef USE_SOUND_VOLUME
158         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
159 #endif
160         
161         // notify key
162         void key_down(int code, bool repeat);
163         void key_up(int code);
164         
165         // user interface
166         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
167         void close_floppy_disk(int drv);
168         bool is_floppy_disk_inserted(int drv);
169         void is_floppy_disk_protected(int drv, bool value);
170         bool is_floppy_disk_protected(int drv);
171         uint32_t is_floppy_disk_accessed();
172         uint32_t is_hard_disk_accessed();
173         bool is_frame_skippable();
174         
175         void update_config();
176         void save_state(FILEIO* state_fio);
177         bool load_state(FILEIO* state_fio);
178         
179         // ----------------------------------------
180         // for each device
181         // ----------------------------------------
182         
183         // devices
184         DEVICE* get_device(int id);
185         DEVICE* dummy;
186         DEVICE* first_device;
187         DEVICE* last_device;
188 };
189
190 #endif