OSDN Git Service

74e62913f90524ce65d8027c22c3cd9acc176de4
[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_FLOPPY_DISK         1
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_AUTO_KEY_NUMPAD
53 #define USE_SOUND_VOLUME        2
54 #define USE_PRINTER
55 #define USE_PRINTER_TYPE        3
56 #define USE_DEBUGGER
57 #define USE_STATE
58 #define USE_CPU_I286
59
60 #include "../../common.h"
61 #include "../../fileio.h"
62
63 #ifdef USE_SOUND_VOLUME
64 static const _TCHAR *sound_device_caption[] = {
65         _T("Beep"), _T("Noise (FDD)"),
66 };
67 #endif
68
69 class EMU;
70 class DEVICE;
71 class EVENT;
72
73 class BEEP;
74 class I8251;
75 class I8253;
76 class I8255;
77 class I8259;
78 //#if defined(HAS_V30) || defined(HAS_I86)
79 //class I86;
80 //#else
81 class I286;
82 //#endif
83 class IO;
84 class NOT;
85 #ifdef _PC98HA
86 class UPD4991A;
87 #else
88 class UPD1990A;
89 #endif
90 class UPD71071;
91 class UPD765A;
92
93 class BIOS;
94 class CALENDAR;
95 class FLOPPY;
96 class KEYBOARD;
97 class MEMORY;
98 class NOTE;
99
100 class VM
101 {
102 protected:
103         EMU* emu;
104         
105         // devices
106         EVENT* event;
107         
108         BEEP* beep;
109         DEVICE* printer;
110         I8251* sio_rs;
111         I8251* sio_kbd;
112         I8253* pit;
113         I8255* pio_sys;
114         I8255* pio_prn;
115         I8259* pic;
116 //#if defined(HAS_V30) || defined(HAS_I86)
117 //      I86* cpu;
118 //#else
119         I286* cpu;
120 //#endif
121         IO* io;
122         NOT* not_busy;
123 #ifdef _PC98HA
124         UPD4991A* rtc;
125 #else
126         UPD1990A* rtc;
127 #endif
128         UPD71071* dma;
129         UPD765A* fdc;
130         
131         BIOS* bios;
132         CALENDAR* calendar;
133         FLOPPY* floppy;
134         KEYBOARD* keyboard;
135         MEMORY* memory;
136         NOTE* note;
137         
138 public:
139         // ----------------------------------------
140         // initialize
141         // ----------------------------------------
142         
143         VM(EMU* parent_emu);
144         ~VM();
145         
146         // ----------------------------------------
147         // for emulation class
148         // ----------------------------------------
149         
150         // drive virtual machine
151         void reset();
152         void run();
153         
154 #ifdef USE_DEBUGGER
155         // debugger
156         DEVICE *get_cpu(int index);
157 #endif
158         
159         // draw screen
160         void draw_screen();
161         
162         // sound generation
163         void initialize_sound(int rate, int samples);
164         uint16_t* create_sound(int* extra_frames);
165         int get_sound_buffer_ptr();
166 #ifdef USE_SOUND_VOLUME
167         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
168 #endif
169         
170         // notify key
171         void key_down(int code, bool repeat);
172         void key_up(int code);
173         bool get_caps_locked();
174         bool get_kana_locked();
175         
176         // user interface
177         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
178         void close_floppy_disk(int drv);
179         bool is_floppy_disk_inserted(int drv);
180         void is_floppy_disk_protected(int drv, bool value);
181         bool is_floppy_disk_protected(int drv);
182         uint32_t is_floppy_disk_accessed();
183         bool is_frame_skippable();
184         
185         void update_config();
186         void save_state(FILEIO* state_fio);
187         bool load_state(FILEIO* state_fio);
188         
189         // ----------------------------------------
190         // for each device
191         // ----------------------------------------
192         
193         // devices
194         DEVICE* get_device(int id);
195         DEVICE* dummy;
196         DEVICE* first_device;
197         DEVICE* last_device;
198 };
199
200 #endif