OSDN Git Service

21a26c8579d03fef5f34b030601d821b0d704e50
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2500 / mz2500.h
1 /*
2         SHARP MZ-2500 Emulator 'EmuZ-2500'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.11.24 -
6
7         [ virtual machine ]
8 */
9
10 #ifndef _MZ2500_H_
11 #define _MZ2500_H_
12
13 #define DEVICE_NAME             "SHARP MZ-2500"
14 #define CONFIG_NAME             "mz2500"
15
16 // device informations for virtual machine
17 #define FRAMES_PER_SEC          55.49
18 #define LINES_PER_FRAME         448
19 #define CHARS_PER_LINE          108
20 #define CPU_CLOCKS              6000000
21 #define SCREEN_WIDTH            640
22 #define SCREEN_HEIGHT           400
23 #define WINDOW_HEIGHT_ASPECT    480
24 #define MAX_DRIVE               4
25 #define HAS_MB8876
26 #define HAS_RP5C15
27 #define DATAREC_SOUND
28 #define DATAREC_SOUND_RIGHT
29 // FIXME: need to adjust speed for BASIC-M25 Demonstration
30 //#define DATAREC_FAST_FWD_SPEED        10
31 //#define DATAREC_FAST_REW_SPEED        10
32 #define SCSI_HOST_AUTO_ACK
33 #define SUPPORT_VARIABLE_TIMING
34
35 // memory wait
36 #define Z80_MEMORY_WAIT
37 #define Z80_IO_WAIT
38
39 // device informations for win32
40 #define USE_SPECIAL_RESET
41 #define USE_DRIVE_TYPE          2
42 #define USE_FLOPPY_DISK         4
43 #define USE_TAPE                1
44 #define USE_TAPE_BUTTON
45 #define USE_HARD_DISK           2
46 #define OPEN_HARD_DISK_IN_RESET
47 #define USE_SOCKET
48 #define USE_SHIFT_NUMPAD_KEY
49 #define USE_ALT_F10_KEY
50 #define USE_AUTO_KEY            5
51 #define USE_AUTO_KEY_RELEASE    6
52 #define USE_AUTO_KEY_NUMPAD
53 #define USE_MONITOR_TYPE        4
54 #define USE_SCREEN_FILTER
55 #define USE_SCANLINE
56 #define USE_SOUND_VOLUME        7
57 #define USE_JOYSTICK
58 #define USE_MOUSE
59 #define USE_PRINTER
60 #define USE_PRINTER_TYPE        4
61 #define USE_DEBUGGER
62 #define USE_STATE
63 #define USE_CPU_Z80
64
65 #include "../../common.h"
66 #include "../../fileio.h"
67 #include "../vm_template.h"
68
69 #ifdef USE_SOUND_VOLUME
70 static const _TCHAR *sound_device_caption[] = {
71         _T("OPN (FM)"), _T("OPN (PSG)"), _T("Beep"), _T("CMT (Signal)"), _T("CMT (Voice)"), _T("Noise (FDD)"), _T("Noise (CMT)"),
72 };
73 #endif
74
75 //class csp_state_utils;
76 //class EMU;
77 class DEVICE;
78 class EVENT;
79
80 class DATAREC;
81 class I8253;
82 class I8255;
83 class IO;
84 class MB8877;
85 class PCM1BIT;
86 class RP5C01;
87 class SCSI_HDD;
88 class SCSI_HOST;
89 class W3100A;
90 class YM2203;
91 class Z80;
92 class Z80PIO;
93 class Z80SIO;
94
95 class CALENDAR;
96 class CMT;
97 class CRTC;
98 class FLOPPY;
99 class INTERRUPT;
100 class JOYSTICK;
101 class KEYBOARD;
102 class MEMORY;
103 class MOUSE;
104 class MZ1E26;
105 class MZ1E30;
106 class MZ1R13;
107 class MZ1R37;
108 class PRINTER;
109 class SERIAL;
110 class TIMER;
111
112 class VM : public VM_TEMPLATE
113 {
114 protected:
115         //EMU* emu;
116         //csp_state_utils* state_entry;
117         
118         // devices
119         //EVENT* event;
120         
121         DATAREC* drec;
122         I8253* pit;
123         I8255* pio_i;
124         IO* io;
125         MB8877* fdc;
126         PCM1BIT* pcm;
127         RP5C01* rtc;
128         SCSI_HDD* sasi_hdd;
129         SCSI_HOST* sasi_host;
130         W3100A* w3100a;
131         YM2203* opn;
132         Z80* cpu;
133         Z80PIO* pio;
134         Z80SIO* sio;
135         
136         CALENDAR* calendar;
137         CMT* cmt;
138         CRTC* crtc;
139         FLOPPY* floppy;
140         INTERRUPT* interrupt;
141         JOYSTICK* joystick;
142         KEYBOARD* keyboard;
143         MEMORY* memory;
144         MOUSE* mouse;
145         MZ1E26* mz1e26;
146         MZ1E30* mz1e30;
147         MZ1R13* mz1r13;
148         MZ1R37* mz1r37;
149         PRINTER* printer;
150         SERIAL* serial;
151         TIMER* timer;
152         
153 #if defined(OPEN_HARD_DISK_IN_RESET)
154         _TCHAR hd_file_path[2][_MAX_PATH];
155 #endif
156         void open_hard_disk_tmp(int drv, const _TCHAR* file_path);
157         void close_hard_disk_tmp(int drv);
158         bool is_hard_disk_inserted_tmp(int drv);
159         
160         // monitor type cache
161         int monitor_type;
162         
163 public:
164         // ----------------------------------------
165         // initialize
166         // ----------------------------------------
167         
168         VM(EMU* parent_emu);
169         ~VM();
170         
171         // ----------------------------------------
172         // for emulation class
173         // ----------------------------------------
174         
175         // drive virtual machine
176         void reset();
177         void special_reset();
178         void run();
179         double get_frame_rate();
180         
181 #ifdef USE_DEBUGGER
182         // debugger
183         DEVICE *get_cpu(int index);
184 #endif
185         
186         // draw screen
187         void draw_screen();
188         
189         // sound generation
190         void initialize_sound(int rate, int samples);
191         uint16_t* create_sound(int* extra_frames);
192         int get_sound_buffer_ptr();
193 #ifdef USE_SOUND_VOLUME
194         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
195 #endif
196         
197         // socket
198         void notify_socket_connected(int ch);
199         void notify_socket_disconnected(int ch);
200         uint8_t* get_socket_send_buffer(int ch, int* size);
201         void inc_socket_send_buffer_ptr(int ch, int size);
202         uint8_t* get_socket_recv_buffer0(int ch, int* size0, int* size1);
203         uint8_t* get_socket_recv_buffer1(int ch);
204         void inc_socket_recv_buffer_ptr(int ch, int size);
205         
206         // user interface
207         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
208         void close_floppy_disk(int drv);
209         bool is_floppy_disk_inserted(int drv);
210         void is_floppy_disk_protected(int drv, bool value);
211         bool is_floppy_disk_protected(int drv);
212         uint32_t is_floppy_disk_accessed();
213         void open_hard_disk(int drv, const _TCHAR* file_path);
214         void close_hard_disk(int drv);
215         bool is_hard_disk_inserted(int drv);
216         uint32_t is_hard_disk_accessed();
217         void play_tape(int drv, const _TCHAR* file_path);
218         void rec_tape(int drv, const _TCHAR* file_path);
219         void close_tape(int drv);
220         bool is_tape_inserted(int drv);
221         bool is_tape_playing(int drv);
222         bool is_tape_recording(int drv);
223         int get_tape_position(int drv);
224         const _TCHAR* get_tape_message(int drv);
225         void push_play(int drv);
226         void push_stop(int drv);
227         void push_fast_forward(int drv);
228         void push_fast_rewind(int drv);
229         void push_apss_forward(int drv) {}
230         void push_apss_rewind(int drv) {}
231         bool is_frame_skippable();
232         
233         void update_config();
234         void decl_state();
235         void save_state(FILEIO* state_fio);
236         bool load_state(FILEIO* state_fio);
237         
238         // ----------------------------------------
239         // for each device
240         // ----------------------------------------
241         
242         // devices
243         DEVICE* get_device(int id);
244         //DEVICE* dummy;
245         //DEVICE* first_device;
246         //DEVICE* last_device;
247 };
248
249 #endif