OSDN Git Service

[VM] I forgot to update (and remove USE_SOUND_FILES*) defines.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz700 / mz700.h
1 /*
2         SHARP MZ-700 Emulator 'EmuZ-700'
3         SHARP MZ-800 Emulator 'EmuZ-800'
4         SHARP MZ-1500 Emulator 'EmuZ-1500'
5
6         Author : Takeda.Toshiya
7         Date   : 2008.06.05 -
8
9         [ virtual machine ]
10 */
11
12 #ifndef _MZ700_H_
13 #define _MZ700_H_
14
15 #if defined(_MZ700)
16 #define DEVICE_NAME             "SHARP MZ-700"
17 #define CONFIG_NAME             "mz700"
18 #elif defined(_MZ800)
19 #define DEVICE_NAME             "SHARP MZ-800"
20 #define CONFIG_NAME             "mz800"
21 #elif defined(_MZ1500)
22 #define DEVICE_NAME             "SHARP MZ-1500"
23 #define CONFIG_NAME             "mz1500"
24 #endif
25
26 // device informations for virtual machine
27 #if defined(_MZ800)
28 #define FRAMES_PER_SEC          (3546895.0 / 228.0 / 312.0)
29 #define LINES_PER_FRAME         312
30 #define CPU_CLOCKS              3546895
31 #else
32 #define FRAMES_PER_SEC          (3579545.0 / 228.0 / 262.0)
33 #define LINES_PER_FRAME         262
34 #define CPU_CLOCKS              3579545
35 #endif
36 #define SCREEN_WIDTH            640
37 #define SCREEN_HEIGHT           400
38 #define WINDOW_HEIGHT_ASPECT    480
39 #define IO_ADDR_MAX             0x100
40 #define Z80_MEMORY_WAIT
41 #define Z80_IO_WAIT
42 #if defined(_MZ800) || defined(_MZ1500)
43 #define MAX_DRIVE               4
44 #define HAS_MB8876
45 #endif
46 #if defined(_MZ1500)
47 #define MZ1P17_SW1_4_ON
48 #endif
49
50 // device informations for win32
51 #if defined(_MZ700)
52 #define USE_DIPSWITCH
53 #elif defined(_MZ800)
54 #define USE_BOOT_MODE           2
55 #endif
56 #define USE_TAPE1
57 #define USE_TAPE_BUTTON
58 #if defined(_MZ800) || defined(_MZ1500)
59 #define USE_QD1
60 #define USE_FD1
61 #define USE_FD2
62 #endif
63 #define USE_SHIFT_NUMPAD_KEY
64 #define USE_ALT_F10_KEY
65 #define USE_AUTO_KEY            5
66 #define USE_AUTO_KEY_RELEASE    6
67 #define USE_AUTO_KEY_CAPS
68 #if defined(_MZ800)
69 #define USE_MONITOR_TYPE        2
70 #endif
71 #define USE_SCREEN_FILTER
72 #define USE_SCANLINE
73 #if defined(_MZ700)
74 #define USE_SOUND_VOLUME        3
75 #elif defined(_MZ800)
76 #define USE_SOUND_VOLUME        5
77 #elif defined(_MZ1500)
78 #define USE_SOUND_VOLUME        6
79 #endif
80 #if defined(_MZ1500)
81 #define USE_PRINTER
82 #define USE_PRINTER_TYPE        4
83 #endif
84 #define SUPPORT_ROMA_KANA_CONVERSION
85 #define SUPPORT_TV_RENDER
86 #define USE_DEBUGGER
87 #define USE_STATE
88
89 #include "../../common.h"
90 #include "../../fileio.h"
91
92 #ifdef USE_SOUND_VOLUME
93 static const _TCHAR *sound_device_caption[] = {
94 #if defined(_MZ800)
95         _T("PSG"),
96 #elif defined(_MZ1500)
97         _T("PSG #1"), _T("PSG #2"),
98 #endif
99         _T("Beep"), _T("CMT (Signal)"),
100 #if defined(_MZ800) || defined(_MZ1500)
101         _T("Noise (FDD)"),
102 #endif
103         _T("Noise (CMT)"),
104 };
105 #endif
106
107 class EMU;
108 class DEVICE;
109 class EVENT;
110
111 class AND;
112 class DATAREC;
113 class I8253;
114 class I8255;
115 class IO;
116 class PCM1BIT;
117 class Z80;
118
119 //class CMOS;
120 class EMM;
121 class KANJI;
122 class KEYBOARD;
123 class MEMORY;
124 class RAMFILE;
125
126 #if defined(_MZ800) || defined(_MZ1500)
127 class MB8877;
128 class NOT;
129 class SN76489AN;
130 class Z80PIO;
131 class Z80SIO;
132 class FLOPPY;
133 #if defined(_MZ1500)
134 class PSG;
135 #endif
136 class QUICKDISK;
137 #endif
138
139 class VM
140 {
141 protected:
142         EMU* emu;
143         
144         // devices
145         EVENT* event;
146         
147         AND* and_int;
148         DATAREC* drec;
149         I8253* pit;
150         I8255* pio;
151         IO* io;
152         PCM1BIT* pcm;
153         Z80* cpu;
154         
155 //      CMOS* cmos;
156         EMM* emm;
157         KANJI* kanji;
158         KEYBOARD* keyboard;
159         MEMORY* memory;
160         RAMFILE* ramfile;
161         
162 #if defined(_MZ800) || defined(_MZ1500)
163         AND* and_snd;
164         MB8877* fdc;
165 #if defined(_MZ800)
166         NOT* not_pit;
167         SN76489AN* psg;
168 #elif defined(_MZ1500)
169         DEVICE* printer;
170         NOT* not_reset;
171         NOT* not_strobe;
172         SN76489AN* psg_l;
173         SN76489AN* psg_r;
174 #endif
175         Z80PIO* pio_int;
176         Z80SIO* sio_rs; // RS-232C
177         Z80SIO* sio_qd; // QD
178         
179         FLOPPY* floppy;
180 #if defined(_MZ1500)
181         PSG* psg;
182 #endif
183         QUICKDISK* qd;
184 #endif
185         
186 #if defined(_MZ800)
187         int boot_mode;
188 #endif
189         
190 public:
191         // ----------------------------------------
192         // initialize
193         // ----------------------------------------
194         
195         VM(EMU* parent_emu);
196         ~VM();
197         
198         // ----------------------------------------
199         // for emulation class
200         // ----------------------------------------
201         
202         // drive virtual machine
203         void reset();
204         void run();
205         
206 #ifdef USE_DEBUGGER
207         // debugger
208         DEVICE *get_cpu(int index);
209 #endif
210         
211         // draw screen
212         void draw_screen();
213         
214         // sound generation
215         void initialize_sound(int rate, int samples);
216         uint16_t* create_sound(int* extra_frames);
217         int get_sound_buffer_ptr();
218 #ifdef USE_SOUND_VOLUME
219         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
220 #endif
221         
222         // user interface
223         void play_tape(int drv, const _TCHAR* file_path);
224         void rec_tape(int drv, const _TCHAR* file_path);
225         void close_tape(int drv);
226         bool is_tape_inserted(int drv);
227         bool is_tape_playing(int drv);
228         bool is_tape_recording(int drv);
229         int get_tape_position(int drv);
230         const _TCHAR* get_tape_message(int drv);
231         void push_play(int drv);
232         void push_stop(int drv);
233         void push_fast_forward(int drv);
234         void push_fast_rewind(int drv);
235         void push_apss_forward(int drv) {}
236         void push_apss_rewind(int drv) {}
237 #if defined(_MZ800) || defined(_MZ1500)
238         void open_quick_disk(int drv, const _TCHAR* file_path);
239         void close_quick_disk(int drv);
240         bool is_quick_disk_inserted(int drv);
241         uint32_t is_quick_disk_accessed();
242         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
243         void close_floppy_disk(int drv);
244         bool is_floppy_disk_inserted(int drv);
245         void is_floppy_disk_protected(int drv, bool value);
246         bool is_floppy_disk_protected(int drv);
247         uint32_t is_floppy_disk_accessed();
248 #endif
249         bool is_frame_skippable();
250         
251         void update_config();
252         void save_state(FILEIO* state_fio);
253         bool load_state(FILEIO* state_fio);
254         
255         // ----------------------------------------
256         // for each device
257         // ----------------------------------------
258         
259         // devices
260         DEVICE* get_device(int id);
261         DEVICE* dummy;
262         DEVICE* first_device;
263         DEVICE* last_device;
264 };
265
266 #endif