# keyboard_US.toml
# Keyboard translation file for UK keyboard layouts for the MartyPC emulator

# Why a translation file?
# ----------------------------------------------------------------------------
# Certain scancodes have changed since the 1980's, as the meaning of certain
# keys was changed, keys were split out to new keys, or  moved around on the
# keyboard. This translation file will attempt to remap the modern scancodes
# to compatible ones for the given emulated keyboard type. In some cases, 
# equivalents to modern keys may not exist, but you can map them by scancode
# to a key of your choice.

# Keycodes are logical names for keys on the keyboard.
# Keycodes use the W3C naming convention. 
#
# See https://w3c.github.io/uievents-code/#code-value-tables for descriptions
# of these keys.

#    Backquote,
#    Backslash,
#    BracketLeft,
#    BracketRight,
#    Comma,
#    Digit0,
#    Digit1,
#    Digit2,
#    Digit3,
#    Digit4,
#    Digit5,
#    Digit6,
#    Digit7,
#    Digit8,
#    Digit9,
#    Equal,
#    IntlBackslash,
#    IntlRo,
#    IntlYen,
#    KeyA,
#    KeyB,
#    KeyC,
#    KeyD,
#    KeyE,
#    KeyF,
#    KeyG,
#    KeyH,
#    KeyI,
#    KeyJ,
#    KeyK,
#    KeyL,
#    KeyM,
#    KeyN,
#    KeyO,
#    KeyP,
#    KeyQ,
#    KeyR,
#    KeyS,
#    KeyT,
#    KeyU,
#    KeyV,
#    KeyW,
#    KeyX,
#    KeyY,
#    KeyZ,
#    Minus,
#    Period,
#    Quote,
#    Semicolon,
#    Slash,
#    AltLeft,
#    AltRight,
#    Backspace,
#    CapsLock,
#    ContextMenu,
#    ControlLeft,
#    ControlRight,
#    Enter,
#    MetaLeft,
#    MetaRight,
#    ShiftLeft,
#    ShiftRight,
#    Space,
#    Tab,
#    Convert,
#    KanaMode,
#    Lang1,
#    Lang2,
#    Lang3,
#    Lang4,
#    Lang5,
#    NonConvert,
#    Delete,
#    End,
#    Help,
#    Home,
#    Insert,
#    PageDown,
#    PageUp,
#    ArrowDown,
#    ArrowLeft,
#    ArrowRight,
#    ArrowUp,
#    NumLock,
#    Numpad0,
#    Numpad1,
#    Numpad2,
#    Numpad3,
#    Numpad4,
#    Numpad5,
#    Numpad6,
#    Numpad7,
#    Numpad8,
#    Numpad9,
#    NumpadAdd,
#    NumpadBackspace,
#    NumpadClear,
#    NumpadClearEntry,
#    NumpadComma,
#    NumpadDecimal,
#    NumpadDivide,
#    NumpadEnter,
#    NumpadEqual,
#    NumpadHash,
#    NumpadMemoryAdd,
#    NumpadMemoryClear,
#    NumpadMemoryRecall,
#    NumpadMemoryStore,
#    NumpadMemorySubtract,
#    NumpadMultiply,
#    NumpadParenLeft,
#    NumpadParenRight,
#    NumpadStar,
#    NumpadSubtract,
#    Escape,
#    Fn,
#    FnLock,
#    PrintScreen,
#    ScrollLock,
#    Pause,
#    BrowserBack,
#    BrowserFavorites,
#    BrowserForward,
#    BrowserHome,
#    BrowserRefresh,
#    BrowserSearch,
#    BrowserStop,
#    Eject,
#    LaunchApp1,
#    LaunchApp2,
#    LaunchMail,
#    MediaPlayPause,
#    MediaSelect,
#    MediaStop,
#    MediaTrackNext,
#    MediaTrackPrevious,
#    Power,
#    Sleep,
#    AudioVolumeDown,
#    AudioVolumeMute,
#    AudioVolumeUp,
#    WakeUp,
#    Meta,
#    Hyper,
#    Turbo,
#    Abort,
#    Resume,
#    Suspend,
#    Again,
#    Copy,
#    Cut,
#    Find,
#    Open,
#    Paste,
#    Props,
#    Select,
#    Undo,
#    Hiragana,
#    Katakana,
#    F1,
#    F2,
#    F3,
#    F4,
#    F5,
#    F6,
#    F7,
#    F8,
#    F9,
#    F10,
#    F11,
#    F12,
#    F13,
#    F14,
#    F15,
#    F16,
#    F17,
#    F18,
#    F19,
#    F20,
#    F21,
#    F22,
#    F23,
#    F24,
#    F25,
#    F26,
#    F27,
#    F28,
#    F29,
#    F30,
#    F31,
#    F32,
#    F33,
#    F34,
#    F35

# You can override the mapping of KeyCodes to scancodes with 'keycode_mappings'
# The format of keyboard_mappings is an array of mapping entries.
#
# Each mapping entry is an a dictionary with the following properties:
#
#    keycode   = The keycode name from the list given above.
#
#    modifiers = A list of modifier keys to match. Valid values for modifiers 
#                include "control", "alt", "shift" and "super"
#                On Mac, the command key is equivalent to "control."
#
#                If a key is to be always translated, this value should be 
#                "any".
#
#                If a key is to be translated when no modifiers are pressed, 
#                this value should be "none"
#
#                Alternately, provide a list of modifiers. All modifiers in 
#                the list must be present for translation.
#
#   key_macro =  Convert this keycode into a sequence of multiple keycodes.
#                Each keycode will be delivered after a specific delay 
#                (typically one frame)
#
#   scancodes  = The resulting scancodes to translate the specified key + 
#                matching modifiers into. A single keycode can map to 
#                multiple scancodes, which will be sent in order.
#
#   'key_macro' and 'scancodes' are mutually exclusive. Use one and leave the
#    other empty.
#
# Different keyboard models can produce multi-byte scancodes, therefore, each
# keycode should be mapped to an array.


# -----------------------------------------------------------------------------
# Model F - the Original 83-key keyboard shipped with the IBM PC and XT.
# -----------------------------------------------------------------------------
# The Model F keyboard has single-byte scancodes, so scancodes defined here 
# should only have one element.
[keyboard.modelf]
keycode_mappings = [
    { keycode = "IntlBackslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x2B] },
    { keycode = "Quote", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x28] },
    { keycode = "Backslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x29] },
    # Backquote ` didn't exist on the UK Model F keyboard, so we'll use an alt-code.
    { keycode = "Backquote", modifiers = ["none"], key_macro = ["+AltLeft", "+Numpad9", "+Numpad6", "-AltLeft", "-Numpad9", "-Numpad6"], macro_translate = false, scancodes = [] },
    # Shift-backquote: ¬ (NOT symbol)
    { keycode = "Backquote", modifiers = ["shift"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad7", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad7", "-Numpad0"], macro_translate = false, scancodes = [] },
    # Alt-Gr keys did not exist on Model F. If we want them, we need to implement them with alt-codes.
    # There appears to be a bug with AltGr-A. the KeyA keydown event does not fire :(
    #{ keycode = "KeyA", modifiers = ["control", "alt"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad6", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad6", "-Numpad0"], macro_translate = false, scancodes = [] },
]

# -----------------------------------------------------------------------------
# Tandy 1000 - the Original 95-key keyboard shipped with the Tandy 1000
# -----------------------------------------------------------------------------
# The Tandy 1000 keyboard has single-byte scancodes, so scancodes defined here 
# should only have one element.
[keyboard.tandy1000]
keycode_mappings = [
    { keycode = "IntlBackslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x2B] },
    { keycode = "Quote", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x28] },
    { keycode = "Backslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x29] },
    # Backquote ` didn't exist on the UK Model F keyboard, so we'll use an alt-code.
    { keycode = "Backquote", modifiers = ["none"], key_macro = ["+AltLeft", "+Numpad9", "+Numpad6", "-AltLeft", "-Numpad9", "-Numpad6"], macro_translate = false, scancodes = [] },
    # Shift-backquote: ¬ (NOT symbol)
    { keycode = "Backquote", modifiers = ["shift"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad7", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad7", "-Numpad0"], macro_translate = false, scancodes = [] },
    # Alt-Gr keys did not exist on Model F. If we want them, we need to implement them with alt-codes.
    # There appears to be a bug with AltGr-A. the KeyA keydown event does not fire :(
    #{ keycode = "KeyA", modifiers = ["control", "alt"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad6", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad6", "-Numpad0"], macro_translate = false, scancodes = [] },
]