Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1088 | alone | 1 | #include "std.h" |
2 | |||
3 | #include "emul.h" |
||
4 | #include "vars.h" |
||
5 | #include "debug.h" |
||
6 | #include "memory.h" |
||
7 | #include "gsz80.h" |
||
8 | #include "z80.h" |
||
9 | #include "util.h" |
||
10 | #include "sndrender/sndcounter.h" |
||
11 | #include "sound.h" |
||
12 | |||
13 | //============================================================================= |
||
14 | namespace z80fast |
||
15 | { |
||
16 | #include "z80_main.h" |
||
17 | } |
||
18 | //============================================================================= |
||
19 | int fmsoundon0 = 4; //Alone Coder |
||
20 | int tfmstatuson0 = 2; //Alone Coder |
||
21 | char pressedit = 0; //Alone Coder |
||
22 | //============================================================================= |
||
23 | void __fastcall wmdbg( u32 addr, u8 val); |
||
24 | u8 __fastcall rmdbg( u32 addr); |
||
25 | u8 *__fastcall MemDbg( u32 addr); |
||
26 | void __cdecl BankNames( int i, char *Name); |
||
27 | //============================================================================= |
||
28 | namespace z80dbg |
||
29 | { |
||
30 | void Z80FAST step(); |
||
31 | __int64 __cdecl delta(); |
||
32 | void __cdecl SetLastT(); |
||
33 | } |
||
34 | //============================================================================= |
||
35 | #pragma pack(8) |
||
36 | |||
37 | void out( unsigned port, unsigned char val); |
||
38 | unsigned char in( unsigned port); |
||
39 | |||
40 | //============================================================================= |
||
41 | Z80INLINE unsigned char m1_cycle( Z80 *cpu) |
||
42 | { |
||
43 | // cpu->r_low++; cpu->t += 4; //0.39.0 |
||
44 | // return cpu->MemIf->xm(cpu->pc++); |
||
45 | |||
46 | unsigned char temp_op_code; //NEDOREPO |
||
47 | cpu->r_low++; |
||
48 | cpu->t += 4; |
||
49 | temp_op_code = cpu->MemIf->xm( cpu->pc++); |
||
50 | //------------------------------------------------------------------------- |
||
51 | if ((conf.mem_model == MM_ATM3) && (comp.pBE) && cpu->nmi_in_progress) |
||
52 | { |
||
53 | if (comp.pBE == 1) |
||
54 | { |
||
55 | if (trdos_in_nmi) |
||
56 | { |
||
57 | comp.flags |= CF_SETDOSROM | CF_TRDOS; |
||
58 | } |
||
59 | cpu->nmi_in_progress = false; |
||
60 | set_banks(); |
||
61 | } |
||
62 | comp.pBE--; |
||
63 | } |
||
64 | //------------------------------------------------------------------------- |
||
65 | return temp_op_code; //NEDOREPO |
||
66 | } |
||
67 | //============================================================================= |
||
68 | /* |
||
69 | unsigned char TMainZ80::rm(unsigned addr) |
||
70 | { |
||
71 | return z80fast::rm(addr); |
||
72 | } |
||
73 | unsigned char TMainZ80::dbgrm(unsigned addr) |
||
74 | { |
||
75 | return ::rmdbg(addr); |
||
76 | } |
||
77 | void TMainZ80::wm(unsigned addr, unsigned char val) |
||
78 | { |
||
79 | z80fast::wm(addr, val); |
||
80 | } |
||
81 | void TMainZ80::dbgwm(unsigned addr, unsigned char val) |
||
82 | { |
||
83 | ::wmdbg(addr, val); |
||
84 | } |
||
85 | */ |
||
86 | //============================================================================= |
||
87 | u8 *TMainZ80::DirectMem(unsigned addr) const |
||
88 | { |
||
89 | return am_r(addr); |
||
90 | } |
||
91 | //============================================================================= |
||
92 | unsigned char TMainZ80::m1_cycle() |
||
93 | { |
||
94 | return ::m1_cycle(this); |
||
95 | } |
||
96 | //============================================================================= |
||
97 | unsigned char TMainZ80::in(unsigned port) |
||
98 | { |
||
99 | return ::in(port); |
||
100 | } |
||
101 | //============================================================================= |
||
102 | void TMainZ80::out(unsigned port, unsigned char val) |
||
103 | { |
||
104 | ::out(port, val); |
||
105 | } |
||
106 | //============================================================================= |
||
107 | u8 TMainZ80::IntVec() |
||
108 | { |
||
109 | return (comp.flags & CF_Z80FBUS) ? u8(rdtsc() & 0xFF) : |
||
110 | 0xFF; |
||
111 | } |
||
112 | //============================================================================= |
||
113 | void TMainZ80::CheckNextFrame() |
||
114 | { |
||
115 | if (t >= conf.frame) |
||
116 | { |
||
117 | comp.t_states += conf.frame; |
||
118 | t -= conf.frame; |
||
119 | eipos -= conf.frame; |
||
120 | comp.frame_counter++; |
||
121 | int_pend = true; |
||
122 | } |
||
123 | } |
||
124 | //============================================================================= |
||
125 | void TMainZ80::retn() |
||
126 | { |
||
127 | // nmi_in_progress = false; //����������� � NEDOREPO |
||
128 | // set_banks(); //���� � 0.39.0 |
||
129 | } |
||
130 | //============================================================================= |
||
131 | static const TMemIf FastMemIf = |
||
132 | { |
||
133 | Xm, |
||
134 | Rm, |
||
135 | Wm |
||
136 | }; |
||
137 | //============================================================================= |
||
138 | static const TMemIf DbgMemIf = |
||
139 | { |
||
140 | DbgXm, |
||
141 | DbgRm, |
||
142 | DbgWm |
||
143 | }; |
||
144 | //============================================================================= |
||
145 | |||
146 | TMainZ80 cpu( 0, |
||
147 | BankNames, |
||
148 | z80dbg::step, |
||
149 | z80dbg::delta, |
||
150 | z80dbg::SetLastT, |
||
151 | membits, |
||
152 | io_bits, // [NS] |
||
153 | bp_disable_bits, // [NS] |
||
154 | &FastMemIf, |
||
155 | &DbgMemIf |
||
156 | ); |
||
157 | |||
158 | //============================================================================= |
||
159 | |||
160 | |||
161 | //============================================================================= |
||
162 | #ifdef MOD_GSZ80 |
||
163 | //------------------------------------------------------------------------- |
||
164 | namespace z80gs |
||
165 | { |
||
166 | //--------------------------------------------------------------------- |
||
167 | u8 __fastcall dbgrm(u32 addr); |
||
168 | void __fastcall dbgwm(u32 addr, u8 val); |
||
169 | u8 *__fastcall MemDbg(u32 addr); |
||
170 | void __cdecl BankNames(int i, char *Name); |
||
171 | void Z80FAST step(); |
||
172 | __int64 __cdecl delta(); |
||
173 | void __cdecl SetLastT(); |
||
174 | //--------------------------------------------------------------------- |
||
175 | u8 membits[ 0x10000]; |
||
176 | u8 io_bits[ 0x10000]; // [NS] |
||
177 | u8 bp_disable_bits[ 0x10000]; // [NS] |
||
178 | |||
179 | SNDRENDER sound; |
||
180 | //--------------------------------------------------------------------- |
||
181 | static const TMemIf FastMemIf = |
||
182 | { |
||
183 | z80gs::Xm, |
||
184 | z80gs::Rm, |
||
185 | z80gs::Wm |
||
186 | }; |
||
187 | //--------------------------------------------------------------------- |
||
188 | static const TMemIf DbgMemIf = |
||
189 | { |
||
190 | z80gs::DbgXm, |
||
191 | z80gs::DbgRm, |
||
192 | z80gs::DbgWm |
||
193 | }; |
||
194 | //--------------------------------------------------------------------- |
||
195 | } //namespace z80gs |
||
196 | //------------------------------------------------------------------------- |
||
197 | u8 TGsZ80::IntVec() |
||
198 | { |
||
199 | return 0xFF; |
||
200 | } |
||
201 | //------------------------------------------------------------------------- |
||
202 | void TGsZ80::CheckNextFrame() |
||
203 | { |
||
204 | if (t >= z80gs::GSCPUINT) |
||
205 | { |
||
206 | t -= z80gs::GSCPUINT; |
||
207 | eipos -= z80gs::GSCPUINT; |
||
208 | z80gs::gs_t_states += z80gs::GSCPUINT; |
||
209 | int_pend = true; |
||
210 | } |
||
211 | } |
||
212 | //------------------------------------------------------------------------- |
||
213 | TGsZ80 gscpu( |
||
214 | 1, |
||
215 | z80gs::BankNames, |
||
216 | z80gs::step, |
||
217 | z80gs::delta, |
||
218 | z80gs::SetLastT, |
||
219 | z80gs::membits, |
||
220 | z80gs::io_bits, // [NS] |
||
221 | z80gs::bp_disable_bits, // [NS] |
||
222 | &z80gs::FastMemIf, |
||
223 | &z80gs::DbgMemIf |
||
224 | ); |
||
225 | //------------------------------------------------------------------------- |
||
226 | #endif |
||
227 | //============================================================================= |
||
228 | |||
229 | |||
230 | //============================================================================= |
||
231 | TCpuMgr CpuMgr; |
||
232 | //============================================================================= |
||
233 | void TCpuMgr::SwitchCpu() |
||
234 | { |
||
235 | CurrentCpu++; |
||
236 | CurrentCpu %= Count; |
||
237 | } |
||
238 | //============================================================================= |
||
239 | Z80 *TCpuMgr::Cpus[] = |
||
240 | { |
||
241 | //----------------------------------------------------------------------------- |
||
242 | &cpu, |
||
243 | //----------------------------------------------------------------------------- |
||
244 | #ifdef MOD_GSZ80 |
||
245 | &gscpu |
||
246 | #endif |
||
247 | //----------------------------------------------------------------------------- |
||
248 | }; |
||
249 | //============================================================================= |
||
250 | |||
251 | const unsigned TCpuMgr::Count = _countof( Cpus); |
||
252 | TZ80State TCpuMgr::PrevCpus[ TCpuMgr::Count]; |
||
253 | unsigned TCpuMgr::CurrentCpu = 0; |
||
254 | |||
255 | //============================================================================= |
||
256 | #ifdef MOD_GSBASS |
||
257 | GSHLE gs; |
||
258 | #endif |
||
259 | //============================================================================= |
||
260 | unsigned char dbgbreak = 0; |
||
261 | //============================================================================= |
||
262 | CONFIG conf; |
||
263 | COMPUTER comp; |
||
264 | TEMP temp; |
||
265 | ATA_PORT hdd; // not in `comp' - not cleared in reset() |
||
266 | K_INPUT input; |
||
267 | ISA_MODEM modem; |
||
268 | //============================================================================= |
||
269 | SNDRENDER sound; |
||
270 | SNDCHIP ay[ 2]; |
||
271 | SNDCOUNTER sndcounter; |
||
272 | //============================================================================= |
||
273 | |||
274 | unsigned char *base_sos_rom; |
||
275 | unsigned char *base_dos_rom; |
||
276 | unsigned char *base_128_rom; |
||
277 | unsigned char *base_sys_rom; |
||
278 | |||
279 | //============================================================================= |
||
280 | #ifdef CACHE_ALIGNED |
||
281 | ATTR_ALIGN( 4096) |
||
282 | unsigned char memory[ PAGE * MAX_PAGES]; |
||
283 | #else // __declspec(align) not available, force QWORD align with old method |
||
284 | __int64 memory__[PAGE * MAX_PAGES / sizeof( __int64)]; |
||
285 | unsigned char * const memory = (unsigned char*) memory__; |
||
286 | #endif |
||
287 | //============================================================================= |
||
288 | #ifdef MOD_VID_VD |
||
289 | CACHE_ALIGNED unsigned char vdmem[4][0x2000]; |
||
290 | #endif |
||
291 | //============================================================================= |
||
292 | unsigned char membits[ 0x10000]; // ��� ������ � ������ ����� |
||
293 | // MEMBITS_R = 0x01 |
||
294 | // MEMBITS_W = 0x02 |
||
295 | // MEMBITS_X = 0x04 |
||
296 | // MEMBITS_BPR = 0x10 |
||
297 | // MEMBITS_BPW = 0x20 |
||
298 | // MEMBITS_BPX = 0x40 |
||
299 | // 2 FREE |
||
300 | // |
||
301 | // �� ��������� ������ membits-�� ��������� ������������� � ����� ������ ��������� ������� |
||
302 | // �� ��� ������������ ����������� ��� ������ |
||
303 | unsigned char io_bits[ 0x10000]; // ��� IO [NS] |
||
304 | // IO_BITS_IN |
||
305 | // IO_BITS_OUT |
||
306 | // IO_BITS_BP_IN |
||
307 | // IO_BITS_BP_OUT |
||
308 | // 4 FREE |
||
309 | |||
310 | unsigned char bp_disable_bits[ 0x10000]; // ��� ���������� ������ [NS] |
||
311 | // BP_DISABLE_BPR |
||
312 | // BP_DISABLE_BPW |
||
313 | // BP_DISABLE_BPX |
||
314 | // |
||
315 | // BP_DISABLE_BP_IN |
||
316 | // BP_DISABLE_BP_OUT |
||
317 | // 3 FREE |
||
318 | |||
319 | unsigned char *bankr[ 4]; |
||
320 | unsigned char *bankw[ 4]; |
||
321 | unsigned char cmos[ 0x100]; |
||
322 | unsigned char nvram[ 0x800]; |
||
323 | //============================================================================= |
||
324 | unsigned sndplaybuf[ PLAYBUFSIZE]; |
||
325 | unsigned spbsize; |
||
326 | //============================================================================= |
||
327 | FILE *savesnd; |
||
328 | unsigned char savesndtype; // 0-none, |
||
329 | // 1-wave, |
||
330 | // 2-vtx |
||
331 | unsigned char *vtxbuf; |
||
332 | unsigned vtxbufsize; |
||
333 | unsigned vtxbuffilled; |
||
334 | //============================================================================= |
||
335 | unsigned char trdos_load; // for leds |
||
336 | unsigned char trdos_save; |
||
337 | unsigned char trdos_format; |
||
338 | unsigned char trdos_seek; |
||
339 | //============================================================================= |
||
340 | unsigned char needclr; // clear screenbuffer before rendering (��� ��������) |
||
341 | //============================================================================= |
||
342 | HWND wnd; |
||
343 | HINSTANCE hIn; |
||
344 | //============================================================================= |
||
345 | char droppedFile[ 512]; |
||
346 | //============================================================================= |
||
347 | const TMemModel mem_model[ N_MM_MODELS] = |
||
348 | { |
||
349 | { "PENTAGON", "PENTAGON", MM_PENTAGON, 128, RAM_128 | RAM_256 | RAM_512 | RAM_1024 }, |
||
350 | { "ZS SCORPION", "SCORPION", MM_SCORP, 256, RAM_256 | RAM_1024 }, |
||
351 | { "ZS SCORPION + PROF ROM", "PROFSCORP", MM_PROFSCORP, 256, RAM_256 | RAM_1024 }, |
||
352 | { "PROFI", "PROFI", MM_PROFI, 1024, RAM_1024 }, |
||
353 | { "ATM-TURBO v4.50", "ATM450", MM_ATM450, 512, RAM_512 | RAM_1024 }, |
||
354 | { "ATM-TURBO 2+ v7.10", "ATM710", MM_ATM710, 1024, RAM_128 | RAM_256 | RAM_512 | RAM_1024 }, |
||
355 | // { "ATM-TURBO 3", "ATM3", MM_ATM3, 4096, RAM_4096 }, |
||
356 | // { "ZX-EVO", "ATM3", MM_ATM3, 4096, RAM_4096 }, // NEDOREPO |
||
357 | // { "PENTEVO", "PENTEVO", MM_ATM3, 4096, RAM_4096 }, // [NS] |
||
358 | // { "ZX-Evolution", "ZX_EVO", MM_ATM3, 4096, RAM_4096 }, // [NS] r0111 |
||
359 | { "ZX-EVO", "ZX_EVO", MM_ATM3, 4096, RAM_4096 }, // [NS] r0111 |
||
360 | { "Nemo's KAY", "KAY", MM_KAY, 256, RAM_256 | RAM_1024 }, |
||
361 | // { "KAY", "KAY", MM_KAY, 256, RAM_256 | RAM_1024 }, |
||
362 | // { "ZX-Spectrum +3", "PLUS3", MM_PLUS3, 128, RAM_128 }, |
||
363 | { "ZX-SPECTRUM +3", "PLUS3", MM_PLUS3, 128, RAM_128 }, |
||
364 | { "QUORUM", "QUORUM", MM_QUORUM, 1024, RAM_128 | RAM_1024 }, |
||
365 | }; |
||
366 | //============================================================================= |
||
367 | unsigned char kbdpc[ VK_MAX]; // add cells for mouse & joystick |
||
368 | unsigned char kbdpc_prev[ VK_MAX]; // static // thims zxevo_ps/2 NEDOREPO |
||
369 | unsigned char kbdpcEX[ 6]; // Dexus |
||
370 | keyports inports[ VK_MAX]; |
||
371 | //============================================================================= |
||
372 | char statusline[ 128]; |
||
373 | unsigned statcnt; |
||
374 | //============================================================================= |
||
375 | char arcbuffer[ 0x2000]; // extensions and command lines for archivers |
||
376 | char skiparc[ 0x400]; // ignore this files in archive |
||
377 | //============================================================================= |
||
378 | unsigned char exitflag = 0; // avoid call exit() twice |
||
379 | //============================================================================= |
||
380 | // beta128 vars |
||
381 | unsigned trd_toload = 0; // drive to load |
||
382 | unsigned DefaultDrive = -1U; // �������� �� ��������� � ������� �������� ������ ������ ��� ������ |
||
383 | |||
384 | char trd_loaded[ 4]; // used to get first free drive with no account of autoloaded images |
||
385 | char ininame[ 0x200]; |
||
386 | char helpname[ 0x200]; |
||
387 | unsigned snapsize; |
||
388 | //============================================================================= |
||
389 | // conditional breakpoints support |
||
390 | unsigned brk_port_in; |
||
391 | unsigned brk_port_out; |
||
392 | unsigned char brk_port_val; |
||
393 | //============================================================================= |
||
394 | virtkeyt pckeys[] = |
||
395 | { |
||
396 | { "ESC", DIK_ESCAPE }, |
||
397 | { "F1", DIK_F1 }, |
||
398 | { "F2", DIK_F2 }, |
||
399 | { "F3", DIK_F3 }, |
||
400 | { "F4", DIK_F4 }, |
||
401 | { "F5", DIK_F5 }, |
||
402 | { "F6", DIK_F6 }, |
||
403 | { "F7", DIK_F7 }, |
||
404 | { "F8", DIK_F8 }, |
||
405 | { "F9", DIK_F9 }, |
||
406 | { "F10", DIK_F10 }, |
||
407 | { "F11", DIK_F11 }, |
||
408 | { "F12", DIK_F12 }, |
||
409 | { "PRSCR", DIK_SYSRQ }, |
||
410 | { "SCLOCK", DIK_SCROLL }, |
||
411 | { "PAUSE", DIK_PAUSE }, |
||
412 | |||
413 | { "1", DIK_1 }, |
||
414 | { "2", DIK_2 }, |
||
415 | { "3", DIK_3 }, |
||
416 | { "4", DIK_4 }, |
||
417 | { "5", DIK_5 }, |
||
418 | { "6", DIK_6 }, |
||
419 | { "7", DIK_7 }, |
||
420 | { "8", DIK_8 }, |
||
421 | { "9", DIK_9 }, |
||
422 | { "0", DIK_0 }, |
||
423 | |||
424 | { "Q", DIK_Q }, |
||
425 | { "W", DIK_W }, |
||
426 | { "E", DIK_E }, |
||
427 | { "R", DIK_R }, |
||
428 | { "T", DIK_T }, |
||
429 | { "Y", DIK_Y }, |
||
430 | { "U", DIK_U }, |
||
431 | { "I", DIK_I }, |
||
432 | { "O", DIK_O }, |
||
433 | { "P", DIK_P }, |
||
434 | |||
435 | { "A", DIK_A }, |
||
436 | { "S", DIK_S }, |
||
437 | { "D", DIK_D }, |
||
438 | { "F", DIK_F }, |
||
439 | { "G", DIK_G }, |
||
440 | { "H", DIK_H }, |
||
441 | { "J", DIK_J }, |
||
442 | { "K", DIK_K }, |
||
443 | { "L", DIK_L }, |
||
444 | |||
445 | { "Z", DIK_Z }, |
||
446 | { "X", DIK_X }, |
||
447 | { "C", DIK_C }, |
||
448 | { "V", DIK_V }, |
||
449 | { "B", DIK_B }, |
||
450 | { "N", DIK_N }, |
||
451 | { "M", DIK_M }, |
||
452 | |||
453 | { "MINUS", DIK_MINUS }, |
||
454 | { "PLUS", DIK_EQUALS }, |
||
455 | { "BACK", DIK_BACK }, |
||
456 | { "TAB", DIK_TAB }, |
||
457 | { "LB", DIK_LBRACKET }, |
||
458 | { "RB", DIK_RBRACKET }, |
||
459 | { "CAPS", DIK_CAPITAL }, |
||
460 | { "TIL", DIK_GRAVE }, |
||
461 | { "SPACE", DIK_SPACE }, |
||
462 | { "COL", DIK_SEMICOLON }, |
||
463 | { "QUOTE", DIK_APOSTROPHE }, |
||
464 | { "ENTER", DIK_RETURN }, |
||
465 | { "COMMA", DIK_COMMA }, |
||
466 | { "POINT", DIK_PERIOD }, |
||
467 | { "SLASH", DIK_SLASH }, |
||
468 | { "BACKSL", DIK_BACKSLASH }, |
||
469 | |||
470 | { "SHIFT", DIK_SHIFT }, |
||
471 | { "ALT", DIK_MENU }, |
||
472 | { "CONTROL", DIK_CONTROL }, |
||
473 | { "LSHIFT", DIK_LSHIFT }, |
||
474 | { "LALT", DIK_LMENU }, |
||
475 | { "LCONTROL", DIK_LCONTROL }, |
||
476 | { "RSHIFT", DIK_RSHIFT }, |
||
477 | { "RALT", DIK_RMENU }, |
||
478 | { "RCONTROL", DIK_RCONTROL }, |
||
479 | |||
480 | { "INS", DIK_INSERT }, |
||
481 | { "HOME", DIK_HOME }, |
||
482 | { "PGUP", DIK_PRIOR }, |
||
483 | { "DEL", DIK_DELETE }, |
||
484 | { "END", DIK_END }, |
||
485 | { "PGDN", DIK_NEXT }, |
||
486 | |||
487 | { "UP", DIK_UP }, |
||
488 | { "DOWN", DIK_DOWN }, |
||
489 | { "LEFT", DIK_LEFT }, |
||
490 | { "RIGHT", DIK_RIGHT }, |
||
491 | |||
492 | { "NUMLOCK", DIK_NUMLOCK }, |
||
493 | { "GRDIV", DIK_DIVIDE }, |
||
494 | { "GRMUL", DIK_MULTIPLY }, |
||
495 | { "GRSUB", DIK_SUBTRACT }, |
||
496 | { "GRADD", DIK_ADD }, |
||
497 | { "GRENTER", DIK_NUMPADENTER }, |
||
498 | |||
499 | { "N0", DIK_NUMPAD0 }, |
||
500 | { "N1", DIK_NUMPAD1 }, |
||
501 | { "N2", DIK_NUMPAD2 }, |
||
502 | { "N3", DIK_NUMPAD3 }, |
||
503 | { "N4", DIK_NUMPAD4 }, |
||
504 | { "N5", DIK_NUMPAD5 }, |
||
505 | { "N6", DIK_NUMPAD6 }, |
||
506 | { "N7", DIK_NUMPAD7 }, |
||
507 | { "N8", DIK_NUMPAD8 }, |
||
508 | { "N9", DIK_NUMPAD9 }, |
||
509 | { "NP", DIK_DECIMAL }, |
||
510 | |||
511 | { "LMB", VK_LMB }, |
||
512 | { "RMB", VK_RMB }, |
||
513 | { "MMB", VK_MMB }, |
||
514 | { "MWU", VK_MWU }, |
||
515 | { "MWD", VK_MWD }, |
||
516 | |||
517 | { "JLEFT", VK_JLEFT }, |
||
518 | { "JRIGHT", VK_JRIGHT }, |
||
519 | { "JUP", VK_JUP }, |
||
520 | { "JDOWN", VK_JDOWN }, |
||
521 | { "JFIRE", VK_JFIRE }, |
||
522 | { "JB0", VK_JB0 }, |
||
523 | { "JB1", VK_JB1 }, |
||
524 | { "JB2", VK_JB2 }, |
||
525 | { "JB3", VK_JB3 }, |
||
526 | { "JB4", VK_JB4 }, |
||
527 | { "JB5", VK_JB5 }, |
||
528 | { "JB6", VK_JB6 }, |
||
529 | { "JB7", VK_JB7 }, |
||
530 | { "JB8", VK_JB8 }, |
||
531 | { "JB9", VK_JB9 }, |
||
532 | { "JB10", VK_JB10 }, |
||
533 | { "JB11", VK_JB11 }, |
||
534 | { "JB12", VK_JB12 }, |
||
535 | { "JB13", VK_JB13 }, |
||
536 | { "JB14", VK_JB14 }, |
||
537 | { "JB15", VK_JB15 }, |
||
538 | { "JB16", VK_JB16 }, |
||
539 | { "JB17", VK_JB17 }, |
||
540 | { "JB18", VK_JB18 }, |
||
541 | { "JB19", VK_JB19 }, |
||
542 | { "JB20", VK_JB20 }, |
||
543 | { "JB21", VK_JB21 }, |
||
544 | { "JB22", VK_JB22 }, |
||
545 | { "JB23", VK_JB23 }, |
||
546 | { "JB24", VK_JB24 }, |
||
547 | { "JB25", VK_JB25 }, |
||
548 | { "JB26", VK_JB26 }, |
||
549 | { "JB27", VK_JB27 }, |
||
550 | { "JB28", VK_JB28 }, |
||
551 | { "JB29", VK_JB29 }, |
||
552 | { "JB30", VK_JB30 }, |
||
553 | { "JB31", VK_JB31 }, |
||
554 | }; |
||
555 | const size_t pckeys_count = _countof( pckeys); |
||
556 | //============================================================================= |
||
557 | |||
558 | //============================================================================= |
||
559 | static zxkey zxk_default[] = |
||
560 | { |
||
561 | { "KRIGHT", &input.kjoy, u8( ~1U) }, |
||
562 | { "KLEFT", &input.kjoy, u8( ~2U) }, |
||
563 | { "KDOWN", &input.kjoy, u8( ~4U) }, |
||
564 | { "KUP", &input.kjoy, u8( ~8U) }, |
||
565 | { "KFIRE", &input.kjoy, u8( ~16U) }, |
||
566 | { "KFIRE1", &input.kjoy, u8( ~16U) }, |
||
567 | { "KFIRE2", &input.kjoy, u8( ~32U) }, |
||
568 | { "KFIRE3", &input.kjoy, u8( ~64U) }, |
||
569 | |||
570 | // fuller joystick |
||
571 | { "FRIGHT", &input.fjoy, u8( ~8U) }, |
||
572 | { "FLEFT", &input.fjoy, u8( ~4U) }, |
||
573 | { "FDOWN", &input.fjoy, u8( ~2U) }, |
||
574 | { "FUP", &input.fjoy, u8( ~1U) }, |
||
575 | { "FFIRE", &input.fjoy, u8( ~128U) }, |
||
576 | { "FFIRE1", &input.fjoy, u8( ~128U) }, |
||
577 | { "FFIRE2", &input.fjoy, u8( ~64U) }, |
||
578 | { "FFIRE3", &input.fjoy, u8( ~32U) }, |
||
579 | |||
580 | { "ENT", input.kbd + 6, u8( ~0x01U) }, |
||
581 | { "SPC", input.kbd + 7, u8( ~0x01U) }, |
||
582 | { "SYM", input.kbd + 7, u8( ~0x02U) }, |
||
583 | |||
584 | { "CAP", input.kbd + 0, u8( ~0x01U) }, |
||
585 | { "Z", input.kbd + 0, u8( ~0x02U) }, |
||
586 | { "X", input.kbd + 0, u8( ~0x04U) }, |
||
587 | { "C", input.kbd + 0, u8( ~0x08U) }, |
||
588 | { "V", input.kbd + 0, u8( ~0x10U) }, |
||
589 | |||
590 | { "A", input.kbd + 1, u8( ~0x01U) }, |
||
591 | { "S", input.kbd + 1, u8( ~0x02U) }, |
||
592 | { "D", input.kbd + 1, u8( ~0x04U) }, |
||
593 | { "F", input.kbd + 1, u8( ~0x08U) }, |
||
594 | { "G", input.kbd + 1, u8( ~0x10U) }, |
||
595 | |||
596 | { "Q", input.kbd + 2, u8( ~0x01U) }, |
||
597 | { "W", input.kbd + 2, u8( ~0x02U) }, |
||
598 | { "E", input.kbd + 2, u8( ~0x04U) }, |
||
599 | { "R", input.kbd + 2, u8( ~0x08U) }, |
||
600 | { "T", input.kbd + 2, u8( ~0x10U) }, |
||
601 | |||
602 | { "1", input.kbd + 3, u8( ~0x01U) }, |
||
603 | { "2", input.kbd + 3, u8( ~0x02U) }, |
||
604 | { "3", input.kbd + 3, u8( ~0x04U) }, |
||
605 | { "4", input.kbd + 3, u8( ~0x08U) }, |
||
606 | { "5", input.kbd + 3, u8( ~0x10U) }, |
||
607 | |||
608 | { "0", input.kbd + 4, u8( ~0x01U) }, |
||
609 | { "9", input.kbd + 4, u8( ~0x02U) }, |
||
610 | { "8", input.kbd + 4, u8( ~0x04U) }, |
||
611 | { "7", input.kbd + 4, u8( ~0x08U) }, |
||
612 | { "6", input.kbd + 4, u8( ~0x10U) }, |
||
613 | |||
614 | { "P", input.kbd + 5, u8( ~0x01U) }, |
||
615 | { "O", input.kbd + 5, u8( ~0x02U) }, |
||
616 | { "I", input.kbd + 5, u8( ~0x04U) }, |
||
617 | { "U", input.kbd + 5, u8( ~0x08U) }, |
||
618 | { "Y", input.kbd + 5, u8( ~0x10U) }, |
||
619 | |||
620 | { "L", input.kbd + 6, u8( ~0x02U) }, |
||
621 | { "K", input.kbd + 6, u8( ~0x04U) }, |
||
622 | { "J", input.kbd + 6, u8( ~0x08U) }, |
||
623 | { "H", input.kbd + 6, u8( ~0x10U) }, |
||
624 | |||
625 | { "M", input.kbd + 7, u8( ~0x04U) }, |
||
626 | { "N", input.kbd + 7, u8( ~0x08U) }, |
||
627 | { "B", input.kbd + 7, u8( ~0x10U) }, |
||
628 | }; |
||
629 | //============================================================================= |
||
630 | |||
631 | |||
632 | //============================================================================= |
||
633 | static zxkey zxk_bk08[] = |
||
634 | { |
||
635 | { "KRIGHT", &input.kjoy, u8(~1U) }, |
||
636 | { "KLEFT", &input.kjoy, u8(~2U) }, |
||
637 | { "KDOWN", &input.kjoy, u8(~4U) }, |
||
638 | { "KUP", &input.kjoy, u8(~8U) }, |
||
639 | { "KFIRE", &input.kjoy, u8(~16U) }, |
||
640 | { "KFIRE1", &input.kjoy, u8(~16U) }, |
||
641 | { "KFIRE2", &input.kjoy, u8(~32U) }, |
||
642 | { "KFIRE3", &input.kjoy, u8(~64U) }, |
||
643 | |||
644 | // fuller joystick |
||
645 | { "FRIGHT", &input.fjoy, u8(~8U) }, |
||
646 | { "FLEFT", &input.fjoy, u8(~4U) }, |
||
647 | { "FDOWN", &input.fjoy, u8(~2U) }, |
||
648 | { "FUP", &input.fjoy, u8(~1U) }, |
||
649 | { "FFIRE", &input.fjoy, u8(~128U) }, |
||
650 | { "FFIRE1", &input.fjoy, u8(~128U) }, |
||
651 | { "FFIRE2", &input.fjoy, u8(~64U) }, |
||
652 | { "FFIRE3", &input.fjoy, u8(~32U) }, |
||
653 | |||
654 | { "ALT", input.kbd + 0, u8(~0x01U) }, |
||
655 | { "Z", input.kbd + 0, u8(~0x02U) }, |
||
656 | { "X", input.kbd + 0, u8(~0x04U) }, |
||
657 | { "C", input.kbd + 0, u8(~0x08U) }, |
||
658 | { "V", input.kbd + 0, u8(~0x10U) }, |
||
659 | { "RUS", input.kbd + 0, u8(~0x20U) }, |
||
660 | { "SHF", input.kbd + 0, u8( 0x7FU) }, |
||
661 | |||
662 | { "A", input.kbd + 1, u8(~0x01U) }, |
||
663 | { "S", input.kbd + 1, u8(~0x02U) }, |
||
664 | { "D", input.kbd + 1, u8(~0x04U) }, |
||
665 | { "F", input.kbd + 1, u8(~0x08U) }, |
||
666 | { "G", input.kbd + 1, u8(~0x10U) }, |
||
667 | { "BSL", input.kbd + 1, u8(~0x20U) }, |
||
668 | { "SL", input.kbd + 1, u8( 0x7FU) }, |
||
669 | |||
670 | { "Q", input.kbd + 2, u8(~0x01U) }, |
||
671 | { "W", input.kbd + 2, u8(~0x02U) }, |
||
672 | { "E", input.kbd + 2, u8(~0x04U) }, |
||
673 | { "R", input.kbd + 2, u8(~0x08U) }, |
||
674 | { "T", input.kbd + 2, u8(~0x10U) }, |
||
675 | { "CMA", input.kbd + 2, u8(~0x20U) }, |
||
676 | { "PNT", input.kbd + 2, u8( 0x7FU) }, |
||
677 | |||
678 | { "1", input.kbd + 3, u8(~0x01U) }, |
||
679 | { "2", input.kbd + 3, u8(~0x02U) }, |
||
680 | { "3", input.kbd + 3, u8(~0x04U) }, |
||
681 | { "4", input.kbd + 3, u8(~0x08U) }, |
||
682 | { "5", input.kbd + 3, u8(~0x10U) }, |
||
683 | { "TIL", input.kbd + 3, u8(~0x20U) }, |
||
684 | { "TAB", input.kbd + 3, u8( 0x7FU) }, |
||
685 | |||
686 | { "0", input.kbd + 4, u8(~0x01U) }, |
||
687 | { "9", input.kbd + 4, u8(~0x02U) }, |
||
688 | { "8", input.kbd + 4, u8(~0x04U) }, |
||
689 | { "7", input.kbd + 4, u8(~0x08U) }, |
||
690 | { "6", input.kbd + 4, u8(~0x10U) }, |
||
691 | { "MNS", input.kbd + 4, u8(~0x20U) }, |
||
692 | { "PLS", input.kbd + 4, u8( 0x7FU) }, |
||
693 | |||
694 | { "P", input.kbd + 5, u8(~0x01U) }, |
||
695 | { "O", input.kbd + 5, u8(~0x02U) }, |
||
696 | { "I", input.kbd + 5, u8(~0x04U) }, |
||
697 | { "U", input.kbd + 5, u8(~0x08U) }, |
||
698 | { "Y", input.kbd + 5, u8(~0x10U) }, |
||
699 | { "LB", input.kbd + 5, u8(~0x20U) }, |
||
700 | { "RB", input.kbd + 5, u8( 0x7FU) }, |
||
701 | |||
702 | { "ENT", input.kbd + 6, u8(~0x01U) }, |
||
703 | { "L", input.kbd + 6, u8(~0x02U) }, |
||
704 | { "K", input.kbd + 6, u8(~0x04U) }, |
||
705 | { "J", input.kbd + 6, u8(~0x08U) }, |
||
706 | { "H", input.kbd + 6, u8(~0x10U) }, |
||
707 | { "COL", input.kbd + 6, u8(~0x20U) }, |
||
708 | { "QUO", input.kbd + 6, u8( 0x7FU) }, |
||
709 | |||
710 | { "SPC", input.kbd + 7, u8(~0x01U) }, |
||
711 | { "CTL", input.kbd + 7, u8(~0x02U) }, |
||
712 | { "M", input.kbd + 7, u8(~0x04U) }, |
||
713 | { "N", input.kbd + 7, u8(~0x08U) }, |
||
714 | { "B", input.kbd + 7, u8(~0x10U) }, |
||
715 | { "R/A", input.kbd + 7, u8(~0x20U) }, |
||
716 | { "CPS", input.kbd + 7, u8( 0x7FU) } |
||
717 | }; |
||
718 | //============================================================================= |
||
719 | |||
720 | |||
721 | //============================================================================= |
||
722 | static zxkey zxk_quorum[] = |
||
723 | { |
||
724 | { "KRIGHT", &input.kjoy, u8(~1U) }, |
||
725 | { "KLEFT", &input.kjoy, u8(~2U) }, |
||
726 | { "KDOWN", &input.kjoy, u8(~4U) }, |
||
727 | { "KUP", &input.kjoy, u8(~8U) }, |
||
728 | { "KFIRE", &input.kjoy, u8(~16U) }, |
||
729 | { "KFIRE1", &input.kjoy, u8(~16U) }, |
||
730 | { "KFIRE2", &input.kjoy, u8(~32U) }, |
||
731 | { "KFIRE3", &input.kjoy, u8(~64U) }, |
||
732 | |||
733 | // fuller joystick |
||
734 | { "FRIGHT", &input.fjoy, u8(~8U) }, |
||
735 | { "FLEFT", &input.fjoy, u8(~4U) }, |
||
736 | { "FDOWN", &input.fjoy, u8(~2U) }, |
||
737 | { "FUP", &input.fjoy, u8(~1U) }, |
||
738 | { "FFIRE", &input.fjoy, u8(~128U) }, |
||
739 | { "FFIRE1", &input.fjoy, u8(~128U) }, |
||
740 | { "FFIRE2", &input.fjoy, u8(~64U) }, |
||
741 | { "FFIRE3", &input.fjoy, u8(~32U) }, |
||
742 | |||
743 | |||
744 | { "ENT", input.kbd + 6, u8(~0x01U) }, |
||
745 | { "SPC", input.kbd + 7, u8(~0x01U) }, |
||
746 | { "SYM", input.kbd + 7, u8(~0x02U) }, |
||
747 | |||
748 | { "CAP", input.kbd + 0, u8(~0x01U) }, |
||
749 | { "Z", input.kbd + 0, u8(~0x02U) }, |
||
750 | { "X", input.kbd + 0, u8(~0x04U) }, |
||
751 | { "C", input.kbd + 0, u8(~0x08U) }, |
||
752 | { "V", input.kbd + 0, u8(~0x10U) }, |
||
753 | |||
754 | { "A", input.kbd + 1, u8(~0x01U) }, |
||
755 | { "S", input.kbd + 1, u8(~0x02U) }, |
||
756 | { "D", input.kbd + 1, u8(~0x04U) }, |
||
757 | { "F", input.kbd + 1, u8(~0x08U) }, |
||
758 | { "G", input.kbd + 1, u8(~0x10U) }, |
||
759 | |||
760 | { "Q", input.kbd + 2, u8(~0x01U) }, |
||
761 | { "W", input.kbd + 2, u8(~0x02U) }, |
||
762 | { "E", input.kbd + 2, u8(~0x04U) }, |
||
763 | { "R", input.kbd + 2, u8(~0x08U) }, |
||
764 | { "T", input.kbd + 2, u8(~0x10U) }, |
||
765 | |||
766 | { "1", input.kbd + 3, u8(~0x01U) }, |
||
767 | { "2", input.kbd + 3, u8(~0x02U) }, |
||
768 | { "3", input.kbd + 3, u8(~0x04U) }, |
||
769 | { "4", input.kbd + 3, u8(~0x08U) }, |
||
770 | { "5", input.kbd + 3, u8(~0x10U) }, |
||
771 | |||
772 | { "0", input.kbd + 4, u8(~0x01U) }, |
||
773 | { "9", input.kbd + 4, u8(~0x02U) }, |
||
774 | { "8", input.kbd + 4, u8(~0x04U) }, |
||
775 | { "7", input.kbd + 4, u8(~0x08U) }, |
||
776 | { "6", input.kbd + 4, u8(~0x10U) }, |
||
777 | |||
778 | { "P", input.kbd + 5, u8(~0x01U) }, |
||
779 | { "O", input.kbd + 5, u8(~0x02U) }, |
||
780 | { "I", input.kbd + 5, u8(~0x04U) }, |
||
781 | { "U", input.kbd + 5, u8(~0x08U) }, |
||
782 | { "Y", input.kbd + 5, u8(~0x10U) }, |
||
783 | |||
784 | { "L", input.kbd + 6, u8(~0x02U) }, |
||
785 | { "K", input.kbd + 6, u8(~0x04U) }, |
||
786 | { "J", input.kbd + 6, u8(~0x08U) }, |
||
787 | { "H", input.kbd + 6, u8(~0x10U) }, |
||
788 | |||
789 | { "M", input.kbd + 7, u8(~0x04U) }, |
||
790 | { "N", input.kbd + 7, u8(~0x08U) }, |
||
791 | { "B", input.kbd + 7, u8(~0x10U) }, |
||
792 | |||
793 | // quorum additional keys |
||
794 | { "RUS", input.kbd + 8, u8(~0x01U) }, |
||
795 | { "LAT", input.kbd + 8, u8(~0x02U) }, |
||
796 | { "N1", input.kbd + 8, u8(~0x08U) }, |
||
797 | { "N2", input.kbd + 8, u8(~0x10U) }, |
||
798 | { ".", input.kbd + 8, u8(~0x20U) }, |
||
799 | |||
800 | { "CAPS", input.kbd + 9, u8(~0x01U) }, |
||
801 | { "F2", input.kbd + 9, u8(~0x02U) }, |
||
802 | { "TILDA", input.kbd + 9, u8(~0x04U) }, |
||
803 | { "N4", input.kbd + 9, u8(~0x08U) }, |
||
804 | { "QUOTE", input.kbd + 9, u8(~0x10U) }, |
||
805 | { "N6", input.kbd + 9, u8(~0x20U) }, |
||
806 | |||
807 | { "TAB", input.kbd + 10, u8(~0x01U) }, |
||
808 | { "F4", input.kbd + 10, u8(~0x02U) }, |
||
809 | { "N7", input.kbd + 10, u8(~0x08U) }, |
||
810 | { "N5", input.kbd + 10, u8(~0x10U) }, |
||
811 | { "N9", input.kbd + 10, u8(~0x20U) }, |
||
812 | |||
813 | { "EBOX", input.kbd + 11, u8(~0x01U) }, |
||
814 | { "F5", input.kbd + 11, u8(~0x02U) }, |
||
815 | { "BS", input.kbd + 11, u8(~0x04U) }, |
||
816 | { "NSLASH", input.kbd + 11, u8(~0x08U) }, |
||
817 | { "N8", input.kbd + 11, u8(~0x10U) }, |
||
818 | { "NMINUS", input.kbd + 11, u8(~0x20U) }, |
||
819 | |||
820 | { "-", input.kbd + 12, u8(~0x01U) }, |
||
821 | { "+", input.kbd + 12, u8(~0x04U) }, |
||
822 | { "DEL", input.kbd + 12, u8(~0x08U) }, |
||
823 | { "NSTAR", input.kbd + 12, u8(~0x10U) }, |
||
824 | { "GBOX", input.kbd + 12, u8(~0x20U) }, |
||
825 | |||
826 | { "COLON", input.kbd + 13, u8(~0x01U) }, |
||
827 | { "F3", input.kbd + 13, u8(~0x02U) }, |
||
828 | { "\\", input.kbd + 13, u8(~0x04U) }, |
||
829 | { "]", input.kbd + 13, u8(~0x10U) }, |
||
830 | { "[", input.kbd + 13, u8(~0x20U) }, |
||
831 | |||
832 | { ",", input.kbd + 14, u8(~0x01U) }, |
||
833 | { "/", input.kbd + 14, u8(~0x10U) }, |
||
834 | { "N3", input.kbd + 14, u8(~0x20U) }, |
||
835 | |||
836 | { "F1", input.kbd + 15, u8(~0x02U) }, |
||
837 | { "N0", input.kbd + 15, u8(~0x08U) }, |
||
838 | { "NPOINT", input.kbd + 15, u8(~0x10U) }, |
||
839 | { "NPLUS", input.kbd + 15, u8(~0x20U) }, |
||
840 | }; |
||
841 | //============================================================================= |
||
842 | |||
843 | |||
844 | //============================================================================= |
||
845 | zxkeymap zxk_maps[] = |
||
846 | { |
||
847 | { "default", zxk_default, _countof(zxk_default) }, |
||
848 | { "BK08", zxk_bk08, _countof(zxk_bk08) }, |
||
849 | { "quorum", zxk_quorum, _countof(zxk_quorum) }, |
||
850 | }; |
||
851 | //============================================================================= |
||
852 | |||
853 | //============================================================================= |
||
854 | const size_t zxk_maps_count = _countof(zxk_maps); |
||
855 | //============================================================================= |
||
856 | |||
857 | PALETTEENTRY syspalette[0x100]; |
||
858 | |||
859 | //============================================================================= |
||
860 | GDIBMP gdibmp = |
||
861 | { { { |
||
862 | sizeof(BITMAPINFOHEADER), |
||
863 | 320, |
||
864 | -240, |
||
865 | 1, |
||
866 | 8, |
||
867 | BI_RGB, |
||
868 | |||
869 | } } }; |
||
870 | //----------------------------------------------------------------------------- |
||
871 | // ��������� ��� �������� // [NS] |
||
872 | GDIBMP gdi_dbg_bmp = |
||
873 | { { { |
||
874 | sizeof(BITMAPINFOHEADER), |
||
875 | 320, |
||
876 | -240, |
||
877 | 1, |
||
878 | 8, |
||
879 | BI_RGB, |
||
880 | |||
881 | } } }; |
||
882 | //============================================================================= |
||
883 | PALETTE_OPTIONS pals[32] = |
||
884 | {{ |
||
885 | "default", |
||
886 | 0x00, |
||
887 | 0x80, |
||
888 | 0xC0, |
||
889 | 0xE0, |
||
890 | 0xFF, |
||
891 | 0xC8, |
||
892 | 0xFF, |
||
893 | 0x00, |
||
894 | 0x00, |
||
895 | 0x00, |
||
896 | 0xFF, |
||
897 | 0x00, |
||
898 | 0x00, |
||
899 | 0x00, |
||
900 | 0xFF |
||
901 | }}; |
||
902 | //============================================================================= |
||
903 | #pragma pack() |
||
904 | |||
905 | unsigned char snbuf[ 4 * 1048576]; //4MB // large temporary buffer (for reading snapshots) |
||
906 | //----------------------------------------------------------------------------- |
||
907 | unsigned char gdibuf[ 2 * 1048576]; //2MB |
||
908 | //���� ����� ��� �������� |
||
909 | unsigned char gdi_dbg_buf[ 2 * 1048576]; //2MB // [NS] |
||
910 | //----------------------------------------------------------------------------- |
||
911 | // on-screen watches block |
||
912 | uintptr_t watch_script[4][64]; |
||
913 | unsigned char watch_enabled[4]; |
||
914 | unsigned char used_banks[ MAX_PAGES]; |
||
915 | unsigned char trace_rom=1, trace_ram=1; |
||
916 | //----------------------------------------------------------------------------- |
||
917 | DWORD WinVerMajor; |
||
918 | DWORD WinVerMinor; |
||
919 | HWND dlg; // used in setcheck/getcheck: gui settings, monitor dialogs |
||
920 | //----------------------------------------------------------------------------- |
||
921 | HBITMAP hbm; // bitmap for repaint background |
||
922 | DWORD bm_dx; |
||
923 | DWORD bm_dy; |
||
924 | //----------------------------------------------------------------------------- |
||
925 | DWORD mousepos; // left-clicked point in monitor |
||
926 | // 0x80000000 ������������ ������ �� ��������� |
||
927 | // ��� right click ���� |
||
928 | // ����� �������� �� debug_mouse_keys ����� |
||
929 | // ��� �� 32� �������� ����� �� |
||
930 | |||
931 | DWORD debug_mouse_keys; |
||
932 | |||
933 | //#define DEBUG_MOUSE_LEFT_RES 0xFFFFFFF0 // |
||
934 | //#define DEBUG_MOUSE_LEFT_ON 0x00000001 // left on [NS] |
||
935 | //#define DEBUG_MOUSE_LEFT_DBL 0x00000002 // left double |
||
936 | //#define DEBUG_MOUSE_LEFT_OFF 0x00000004 // left off |
||
937 | // 0x00000008 // |
||
938 | //#define DEBUG_MOUSE_RIGHT_RES 0xFFFFFF0F // |
||
939 | //#define DEBUG_MOUSE_RIGHT_ON 0x00000010 // right on |
||
940 | //#define DEBUG_MOUSE_RIGHT_DBL 0x00000020 // right double |
||
941 | //#define DEBUG_MOUSE_RIGHT_OFF 0x00000040 // right off |
||
942 | // 0x00000080 // |
||
943 | //#define DEBUG_MOUSE_MIDDLE_RES 0xFFFFF0FF // |
||
944 | //#define DEBUG_MOUSE_MIDDLE_ON 0x00000100 // middle on |
||
945 | //#define DEBUG_MOUSE_MIDDLE_DBL 0x00000200 // middle double |
||
946 | //#define DEBUG_MOUSE_MIDDLE_OFF 0x00000400 // middle off |
||
947 | // 0x00000800 |
||
948 | |||
949 | //----------------------------------------------------------------------------- |
||
950 | unsigned nowait; // don't close console window after error if started from GUI |
||
951 | bool normal_exit = false; // true on correct exit, false on failure exit |
||
952 | //----------------------------------------------------------------------------- |
||
953 | char *ayvols[64]; |
||
954 | unsigned num_ayvols; |
||
955 | //----------------------------------------------------------------------------- |
||
956 | char *aystereo[64]; |
||
957 | unsigned num_aystereo; |
||
958 | //----------------------------------------------------------------------------- |
||
959 | char *ulapreset[64]; |
||
960 | unsigned num_ula; |
||
961 | //----------------------------------------------------------------------------- |
||
962 | static char presetbuf[0x4000]; |
||
963 | char *setptr = presetbuf; |
||
964 | //----------------------------------------------------------------------------- |
||
965 | /* |
||
966 | #include "fontdata.cpp" |
||
967 | #include "font8.cpp" |
||
968 | #include "font14.cpp" |
||
969 | #include "font16.cpp" |
||
970 | #include "fontatm2.cpp" |
||
971 | */ |
||
972 | //============================================================================= |
||
973 | // ������� ����� � ���� ������� ������ ��������������� enum AY_SCHEME |
||
974 | const char * const ay_schemes[] = |
||
975 | { |
||
976 | "no soundchip", |
||
977 | "fuller box", |
||
978 | "single chip", |
||
979 | "pseudo-turbo", |
||
980 | "quadro-AY", |
||
981 | "turbo-AY // POS", |
||
982 | "turbo-sound // NedoPC" |
||
983 | }; |
||
984 | //============================================================================= |
||
985 | |||
986 | int trdos_in_nmi = 0; //NEDOREPO |
||
987 | |||
988 | //============================================================================= |
||
989 |