diff --git a/source/Keyboard.cpp b/source/Keyboard.cpp index 212ba69b..5250866e 100644 --- a/source/Keyboard.cpp +++ b/source/Keyboard.cpp @@ -333,6 +333,22 @@ static char ClipboardCurrChar(bool bIncPtr) return nKey; } +static BYTE ClipboardReadOrPeek(bool incPtr) +{ + if (g_bPasteFromClipboard) + ClipboardInit(); + + if (g_bClipboardActive) + { + if (*lptstr == 0) + ClipboardDone(); + else + return 0x80 | ClipboardCurrChar(incPtr); + } + + return 0; +} + //=========================================================================== const UINT kAKDNumElements = 256/64; @@ -402,43 +418,29 @@ BYTE KeybReadData (void) { LogFileTimeUntilFirstKeyRead(); - if (g_bPasteFromClipboard) - ClipboardInit(); - - if (g_bClipboardActive) - { - if(*lptstr == 0) - ClipboardDone(); - else - return 0x80 | ClipboardCurrChar(false); - } - - // + BYTE res = ClipboardReadOrPeek(false); + if (res) + return res; return keycode | (keywaiting ? 0x80 : 0); } //=========================================================================== -BYTE KeybReadFlag (void) +BYTE KeybClearStrobe(void) { - if (g_bPasteFromClipboard) - ClipboardInit(); - - if (g_bClipboardActive) - { - if(*lptstr == 0) - ClipboardDone(); - else - return 0x80 | ClipboardCurrChar(true); - } - - // - keywaiting = 0; - if (IS_APPLE2) // Include Pravets machines too? - return keycode; + return ClipboardReadOrPeek(true); +} + +BYTE KeybReadFlag (void) +{ + _ASSERT(!IS_APPLE2); // And also not Pravets machines? + + BYTE res = KeybClearStrobe(); + if (res) + return res; // AKD diff --git a/source/Keyboard.h b/source/Keyboard.h index 36afbc04..a1526f00 100644 --- a/source/Keyboard.h +++ b/source/Keyboard.h @@ -17,6 +17,7 @@ void KeybQueueKeypress(WPARAM key, Keystroke_e bASCII); void KeybToggleCapsLock (); void KeybToggleP8ACapsLock (); void KeybAnyKeyDown(UINT message, WPARAM wparam, bool bIsExtended); +BYTE KeybClearStrobe(void); BYTE KeybReadData (void); BYTE KeybReadFlag (void); void KeybSaveSnapshot(class YamlSaveHelper& yamlSaveHelper); diff --git a/source/Memory.cpp b/source/Memory.cpp index 49ea63ff..a92ffa27 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -417,7 +417,10 @@ static BYTE __stdcall IOWrite_C00x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULON static BYTE __stdcall IORead_C01x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles) { if (IS_APPLE2) // Include Pravets machines too? - return KeybReadFlag(); + { + KeybClearStrobe(); + return IO_Null(pc, addr, bWrite, d, nExecutedCycles); // GH#1261 + } bool res = false; switch (addr & 0xf) @@ -445,7 +448,7 @@ static BYTE __stdcall IORead_C01x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG static BYTE __stdcall IOWrite_C01x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles) { - return KeybReadFlag(); + return KeybClearStrobe(); } //-------------------------------------