OSDN Git Service

[VM][EMU] Merge Upstream 2017-06-22.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc98ha / pc98ha.h
1 /*
2         NEC PC-98LT Emulator 'ePC-98LT'
3         NEC PC-98HA Emulator 'eHANDY98'
4
5         Author : Takeda.Toshiya
6         Date   : 2008.06.09 -
7
8         [ virtual machine ]
9 */
10
11 #ifndef _PC98HA_H_
12 #define _PC98HA_H_
13
14 #ifdef _PC98HA
15 #define DEVICE_NAME             "NEC PC-98HA"
16 #define CONFIG_NAME             "pc98ha"
17 #else
18 #define DEVICE_NAME             "NEC PC-98LT"
19 #define CONFIG_NAME             "pc98lt"
20 #endif
21
22 // device informations for virtual machine
23 #define FRAMES_PER_SEC          56.4
24 #define LINES_PER_FRAME         440
25 #ifdef _PC98HA
26 #define CPU_CLOCKS              10000000
27 #else
28 #define CPU_CLOCKS              8000000
29 #endif
30 #define SCREEN_WIDTH            640
31 #define SCREEN_HEIGHT           400
32 #define MAX_DRIVE               1
33 #define HAS_V30
34 #define I86_PSEUDO_BIOS
35 #define I8259_MAX_CHIPS         1
36 //#define UPD765A_DMA_MODE
37 //#define SINGLE_MODE_DMA
38 #define IO_ADDR_MAX             0x10000
39 #define IOBUS_RETURN_ADDR
40 #ifdef _PC98HA
41 //#define DOCKING_STATION
42 #endif
43
44 // device informations for win32
45 #define USE_FD1
46 #define NOTIFY_KEY_DOWN
47 #define USE_KEY_LOCKED
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_SOUND_VOLUME        2
53 #define USE_PRINTER
54 #define USE_PRINTER_TYPE        3
55 #define USE_DEBUGGER
56 #define USE_STATE
57
58 #include "../../common.h"
59 #include "../../fileio.h"
60
61 #ifdef USE_SOUND_VOLUME
62 static const _TCHAR *sound_device_caption[] = {
63         _T("Beep"), _T("Noise (FDD)"),
64 };
65 #endif
66
67 class EMU;
68 class DEVICE;
69 class EVENT;
70
71 class BEEP;
72 class I8251;
73 class I8253;
74 class I8255;
75 class I8259;
76 #if defined(HAS_V30) || defined(HAS_I86)
77 class I86;
78 #else
79 class I286;
80 #endif
81 class IO;
82 class NOT;
83 #ifdef _PC98HA
84 class UPD4991A;
85 #else
86 class UPD1990A;
87 #endif
88 class UPD71071;
89 class UPD765A;
90
91 class BIOS;
92 class CALENDAR;
93 class FLOPPY;
94 class KEYBOARD;
95 class MEMORY;
96 class NOTE;
97
98 class VM
99 {
100 protected:
101         EMU* emu;
102         
103         // devices
104         EVENT* event;
105         
106         BEEP* beep;
107         DEVICE* printer;
108         I8251* sio_rs;
109         I8251* sio_kbd;
110         I8253* pit;
111         I8255* pio_sys;
112         I8255* pio_prn;
113         I8259* pic;
114 #if defined(HAS_V30) || defined(HAS_I86)
115         I86* cpu;
116 #else
117         I286* cpu;
118 #endif
119         IO* io;
120         NOT* not_busy;
121 #ifdef _PC98HA
122         UPD4991A* rtc;
123 #else
124         UPD1990A* rtc;
125 #endif
126         UPD71071* dma;
127         UPD765A* fdc;
128         
129         BIOS* bios;
130         CALENDAR* calendar;
131         FLOPPY* floppy;
132         KEYBOARD* keyboard;
133         MEMORY* memory;
134         NOTE* note;
135         
136 public:
137         // ----------------------------------------
138         // initialize
139         // ----------------------------------------
140         
141         VM(EMU* parent_emu);
142         ~VM();
143         
144         // ----------------------------------------
145         // for emulation class
146         // ----------------------------------------
147         
148         // drive virtual machine
149         void reset();
150         void run();
151         
152 #ifdef USE_DEBUGGER
153         // debugger
154         DEVICE *get_cpu(int index);
155 #endif
156         
157         // draw screen
158         void draw_screen();
159         
160         // sound generation
161         void initialize_sound(int rate, int samples);
162         uint16_t* create_sound(int* extra_frames);
163         int get_sound_buffer_ptr();
164 #ifdef USE_SOUND_VOLUME
165         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
166 #endif
167         
168         // notify key
169         void key_down(int code, bool repeat);
170         void key_up(int code);
171         bool get_caps_locked();
172         bool get_kana_locked();
173         
174         // user interface
175         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
176         void close_floppy_disk(int drv);
177         bool is_floppy_disk_inserted(int drv);
178         void is_floppy_disk_protected(int drv, bool value);
179         bool is_floppy_disk_protected(int drv);
180         uint32_t is_floppy_disk_accessed();
181         bool is_frame_skippable();
182         
183         void update_config();
184         void save_state(FILEIO* state_fio);
185         bool load_state(FILEIO* state_fio);
186         
187         // ----------------------------------------
188         // for each device
189         // ----------------------------------------
190         
191         // devices
192         DEVICE* get_device(int id);
193         DEVICE* dummy;
194         DEVICE* first_device;
195         DEVICE* last_device;
196 };
197
198 #endif