mirror of
https://github.com/TomHarte/CLK.git
synced 2024-10-13 21:24:23 +00:00
97 lines
1.9 KiB
C++
97 lines
1.9 KiB
C++
//
|
|
// Keyboard.hpp
|
|
// Clock Signal
|
|
//
|
|
// Created by Thomas Harte on 29/07/2021.
|
|
// Copyright © 2021 Thomas Harte. All rights reserved.
|
|
//
|
|
|
|
#ifndef Keyboard_hpp
|
|
#define Keyboard_hpp
|
|
|
|
#include <cstdint>
|
|
|
|
namespace Amiga {
|
|
|
|
enum class Key: uint16_t {
|
|
Escape = 0x45,
|
|
Delete = 0x46,
|
|
|
|
F1 = 0x50, F2 = 0x51, F3 = 0x52, F4 = 0x53, F5 = 0x54,
|
|
F6 = 0x55, F7 = 0x56, F8 = 0x57, F9 = 0x58, F10 = 0x59,
|
|
|
|
Tilde = 0x00,
|
|
k1 = 0x01, k2 = 0x02, k3 = 0x03, k4 = 0x04, k5 = 0x05,
|
|
k6 = 0x06, k7 = 0x07, k8 = 0x08, k9 = 0x09, k0 = 0x0a,
|
|
|
|
Hyphen = 0x0b,
|
|
Equals = 0x0c,
|
|
Backslash = 0x0d,
|
|
Backspace = 0x41,
|
|
Tab = 0x42,
|
|
Control = 0x63,
|
|
CapsLock = 0x62,
|
|
LeftShift = 0x60,
|
|
RightShift = 0x61,
|
|
|
|
Q = 0x10, W = 0x11, E = 0x12, R = 0x13, T = 0x14,
|
|
Y = 0x15, U = 0x16, I = 0x17, O = 0x18, P = 0x19,
|
|
A = 0x20, S = 0x21, D = 0x22, F = 0x23, G = 0x24,
|
|
H = 0x25, J = 0x26, K = 0x27, L = 0x28, Z = 0x31,
|
|
X = 0x32, C = 0x33, V = 0x34, B = 0x35, N = 0x36,
|
|
M = 0x37,
|
|
|
|
OpenSquareBrackets = 0x1a,
|
|
CloseSquareBrackets = 0x1b,
|
|
Help = 0x5f,
|
|
Return = 0x44,
|
|
Semicolon = 0x29,
|
|
Quote = 0x2a,
|
|
Comma = 0x38,
|
|
FullStop = 0x39,
|
|
ForwardSlash = 0x3a,
|
|
Alt = 0x64,
|
|
LeftAmiga = 0x66,
|
|
RightAmiga = 0x67,
|
|
Space = 0x40,
|
|
|
|
Up = 0x4c, Left = 0x4f, Right = 0x4e, Down = 0x4d,
|
|
|
|
KeyPad7 = 0x3d, KeyPad8 = 0x3e, KeyPad9 = 0x3f,
|
|
KeyPad4 = 0x2d, KeyPad5 = 0x2e, KeyPad6 = 0x2f,
|
|
KeyPad1 = 0x1d, KeyPad2 = 0x1e, KeyPad3 = 0x1f,
|
|
KeyPad0 = 0x0f, KeyPadDecimalPoint = 0x3c,
|
|
KeyPadMinus = 0x4a, KeyPadEnter = 0x43,
|
|
};
|
|
|
|
class Keyboard {
|
|
public:
|
|
enum Lines: uint8_t {
|
|
Data = (1 << 0),
|
|
Clock = (1 << 1),
|
|
};
|
|
|
|
uint8_t update(uint8_t);
|
|
|
|
private:
|
|
enum class ShiftState {
|
|
Shifting,
|
|
AwaitingHandshake,
|
|
Idle,
|
|
} shift_state_ = ShiftState::Idle;
|
|
|
|
enum class State {
|
|
Startup,
|
|
} state_ = State::Startup;
|
|
|
|
int bit_phase_ = 0;
|
|
uint32_t shift_sequence_ = 0;
|
|
int bits_remaining_ = 0;
|
|
|
|
uint8_t lines_ = 0;
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* Keyboard_hpp */
|