OSDN Git Service

[VM][FMTOWNS][MEMORY] Fix setup around memory banks by I/O 0404h and 0480h.
[csp-qt/common_source_project-fm7.git] / source / src / vm / msx / msx.h
1 /*
2         ASCII MSX1 Emulator 'yaMSX1'
3         ASCII MSX2 Emulator 'yaMSX2'
4         Pioneer PX-7 Emulator 'ePX-7'
5
6         Author : tanam
7         Date   : 2013.06.29-
8
9         modified by Takeda.Toshiya
10         modified by umaiboux
11
12         [ virtual machine ]
13 */
14
15 #ifndef _MSX_H_
16 #define _MSX_H_
17
18 #if defined(_PX7)
19 #define DEVICE_NAME             "PIONEER PX-7"
20 #define CONFIG_NAME             "px7"
21 #elif defined(_MSX1)
22 #define DEVICE_NAME             "ASCII MSX1"
23 #define CONFIG_NAME             "msx1"
24 #elif defined(_MSX2)
25 #define DEVICE_NAME             "ASCII MSX2"
26 #define CONFIG_NAME             "msx2"
27 #endif
28
29 // device informations for virtual machine
30 #define FRAMES_PER_SEC          60
31 #define LINES_PER_FRAME         262
32 #define CPU_CLOCKS              3579545
33 #if defined(_MSX2)
34 #define SCREEN_WIDTH            ((256 + 15)*2)  // V99X8_WIDTH
35 #define SCREEN_HEIGHT           ((212 + 15)*2)  // V99X8_HEIGHT
36 #else
37 #define SCREEN_WIDTH            512
38 #define SCREEN_HEIGHT           384
39 #endif
40 #define TMS9918A_VRAM_SIZE      0x4000
41 #define TMS9918A_LIMIT_SPRITES
42 #if defined(_PX7)
43 #define TMS9918A_SUPER_IMPOSE
44 #else
45 #define MAX_DRIVE               2
46 #define SUPPORT_MEDIA_TYPE_1DD
47 #define Z80_PSEUDO_BIOS
48 #endif
49 #define HAS_AY_3_8910
50 // for Flappy Limited '85
51 #define AY_3_891X_PORT_MODE     0x80
52
53 // device informations for win32
54 #define USE_CART                2
55 #define USE_TAPE                1
56 #if defined(_PX7)
57 #define USE_LASER_DISC          1
58 #define USE_MOVIE_PLAYER
59 #else
60 #define USE_FLOPPY_DISK         2
61 #endif
62 #define USE_AUTO_KEY            6
63 #define USE_AUTO_KEY_RELEASE    10
64 #if defined(_PX7)
65 #define USE_SOUND_VOLUME        5
66 #else
67 //#define USE_SOUND_VOLUME      5
68 #define USE_SOUND_VOLUME        4
69 #endif
70 #define SUPPORT_TV_RENDER
71 #define USE_JOYSTICK
72 #define USE_DEBUGGER
73 #define USE_STATE
74 #define USE_CPU_Z80
75
76 #include "../../common.h"
77 #include "../../fileio.h"
78 #include "../vm_template.h"
79
80 #ifdef USE_SOUND_VOLUME
81 static const _TCHAR *sound_device_caption[] = {
82         _T("PSG"), _T("Beep"), _T("CMT (Signal)"),
83 #if defined(_PX7)
84         _T("LD-700"),
85 #endif
86          _T("Noise (CMT)"),
87 };
88 #endif
89
90 class EMU;
91 class DEVICE;
92 class EVENT;
93
94 class DATAREC;
95 class I8255;
96 class IO;
97 #if defined(_PX7)
98 class LD700;
99 #endif
100 class NOT;
101 //class YM2203;
102 class AY_3_891X;
103 class PCM1BIT;
104 #if defined(_MSX2)
105 class RP5C01;
106 class V99X8;
107 #else
108 class TMS9918A;
109 #endif
110 class Z80;
111
112 namespace MSX {
113         class JOYSTICK;
114         class KEYBOARD;
115         class MEMORY;
116 #if defined(_MSX2)
117         class RTCIF;
118 #endif
119         class SLOT0;
120         class SLOT1;
121         class SLOT2;
122         class SLOT3;
123 }
124 class VM : public VM_TEMPLATE
125 {
126 protected:
127         //EMU* emu;
128
129         // devices
130         //EVENT* event;
131
132         DATAREC* drec;
133         I8255* pio;
134         IO* io;
135 #if defined(_PX7)
136         LD700* ldp;
137 #endif
138         NOT* not_remote;
139 //      YM2203* psg;
140         AY_3_891X* psg;
141         PCM1BIT* pcm;
142 #if defined(_MSX2)
143         RP5C01* rtc;
144         V99X8* vdp;
145 #else
146         TMS9918A* vdp;
147 #endif
148         Z80* cpu;
149
150         MSX::JOYSTICK* joystick;
151         MSX::KEYBOARD* keyboard;
152         MSX::MEMORY* memory;
153 #ifdef _MSX2
154         MSX::RTCIF* rtcif;
155 #endif
156         MSX::SLOT0 *slot0;
157         MSX::SLOT1 *slot1;
158         MSX::SLOT2 *slot2;
159         MSX::SLOT3 *slot3;
160
161 public:
162         // ----------------------------------------
163         // initialize
164         // ----------------------------------------
165
166         VM(EMU_TEMPLATE* parent_emu);
167         ~VM();
168
169         // ----------------------------------------
170         // for emulation class
171         // ----------------------------------------
172
173         // drive virtual machine
174         void reset()  override;
175         void run()  override;
176         double get_frame_rate() override
177         {
178                 return FRAMES_PER_SEC;
179         }
180
181 #ifdef USE_DEBUGGER
182         // debugger
183         DEVICE *get_cpu(int index)  override;
184 #endif
185
186         // draw screen
187         void draw_screen()  override;
188
189         // sound generation
190         void initialize_sound(int rate, int samples)  override;
191         uint16_t* create_sound(int* extra_frames)  override;
192         int get_sound_buffer_ptr()  override;
193 #if defined(_PX7)
194         void movie_sound_callback(uint8_t *buffer, long size)  override;
195 #endif
196 #ifdef USE_SOUND_VOLUME
197         void set_sound_device_volume(int ch, int decibel_l, int decibel_r)  override;
198 #endif
199
200         // user interface
201         void open_cart(int drv, const _TCHAR* file_path)  override;
202         void close_cart(int drv)  override;
203         bool is_cart_inserted(int drv)  override;
204         void play_tape(int drv, const _TCHAR* file_path)  override;
205         void rec_tape(int drv, const _TCHAR* file_path)  override;
206         void close_tape(int drv)  override;
207         bool is_tape_inserted(int drv)  override;
208         bool is_tape_playing(int drv)  override;
209         bool is_tape_recording(int drv)  override;
210         int get_tape_position(int drv)  override;
211         const _TCHAR* get_tape_message(int drv)  override;
212         void push_play(int drv)  override;
213         void push_stop(int drv)  override;
214         void push_fast_forward(int drv)  override;
215         void push_fast_rewind(int drv)  override;
216         void push_apss_forward(int drv) override {}
217         void push_apss_rewind(int drv) override {}
218 #if defined(_PX7)
219         void open_laser_disc(int drv, const _TCHAR* file_path)  override;
220         void close_laser_disc(int drv)  override;
221         bool is_laser_disc_inserted(int drv)  override;
222         uint32_t is_laser_disc_accessed()  override;
223 #else
224         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank)  override;
225         void close_floppy_disk(int drv)  override;
226         bool is_floppy_disk_inserted(int drv)  override;
227         void is_floppy_disk_protected(int drv, bool value)  override;
228         bool is_floppy_disk_protected(int drv)  override;
229         uint32_t is_floppy_disk_accessed()  override;
230 #endif
231         bool is_frame_skippable()  override;
232
233         double get_current_usec()  override;
234         uint64_t get_current_clock_uint64()  override;
235
236         void update_config()  override;
237         bool process_state(FILEIO* state_fio, bool loading);
238
239         // ----------------------------------------
240         // for each device
241         // ----------------------------------------
242
243         // devices
244         DEVICE* get_device(int id) override;
245         //DEVICE* dummy;
246         //DEVICE* first_device;
247         //DEVICE* last_device;
248 };
249
250 #endif