OSDN Git Service

[EMU][OSD][WIP] Add MIDI feature; this still be skelton.
[csp-qt/common_source_project-fm7.git] / source / src / qt / osd.cpp
1 /*
2         Skelton for retropc emulator
3
4         Author : K.Ohta <whatisthis.sowhat _at_ gmail.com>
5         Date   : 2015.11.30-
6
7         [ Qt dependent ]
8 */
9
10 #include "emu.h"
11
12 #include <memory>
13 #include <string>
14
15 #include <QDateTime>
16 #include <QDate>
17 #include <QTime>
18 #include <QString>
19 #include <QObject>
20 #include <QThread>
21
22 #include "qt_gldraw.h"
23 #include "osd.h"
24 #include "config.h"
25
26 OSD::OSD(std::shared_ptr<USING_FLAGS> p, std::shared_ptr<CSP_Logger> logger) : OSD_BASE(p, logger)
27 {
28         //p_config = using_flags->get_config_ptr();
29         p_config = &config;
30         p_glv = NULL;
31         set_features();
32 }
33
34 OSD::~OSD()
35 {
36 }
37
38 void OSD::set_features_machine(void)
39 {
40 // GIJUTSU-HYORON-SHA Babbase-2nd
41 #ifdef _BABBAGE2ND
42         add_feature(_T("_BABBAGE2ND"), 1);
43 #endif
44
45 // HITACHI BASIC Master Jr
46 #ifdef _BMJR
47         add_feature(_T("_BMJR"), 1);
48 #endif
49
50 // COLECO ColecoVision
51 #ifdef _COLECOVISION
52         add_feature(_T("_COLECOVISION"), 1);
53 #endif
54
55 // TOSHIBA EX-80
56 #ifdef _EX80
57         add_feature(_T("_EX80"), 1);
58 #endif
59
60 // Nintendo Family BASIC
61 #ifdef _FAMILYBASIC
62         add_feature(_T("_FAMILYBASIC"), 1);
63 #endif
64
65 // FUJITSU FM-8
66 #ifdef _FM8
67         add_feature(_T("_FM8"), 1);
68 #endif
69
70 // FUJITSU FM-7
71 #ifdef _FM7
72         add_feature(_T("_FM7"), 1);
73 #endif
74
75 // FUJITSU FM-NEW7
76 #ifdef _FMNEW7
77         add_feature(_T("_FM7"), 1);
78         add_feature(_T("_FMNEW7"), 1);
79 #endif
80
81 // FUJITSU FM-77 SERIES
82 #ifdef _FM77
83         add_feature(_T("_FM77"), 1);
84 #endif
85
86 #ifdef _FM77L2
87         add_feature(_T("_FM77L2"), 1);
88 #endif
89         
90 #ifdef _FM77L4
91         add_feature(_T("_FM77L4"), 1);
92 #endif
93         
94 #ifdef _FM77_VARIANTS
95         add_feature(_T("_FM77_VARIANTS"), 1);
96 #endif
97
98 // FUJITSU FM77AV SERIES
99 #ifdef _FM77AV
100         add_feature(_T("_FM77AV"), 1);
101 #endif
102
103 #ifdef _FM77AV20
104         add_feature(_T("_FM77AV20"), 1);
105 #endif
106
107 #ifdef _FM77AV20EX
108         add_feature(_T("_FM77AV20EX"), 1);
109 #endif
110
111 #ifdef _FM77AV40
112         add_feature(_T("_FM77AV40"), 1);
113 #endif
114
115 #ifdef _FM77AV40SX
116         add_feature(_T("_FM77AV40SX"), 1);
117 #endif
118
119 #ifdef _FM77AV40EX
120         add_feature(_T("_FM77AV40EX"), 1);
121 #endif
122
123 #ifdef _FM77AV_VARIANTS
124         add_feature(_T("_FM77AV_VARIANTS"), 1);
125 #endif
126
127 // FUJITSU FM16pi
128 #ifdef _FM16PI
129         add_feature(_T("_FM16PI"), 1);
130 #endif
131
132
133 // FUJITSU FMR-30
134 #ifdef _FMR30
135         add_feature(_T("_FMR30"), 1);
136 #endif
137
138 // FUJITSU FMR-50
139 #ifdef _FMR50
140         add_feature(_T("_FMR50"), 1);
141 #endif
142
143 // FUJITSU FMR-60
144 #ifdef _FMR60
145         add_feature(_T("_FMR60"), 1);
146 #endif
147
148 // CASIO FP-200
149 #ifdef _FP200
150         add_feature(_T("_FP200"), 1);
151 #endif
152
153 // CASIO FP-1100
154 #ifdef _FP1100
155         add_feature(_T("_FP1100"), 1);
156 #endif
157
158 // Panasonic FS-A1
159 #ifdef _FSA1
160         add_feature(_T("_FSA1"), 1);
161 #endif
162
163 // SEGA GAME GEAR
164 #ifdef _GAMEGEAR
165         add_feature(_T("_GAMEGEAR"), 1);
166 #endif
167
168 // EPSON HC-20
169 #ifdef _HC20
170         add_feature(_T("_HC20"), 1);
171 #endif
172
173 // EPSON HC-40
174 #ifdef _HC40
175         add_feature(_T("_HC40"), 1);
176 #endif
177
178 // EPSON HC-80
179 #ifdef _HC80
180         add_feature(_T("_HC80"), 1);
181 #endif
182
183 // TOSHIBA HX-20 + FDD
184 #ifdef _HX20
185         add_feature(_T("_HX20"), 1);
186 #endif
187
188 // TOSHIBA J-3100GT
189 #ifdef _J3100GT
190         add_feature(_T("_J3100GT"), 1);
191 #endif
192
193 // TOSHIBA J-3100SL
194 #ifdef _J3100SL
195         add_feature(_T("_J3100SL"), 1);
196 #endif
197
198 // National JR-100
199 #ifdef _JR100
200         add_feature(_T("_JR100"), 1);
201 #endif
202
203 // National JR-200
204 #ifdef _JR200
205         add_feature(_T("_JR200"), 1);
206 #endif
207
208 // National JR-800
209 #ifdef _JR800
210         add_feature(_T("_JR800"), 1);
211 #endif
212
213 // IBM Japan Ltd PC/JX
214 #ifdef _JX
215         add_feature(_T("_JX"), 1);
216 #endif
217
218 // SORD m5
219 #ifdef _M5
220         add_feature(_T("_M5"), 1);
221 #endif
222
223 // SEIKO MAP-1010
224 #ifdef _MAP1010
225         add_feature(_T("_MAP1010"), 1);
226 #endif
227
228 // SEGA MASTER SYSTEM
229 #ifdef _MASTERSYSTEM
230         add_feature(_T("_MASTERSYSTEM"), 1);
231 #endif
232
233
234 // ASCII MSX
235 #ifdef _MSX1
236         add_feature(_T("_MSX1"), 1);
237 #endif
238
239 // ASCII MSX2
240 #ifdef _MSX2
241         add_feature(_T("_MSX2"), 1);
242 #endif
243
244 // ASCII MSX2+
245 #ifdef _MSX2P
246         add_feature(_T("_MSX2P"), 1);
247 #endif
248
249 #ifdef _MSX1_VARIANTS
250         add_feature(_T("_MSX1_VARIANTS"), 1);
251 #endif
252 #ifdef _MSX2_VARIANTS
253         add_feature(_T("_MSX2_VARIANTS"), 1);
254 #endif
255 #ifdef _MSX2P_VARIANTS
256         add_feature(_T("_MSX2P_VARIANTS"), 1);
257 #endif
258
259 // MITSUBISHI Elec. MULTI8
260 #ifdef _MULTI8
261         add_feature(_T("_MULTI8"), 1);
262 #endif
263
264 // Japan Electronics College MYCOMZ-80A
265 #ifdef _MYCOMZ80A
266         add_feature(_T("_MYCOMZ80A"), 1);
267 #endif
268
269 // SHARP MZ-80A
270 #ifdef _MZ80A
271         add_feature(_T("_MZ80A"), 1);
272 #endif
273
274 // SHARP MZ-80B
275 #ifdef _MZ80B
276         add_feature(_T("_MZ80B"), 1);
277 #endif
278
279 // SHARP MZ-80K
280 #ifdef _MZ80K
281         add_feature(_T("_MZ80K"), 1);
282 #endif
283         
284 // SHARP MZ-700
285 #ifdef _MZ700
286         add_feature(_T("_MZ700"), 1);
287 #endif
288
289 // SHARP MZ-800
290 #ifdef _MZ800
291         add_feature(_T("_MZ800"), 1);
292 #endif
293
294 // SHARP MZ-1200
295 #ifdef _MZ1200
296         add_feature(_T("_MZ1200"), 1);
297 #endif
298
299 // SHARP MZ-1500
300 #ifdef _MZ1500
301         add_feature(_T("_MZ1500"), 1);
302 #endif
303         
304 // SHARP MZ-2000
305 #ifdef _MZ2000
306         add_feature(_T("_MZ2000"), 1);
307 #endif
308
309 // SHARP MZ-2200
310 #ifdef _MZ2200
311         add_feature(_T("_MZ2200"), 1);
312 #endif
313
314 // SHARP MZ-2500
315 #ifdef _MZ2500
316         add_feature(_T("_MZ2500"), 1);
317 #endif
318
319 // SHARP MZ-2800
320 #ifdef _MZ2800
321         add_feature(_T("_MZ2800"), 1);
322 #endif
323
324 // SHARP MZ-3500
325 #ifdef _MZ3500
326         add_feature(_T("_MZ3500"), 1);
327 #endif
328
329 // SHARP MZ-5500
330 #ifdef _MZ5500
331         add_feature(_T("_MZ5500"), 1);
332 #endif
333
334 // SHARP MZ-6500
335 #ifdef _MZ6500
336         add_feature(_T("_MZ6500"), 1);
337 #endif
338         
339 // SHARP MZ-6550
340 #ifdef _MZ6550
341         add_feature(_T("_MZ6550"), 1);
342 #endif
343
344 // NEC N5200
345 #ifdef _N5200
346         add_feature(_T("_N5200"), 1);
347 #endif
348
349 // TOSHIBA PASOPIA
350 #ifdef _PASOPIA
351         add_feature(_T("_PASOPIA"), 1);
352 #endif
353
354 // TOSHIBA PASOPIA 7
355 #ifdef _PASOPIA7
356         add_feature(_T("_PASOPIA7"), 1);
357 #endif
358
359 // NEC PC-2001
360 #ifdef _PC2001
361         add_feature(_T("_PC2001"), 1);
362 #endif
363
364 // NEC PC-6001
365 #ifdef _PC6001
366         add_feature(_T("_PC6001"), 1);
367 #endif
368
369 // NEC PC-6001mkII
370 #ifdef _PC6001MK2
371         add_feature(_T("_PC6001MK2"), 1);
372 #endif
373
374 // NEC PC-6001mkIISR
375 #ifdef _PC6001MK2SR
376         add_feature(_T("_PC6001MK2SR"), 1);
377 #endif
378
379 // NEC PC-6601
380 #ifdef _PC6601
381         add_feature(_T("_PC6601"), 1);
382 #endif
383
384 // NEC PC-6601SR
385 #ifdef _PC6601SR
386         add_feature(_T("_PC6601SR"), 1);
387 #endif
388
389 // NEC PC-8001mkIISR
390 #ifdef _PC8001SR
391         add_feature(_T("_PC8001SR"), 1);
392 #endif
393
394 // NEC PC-8201
395 #ifdef _PC8201
396         add_feature(_T("_PC8201"), 1);
397 #endif
398
399 // NEC PC-8201A
400 #ifdef _PC8201A
401         add_feature(_T("_PC8201A"), 1);
402 #endif
403
404 // NEC PC-8801MA
405 #ifdef _PC8801MA
406         add_feature(_T("_PC8801MA"), 1);
407 #endif
408
409 // NEC PC-9801
410 #ifdef _PC9801
411         add_feature(_T("_PC9801"), 1);
412 #endif
413
414 // NEC PC-9801E/F/M
415 #ifdef _PC9801E
416         add_feature(_T("_PC9801E"), 1);
417 #endif
418
419 // NEC PC-9801U
420 #ifdef _PC9801U
421         add_feature(_T("_PC9801U"), 1);
422 #endif
423
424 // NEC PC-9801VF
425 #ifdef _PC9801VF
426         add_feature(_T("_PC9801VF"), 1);
427 #endif
428
429 // NEC PC-9801VM
430 #ifdef _PC9801VM
431         add_feature(_T("_PC9801VM"), 1);
432 #endif
433
434 // NEC PC-98DO
435 #ifdef _PC98DO
436         add_feature(_T("_PC98DO"), 1);
437 #endif
438
439 // NEC PC-98HA
440 #ifdef _PC98HA
441         add_feature(_T("_PC98HA"), 1);
442 #endif
443
444 // NEC PC-98LT
445 #ifdef _PC98LT
446         add_feature(_T("_PC98LT"), 1);
447 #endif
448
449 // NEC PC-100
450 #ifdef _PC100
451         add_feature(_T("_PC100"), 1);
452 #endif
453
454 // NEC-HE PC Engine
455 #ifdef _PCENGINE
456         add_feature(_T("_PCENGINE"), 1);
457 #endif
458
459 // SANYO PHC-20
460 #ifdef _PHC20
461         add_feature(_T("_PHC20"), 1);
462 #endif
463
464 // SANYO PHC-25
465 #ifdef _PHC25
466         add_feature(_T("_PHC25"), 1);
467 #endif
468
469 // CASIO PV-1000
470 #ifdef _PV1000
471         add_feature(_T("_PV1000"), 1);
472 #endif
473
474 // CASIO PV-2000
475 #ifdef _PV2000
476         add_feature(_T("_PV2000"), 1);
477 #endif
478
479 // PIONEER PX-7
480 #ifdef _PX7
481         add_feature(_T("_PX7"), 1);
482 #endif
483
484 // TOMY PYUTA
485 #ifdef _PYUTA
486         add_feature(_T("_PYUTA"), 1);
487 #endif
488
489 // EPSON QC-10
490 #ifdef _QC10
491         add_feature(_T("_QC10"), 1);
492 #endif
493
494 // BANDAI RX-78
495 #ifdef _RX78
496         add_feature(_T("_RX78"), 1);
497 #endif
498
499 // SEGA SC-3000
500 #ifdef _SC3000
501         add_feature(_T("_SC3000"), 1);
502 #endif
503
504 // EPOCH Super Cassette Vision
505 #ifdef _SCV
506         add_feature(_T("_SCV"), 1);
507 #endif
508
509 // SHARP SM-B-80TE
510 #ifdef _SMB80TE
511         add_feature(_T("_SMB80TE"), 1);
512 #endif
513
514 // SONY SMC-70
515 #ifdef _SMC70
516         add_feature(_T("_SMC70"), 1);
517 #endif
518
519 // SONY SMC-777
520 #ifdef _SMC777
521         add_feature(_T("_SMC777"), 1);
522 #endif
523
524
525 // NEC TK-80BS (COMPO BS/80)
526 #ifdef _TK80BS
527         add_feature(_T("_TK80BS"), 1);
528 #endif
529
530 // NEC TK-80
531 #ifdef _TK80
532         add_feature(_T("_TK80"), 1);
533 #endif
534
535 // NEC TK-85
536 #ifdef _TK85
537         add_feature(_T("_TK85"), 1);
538 #endif
539
540 // CANON X-07
541 #ifdef _X07
542         add_feature(_T("_X07"), 1);
543 #endif
544
545 // SHARP X1
546 #ifdef _X1
547         add_feature(_T("_X1"), 1);
548 #endif
549
550 // SHARP X1twin
551 #ifdef _X1TWIN
552         add_feature(_T("_X1TWIN"), 1);
553 #endif
554
555 // SHARP X1turbo
556 #ifdef _X1TURBO
557         add_feature(_T("_X1TURBO"), 1);
558 #endif
559         
560 // SHARP X1turboz
561 #ifdef _X1TURBOZ
562         add_feature(_T("_X1TURBOZ"), 1);
563 #endif
564         
565 // Yuasa Kyouiku System YALKY
566 #ifdef _YALKY
567         add_feature(_T("_YALKY"), 1);
568 #endif
569
570 // YAMAHA YIS
571 #ifdef _YIS
572         add_feature(_T("_YIS"), 1);
573 #endif
574
575 // SHINKO SANGYO YS-6464A
576 #ifdef _YS6464A
577         add_feature(_T("_YS6464A"), 1);
578 #endif
579
580 // Homebrew Z80 TV GAME SYSTEM
581 #ifdef _Z80TVGAME
582         add_feature(_T("_Z80TVGAME"), 1);
583 #endif
584 }
585
586 void OSD::set_features_cpu(void)
587 {
588 #ifdef HAS_I86
589         add_feature(_T("HAS_I86"), 1);
590 #endif
591 #ifdef HAS_I88
592         add_feature(_T("HAS_I88"), 1);
593 #endif
594 #ifdef HAS_I186
595         add_feature(_T("HAS_I186"), 1);
596 #endif
597 #ifdef HAS_I286
598         add_feature(_T("HAS_I286"), 1);
599 #endif
600 #ifdef HAS_I386
601         add_feature(_T("HAS_I386"), 1);
602 #endif
603 #ifdef HAS_I386DX
604         add_feature(_T("HAS_I386DX"), 1);
605 #endif
606 #ifdef HAS_I386SX
607         add_feature(_T("HAS_I386SX"), 1);
608 #endif
609 #ifdef HAS_I486
610         add_feature(_T("HAS_I486"), 1);
611 #endif
612 #ifdef HAS_I486SX
613         add_feature(_T("HAS_I486SX"), 1);
614 #endif
615 #ifdef HAS_I486DX
616         add_feature(_T("HAS_I486DX"), 1);
617 #endif
618 #ifdef HAS_PENTIUM
619         add_feature(_T("HAS_PENTIUM"), 1);
620 #endif
621 #ifdef HAS_PENTIUM_PRO
622         add_feature(_T("HAS_PENTIUM_PRO"), 1);
623 #endif
624 #ifdef HAS_PENTIUM_MMX
625         add_feature(_T("HAS_PENTIUM_MMX"), 1);
626 #endif
627 #ifdef HAS_PENTIUM2
628         add_feature(_T("HAS_PENTIUM2"), 1);
629 #endif
630 #ifdef HAS_PENTIUM2
631         add_feature(_T("HAS_PENTIUM3"), 1);
632 #endif
633 #ifdef HAS_PENTIUM2
634         add_feature(_T("HAS_PENTIUM4"), 1);
635 #endif
636         
637 #ifdef HAS_V30
638         add_feature(_T("HAS_V30"), 1);
639 #endif
640 #ifdef HAS_I8085
641         add_feature(_T("HAS_I8085"), 1);
642 #endif
643 #ifdef HAS_N2A03
644         add_feature(_T("HAS_N2A03"), 1);
645 #endif
646 #ifdef HAS_MC6800
647         add_feature(_T("HAS_MC6800"), 1);
648 #endif
649 #ifdef HAS_MC6801
650         add_feature(_T("HAS_MC6801"), 1);
651 #endif
652 #ifdef HAS_HD6301
653         add_feature(_T("HAS_HD6301"), 1);
654 #endif
655 #ifdef HAS_NSC800
656         add_feature(_T("HAS_NSC800"), 1);
657 #endif
658 #ifdef I80186
659         add_feature(_T("I80186"), 1);
660 #endif
661 #ifdef I80286
662         add_feature(_T("I80286"), 1);
663 #endif
664 #ifdef RS6000
665         add_feature(_T("RS6000"), 1);
666 #endif
667
668 #ifdef I86_PSEUDO_BIOS
669         add_feature(_T("I86_PSEUDO_BIOS"), 1);
670 #endif
671 #ifdef I286_PSEUDO_BIOS
672         add_feature(_T("I286_PSEUDO_BIOS"), 1);
673 #endif
674 #ifdef I386_PSEUDO_BIOS
675         add_feature(_T("I386_PSEUDO_BIOS"), 1);
676 #endif
677 #ifdef Z80_PSEUDO_BIOS
678         add_feature(_T("Z80_PSEUDO_BIOS"), 1);
679 #endif
680         
681 }
682
683 void OSD::set_features_vm(void)
684 {
685 // Begin vm.h
686 #ifdef USE_CART
687         add_feature(_T("MAX_CART"), (int)USE_CART);
688         add_feature(_T("USE_CART"), (int)USE_CART);
689 #endif
690 #ifdef BASE_CART_NUM
691         add_feature(_T("BASE_CART_NUM"), (int)BASE_CART_NUM);
692 #endif
693         
694 #if defined(USE_FLOPPY_DISK)
695         add_feature(_T("MAX_FD"), (int)USE_FLOPPY_DISK);
696         add_feature(_T("USE_FLOPPY_DISK"), (int)USE_FLOPPY_DISK);
697 #endif
698 #ifdef BASE_FLOPPY_DISK_NUM
699         add_feature(_T("BASE_FLOPPY_DISK_NUM"), (int)BASE_FLOPPY_DISK_NUM);
700 #endif
701
702 #ifdef USE_QUICK_DISK
703         add_feature(_T("USE_QUICK_DISK"), (int)USE_QUICK_DISK);
704         add_feature(_T("MAX_QD"), (int)USE_QUICK_DISK);
705 #endif
706 #ifdef BASE_QUICK_DISK_NUM
707         add_feature(_T("BASE_QUICK_DISK_NUM"), (int)BASE_QUICK_DISK_NUM);
708 #endif
709
710 #ifdef USE_HARD_DISK
711         add_feature(_T("USE_HARD_DISK"), (int)USE_HARD_DISK);
712         add_feature(_T("MAX_HDD"), (int)USE_HARD_DISK);
713 #endif
714 #ifdef BASE_HARD_DISK_NUM
715         add_feature(_T("BASE_HARD_DISK_NUM"), (int)BASE_HARD_DISK_NUM);
716 #endif
717
718 #ifdef USE_COMPACT_DISC
719         add_feature(_T("USE_COMPACT_DISC"), (int)USE_COMPACT_DISC);
720         add_feature(_T("MAX_CD"), (int)USE_COMPACT_DISC);
721 #endif
722 #ifdef BASE_COMPACT_DISC_NUM
723         add_feature(_T("BASE_COMPACT_DISC_NUM"), (int)BASE_COMPACT_DISC_NUM);
724 #endif
725
726 #ifdef USE_LASER_DISC
727         add_feature(_T("USE_LASER_DISC"), (int)USE_LASER_DISC);
728         add_feature(_T("MAX_LD"), (int)USE_LASER_DISC);
729 #endif
730 #ifdef BASE_LASER_DISC_NUM
731         add_feature(_T("BASE_LASER_DISC_NUM"), (int)BASE_LASER_DISC_NUM);
732 #endif
733
734 #ifdef USE_TAPE
735         add_feature(_T("USE_TAPE"), (int)USE_TAPE);
736         add_feature(_T("MAX_TAPE"), (int)USE_TAPE);
737 #endif
738 #ifdef BASE_TAPE_NUM
739         add_feature(_T("BASE_TAPE_NUM"), (int)BASE_TAPE_NUM);
740 #endif
741
742 #ifdef USE_BINARY_FILE
743         add_feature(_T("USE_BINARY_FILE"), (int)USE_BINARY_FILE);
744         add_feature(_T("MAX_BINARY"), (int)USE_BINARY_FILE);
745 #endif
746 #ifdef BASE_BINARY_FILE_NUM
747         add_feature(_T("BASE_BINARY_FILE_NUM"), (int)BASE_BINARY_FILE_NUM);
748 #endif
749
750 #ifdef USE_BUBBLE
751         add_feature(_T("USE_BUBBLE"), (int)USE_BUBBLE);
752         add_feature(_T("MAX_BUBBLE"), (int)USE_BUBBLE);
753 #endif
754 #ifdef BASE_BUBBLE_NUM
755         add_feature(_T("BASE_BUBBLE_NUM"), (int)BASE_BUBBLE_NUM);
756 #endif
757
758 #ifdef KEY_KEEP_FRAMES
759         add_feature(_T("KEY_KEEP_FRAMES"), (int)KEY_KEEP_FRAMES);
760 #endif
761 // End vm.h
762
763 #ifdef CPU_CLOCKS
764         add_feature(_T("CPU_CLOCKS"), (int64_t)CPU_CLOCKS);
765 #endif
766 #ifdef APU_CLOCK
767         add_feature(_T("APU_CLOCK"), (int64_t)APU_CLOCK);
768 #endif
769
770         
771 #ifdef MAX_DRIVE
772         add_feature(_T("MAX_DRIVE"), (int)MAX_DRIVE);
773 #endif
774
775 #ifdef HD46505_CHAR_CLOCK
776         add_feature(_T("HD46505_CHAR_CLOCK"), (float)HD46505_CHAR_CLOCK);
777 #endif
778 #ifdef HD46505_HORIZ_FREQ
779         add_feature(_T("HD46505_HORIZ_FREQ"), (float)HD46505_HORIZ_FREQ);
780 #endif
781 #ifdef _315_5124_LIMIT_SPRITES
782         add_feature(_T("_315_5124_LIMIT_SPRITES"), 1);
783 #endif
784 #ifdef HAS_AY_3_8910
785         add_feature(_T("HAS_AY_3_8910"));
786 #endif
787 #ifdef HAS_AY_3_8912
788         add_feature(_T("HAS_AY_3_8912"));
789 #endif
790 #ifdef HAS_AY_3_8913
791         add_feature(_T("HAS_AY_3_8913"));
792 #endif
793 #ifdef SUPPORT_AY_3_891X_PORT
794         add_feature(_T("SUPPORT_AY_3_891X_PORT"), 1);
795 #endif
796 #ifdef AY_3_891X_PORT_MODE
797         add_feature(_T("AY_3_891X_PORT_MODE"), (uint32_t)AY_3_891X_PORT_MODE);
798 #endif
799 #ifdef SUPPORT_AY_3_891X_PORT_A
800         add_feature(_T("SUPPORT_AY_3_891X_PORT_A"), 1);
801 #endif
802 #ifdef SUPPORT_AY_3_891X_PORT_B
803         add_feature(_T("SUPPORT_AY_3_891X_PORT_B"), 1);
804 #endif
805 #ifdef DATAREC_FAST_FWD_SPEED
806         add_feature(_T("DATAREC_FAST_FWD_SPEED"), (double)DATAREC_FAST_FWD_SPEED);
807 #endif
808 #ifdef DATAREC_FAST_REW_SPEED
809         add_feature(_T("DATAREC_FAST_REW_SPEED"), (double)DATAREC_FAST_REW_SPEED);
810 #endif
811 #ifdef DATAREC_PCM_VOLUME
812         add_feature(_T("DATAREC_PCM_VOLUME"), (int)DATAREC_PCM_VOLUME);
813 #endif
814
815 #ifdef HAS_I8254
816         add_feature(_T("HAS_I8254"), 1);
817 #endif
818 #ifdef I8255_AUTO_HAND_SHAKE
819         add_feature(_T("I8255_AUTO_HAND_SHAKE"), 1);
820 #endif
821 #ifdef HAS_MB8866
822         add_feature(_T("HAS_MB8866"), 1);
823 #endif
824 #ifdef HAS_MB8876
825         add_feature(_T("HAS_MB8876"), 1);
826 #endif
827 #ifdef HAS_MB89311
828         add_feature(_T("HAS_MB89311"), 1);
829 #endif
830 #ifdef MB8877_NO_BUSY_AFTER_SEEK
831         add_feature(_T("MB8877_NO_BUSY_AFTER_SEEK"), 1);
832 #endif
833 #ifdef MB8877_DELAY_AFTER_SEEK
834         add_feature(_T("MB8877_DELAY_AFTER_SEEK"), (int)MB8877_DELAY_AFTER_SEEK);
835 #endif
836         
837 #ifdef I8259_MAX_CHIPS
838         add_feature(_T("I8259_MAX_CHIPS"), (uint32_t)I8259_MAX_CHIPS);
839 #endif
840 #ifdef I8259_PC98_HACK
841         add_feature(_T("I8259_PC98_HACK"), 1);
842 #endif
843         
844 #ifdef I8080_MEMORY_WAIT
845         add_feature(_T("I8080_MEMORY_WAIT"), 1);
846 #endif
847 #ifdef I8080_IO_WAIT
848         add_feature(_T("I8080_IO_WAIT"), 1);
849 #endif
850
851 #ifdef MC6847_VRAM_OFS
852         add_feature(_T("MC6847_VRAM_OFS"), (uint32_t)MC6847_VRAM_OFS);
853 #endif
854 #ifdef MC6847_VRAM_AS
855         add_feature(_T("MC6847_VRAM_AS"), (uint32_t)MC6847_VRAM_AS);
856 #endif
857 #ifdef MC6847_VRAM_CSS
858         add_feature(_T("MC6847_VRAM_CSS"), (uint32_t)MC6847_VRAM_CSS);
859 #endif
860 #ifdef MC6847_VRAM_INV
861         add_feature(_T("MC6847_VRAM_INV"), (uint32_t)MC6847_VRAM_INV);
862 #endif
863 #ifdef MC6847_VRAM_INTEXT
864         add_feature(_T("MC6847_VRAM_INTEXT"), (uint32_t)MC6847_VRAM_INTEXT);
865 #endif
866         
867 #ifdef MC6847_ATTR_OFS
868         add_feature(_T("MC6847_ATTR_OFS"), (uint32_t)MC6847_ATTR_OFS);
869 #endif
870 #ifdef MC6847_ATTR_AS
871         add_feature(_T("MC6847_ATTR_AS"), (uint32_t)MC6847_ATTR_AS);
872 #endif
873 #ifdef MC6847_ATTR_CSS
874         add_feature(_T("MC6847_ATTR_CSS"), (uint32_t)MC6847_ATTR_CSS);
875 #endif
876 #ifdef MC6847_ATTR_INV
877         add_feature(_T("MC6847_ATTR_INV"), (uint32_t)MC6847_ATTR_INV);
878 #endif
879 #ifdef MC6847_ATTR_INTEXT
880         add_feature(_T("MC6847_ATTR_INTEXT"), (uint32_t)MC6847_ATTR_INTEXT);
881 #endif
882
883 #ifdef MSM58321_START_DAY
884         add_feature(_T("MSM58321_START_DAY"), (int)MSM58321_START_DAY);
885 #endif
886 #ifdef MSM58321_START_YEAR
887         add_feature(_T("MSM58321_START_YEAR"), (int)MSM58321_START_YEAR);
888 #endif
889 #ifdef HAS_MSM5832
890         add_feature(_T("HAS_MSM5832"), 1);
891 #endif
892 #ifdef PRINTER_STROBE_RISING_EDGE
893         add_feature(_T("PRINTER_STROBE_RISING_EDGE"), 1);
894 #endif
895 #ifdef MZ1P17_SW1_4_ON
896         add_feature(_T("MZ1P17_SW1_4_ON"), 1);
897 #endif
898 #ifdef DOT_PRINT
899         add_feature(_T("DOT_PRINT"), 1);
900 #endif
901
902 #ifdef PC80S31K_NO_WAIT
903         add_feature(_T("PC80S31K_NO_WAIT"), 1);
904 #endif
905
906 #ifdef HAS_RP5C15
907         add_feature(_T("HAS_RP5C15"), 1);
908 #endif
909
910 #ifdef SCSI_DEV_IMMEDIATE_SELECT
911         add_feature(_T("SCSI_DEV_IMMEDIATE_SELECT"), 1);
912 #endif
913 #ifdef SCSI_HOST_WIDE
914         add_feature(_T("SCSI_HOST_WIDE"), 1);
915 #endif
916 #ifdef SCSI_HOST_AUTO_ACK
917         add_feature(_T("SCSI_HOST_AUTO_ACK"), 1);
918 #endif
919         
920 #ifdef HAS_SN76489
921         add_feature(_T("HAS_SN76489"), 1);
922 #endif
923 #ifdef HAS_T3444M
924         add_feature(_T("HAS_T3444M"), 1);
925 #endif
926
927 #ifdef TMS9918A_VRAM_SIZE
928         add_feature(_T("TMS9918A_VRAM_SIZE"), (uint32_t)TMS9918A_VRAM_SIZE);
929 #endif
930 #ifdef TMS9918A_SUPER_IMPOSE
931         add_feature(_T("TMS9918A_SUPER_IMPOSE"), 1);
932 #endif
933 #ifdef TMS9918A_LIMIT_SPRITES
934         add_feature(_T("TMS9918A_LIMIT_SPRITES"), 1);
935 #endif
936         
937 #ifdef TIMER_HACK
938         add_feature(_T("TIMER_HACK"));
939 #endif
940 #ifdef KEYBOARD_HACK
941         add_feature(_T("KEYBOARD_HACK"));
942 #endif
943         
944 #ifdef HAS_UPD7907
945         add_feature(_T("HAS_UPD7907"), 1);
946 #endif
947 #ifdef HAS_UPD4990A
948         add_feature(_T("HAS_UPD4990A"), 1);
949 #endif
950 #ifdef UPD7220_HORIZ_FREQ
951         add_feature(_T("UPD7220_HORIZ_FREQ"), (int)UPD7220_HORIZ_FREQ);
952 #endif
953 #ifdef UPD7220_UGLY_PC98_HACK
954         add_feature(_T("UPD7220_UGLY_PC98_HACK"), 1);
955 #endif
956 #ifdef UPD7220_FIXED_PITCH
957         add_feature(_T("UPD7220_FIXED_PITCH"), 1);
958 #endif
959 #ifdef UPD7220_MSB_FIRST
960         add_feature(_T("UPD7220_MSB_FIRST"), 1);
961 #endif
962 #ifdef UPD7220_A_VERSION        
963         add_feature(_T("UPD7220_A_VERSION"), (int)UPD7220_A_VERSION);
964 #endif
965 #ifdef UPD765A_DMA_MODE
966         add_feature(_T("UPD765A_DMA_MODE"), 1);
967 #endif
968 #ifdef UPD765A_EXT_DRVSEL
969         add_feature(_T("UPD765A_EXT_DRVSEL"), 1);
970 #endif
971 #ifdef UPD765A_SENCE_INTSTAT_RESULT
972         add_feature(_T("UPD765A_SENCE_INTSTAT_RESULT"), 1);
973 #endif
974 #ifdef UPD765A_DONT_WAIT_SEEK
975         add_feature(_T("UPD765A_DONT_WAIT_SEEK"), 1);
976 #endif
977 #ifdef UPD765A_NO_ST0_AT_FOR_SEEK
978         add_feature(_T("UPD765A_NO_ST0_AT_FOR_SEEK"), 1);
979 #endif
980 #ifdef UPD765A_WAIT_RESULT7
981         add_feature(_T("UPD765A_WAIT_RESULT7"), 1);
982 #endif
983 #ifdef UPD765A_NO_ST1_EN_OR_FOR_RESULT7
984         add_feature(_T("UPD765A_NO_ST1_EN_OR_FOR_RESULT7"), 1);
985 #endif
986
987 #ifdef UPD7801_MEMORY_WAIT
988         add_feature(_T("UPD7801_MEMORY_WAIT") , 1);
989 #endif
990 #ifdef HAS_UPD7810
991         add_feature(_T("HAS_UPD7810"), 1);
992 #endif
993 #ifdef HAS_UPD7807
994         add_feature(_T("HAS_UPD7807"), 1);
995 #endif
996 #ifdef HAS_UPD7801
997         add_feature(_T("HAS_UPD7801"), 1);
998 #endif
999 #ifdef HAS_UPD78C05
1000         add_feature(_T("HAS_UPD78C05"), 1);
1001 #endif
1002 #ifdef HAS_UPD78C06
1003         add_feature(_T("HAS_UPD78C06"), 1);
1004 #endif
1005 #ifdef HAS_UPD7907
1006         add_feature(_T("HAS_UPD7907"), 1);
1007 #endif
1008
1009 #ifdef HAS_YM2608
1010         add_feature(_T("HAS_YM2608"), 1);
1011 #endif
1012 #ifdef HAS_YM_SERIES
1013         add_feature(_T("HAS_YM_SERIES"), 1);
1014 #endif
1015 #ifdef SUPPORT_YM2203_PORT
1016         add_feature(_T("SUPPORT_YM2203_PORT"), 1);
1017 #endif
1018 #ifdef SUPPORT_YM2203_PORT_A
1019         add_feature(_T("SUPPORT_YM2203_PORT_A"), 1);
1020 #endif
1021 #ifdef SUPPORT_YM2203_PORT_B
1022         add_feature(_T("SUPPORT_YM2203_PORT_B"), 1);
1023 #endif
1024
1025 #ifdef Z80_MEMORY_WAIT
1026         add_feature(_T("Z80_MEMORY_WAIT"), 1);
1027 #endif
1028 #ifdef Z80_IO_WAIT
1029         add_feature(_T("Z80_IO_WAIT"), 1);
1030 #endif
1031 #ifdef HAS_LDAIR_QUIRK
1032         add_feature(_T("HAS_LDAIR_QUIRK"), 1);
1033 #endif
1034 #ifdef Z80CTC_CLOCKS
1035         add_feature(_T("Z80CTC_CLOCKS"), (double)Z80CTC_CLOCKS);
1036 #endif
1037 #ifdef HAS_UPD7201
1038         add_feature(_T("HAS_UPD7201"), 1);
1039 #endif
1040
1041 #ifdef _X1TURBO_FEATURE
1042         add_feature(_T("_X1TURBO_FEATURE"), 1);
1043 #endif
1044 #ifdef MEMORY_DISABLE_DMA_MMIO
1045         add_feature(_T("MEMORY_DISABLE_DMA_MMIO"), 1);
1046 #endif
1047 }
1048
1049 void OSD::set_features_debug(void)
1050 {
1051
1052 #ifdef USE_DEBUGGER
1053         add_feature(_T("USE_DEBUGGER"), 1);
1054 #endif
1055 #ifdef _DEBUG_LOG
1056         add_feature(_T("_DEBUG_LOG"), 1);
1057 #endif
1058 #ifdef _FDC_DEBUG_LOG
1059         add_feature(_T("_FDC_DEBUG_LOG"), 1);
1060 #endif
1061 #ifdef _IO_DEBUG_LOG
1062         add_feature(_T("_IO_DEBUG_LOG"), 1);
1063 #endif
1064 #ifdef DEBUG_MISSING_OPCODE
1065         add_feature(_T("DEBUG_MISSING_OPCODE"), 1);
1066 #endif
1067 #ifdef _SCSI_DEBUG_LOG
1068         add_feature(_T("_SCSI_DEBUG_LOG"), 1);
1069 #endif
1070 #ifdef _CDROM_DEBUG_LOG
1071         add_feature(_T("_CDROM_DEBUG_LOG"), 1);
1072 #endif
1073 #ifdef _DEBUG_PC80S31K
1074         add_feature(_T("_DEBUG_PC80S31K"), 1);
1075 #endif
1076 #ifdef DMA_DEBUG_LOG
1077         add_feature(_T("DMA_DEBUG_LOG"), 1);
1078 #endif
1079 #ifdef SIO_DEBUG
1080         add_feature(_T("SIO_DEBUG"), 1);
1081 #endif
1082 }
1083
1084 void OSD::set_features_misc(void)
1085 {
1086 #ifdef LSB_FIRST
1087         add_feature(_T("LSB_FIRST"), 1);
1088 #endif
1089 #ifdef SINGLE_MODE_DMA
1090         add_feature(_T("SINGLE_MODE_DMA"), 1);
1091 #endif
1092 #ifdef MEMORY_ADDR_MAX
1093         add_feature(_T("MEMORY_ADDR_MAX"), (uint64_t)MEMORY_ADDR_MAX);
1094 #endif
1095 #ifdef MEMORY_BANK_SIZE
1096         add_feature(_T("MEMORY_BANK_SIZE"), (uint64_t)MEMORY_BANK_SIZE);
1097 #endif
1098 #ifdef IOBUS_RETURN_ADDR
1099         add_feature(_T("IOBUS_RETURN_ADDR"), 1);
1100 #endif
1101 #ifdef IO_ADDR_MAX
1102         add_feature(_T("IO_ADDR_MAX"), (uint32_t)IO_ADDR_MAX);
1103 #endif
1104 #ifdef CPU_START_ADDR
1105         add_feature(_T("CPU_START_ADDR"), (uint32_t)CPU_START_ADDR);
1106 #endif
1107
1108 #ifdef LOW_PASS_FILTER
1109         add_feature(_T("LOW_PASS_FILTER"), 1);
1110 #endif
1111
1112 #ifdef SUPPORT_MAME_FM_DLL
1113         add_feature(_T("SUPPORT_MAME_FM_DLL"), 1);
1114 #endif
1115 #ifdef SUPPORT_WIN32_DLL
1116         add_feature(_T("SUPPORT_WIN32_DLL"), 1);
1117 #endif
1118         
1119 #ifdef SCREEN_WIDTH
1120         add_feature(_T("SCREEN_WIDTH"), (int)SCREEN_WIDTH);
1121 #endif
1122 #ifdef SCREEN_HEIGHT
1123         add_feature(_T("SCREEN_HEIGHT"), (int)SCREEN_HEIGHT);
1124 #endif
1125 #ifdef CHARS_PER_LINE
1126         add_feature(_T("CHARS_PER_LINE"), (int)CHARS_PER_LINE);
1127 #endif
1128 #ifdef LINES_PER_FRAME
1129         add_feature(_T("LINES_PER_FRAME"), (int)LINES_PER_FRAME);
1130 #endif
1131 #ifdef USE_ALPHA_BLENDING_TO_IMPOSE
1132         add_feature(_T("USE_ALPHA_BLENDING_TO_IMPOSE"), 1);
1133 #endif
1134 #ifdef SUPPORT_MEDIA_TYPE_1DD
1135         add_feature(_T("SUPPORT_MEDIA_TYPE_1DD"), 1);
1136 #endif
1137 #ifdef DATAREC_SOUND
1138         add_feature(_T("DATAREC_SOUND"), 1);
1139 #endif
1140 #ifdef DATAREC_SOUND_LEFT
1141         add_feature(_T("DATAREC_SOUND_LEFT"), 1);
1142 #endif
1143 #ifdef DATAREC_SOUND_RIGHT
1144         add_feature(_T("DATAREC_SOUND_RIGHT"), 1);
1145 #endif
1146 #ifdef SUPPORT_QUERY_PHY_KEY_NAME
1147         add_feature(_T("SUPPORT_QUERY_PHY_KEY_NAME"), 1);
1148 #endif
1149 }
1150
1151 void OSD::set_features(void)
1152 {
1153         set_features_machine();
1154         set_features_cpu();
1155         set_features_vm();
1156         set_features_misc();
1157         set_features_debug();
1158
1159         __USE_AUTO_KEY = false;
1160 #ifdef USE_AUTO_KEY
1161         __USE_AUTO_KEY = true;
1162 #endif
1163 }
1164
1165 extern std::string cpp_homedir;
1166 extern std::string my_procname;
1167
1168 void OSD::initialize(int rate, int samples, int* presented_rate, int* presented_samples)
1169 {
1170         // get module path
1171         QString tmp_path;
1172         tmp_path = QString::fromStdString(cpp_homedir);
1173 #if defined(Q_OS_WIN)
1174         const char *delim = "\\";
1175 #else
1176         const char *delim = "/";
1177 #endif
1178         //tmp_path = tmp_path + QString::fromUtf8(delim);
1179         tmp_path = tmp_path + QString::fromUtf8("CommonSourceCodeProject");
1180         tmp_path = tmp_path + QString::fromUtf8(delim);
1181         tmp_path = tmp_path + QString::fromStdString(my_procname);
1182         tmp_path = tmp_path + QString::fromUtf8(delim);
1183         memset(app_path, 0x00, sizeof(app_path));
1184         strncpy(app_path, tmp_path.toUtf8().constData(), _MAX_PATH - 1);
1185         
1186         console_cmd_str.clear();
1187
1188         osd_timer.start();
1189
1190         initialize_console();
1191         initialize_input();
1192         initialize_printer();
1193         initialize_screen();
1194         initialize_midi();
1195         
1196         initialize_sound(rate, samples, presented_rate, presented_samples);
1197         if(get_use_movie_player() || get_use_video_capture()) initialize_video();
1198         if(get_use_socket()) initialize_socket();
1199 }
1200
1201 void OSD::release()
1202 {
1203         release_console();
1204         release_input();
1205         release_printer();
1206         release_screen();
1207         release_midi();
1208         
1209         release_sound();
1210         if(get_use_movie_player() || get_use_video_capture()) release_video();
1211         if(get_use_socket()) release_socket();
1212 }
1213