OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2800 / mz2800.h
1 /*
2         SHARP MZ-2800 Emulator 'EmuZ-2800'
3
4         Author : Takeda.Toshiya
5         Date   : 2007.08.13 -
6
7         [ virtual machine ]
8 */
9
10 #ifndef _MZ2800_H_
11 #define _MZ2800_H_
12
13 #define DEVICE_NAME             "SHARP MZ-2800"
14 #define CONFIG_NAME             "mz2800"
15
16 // device informations for virtual machine
17 #define FRAMES_PER_SEC          55.4
18 #define LINES_PER_FRAME         440
19 #define CHARS_PER_LINE          108
20 #define CPU_CLOCKS              8000000
21 #define SCREEN_WIDTH            640
22 #define SCREEN_HEIGHT           400
23 #define WINDOW_HEIGHT_ASPECT    480
24 #define MAX_DRIVE               4
25 #define HAS_I286
26 #define I8259_MAX_CHIPS         2
27 #define SINGLE_MODE_DMA
28 #define HAS_RP5C15
29 #define IO_ADDR_MAX             0x8000
30 #define SCSI_HOST_AUTO_ACK
31
32 // device informations for win32
33 #define USE_FLOPPY_DISK         4
34 #define USE_HARD_DISK           2
35 #define USE_SHIFT_NUMPAD_KEY
36 #define USE_ALT_F10_KEY
37 #define USE_AUTO_KEY            5
38 #define USE_AUTO_KEY_RELEASE    6
39 #define USE_AUTO_KEY_NUMPAD
40 #define USE_SCREEN_FILTER
41 #define USE_SOUND_VOLUME        4
42 #define USE_JOYSTICK
43 #define USE_MOUSE
44 #define USE_PRINTER
45 #define USE_PRINTER_TYPE        4
46 #define USE_DEBUGGER
47 #define USE_STATE
48 #define USE_CPU_I286
49
50 #include "../../common.h"
51 #include "../../fileio.h"
52 #include "../vm_template.h"
53
54 #ifdef USE_SOUND_VOLUME
55 static const _TCHAR *sound_device_caption[] = {
56         _T("OPN (FM)"), _T("OPN (PSG)"), _T("Beep"), _T("Noise (FDD)"),
57 };
58 #endif
59
60 class csp_state_utils;
61 class EMU;
62 class DEVICE;
63 class EVENT;
64
65 class I8253;
66 class I8255;
67 class I8259;
68 class I286;
69 class IO;
70 class MB8877;
71 class NOT;
72 class PCM1BIT;
73 class RP5C01;
74 class SASI_HDD;
75 class SCSI_HOST;
76 class UPD71071;
77 class YM2203;
78 class Z80PIO;
79 class Z80SIO;
80
81 namespace MZ2800 {
82         class CRTC;
83         class FLOPPY;
84         class JOYSTICK;
85         class KEYBOARD;
86         class MEMORY;
87         class MOUSE;
88         class PRINTER;
89         class RESET;
90         class SASI;
91         class SERIAL;
92         class SYSPORT;
93 }
94
95 class VM : public VM_TEMPLATE
96 {
97 protected:
98         //EMU* emu;
99         //csp_state_utils *state_entry;
100         
101         // devices
102         //EVENT* event;
103         
104         I8253* pit;
105         I8255* pio0;
106         I8259* pic;
107         I286* cpu;
108         IO* io;
109         MB8877* fdc;
110         NOT* not_busy;
111         PCM1BIT* pcm;
112         RP5C01* rtc;
113         SASI_HDD* sasi_hdd[4];
114         SCSI_HOST* sasi_host;
115         UPD71071* dma;
116         YM2203* opn;
117         Z80PIO* pio1;
118         Z80SIO* sio;
119         
120         MZ2800::CRTC* crtc;
121         MZ2800::FLOPPY* floppy;
122         MZ2800::JOYSTICK* joystick;
123         MZ2800::KEYBOARD* keyboard;
124         MZ2800::MEMORY* memory;
125         MZ2800::MOUSE* mouse;
126         MZ2800::PRINTER* printer;
127         MZ2800::RESET* rst;
128         MZ2800::SASI* sasi;
129         MZ2800::SERIAL* serial;
130         MZ2800::SYSPORT* sysport;
131         
132 public:
133         // ----------------------------------------
134         // initialize
135         // ----------------------------------------
136         
137         VM(EMU* parent_emu);
138         ~VM();
139         
140         // ----------------------------------------
141         // for emulation class
142         // ----------------------------------------
143         
144         // drive virtual machine
145         void reset();
146         void cpu_reset();
147         void run();
148         
149 #ifdef USE_DEBUGGER
150         // debugger
151         DEVICE *get_cpu(int index);
152 #endif
153         
154         // draw screen
155         void draw_screen();
156         
157         // sound generation
158         void initialize_sound(int rate, int samples);
159         uint16_t* create_sound(int* extra_frames);
160         int get_sound_buffer_ptr();
161 #ifdef USE_SOUND_VOLUME
162         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
163 #endif
164         
165         // user interface
166         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
167         void close_floppy_disk(int drv);
168         bool is_floppy_disk_inserted(int drv);
169         void is_floppy_disk_protected(int drv, bool value);
170         bool is_floppy_disk_protected(int drv);
171         uint32_t is_floppy_disk_accessed();
172         void open_hard_disk(int drv, const _TCHAR* file_path);
173         void close_hard_disk(int drv);
174         bool is_hard_disk_inserted(int drv);
175         uint32_t is_hard_disk_accessed();
176         bool is_frame_skippable();
177         
178         void update_config();
179         bool process_state(FILEIO* state_fio, bool loading);
180         
181         // ----------------------------------------
182         // for each device
183         // ----------------------------------------
184         
185         // devices
186         DEVICE* get_device(int id);
187         //DEVICE* dummy;
188         //DEVICE* first_device;
189         //DEVICE* last_device;
190 };
191
192 #endif