OSDN Git Service

69fa6c79425acf183cea81c75749f532a1b033ad
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz80k / mz80k.h
1 /*
2         SHARP MZ-80K/C Emulator 'EmuZ-80K'
3         SHARP MZ-1200 Emulator 'EmuZ-1200'
4
5         Author : Takeda.Toshiya
6         Date   : 2010.08.18-
7
8         SHARP MZ-80A Emulator 'EmuZ-80A'
9         Modify : Hideki Suga
10         Date   : 2014.12.10 -
11
12         [ virtual machine ]
13 */
14
15 #ifndef _MZ80K_H_
16 #define _MZ80K_H_
17
18 #if defined(_MZ1200)
19 #define DEVICE_NAME             "SHARP MZ-1200"
20 #define CONFIG_NAME             "mz1200"
21 #elif defined(_MZ80A)
22 #define DEVICE_NAME             "SHARP MZ-80A"
23 #define CONFIG_NAME             "mz80a"
24 #else
25 #define DEVICE_NAME             "SHARP MZ-80K/C"
26 #define CONFIG_NAME             "mz80k"
27 #endif
28
29 #ifdef _MZ80A
30 #define SUPPORT_MZ80AIF
31 #else
32 #define SUPPORT_MZ80FIO
33 #endif
34
35 // device informations for virtual machine
36 #define FRAMES_PER_SEC          60
37 #define LINES_PER_FRAME         262
38 #define CPU_CLOCKS              2000000
39 #define SCREEN_WIDTH            320
40 #define SCREEN_HEIGHT           200
41 #define WINDOW_HEIGHT_ASPECT    240
42 #if defined(SUPPORT_MZ80AIF)
43 #define HAS_MB8866
44 #define MAX_DRIVE               4
45 #elif defined(SUPPORT_MZ80FIO)
46 #define HAS_T3444M
47 #define MAX_DRIVE               4
48 #endif
49 #define PRINTER_STROBE_RISING_EDGE
50
51 // device informations for win32
52 #define USE_DIPSWITCH
53 #define USE_TAPE                1
54 #define USE_TAPE_BUTTON
55 #define NOTIFY_KEY_DOWN
56 #define USE_KEY_LOCKED
57 #define USE_SHIFT_NUMPAD_KEY
58 #define USE_ALT_F10_KEY
59 #define USE_AUTO_KEY            5
60 #define USE_AUTO_KEY_RELEASE    6
61 #define USE_AUTO_KEY_NO_CAPS
62 #if defined(SUPPORT_MZ80AIF) || defined(SUPPORT_MZ80FIO)
63 #define USE_SOUND_VOLUME        4
64 #else
65 #define USE_SOUND_VOLUME        3
66 #endif
67 #define USE_PRINTER
68 #define USE_PRINTER_TYPE        4
69 #define USE_DEBUGGER
70 #define USE_STATE
71 #if defined(SUPPORT_MZ80AIF)
72 #define USE_DRIVE_TYPE          2
73 #endif
74 #if defined(SUPPORT_MZ80AIF) || defined(SUPPORT_MZ80FIO)
75 #define USE_FLOPPY_DISK         4
76 #endif
77 #if defined(_MZ80K)
78 #define USE_MONITOR_TYPE        2
79 #endif
80 #define USE_CPU_Z80
81
82 #include "../../common.h"
83 #include "../../fileio.h"
84 #include "../vm_template.h"
85
86 #ifdef USE_SOUND_VOLUME
87 static const _TCHAR *sound_device_caption[] = {
88         _T("Beep"), _T("CMT (Signal)"),
89 #if defined(SUPPORT_MZ80AIF) || defined(SUPPORT_MZ80FIO)
90         _T("Noise (FDD)"),
91 #endif
92         _T("Noise (CMT)"),
93 };
94 #endif
95
96 class csp_state_utils;
97 class EMU;
98 class DEVICE;
99 class EVENT;
100
101 #if defined(_MZ1200) || defined(_MZ80A)
102 class AND;
103 #endif
104 class DATAREC;
105 class I8253;
106 class I8255;
107 class LS393;
108 class PCM1BIT;
109 class Z80;
110
111 class KEYBOARD;
112 class MEMORY;
113 class PRINTER;
114
115 #if defined(SUPPORT_MZ80AIF)
116 class MB8877;
117 class IO;
118 class MZ80AIF;
119 #elif defined(SUPPORT_MZ80FIO)
120 class T3444A;
121 class IO;
122 class MZ80FIO;
123 #endif
124
125 class VM : public VM_TEMPLATE
126 {
127 protected:
128         //EMU* emu;
129         //csp_state_utils* state_entry;
130         
131         // devices
132         //EVENT* event;
133         
134 #if defined(_MZ1200) || defined(_MZ80A)
135         AND* and_int;
136 #endif
137         DATAREC* drec;
138         I8253* ctc;
139         I8255* pio;
140         LS393* counter;
141         PCM1BIT* pcm;
142         Z80* cpu;
143         
144         KEYBOARD* keyboard;
145         MEMORY* memory;
146         PRINTER* printer;
147         
148 #if defined(SUPPORT_MZ80AIF)
149         MB8877* fdc;
150         IO* io;
151         MZ80AIF* mz80aif;
152 #elif defined(SUPPORT_MZ80FIO)
153         T3444A* fdc;
154         IO* io;
155         MZ80FIO* mz80fio;
156 #endif
157         
158 public:
159         // ----------------------------------------
160         // initialize
161         // ----------------------------------------
162         
163         VM(EMU* parent_emu);
164         ~VM();
165         
166         // ----------------------------------------
167         // for emulation class
168         // ----------------------------------------
169         
170         // drive virtual machine
171         void reset();
172         void run();
173         
174 #ifdef USE_DEBUGGER
175         // debugger
176         DEVICE *get_cpu(int index);
177 #endif
178         
179         // draw screen
180         void draw_screen();
181         
182         // sound generation
183         void initialize_sound(int rate, int samples);
184         uint16_t* create_sound(int* extra_frames);
185         int get_sound_buffer_ptr();
186 #ifdef USE_SOUND_VOLUME
187         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
188 #endif
189         
190         // notify key
191         void key_down(int code, bool repeat);
192         void key_up(int code);
193         bool get_caps_locked();
194         bool get_kana_locked();
195         
196         // user interface
197 #if defined(SUPPORT_MZ80AIF) || defined(SUPPORT_MZ80FIO)
198         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
199         void close_floppy_disk(int drv);
200         bool is_floppy_disk_inserted(int drv);
201         void is_floppy_disk_protected(int drv, bool value);
202         bool is_floppy_disk_protected(int drv);
203         uint32_t is_floppy_disk_accessed();
204 #endif
205         void play_tape(int drv, const _TCHAR* file_path);
206         void rec_tape(int drv, const _TCHAR* file_path);
207         void close_tape(int drv);
208         bool is_tape_inserted(int drv);
209         bool is_tape_playing(int drv);
210         bool is_tape_recording(int drv);
211         int get_tape_position(int drv);
212         const _TCHAR* get_tape_message(int drv);
213         void push_play(int drv);
214         void push_stop(int drv);
215         void push_fast_forward(int drv);
216         void push_fast_rewind(int drv);
217         void push_apss_forward(int drv) {}
218         void push_apss_rewind(int drv) {}
219         bool is_frame_skippable();
220         
221         void update_config();
222         void decl_state();
223         void save_state(FILEIO* state_fio);
224         bool load_state(FILEIO* state_fio);
225         
226         // ----------------------------------------
227         // for each device
228         // ----------------------------------------
229         
230         // devices
231         DEVICE* get_device(int id);
232         //DEVICE* dummy;
233         //DEVICE* first_device;
234         //DEVICE* last_device;
235 };
236
237 #endif