fixed keyboard buffer error
This commit is contained in:
parent
50b24b5644
commit
90948c9edb
@ -21,7 +21,7 @@ namespace vkvm {
|
||||
setForegroundColor(white);
|
||||
setRedrawInterval(500);
|
||||
setTimerInterruptInterval(1000);
|
||||
setFont(FontType::FuturisticBlack);
|
||||
setFont(FontType::ProFontIIX);
|
||||
}
|
||||
impl.localMemoryWarn = true;
|
||||
}
|
||||
@ -96,10 +96,7 @@ namespace vkvm {
|
||||
auto buttonPressed(KeyCode keyCode) -> void {
|
||||
lockSharedMemory();
|
||||
auto reg = getRegisters();
|
||||
reg->keyboardBuffer[reg->keyboardBuffer_index_write++] = keyCode;
|
||||
if (reg->keyboardBuffer_index_write >= keyboardBufferSize) {
|
||||
reg->keyboardBuffer_index_write = 0;
|
||||
}
|
||||
reg->keyboardBuffer[(reg->keyboardBuffer_index_write) % keyboardBufferSize] = keyCode;
|
||||
unlockSharedMemory();
|
||||
}
|
||||
|
||||
|
18
src/vkvm.cpp
18
src/vkvm.cpp
@ -319,21 +319,15 @@ namespace vkvm {
|
||||
lockSharedMemory();
|
||||
auto keyCode = KeyCode(0);
|
||||
auto reg = getRegisters();
|
||||
if (reg->keyboardBuffer_index_read != reg->keyboardBuffer_index_write) {
|
||||
auto code = reg->keyboardBuffer[reg->keyboardBuffer_index_read++];
|
||||
|
||||
if(reg->keyboardBuffer_index_read >= reg->keyboardBuffer_index_write) {
|
||||
auto code = reg->keyboardBuffer[(reg->keyboardBuffer_index_read) % keyboardBufferSize];
|
||||
keyCode = KeyCode(code);
|
||||
if (reg->keyboardBuffer_index_read >= keyboardBufferSize) {
|
||||
reg->keyboardBuffer_index_read = 0;
|
||||
}
|
||||
}else{
|
||||
if(reg->keyboardBuffer_index_read == 0){
|
||||
auto code = reg->keyboardBuffer[keyboardBufferSize - 1];
|
||||
keyCode = KeyCode(code);
|
||||
}else{
|
||||
auto code = reg->keyboardBuffer[reg->keyboardBuffer_index_read - 1];
|
||||
keyCode = KeyCode(code);
|
||||
}
|
||||
auto code = reg->keyboardBuffer[(reg->keyboardBuffer_index_read) % keyboardBufferSize];
|
||||
keyCode = KeyCode(code);
|
||||
}
|
||||
|
||||
unlockSharedMemory();
|
||||
return keyCode;
|
||||
}
|
||||
|
@ -12,8 +12,8 @@ TEST_CASE("Keyboard Buffer") {
|
||||
}
|
||||
|
||||
SECTION("read") {
|
||||
CHECK(vkvm::getLastPressedKey() == vkvm::A);
|
||||
CHECK(vkvm::getLastPressedKey() == vkvm::B);
|
||||
CHECK(vkvm::getLastPressedKey() == vkvm::C);
|
||||
CHECK(vkvm::getLastPressedKey() == vkvm::C);
|
||||
CHECK(vkvm::getLastPressedKey() == vkvm::C);
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ TEST_CASE("Default values") {
|
||||
REQUIRE(vkvm::getForegroundColor() == vkvm::white);
|
||||
REQUIRE(vkvm::getRedrawInterval() == 500);
|
||||
REQUIRE(vkvm::getTimerInterruptInterval() == 1000);
|
||||
REQUIRE(vkvm::getFont() == vkvm::FuturisticBlack);
|
||||
REQUIRE(vkvm::getFont() == vkvm::ProFontIIX);
|
||||
}
|
||||
|
||||
SECTION("change") {
|
||||
@ -63,7 +63,7 @@ TEST_CASE("Default values") {
|
||||
REQUIRE(vkvm::getForegroundColor() == vkvm::white);
|
||||
REQUIRE(vkvm::getRedrawInterval() == 500);
|
||||
REQUIRE(vkvm::getTimerInterruptInterval() == 1000);
|
||||
REQUIRE(vkvm::getFont() == vkvm::FuturisticBlack);
|
||||
REQUIRE(vkvm::getFont() == vkvm::ProFontIIX);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user