OSDN Git Service

[VM][FM7] Using logger.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm7 / fm7.h
1 /*
2         FUJITSU FM7 Emulator 'eFM7'
3
4         Author : K.Ohta
5         Date   : 2015.01.01-
6
7         [ virtual machine ]
8 */
9
10 #ifndef _FM7_H_
11 #define _FM7_H_
12
13 #define USE_TAPE
14 #define USE_SOUND_DEVICE_TYPE 8
15 #define USE_SCANLINE
16 #define USE_DIPSWITCH
17 #define USE_BOOT_MODE         4
18 #define USE_CPU_TYPE
19 #define USE_SPECIAL_RESET
20 //#undef  HAS_YM2608
21 //#define SUPPORT_YM2203_PORT
22 //#define HAS_AY_3_8910
23 // 4:3
24 #define SCREEN_WIDTH_ASPECT 400 
25 #define SCREEN_HEIGHT_ASPECT 300
26
27 #define NOTIFY_KEY_DOWN
28 #define NOTIFY_KEY_UP
29 #define USE_ALT_F10_KEY
30 #define USE_AUTO_KEY            5
31 #define USE_AUTO_KEY_RELEASE    6
32 #define USE_ACCESS_LAMP
33 //#define USE_DEBUGGER
34 #define _DEBUG_LOG
35
36
37 #if defined(_FM8)
38 #define DEVICE_NAME             "FUJITSU FM8"
39 #define CONFIG_NAME             "fm8"
40 #define CAPABLE_Z80
41
42 #elif defined(_FM7)
43 #define DEVICE_NAME             "FUJITSU FM7"
44 #define CONFIG_NAME             "fm7"
45 #define CAPABLE_Z80
46
47 #elif defined(_FM77L4)
48 #define DEVICE_NAME             "FUJITSU FM77L4"
49 #define CONFIG_NAME             "fm77l4"
50 #define HAS_MMR
51 #define HAS_400LINECARD
52 #define HAS_TEXTVRAM
53 #define HAS_2HD
54 #define HAS_CYCLESTEAL
55 #define CAPABLE_Z80
56 #define CAPABLE_KANJI_CLASS2
57 #define USE_DRIVE_TYPE
58
59 #elif defined(_FM77AV)
60 #define DEVICE_NAME             "FUJITSU FM77AV"
61 #define CONFIG_NAME             "fm77av"
62 #define _FM77AV_VARIANTS
63 #define HAS_MMR
64 #define HAS_CYCLESTEAL
65
66 #elif defined(_FM77AV20)
67 #define DEVICE_NAME             "FUJITSU FM77AV"
68 #define CONFIG_NAME             "fm77av20"
69 #define _FM77AV_VARIANTS
70 #define HAS_MMR
71 #define HAS_2DD_2D
72 #define HAS_CYCLESTEAL
73 #define USE_DRIVE_TYPE
74
75 #elif defined(_FM77AV40)
76 #define DEVICE_NAME             "FUJITSU FM77AV"
77 #define CONFIG_NAME             "fm77av40"
78 #define _FM77AV_VARIANTS
79 #define HAS_MMR
80 #define HAS_2DD_2D
81 #define HAS_CYCLESTEAL
82 #define CAPABLE_KANJI_CLASS2
83 #define USE_DRIVE_TYPE
84
85 #endif
86
87 // device informations for virtual machine
88
89 // TODO: check refresh rate
90 #define FRAMES_PER_SEC          60
91 #define LINES_PER_FRAME         400
92 #define CPU_CLOCKS              2000000
93 #define SCREEN_WIDTH            640
94 #define SCREEN_HEIGHT           400
95 #define MAX_DRIVE               4
96 #define HAS_MC6809              
97 #define MB8877_MAX_CHIPS        1
98 //#define IO_ADDR_MAX           0x10000
99
100 // device informations for win32
101 #define USE_FD1
102 #define USE_FD2
103 #define MAX_FD 2
104
105 #if defined(HAS_2HD)
106 #define USE_FD3
107 #define USE_FD4
108 #undef  MAX_FD
109 #define MAX_FD 4
110 #endif
111
112
113 #ifdef BUILD_Z80
114 # ifdef CAPABLE_Z80
115 #  define WITH_Z80
116 # endif
117 #endif
118
119 //#define ENABLE_OPENCL // If OpenCL renderer is enabled, define here.
120
121 #include "../../config.h"
122 #include "../../common.h"
123 #include "../../fileio.h"
124
125 class EMU;
126 class DEVICE;
127 class EVENT;
128 class FILEIO;
129
130 class PCM1BIT;
131 class MC6809;
132 class YM2203;
133 class MB8877;
134 class MEMORY;
135 class DATAREC;
136
137 class DISPLAY;
138
139 class FM7_MAINMEM;
140 class FM7_MAINIO;
141 class KEYBOARD;
142 class KANJIROM;
143
144 #if WITH_Z80
145 class Z80;
146 #endif
147
148 class VM {
149 protected:
150         EMU* emu;
151         
152         // devices
153         EVENT* event;
154         
155         MC6809* maincpu;
156         FM7_MAINMEM* mainmem;
157         FM7_MAINIO* mainio;
158
159         MB8877* fdc;
160         YM2203* opn[3];
161         YM2203* psg; // Is right? AY-3-8910 is right device.
162         PCM1BIT* pcm1bit;
163         DATAREC *drec;
164    
165 #ifdef  WITH_Z80
166         Z80* z80cpu;
167 #endif
168         DEVICE* printer;
169         DEVICE* mouse_opn;
170         DEVICE* inteli_mouse; 
171    
172         DEVICE *dummycpu;
173         MC6809* subcpu;
174         MEMORY* submem;
175
176         DISPLAY* display;
177         KEYBOARD* keyboard;
178    
179         KANJIROM *kanjiclass1;
180 #ifdef CAPABLE_KANJI_CLASS2
181         KANJIROM *kanjiclass2;
182 #endif
183         int machine_version; // 0 = FM8 / 1 = FM7 / 2 = FM77AV / 3 = FM77AV40, etc...
184         Uint32 bootmode;   
185         Uint32 connected_opns;
186         bool cycle_steal;
187         bool clock_low;
188         int mainfreq_type;
189         Uint32 mainfreq_low;
190         Uint32 mainfreq_high;
191         Uint32 mainfreq_mmr;
192         Uint32 mainfreq_high_mmr;
193  
194         Uint32 fdd_type[MAX_DRIVE];
195         BOOL   fdd_connect[MAX_DRIVE];
196
197         FILEIO* cmt_fileio;
198         bool cmt_enabled; // 77AV40SX is disabled.
199         bool cmt_play;
200         bool cmt_rec;
201         Uint32 cmt_bufptr;
202         bool connect_opn;
203         bool connect_whg;
204         bool connect_thg;
205    
206 public:
207         // ----------------------------------------
208         // initialize
209         // ----------------------------------------
210         
211         VM(EMU* parent_emu);
212         ~VM();
213         
214         // ----------------------------------------
215         // for emulation class
216         // ----------------------------------------
217         
218         // drive virtual machine
219         void reset();
220         void special_reset();
221         void run();
222         double frame_rate();
223         
224 #ifdef USE_DEBUGGER
225         // debugger
226         DEVICE *get_cpu(int index);
227 #endif
228         void initialize(void);
229         void connect_bus(void);
230
231         void update_dipswitch(void);
232         // draw screen
233         void draw_screen();
234         int access_lamp();
235         
236         // sound generation
237         void initialize_sound(int rate, int samples);
238         uint16* create_sound(int* extra_frames);
239         int sound_buffer_ptr();
240         
241         // notify key
242         void key_down(int code, bool repeat);
243         void key_up(int code);
244         
245         // user interface
246         void open_disk(int drv, _TCHAR* file_path, int offset);
247         void close_disk(int drv);
248         bool disk_inserted(int drv);
249         void write_protect_fd(int drv, bool flag);
250         bool is_write_protect_fd(int drv);
251         
252         void play_tape(_TCHAR* file_path);
253         void rec_tape(_TCHAR* file_path);
254         void close_tape();
255         bool tape_inserted();
256         bool now_skip();
257         int get_tape_ptr(void);
258    
259         void update_config();
260         //void save_state(FILEIO* state_fio);
261         //bool load_state(FILEIO* state_fio);
262
263         // ----------------------------------------
264         // for each device
265         // ----------------------------------------
266         void set_cpu_clock(DEVICE *cpu, uint32 clocks);
267         // devices
268         DEVICE* get_device(int id);
269         DEVICE* dummy;
270         DEVICE* first_device;
271         DEVICE* last_device;
272 };
273
274 #endif