1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 08:49:37 +00:00

Adds virtual keys for F1, F2, etc.

This commit is contained in:
Thomas Harte 2020-03-05 21:01:30 -05:00
parent 3758ec79ac
commit 462a76dd96
3 changed files with 45 additions and 7 deletions

View File

@ -115,13 +115,36 @@ class ConcreteMachine:
}
void set_key_state(uint16_t key, bool isPressed) final {
if(key == KeyBreak) {
m6502_.set_reset_line(isPressed);
} else {
if(isPressed)
key_states_[key >> 4] |= key&0xf;
else
key_states_[key >> 4] &= ~(key&0xf);
switch(key) {
default:
if(isPressed)
key_states_[key >> 4] |= key&0xf;
else
key_states_[key >> 4] &= ~(key&0xf);
break;
case KeyBreak:
m6502_.set_reset_line(isPressed);
break;
#define ShiftedKey(source, dest) \
case source: \
set_key_state(KeyShift, isPressed); \
set_key_state(dest, isPressed); \
break;
ShiftedKey(KeyF1, Key1);
ShiftedKey(KeyF2, Key2);
ShiftedKey(KeyF3, Key3);
ShiftedKey(KeyF4, Key4);
ShiftedKey(KeyF5, Key5);
ShiftedKey(KeyF6, Key6);
ShiftedKey(KeyF7, Key7);
ShiftedKey(KeyF8, Key8);
ShiftedKey(KeyF9, Key9);
ShiftedKey(KeyF0, Key0);
#undef ShiftedKey
}
}

View File

@ -52,6 +52,18 @@ uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) {
BIND(KeypadMinus, KeyMinus); BIND(KeypadPlus, KeyColon);
BIND(Space, KeySpace);
// Virtual mappings.
BIND(F1, KeyF1);
BIND(F2, KeyF2);
BIND(F3, KeyF3);
BIND(F4, KeyF4);
BIND(F5, KeyF5);
BIND(F6, KeyF6);
BIND(F7, KeyF7);
BIND(F8, KeyF8);
BIND(F9, KeyF9);
BIND(F10, KeyF0);
}
#undef BIND
return KeyboardMachine::MappedMachine::KeyNotMapped;

View File

@ -30,6 +30,9 @@ enum Key: uint16_t {
KeyZ = 0x00c0 | 0x08, KeyA = 0x00c0 | 0x04, KeyQ = 0x00c0 | 0x02, Key1 = 0x00c0 | 0x01,
KeyShift = 0x00d0 | 0x08, KeyControl = 0x00d0 | 0x04, KeyFunc = 0x00d0 | 0x02, KeyEscape = 0x00d0 | 0x01,
// Virtual keys.
KeyF1 = 0xfff0, KeyF2, KeyF3, KeyF4, KeyF5, KeyF6, KeyF7, KeyF8, KeyF9, KeyF0,
KeyBreak = 0xfffd,
};