OSDN Git Service

[VM][General] Merge Upstream 20180530.
[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_MEMCARD             2
29 #define I86_PSEUDO_BIOS
30 #define HAS_I8254
31 #define I8259_MAX_CHIPS         2
32 #define SINGLE_MODE_DMA
33 #define HAS_MB89311
34 #define MB8877_NO_BUSY_AFTER_SEEK
35 #define IO_ADDR_MAX             0x10000
36 #define SCSI_HOST_AUTO_ACK
37
38 // device informations for win32
39 #define USE_FLOPPY_DISK         2
40 #define USE_HARD_DISK           7
41 #define NOTIFY_KEY_DOWN
42 #define USE_SHIFT_NUMPAD_KEY
43 #define USE_ALT_F10_KEY
44 #define USE_AUTO_KEY            5
45 #define USE_AUTO_KEY_RELEASE    6
46 #define USE_AUTO_KEY_NUMPAD
47 #define USE_SOUND_VOLUME        2
48 #define USE_DEBUGGER
49 #define USE_STATE
50 #define USE_CPU_I286
51
52 #include "../../common.h"
53 #include "../../fileio.h"
54 #include "../vm_template.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 csp_state_utils;
63 class EMU;
64 class DEVICE;
65 class EVENT;
66
67 class I8237;
68 class I8251;
69 class I8253;
70 class I8259;
71 //#if defined(HAS_I86)
72 //class I86;
73 //#else
74 class I286;
75 //#endif
76 class IO;
77 class MB8877;
78 class SCSI_HDD;
79 class SCSI_HOST;
80 class SN76489AN;
81
82 class BIOS;
83 class CMOS;
84 class FLOPPY;
85 class KEYBOARD;
86 class MEMORY;
87 class RTC;
88 class SCSI;
89 class SERIAL;
90 class SYSTEM;
91 class TIMER;
92
93 class VM : public VM_TEMPLATE
94 {
95 protected:
96         //EMU* emu;
97         //csp_state_utils *state_entry;
98         // devices
99         //EVENT* event;
100         
101         I8237* dma;
102         I8251* sio_kb;
103         I8251* sio_sub;
104         I8251* sio_ch1;
105         I8251* sio_ch2;
106         I8253* pit;
107         I8259* pic;
108 //#if defined(HAS_I86)
109 //      I86* cpu;
110 //#else
111         I286* cpu;
112 //#endif
113         IO* io;
114         MB8877* fdc;
115         SCSI_HDD* scsi_hdd[7];
116         SCSI_HOST* scsi_host;
117         SN76489AN* psg;
118         
119         BIOS* bios;
120         CMOS* cmos;
121         FLOPPY* floppy;
122         KEYBOARD* keyboard;
123         MEMORY* memory;
124         RTC* rtc;
125         SCSI* scsi;
126         SERIAL* serial;
127         SYSTEM* system;
128         TIMER* timer;
129         
130 public:
131         // ----------------------------------------
132         // initialize
133         // ----------------------------------------
134         
135         VM(EMU* parent_emu);
136         ~VM();
137         
138         // ----------------------------------------
139         // for emulation class
140         // ----------------------------------------
141         
142         // drive virtual machine
143         void reset();
144         void run();
145         
146 #ifdef USE_DEBUGGER
147         // debugger
148         DEVICE *get_cpu(int index);
149 #endif
150         
151         // draw screen
152         void draw_screen();
153         
154         // sound generation
155         void initialize_sound(int rate, int samples);
156         uint16_t* create_sound(int* extra_frames);
157         int get_sound_buffer_ptr();
158 #ifdef USE_SOUND_VOLUME
159         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
160 #endif
161         
162         // notify key
163         void key_down(int code, bool repeat);
164         void key_up(int code);
165         
166         // user interface
167         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
168         void close_floppy_disk(int drv);
169         bool is_floppy_disk_inserted(int drv);
170         void is_floppy_disk_protected(int drv, bool value);
171         bool is_floppy_disk_protected(int drv);
172         uint32_t is_floppy_disk_accessed();
173         void open_hard_disk(int drv, const _TCHAR* file_path);
174         void close_hard_disk(int drv);
175         bool is_hard_disk_inserted(int drv);
176         uint32_t is_hard_disk_accessed();
177         bool is_frame_skippable();
178         
179         void update_config();
180         void decl_state();
181         void save_state(FILEIO* state_fio);
182         bool load_state(FILEIO* state_fio);
183         
184         // ----------------------------------------
185         // for each device
186         // ----------------------------------------
187         
188         // devices
189         DEVICE* get_device(int id);
190         //DEVICE* dummy;
191         //DEVICE* first_device;
192         //DEVICE* last_device;
193 };
194
195 #endif