OSDN Git Service

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