OSDN Git Service

[VM][UI][FM7][FM8][KEYBOARD] Add auto "5" and auto "8" Key. This is useful for older...
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 30 Apr 2016 11:48:32 +0000 (20:48 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 30 Apr 2016 11:48:32 +0000 (20:48 +0900)
* Auto "8" key is useful for DELPHIS and other using "1235" key.

source/src/qt/machines/fm7/MainWindow.cpp
source/src/vm/fm7/fm7_keyboard.h
source/src/vm/fm7/keyboard.cpp

index 28e71f1..f31fa7a 100644 (file)
@@ -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));
index dd6a3b2..892268b 100644 (file)
@@ -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);
index f020953..e0768b6 100644 (file)
@@ -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
        }
 }