OSDN Git Service

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