moa/emulator/systems/trs80/src/peripherals/keymap.rs

67 lines
3.3 KiB
Rust

use moa_host::Key;
#[inline(always)]
pub fn set_bit(data: &mut [u8; 8], index: usize, bit: u8, state: bool) {
let mask = 1 << bit;
data[index] = (data[index] & !mask) | (if state { mask } else { 0 });
}
pub fn record_key_press(data: &mut [u8; 8], key: Key, state: bool) {
match key {
Key::Backquote => set_bit(data, 0, 0, state),
Key::A => set_bit(data, 0, 1, state),
Key::B => set_bit(data, 0, 2, state),
Key::C => set_bit(data, 0, 3, state),
Key::D => set_bit(data, 0, 4, state),
Key::E => set_bit(data, 0, 5, state),
Key::F => set_bit(data, 0, 6, state),
Key::G => set_bit(data, 0, 7, state),
Key::H => set_bit(data, 1, 0, state),
Key::I => set_bit(data, 1, 1, state),
Key::J => set_bit(data, 1, 2, state),
Key::K => set_bit(data, 1, 3, state),
Key::L => set_bit(data, 1, 4, state),
Key::M => set_bit(data, 1, 5, state),
Key::N => set_bit(data, 1, 6, state),
Key::O => set_bit(data, 1, 7, state),
Key::P => set_bit(data, 2, 0, state),
Key::Q => set_bit(data, 2, 1, state),
Key::R => set_bit(data, 2, 2, state),
Key::S => set_bit(data, 2, 3, state),
Key::T => set_bit(data, 2, 4, state),
Key::U => set_bit(data, 2, 5, state),
Key::V => set_bit(data, 2, 6, state),
Key::W => set_bit(data, 2, 7, state),
Key::X => set_bit(data, 3, 0, state),
Key::Y => set_bit(data, 3, 1, state),
Key::Z => set_bit(data, 3, 2, state),
Key::Num0 => set_bit(data, 4, 0, state),
Key::Num1 => set_bit(data, 4, 1, state),
Key::Num2 => set_bit(data, 4, 2, state),
Key::Num3 => set_bit(data, 4, 3, state),
Key::Num4 => set_bit(data, 4, 4, state),
Key::Num5 => set_bit(data, 4, 5, state),
Key::Num6 => set_bit(data, 4, 6, state),
Key::Num7 => set_bit(data, 4, 7, state),
Key::Num8 => set_bit(data, 5, 0, state),
Key::Num9 => set_bit(data, 5, 1, state),
Key::LeftBracket => set_bit(data, 5, 2, state),
Key::RightBracket => set_bit(data, 5, 3, state),
Key::Comma => set_bit(data, 5, 4, state),
Key::Equals => set_bit(data, 5, 5, state),
Key::Period => set_bit(data, 5, 6, state),
Key::Enter => set_bit(data, 6, 0, state),
Key::PrintScreen => set_bit(data, 6, 1, state),
Key::Pause => set_bit(data, 6, 2, state),
Key::Up => set_bit(data, 6, 3, state),
Key::Down => set_bit(data, 6, 4, state),
Key::Left => set_bit(data, 6, 5, state),
Key::Right => set_bit(data, 6, 6, state),
Key::Space => set_bit(data, 6, 7, state),
Key::LeftShift | Key::RightShift => set_bit(data, 7, 0, state),
_ => { },
}
}