1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-26 09:29:45 +00:00

Introduces virtual left and up keys for the Vic-20.

Thereby allowing all cursor keys to be mapped.
This commit is contained in:
Thomas Harte 2020-03-01 21:42:30 -05:00
parent 575d0da4d1
commit 535634daca
3 changed files with 29 additions and 9 deletions

View File

@ -24,7 +24,7 @@ uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) {
BIND(Z, KeyZ); BIND(X, KeyX); BIND(C, KeyC); BIND(V, KeyV);
BIND(B, KeyB); BIND(N, KeyN); BIND(M, KeyM);
BIND(BackTick, KeyLeft);
BIND(BackTick, KeyLeftArrow);
BIND(Hyphen, KeyPlus);
BIND(Equals, KeyDash);
BIND(F11, KeyGBP);
@ -35,8 +35,8 @@ uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) {
BIND(CloseSquareBracket, KeyAsterisk);
BIND(Backslash, KeyRestore);
BIND(Hash, KeyUp);
BIND(F10, KeyUp);
BIND(Hash, KeyUpArrow);
BIND(F10, KeyUpArrow);
BIND(Semicolon, KeyColon);
BIND(Quote, KeySemicolon);
@ -56,6 +56,8 @@ uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) {
BIND(Right, KeyRight);
BIND(Down, KeyDown);
BIND(Left, KeyLeft);
BIND(Up, KeyUp);
BIND(Enter, KeyReturn);
BIND(Space, KeySpace);

View File

@ -20,7 +20,7 @@ enum Key: uint16_t {
Key2 = key(7, 0x01), Key4 = key(7, 0x02), Key6 = key(7, 0x04), Key8 = key(7, 0x08),
Key0 = key(7, 0x10), KeyDash = key(7, 0x20), KeyHome = key(7, 0x40), KeyF7 = key(7, 0x80),
KeyQ = key(6, 0x01), KeyE = key(6, 0x02), KeyT = key(6, 0x04), KeyU = key(6, 0x08),
KeyO = key(6, 0x10), KeyAt = key(6, 0x20), KeyUp = key(6, 0x40), KeyF5 = key(6, 0x80),
KeyO = key(6, 0x10), KeyAt = key(6, 0x20), KeyUpArrow = key(6, 0x40), KeyF5 = key(6, 0x80),
KeyCBM = key(5, 0x01), KeyS = key(5, 0x02), KeyF = key(5, 0x04), KeyH = key(5, 0x08),
KeyK = key(5, 0x10), KeyColon = key(5, 0x20), KeyEquals = key(5, 0x40), KeyF3 = key(5, 0x80),
KeySpace = key(4, 0x01), KeyZ = key(4, 0x02), KeyC = key(4, 0x04), KeyB = key(4, 0x08),
@ -29,12 +29,17 @@ enum Key: uint16_t {
KeyN = key(3, 0x10), KeyComma = key(3, 0x20), KeySlash = key(3, 0x40), KeyDown = key(3, 0x80),
KeyControl = key(2, 0x01), KeyA = key(2, 0x02), KeyD = key(2, 0x04), KeyG = key(2, 0x08),
KeyJ = key(2, 0x10), KeyL = key(2, 0x20), KeySemicolon = key(2, 0x40), KeyRight = key(2, 0x80),
KeyLeft = key(1, 0x01), KeyW = key(1, 0x02), KeyR = key(1, 0x04), KeyY = key(1, 0x08),
KeyLeftArrow= key(1, 0x01), KeyW = key(1, 0x02), KeyR = key(1, 0x04), KeyY = key(1, 0x08),
KeyI = key(1, 0x10), KeyP = key(1, 0x20), KeyAsterisk = key(1, 0x40), KeyReturn = key(1, 0x80),
Key1 = key(0, 0x01), Key3 = key(0, 0x02), Key5 = key(0, 0x04), Key7 = key(0, 0x08),
Key9 = key(0, 0x10), KeyPlus = key(0, 0x20), KeyGBP = key(0, 0x40), KeyDelete = key(0, 0x80),
KeyRestore = 0xfffd
// Virtual keys.
KeyUp = 0xfff0,
KeyLeft = 0xfff1,
// Physical keys not within the usual matrix.
KeyRestore = 0xfffd,
#undef key
};

View File

@ -479,10 +479,23 @@ class ConcreteMachine:
}
void set_key_state(uint16_t key, bool is_pressed) final {
if(key != KeyRestore)
if(key < 0xfff0) {
keyboard_via_port_handler_->set_key_state(key, is_pressed);
else
user_port_via_.set_control_line_input(MOS::MOS6522::Port::A, MOS::MOS6522::Line::One, !is_pressed);
} else {
switch(key) {
case KeyRestore:
user_port_via_.set_control_line_input(MOS::MOS6522::Port::A, MOS::MOS6522::Line::One, !is_pressed);
break;
case KeyUp:
keyboard_via_port_handler_->set_key_state(KeyLShift, is_pressed);
keyboard_via_port_handler_->set_key_state(KeyDown, is_pressed);
break;
case KeyLeft:
keyboard_via_port_handler_->set_key_state(KeyLShift, is_pressed);
keyboard_via_port_handler_->set_key_state(KeyRight, is_pressed);
break;
}
}
}
void clear_all_keys() final {