1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-22 12:33:29 +00:00
CLK/Machines/Acorn/Archimedes/KeyboardMapper.hpp
2024-05-18 22:16:58 -04:00

139 lines
4.8 KiB
C++

//
// KeyboardMapper.hpp
// Clock Signal
//
// Created by Thomas Harte on 23/03/2024.
// Copyright © 2024 Thomas Harte. All rights reserved.
//
#pragma once
#include "../../KeyboardMachine.hpp"
#include "Keyboard.hpp"
namespace Archimedes {
/// Converter from this emulator's custom definition of a generic keyboard to the machine-specific key set defined above.
class KeyboardMapper: public MachineTypes::MappedKeyboardMachine::KeyboardMapper {
public:
// Adapted from the A500 Series Technical Reference Manual.
uint16_t mapped_key_for_key(Inputs::Keyboard::Key key) const override {
using k = Inputs::Keyboard::Key;
switch(key) {
case k::Escape: return Key::Escape;
case k::F1: return Key::F1;
case k::F2: return Key::F2;
case k::F3: return Key::F3;
case k::F4: return Key::F4;
case k::F5: return Key::F5;
case k::F6: return Key::F6;
case k::F7: return Key::F7;
case k::F8: return Key::F8;
case k::F9: return Key::F9;
case k::F10: return Key::F10;
case k::F11: return Key::F11;
case k::F12: return Key::F12;
case k::PrintScreen: return Key::Print;
case k::ScrollLock: return Key::Scroll;
case k::Pause: return Key::Break;
case k::BackTick: return Key::Tilde;
case k::k1: return Key::k1;
case k::k2: return Key::k2;
case k::k3: return Key::k3;
case k::k4: return Key::k4;
case k::k5: return Key::k5;
case k::k6: return Key::k6;
case k::k7: return Key::k7;
case k::k8: return Key::k8;
case k::k9: return Key::k9;
case k::k0: return Key::k0;
case k::Hyphen: return Key::Hyphen;
case k::Equals: return Key::Equals;
// TODO: pound key.
case k::Backspace: return Key::Backspace;
case k::Insert: return Key::Insert;
case k::Home: return Key::Home;
case k::PageUp: return Key::PageUp;
case k::NumLock: return Key::NumLock;
case k::KeypadSlash: return Key::KeypadSlash;
case k::KeypadAsterisk: return Key::KeypadAsterisk;
// TODO: keypad hash key
case k::Tab: return Key::Tab;
case k::Q: return Key::Q;
case k::W: return Key::W;
case k::E: return Key::E;
case k::R: return Key::R;
case k::T: return Key::T;
case k::Y: return Key::Y;
case k::U: return Key::U;
case k::I: return Key::I;
case k::O: return Key::O;
case k::P: return Key::P;
case k::OpenSquareBracket: return Key::OpenSquareBracket;
case k::CloseSquareBracket: return Key::CloseSquareBracket;
case k::Backslash: return Key::Backslash;
case k::Delete: return Key::Delete;
case k::End: return Key::Copy;
case k::PageDown: return Key::PageDown;
case k::Keypad7: return Key::Keypad7;
case k::Keypad8: return Key::Keypad8;
case k::Keypad9: return Key::Keypad9;
case k::KeypadMinus: return Key::KeypadMinus;
case k::LeftControl: return Key::LeftControl;
case k::A: return Key::A;
case k::S: return Key::S;
case k::D: return Key::D;
case k::F: return Key::F;
case k::G: return Key::G;
case k::H: return Key::H;
case k::J: return Key::J;
case k::K: return Key::K;
case k::L: return Key::L;
case k::Semicolon: return Key::Semicolon;
case k::Quote: return Key::Quote;
case k::Enter: return Key::Return;
case k::Keypad4: return Key::Keypad4;
case k::Keypad5: return Key::Keypad5;
case k::Keypad6: return Key::Keypad6;
case k::KeypadPlus: return Key::KeypadPlus;
case k::LeftShift: return Key::LeftShift;
case k::Z: return Key::Z;
case k::X: return Key::X;
case k::C: return Key::C;
case k::V: return Key::V;
case k::B: return Key::B;
case k::N: return Key::N;
case k::M: return Key::M;
case k::Comma: return Key::Comma;
case k::FullStop: return Key::FullStop;
case k::ForwardSlash: return Key::ForwardSlash;
case k::RightShift: return Key::RightShift;
case k::Up: return Key::Up;
case k::Keypad1: return Key::Keypad1;
case k::Keypad2: return Key::Keypad2;
case k::Keypad3: return Key::Keypad3;
case k::CapsLock: return Key::CapsLock;
case k::LeftOption: return Key::LeftAlt;
case k::Space: return Key::Space;
case k::RightOption: return Key::RightAlt;
case k::RightControl: return Key::RightControl;
case k::Left: return Key::Left;
case k::Down: return Key::Down;
case k::Right: return Key::Right;
case k::Keypad0: return Key::Keypad0;
case k::KeypadDecimalPoint: return Key::KeypadDecimalPoint;
case k::KeypadEnter: return Key::KeypadEnter;
default: return MachineTypes::MappedKeyboardMachine::KeyNotMapped;
}
}
};
}