Common Source Code Project for Qt (a.k.a for FM-7).
Revision | 2e57531e86c58e1f8ad90f8e44dff29609610649 (tree) |
---|---|
Zeit | 2017-06-27 18:51:02 |
Autor | K.Ohta <whatisthis.sowhat@gmai...> |
Commiter | K.Ohta |
[EMU] Add EMU::get_extra_leds() to get led status.
[VM][FM7] Stop using DUMMYDEVICE:: . Use VM::get_extra_leds() to get led status.
[VM][FM7][KEYBOARD] Update state version.
@@ -426,6 +426,12 @@ bool EMU::get_kana_locked() | ||
426 | 426 | return vm->get_kana_locked(); |
427 | 427 | } |
428 | 428 | #endif |
429 | +#ifdef USE_EXTRA_LEDS | |
430 | +uint32_t EMU::get_extra_leds() | |
431 | +{ | |
432 | + return vm->get_extra_leds(); | |
433 | +} | |
434 | +#endif | |
429 | 435 | |
430 | 436 | void EMU::key_lost_focus() |
431 | 437 | { |
@@ -2606,12 +2612,6 @@ uint32_t EMU::is_hard_disk_accessed() | ||
2606 | 2612 | } |
2607 | 2613 | #endif |
2608 | 2614 | |
2609 | -#ifdef USE_LED_DEVICE | |
2610 | -uint32_t EMU::get_led_status() | |
2611 | -{ | |
2612 | - return vm->get_led_status(); | |
2613 | -} | |
2614 | -#endif | |
2615 | 2615 | |
2616 | 2616 | #ifdef USE_SOUND_VOLUME |
2617 | 2617 | void EMU::set_sound_device_volume(int ch, int decibel_l, int decibel_r) |
@@ -235,6 +235,9 @@ public: | ||
235 | 235 | bool get_caps_locked(); |
236 | 236 | bool get_kana_locked(); |
237 | 237 | #endif |
238 | +#ifdef USE_EXTRA_LEDS | |
239 | + uint32_t get_extra_leds(); | |
240 | +#endif | |
238 | 241 | void key_lost_focus(); |
239 | 242 | #ifdef ONE_BOARD_MICRO_COMPUTER |
240 | 243 | void press_button(int num); |
@@ -484,9 +487,6 @@ public: | ||
484 | 487 | #ifdef USE_HARD_DISK |
485 | 488 | uint32_t is_hard_disk_accessed(); |
486 | 489 | #endif |
487 | -#ifdef USE_LED_DEVICE | |
488 | - uint32_t get_led_status(void); | |
489 | -#endif | |
490 | 490 | #ifdef USE_SOUND_VOLUME |
491 | 491 | void set_sound_device_volume(int ch, int decibel_l, int decibel_r); |
492 | 492 | #endif |
@@ -40,13 +40,6 @@ | ||
40 | 40 | #include "./bubblecasette.h" |
41 | 41 | #endif |
42 | 42 | |
43 | -#if defined(USE_LED_DEVICE) | |
44 | -#include "./dummydevice.h" | |
45 | -#else | |
46 | -#define SIG_DUMMYDEVICE_BIT0 0 | |
47 | -#define SIG_DUMMYDEVICE_BIT1 1 | |
48 | -#define SIG_DUMMYDEVICE_BIT2 2 | |
49 | -#endif | |
50 | 43 | #include "./fm7_mainio.h" |
51 | 44 | #include "./fm7_mainmem.h" |
52 | 45 | #include "./fm7_display.h" |
@@ -164,11 +157,6 @@ VM::VM(EMU* parent_emu): emu(parent_emu) | ||
164 | 157 | #ifdef CAPABLE_KANJI_CLASS2 |
165 | 158 | kanjiclass2 = new KANJIROM(this, emu, true); |
166 | 159 | #endif |
167 | -#if defined(USE_LED_DEVICE) | |
168 | - led_terminate = new DUMMYDEVICE(this, emu); | |
169 | -#else | |
170 | - led_terminate = new DEVICE(this, emu); | |
171 | -#endif | |
172 | 160 | #if defined(_USE_QT) |
173 | 161 | event->set_device_name(_T("EVENT")); |
174 | 162 | dummy->set_device_name(_T("1st Dummy")); |
@@ -179,7 +167,6 @@ VM::VM(EMU* parent_emu): emu(parent_emu) | ||
179 | 167 | # ifdef WITH_Z80 |
180 | 168 | z80cpu->set_device_name(_T("Z80 CPU")); |
181 | 169 | # endif |
182 | - led_terminate->set_device_name(_T("LEDs")); | |
183 | 170 | if(fdc != NULL) fdc->set_device_name(_T("MB8877 FDC(320KB)")); |
184 | 171 | |
185 | 172 | // basic devices |
@@ -347,9 +334,6 @@ void VM::connect_bus(void) | ||
347 | 334 | #endif |
348 | 335 | keyboard->set_context_rxrdy(display, SIG_FM7KEY_RXRDY, 0x01); |
349 | 336 | keyboard->set_context_key_ack(display, SIG_FM7KEY_ACK, 0x01); |
350 | - keyboard->set_context_ins_led( led_terminate, SIG_DUMMYDEVICE_BIT0, 0xffffffff); | |
351 | - keyboard->set_context_caps_led(led_terminate, SIG_DUMMYDEVICE_BIT1, 0xffffffff); | |
352 | - keyboard->set_context_kana_led(led_terminate, SIG_DUMMYDEVICE_BIT2, 0xffffffff); | |
353 | 337 | |
354 | 338 | if(drec != NULL) { |
355 | 339 | drec->set_context_ear(mainio, FM7_MAINIO_CMT_RECV, 0xffffffff); |
@@ -537,12 +521,6 @@ double VM::get_frame_rate() | ||
537 | 521 | return event->get_frame_rate(); |
538 | 522 | } |
539 | 523 | |
540 | -#if defined(USE_LED_DEVICE) | |
541 | -uint32_t VM::get_led_status() | |
542 | -{ | |
543 | - return led_terminate->read_signal(SIG_DUMMYDEVICE_READWRITE); | |
544 | -} | |
545 | -#endif // USE_LED_DEVICE | |
546 | 524 | |
547 | 525 | |
548 | 526 | // ---------------------------------------------------------------------------- |
@@ -685,6 +663,13 @@ bool VM::get_kana_locked() | ||
685 | 663 | return keyboard->get_kana_locked(); |
686 | 664 | } |
687 | 665 | |
666 | +// Get INS status.Important with FM-7 series (^_^; | |
667 | +uint32_t VM::get_extra_leds() | |
668 | +{ | |
669 | + return keyboard->read_signal(SIG_FM7KEY_LED_STATUS); | |
670 | +} | |
671 | + | |
672 | + | |
688 | 673 | // ---------------------------------------------------------------------------- |
689 | 674 | // user interface |
690 | 675 | // ---------------------------------------------------------------------------- |
@@ -899,7 +884,7 @@ void VM::is_bubble_casette_protected(int drv, bool flag) | ||
899 | 884 | #endif |
900 | 885 | |
901 | 886 | |
902 | -#define STATE_VERSION 5 | |
887 | +#define STATE_VERSION 6 | |
903 | 888 | void VM::save_state(FILEIO* state_fio) |
904 | 889 | { |
905 | 890 | state_fio->FputUint32_BE(STATE_VERSION); |
@@ -17,7 +17,7 @@ | ||
17 | 17 | #define USE_DIPSWITCH |
18 | 18 | #define USE_CPU_TYPE 2 |
19 | 19 | #define USE_SPECIAL_RESET |
20 | -#define USE_LED_DEVICE 3 | |
20 | +#define USE_EXTRA_LEDS 3 | |
21 | 21 | #define USE_MINIMUM_RENDERING 1 |
22 | 22 | #define USE_MOUSE |
23 | 23 | #define USE_JOYSTICK |
@@ -26,6 +26,7 @@ | ||
26 | 26 | #define USE_PRINTER_TYPE 4 |
27 | 27 | #define USE_AY_3_8910_AS_PSG |
28 | 28 | |
29 | +#define INDEPENDENT_CAPS_KANA_LED | |
29 | 30 | #define NOTIFY_KEY_DOWN |
30 | 31 | //#define NOTIFY_KEY_UP |
31 | 32 | #define NOTIFY_KEY_DOWN_LR_SHIFT |
@@ -375,10 +376,6 @@ class AY_3_891X; | ||
375 | 376 | #if defined(_FM8) |
376 | 377 | class BUBBLECASETTE; |
377 | 378 | #endif |
378 | -#if defined(USE_LED_DEVICE) | |
379 | -class DUMMYDEVICE; | |
380 | -#endif | |
381 | - | |
382 | 379 | class DISPLAY; |
383 | 380 | #if defined(_FM77AV_VARIANTS) |
384 | 381 | class MB61VH010; |
@@ -406,11 +403,6 @@ protected: | ||
406 | 403 | MC6809* maincpu; |
407 | 404 | FM7_MAINMEM* mainmem; |
408 | 405 | FM7_MAINIO* mainio; |
409 | -#if defined(USE_LED_DEVICE) | |
410 | - DUMMYDEVICE* led_terminate; | |
411 | -#else | |
412 | - DEVICE* led_terminate; | |
413 | -#endif | |
414 | 406 | MB8877* fdc; |
415 | 407 | #if defined(_FM8) |
416 | 408 | // FM8 |
@@ -479,9 +471,6 @@ public: | ||
479 | 471 | void special_reset(); |
480 | 472 | void run(); |
481 | 473 | double get_frame_rate(); |
482 | -#if defined(USE_LED_DEVICE) | |
483 | - uint32_t get_led_status(); | |
484 | -#endif | |
485 | 474 | |
486 | 475 | #ifdef USE_DEBUGGER |
487 | 476 | // debugger |
@@ -507,6 +496,7 @@ public: | ||
507 | 496 | void key_up(int code); |
508 | 497 | bool get_caps_locked(); |
509 | 498 | bool get_kana_locked(); |
499 | + uint32_t get_extra_leds(); | |
510 | 500 | |
511 | 501 | // user interface |
512 | 502 | void open_floppy_disk(int drv, const _TCHAR* file_path, int bank); |
@@ -272,6 +272,7 @@ enum { | ||
272 | 272 | SIG_FM7KEY_ACK, // D431 |
273 | 273 | SIG_FM7KEY_BREAK_KEY, |
274 | 274 | SIG_FM7KEY_PUSH_TO_ENCODER, |
275 | + SIG_FM7KEY_LED_STATUS, | |
275 | 276 | }; |
276 | 277 | |
277 | 278 | enum { |
@@ -29,9 +29,6 @@ class KEYBOARD : public DEVICE { | ||
29 | 29 | void turn_on_ins_led(void); |
30 | 30 | void turn_off_ins_led(void); |
31 | 31 | |
32 | - outputs_t caps_led; | |
33 | - outputs_t kana_led; | |
34 | - outputs_t ins_led; | |
35 | 32 | #if defined(_FM77AV_VARIANTS) |
36 | 33 | outputs_t rxrdy; |
37 | 34 | outputs_t key_ack; |
@@ -50,6 +47,10 @@ private: | ||
50 | 47 | bool caps_pressed; |
51 | 48 | bool kana_pressed; |
52 | 49 | bool break_pressed; |
50 | + | |
51 | + bool ins_led_status; | |
52 | + bool kana_led_status; | |
53 | + bool caps_led_status; | |
53 | 54 | uint8_t read_data_reg(void); |
54 | 55 | uint8_t read_stat_reg(void); |
55 | 56 |
@@ -154,15 +155,6 @@ private: | ||
154 | 155 | register_output_signal(&key_ack, p, id, mask); |
155 | 156 | #endif |
156 | 157 | } |
157 | - void set_context_caps_led(DEVICE *p, int id, uint32_t mask) { | |
158 | - register_output_signal(&caps_led, p, id, mask); | |
159 | - } | |
160 | - void set_context_kana_led(DEVICE *p, int id, uint32_t mask) { | |
161 | - register_output_signal(&kana_led, p, id, mask); | |
162 | - } | |
163 | - void set_context_ins_led(DEVICE *p, int id, uint32_t mask) { | |
164 | - register_output_signal(&ins_led, p, id, mask); | |
165 | - } | |
166 | 158 | void set_context_break_line(DEVICE *p, int id, uint32_t mask) { |
167 | 159 | register_output_signal(&break_line, p, id, mask); |
168 | 160 | } |
@@ -58,13 +58,13 @@ uint8_t KEYBOARD::get_keycode_low(void) | ||
58 | 58 | // 0xd40d : R |
59 | 59 | void KEYBOARD::turn_on_ins_led(void) |
60 | 60 | { |
61 | - this->write_signals(&ins_led, 0xff); | |
61 | + ins_led_status = true; | |
62 | 62 | } |
63 | 63 | |
64 | 64 | // 0xd40d : W |
65 | 65 | void KEYBOARD::turn_off_ins_led(void) |
66 | 66 | { |
67 | - this->write_signals(&ins_led, 0x00); | |
67 | + ins_led_status = false; | |
68 | 68 | } |
69 | 69 | |
70 | 70 | // UI Handler. |
@@ -111,7 +111,7 @@ void KEYBOARD::set_modifiers(uint8_t sc, bool flag) | ||
111 | 111 | } else { |
112 | 112 | caps_pressed = true; |
113 | 113 | } |
114 | - if(keymode == KEYMODE_STANDARD) this->write_signals(&caps_led, caps_pressed ? 0xff : 0x00); | |
114 | + if(keymode == KEYMODE_STANDARD) caps_led_status = caps_pressed; | |
115 | 115 | } |
116 | 116 | } else if(sc == 0x5a) { // KANA |
117 | 117 | // Toggle on press. |
@@ -121,7 +121,7 @@ void KEYBOARD::set_modifiers(uint8_t sc, bool flag) | ||
121 | 121 | } else { |
122 | 122 | kana_pressed = true; |
123 | 123 | } |
124 | - if(keymode == KEYMODE_STANDARD) this->write_signals(&kana_led, kana_pressed ? 0xff : 0x00); | |
124 | + if(keymode == KEYMODE_STANDARD) kana_led_status = kana_pressed; | |
125 | 125 | } |
126 | 126 | } else if(sc == 0x5c) { // Break |
127 | 127 | break_pressed = flag; |
@@ -607,7 +607,9 @@ void KEYBOARD::reset_unchange_mode(void) | ||
607 | 607 | graph_pressed = false; |
608 | 608 | kana_pressed = false; |
609 | 609 | caps_pressed = false; |
610 | - // ins_pressed = false; | |
610 | + ins_led_status = false; | |
611 | + kana_led_status = false; | |
612 | + caps_led_status = false; | |
611 | 613 | datareg = 0x00; |
612 | 614 | repeat_keycode = 0x00; |
613 | 615 | autokey_backup = 0x00; |
@@ -636,9 +638,6 @@ void KEYBOARD::reset_unchange_mode(void) | ||
636 | 638 | this->write_signals(&rxrdy, 0x00); |
637 | 639 | this->write_signals(&key_ack, 0xff); |
638 | 640 | #endif |
639 | - this->write_signals(&kana_led, 0x00); | |
640 | - this->write_signals(&caps_led, 0x00); | |
641 | - this->write_signals(&ins_led, 0x00); | |
642 | 641 | } |
643 | 642 | |
644 | 643 |
@@ -743,11 +742,11 @@ void KEYBOARD::set_leds(void) | ||
743 | 742 | if((ledvar & 0x02) != 0) { |
744 | 743 | // Kana |
745 | 744 | kana_pressed = ((ledvar & 0x01) == 0); |
746 | - write_signals(&kana_led, kana_pressed); | |
745 | + kana_led_status = kana_pressed; | |
747 | 746 | } else { |
748 | 747 | // Caps |
749 | 748 | caps_pressed = ((ledvar & 0x01) == 0); |
750 | - write_signals(&caps_led, caps_pressed); | |
749 | + caps_led_status = caps_pressed; | |
751 | 750 | } |
752 | 751 | } |
753 | 752 | cmd_fifo->clear(); |
@@ -960,6 +959,12 @@ uint32_t KEYBOARD::read_signal(int id) | ||
960 | 959 | { |
961 | 960 | if(id == SIG_FM7KEY_BREAK_KEY) { |
962 | 961 | return break_pressed ? 0xfffffff : 0x00000000; |
962 | + } else if(id == SIG_FM7KEY_LED_STATUS) { | |
963 | + uint32_t _l; | |
964 | + _l = (ins_led_status) ? 0x00000001 : 0; | |
965 | + _l |= (kana_led_status) ? 0x00000002 : 0; | |
966 | + _l |= (caps_led_status) ? 0x00000004 : 0; | |
967 | + return _l; | |
963 | 968 | } |
964 | 969 | return 0; |
965 | 970 | } |
@@ -968,7 +973,7 @@ uint32_t KEYBOARD::read_signal(int id) | ||
968 | 973 | void KEYBOARD::write_signal(int id, uint32_t data, uint32_t mask) |
969 | 974 | { |
970 | 975 | if(id == SIG_FM7KEY_SET_INSLED) { |
971 | - write_signals(&ins_led, data & mask); | |
976 | + ins_led_status = ((data & mask) != 0); | |
972 | 977 | } |
973 | 978 | #if defined(_FM77AV_VARIANTS) |
974 | 979 | else if(id == SIG_FM7KEY_PUSH_TO_ENCODER) { |
@@ -1188,9 +1193,9 @@ KEYBOARD::KEYBOARD(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_em | ||
1188 | 1193 | initialize_output_signals(&break_line); |
1189 | 1194 | initialize_output_signals(&int_line); |
1190 | 1195 | |
1191 | - initialize_output_signals(&kana_led); | |
1192 | - initialize_output_signals(&caps_led); | |
1193 | - initialize_output_signals(&ins_led); | |
1196 | + ins_led_status = false; | |
1197 | + kana_led_status = false; | |
1198 | + caps_led_status = false; | |
1194 | 1199 | set_device_name(_T("KEYBOARD SUBSYSTEM")); |
1195 | 1200 | } |
1196 | 1201 |
@@ -1212,7 +1217,7 @@ KEYBOARD::~KEYBOARD() | ||
1212 | 1217 | { |
1213 | 1218 | } |
1214 | 1219 | |
1215 | -#define STATE_VERSION 4 | |
1220 | +#define STATE_VERSION 5 | |
1216 | 1221 | #if defined(Q_OS_WIN) |
1217 | 1222 | DLL_PREFIX_I struct cur_time_s cur_time; |
1218 | 1223 | #endif |
@@ -1291,6 +1296,10 @@ void KEYBOARD::save_state(FILEIO *state_fio) | ||
1291 | 1296 | } |
1292 | 1297 | // Version 4 |
1293 | 1298 | state_fio->FputUint8(autokey_backup); |
1299 | + // Version 5 | |
1300 | + state_fio->FputBool(ins_led_status); | |
1301 | + state_fio->FputBool(kana_led_status); | |
1302 | + state_fio->FputBool(caps_led_status); | |
1294 | 1303 | } |
1295 | 1304 | |
1296 | 1305 | bool KEYBOARD::load_state(FILEIO *state_fio) |
@@ -1369,6 +1378,12 @@ bool KEYBOARD::load_state(FILEIO *state_fio) | ||
1369 | 1378 | } |
1370 | 1379 | // Version 4 |
1371 | 1380 | autokey_backup = state_fio->FgetUint8(); |
1381 | + // Version 5 | |
1382 | + ins_led_status = state_fio->FgetBool(); | |
1383 | + kana_led_status = state_fio->FgetBool(); | |
1384 | + caps_led_status = state_fio->FgetBool(); | |
1385 | + | |
1386 | + | |
1372 | 1387 | if(version == STATE_VERSION) { |
1373 | 1388 | return true; |
1374 | 1389 | } |