From: K.Ohta Date: Sat, 30 Apr 2016 11:48:32 +0000 (+0900) Subject: [VM][UI][FM7][FM8][KEYBOARD] Add auto "5" and auto "8" Key. This is useful for older... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ccf19c9bca2064e0cc69fe59668b0cb1193d7e49;p=csp-qt%2Fcommon_source_project-fm7.git [VM][UI][FM7][FM8][KEYBOARD] Add auto "5" and auto "8" Key. This is useful for older Game for FM-8/7. * Auto "8" key is useful for DELPHIS and other using "1235" key. --- diff --git a/source/src/qt/machines/fm7/MainWindow.cpp b/source/src/qt/machines/fm7/MainWindow.cpp index 28e71f17e..f31fa7ac5 100644 --- a/source/src/qt/machines/fm7/MainWindow.cpp +++ b/source/src/qt/machines/fm7/MainWindow.cpp @@ -73,7 +73,7 @@ void Object_Menu_Control_7::do_set_autokey_5_8(void) config.dipswitch = config.dipswitch | (FM7_DIPSW_SELECT_5_OR_8KEY | FM7_DIPSW_AUTO_5_OR_8KEY); break; case 2: // Auto 8 - config.dipswitch = (config.dipswitch | FM7_DIPSW_AUTO_5_OR_8KEY) & ~FM7_DIPSW_AUTO_5_OR_8KEY; + config.dipswitch = (config.dipswitch | FM7_DIPSW_AUTO_5_OR_8KEY) & ~FM7_DIPSW_SELECT_5_OR_8KEY; break; default:// Not Auto Key: config.dipswitch = config.dipswitch & ~(FM7_DIPSW_SELECT_5_OR_8KEY | FM7_DIPSW_AUTO_5_OR_8KEY); @@ -281,7 +281,7 @@ void META_MainWindow::retranslateUi(void) #if defined(_FM8) || defined(_FM7) || defined(_FMNEW7) || defined(_FM77_VARIANTS) action_1MFloppy->setText(QApplication::translate("MainWindow", "Connect 1MB FDD(Need Restart)", 0)); #endif - menuAuto5_8Key->setTitle(QApplication::translate("MainWindow", "Auto Stop Ten Key (HACK)", 0)); + menuAuto5_8Key->setTitle(QApplication::translate("MainWindow", "Auto Stop Ten Key (hack)", 0)); action_Neither_5_or_8key->setText(QApplication::translate("MainWindow", "None used.", 0)); action_Auto_5key->setText(QApplication::translate("MainWindow", "Use 5", 0)); action_Auto_8key->setText(QApplication::translate("MainWindow", "Use 8", 0)); diff --git a/source/src/vm/fm7/fm7_keyboard.h b/source/src/vm/fm7/fm7_keyboard.h index dd6a3b277..892268bc6 100644 --- a/source/src/vm/fm7/fm7_keyboard.h +++ b/source/src/vm/fm7/fm7_keyboard.h @@ -95,6 +95,7 @@ class KEYBOARD : public DEVICE { void do_repeatkey(uint16_t scancode); void reset_unchange_mode(void); void key_down_main(void); + void key_up_main(uint16_t bak_scancode); #if defined(_FM77AV_VARIANTS) void set_mode(void); diff --git a/source/src/vm/fm7/keyboard.cpp b/source/src/vm/fm7/keyboard.cpp index f0209532b..e0768b6c8 100644 --- a/source/src/vm/fm7/keyboard.cpp +++ b/source/src/vm/fm7/keyboard.cpp @@ -26,6 +26,10 @@ enum { ID_KEYBOARD_HIDDENMESSAGE_AV, ID_KEYBOARD_HIDDEN_BEEP_ON, ID_KEYBOARD_HIDDEN_BEEP_OFF, + ID_KEYBOARD_AUTO_8KEY_START, + ID_KEYBOARD_AUTO_8KEY_END, + ID_KEYBOARD_AUTO_5KEY_START, + ID_KEYBOARD_AUTO_5KEY_END, }; // @@ -238,9 +242,8 @@ uint16_t KEYBOARD::scan2fmkeycode(uint16_t sc) return retval; } -void KEYBOARD::key_up(uint32_t vk) +void KEYBOARD::key_up_main(uint16_t bak_scancode) { - uint16_t bak_scancode = vk2scancode(vk); bool stat_break = break_pressed; older_vk = 0; if(bak_scancode == 0) return; @@ -256,6 +259,35 @@ void KEYBOARD::key_up(uint32_t vk) this->write_signals(&break_line, 0x00); } } + if((config.dipswitch & FM7_DIPSW_AUTO_5_OR_8KEY) != 0) { + if((config.dipswitch & FM7_DIPSW_SELECT_5_OR_8KEY) == 0) { // Auto 8 + switch(bak_scancode) { + case 0x42: // 1 + case 0x43: // 2 + case 0x44: // 3 + case 0x3f: // 5 + register_event(this, + ID_KEYBOARD_AUTO_8KEY_START, + 20.0 * 1000.0, false, NULL); + break; + } + } else { // Auto 5 + switch(bak_scancode) { + case 0x42: // 1 + case 0x43: // 2 + case 0x44: // 3 + case 0x3e: // 4 + case 0x40: // 6 + case 0x3a: // 7 + case 0x3b: // 8 + case 0x3c: // 9 + register_event(this, + ID_KEYBOARD_AUTO_5KEY_START, + 20.0 * 1000.0, false, NULL); + break; + } + } + } } else { //scancode = 0; if((keymode == KEYMODE_SCAN) && (bak_scancode != 0)) { // Notify even key-up, when using SCAN mode. @@ -266,6 +298,14 @@ void KEYBOARD::key_up(uint32_t vk) } } +void KEYBOARD::key_up(uint32_t vk) +{ + uint16_t bak_scancode = vk2scancode(vk); + key_up_main(bak_scancode); +} + + + void KEYBOARD::key_down(uint32_t vk) { if(older_vk == vk) return; @@ -441,6 +481,26 @@ void KEYBOARD::event_callback(int event_id, int err) keycode_7 = key_fifo->read(); this->write_signals(&int_line, 0xffffffff); } + } else if(event_id == ID_KEYBOARD_AUTO_8KEY_START) { + if(keymode != KEYMODE_SCAN) { + scancode = 0x3b; // 8 + key_down_main(); + register_event(this, + ID_KEYBOARD_AUTO_8KEY_END, + 20.0 * 1000.0, false, NULL); + } + } else if(event_id == ID_KEYBOARD_AUTO_8KEY_END) { + key_up_main(0x3b); // 8 + } else if(event_id == ID_KEYBOARD_AUTO_5KEY_START) { + if(keymode != KEYMODE_SCAN) { + scancode = 0x3f; // 5 + key_down_main(); + register_event(this, + ID_KEYBOARD_AUTO_5KEY_END, + 20.0 * 1000.0, false, NULL); + } + } else if(event_id == ID_KEYBOARD_AUTO_5KEY_END) { + key_up_main(0x3f); // 5 } }