# VICE keyboard mapping file
#
# A Keyboard map is read in as patch to the current map.
#
# File format:
# - comment lines start with '#'
# - keyword lines start with '!keyword'
# - normal line has 'keysym/scancode row column shiftflag'
#
# Keywords and their lines are:
# '!CLEAR'               clear whole table
# '!INCLUDE filename'    read file as mapping file
# '!LSHIFT row col'      left shift keyboard row/column
# '!RSHIFT row col'      right shift keyboard row/column
# '!VSHIFT shiftkey'     virtual shift key (RSHIFT or LSHIFT)
# '!UNDEF keysym'        remove keysym from table
#
# Shiftflag can have the values:
# 0      key is not shifted for this keysym/scancode
# 1      key is shifted for this keysym/scancode
# 2      left shift
# 4      right shift
# 8      key can be shifted or not with this keysym/scancode
# 16     deshift key for this keysym/scancode
# 32     another definition for this keysym/scancode follows
# 256    key is used for an alternative keyboard mapping
#
# Negative row values:
# 'keysym -1 n' joystick #1, direction n
# 'keysym -2 n' joystick #2, direction n
# 'keysym -3 0' first RESTORE key
# 'keysym -3 1' second RESTORE key
# 'keysym -4 0' 40/80 column key
# 'keysym -4 1' CAPS (ASCII/DIN) key
#

# Symbolic Mapping, US Layout, C128, X11

# C128 Keyboard matrix
#
#       +-----+-----+-----+-----+-----+-----+-----+-----+
#       |Bit 0|Bit 1|Bit 2|Bit 3|Bit 4|Bit 5|Bit 6|Bit 7|
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 0| DEL |Retrn|C_L/R|  F7 |  F1 |  F3 |  F5 |C_U/D|
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 1| 3 # |  W  |  A  | 4 $ |  Z  |  S  |  E  | S_L |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 2| 5 % |  R  |  D  | 6 & |  C  |  F  |  T  |  X  |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 3| 7 ' |  Y  |  G  | 8 ( |  B  |  H  |  U  |  V  |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 4| 9 ) |  I  |  J  |  0  |  M  |  K  |  O  |  N  |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 5|  +  |  P  |  L  |  -  | . > | : [ |  @  | , < |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 6|POUND|  *  | ; ] | HOME| S_R |  =  | A_UP| / ? |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE|  C= |  Q  | R/S |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+
#
#        +-----+-----+-----+-----+-----+-----+-----+-----+
#        |Bit 0|Bit 1|Bit 2|Bit 3|Bit 4|Bit 5|Bit 6|Bit 7|
# +------+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 8 |HELP | KP 8| KP 5| TAB | KP 2| KP 4| KP 7| KP 1|
# +------+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 9 | ESC | KP +| KP -| LF  |KP CR| KP 6| KP 9| KP 3|
# +------+-----+-----+-----+-----+-----+-----+-----+-----+
# |Bit 10| ALT | KP 0| KP .|A.UP |A.DWN|A.LFT|A.RGT|NOSCR|
# +------+-----+-----+-----+-----+-----+-----+-----+-----+

!CLEAR
!LSHIFT 1 7
!RSHIFT 6 4
!VSHIFT RSHIFT

#####################
# |Bit 0| DEL |Retrn|C_L/R|  F7 |  F1 |  F3 |  F5 |C_U/D|

BackSpace       0 0 8
Delete          0 0 8
Insert          0 0 16
Return          0 1 8
Right           0 2 264
Left            0 2 257
F7              0 3 8
F8              0 3 1
F1              0 4 8
F2              0 4 1
F3              0 5 8
F4              0 5 1
F5              0 6 8
F6              0 6 1
Down            0 7 264
Up              0 7 257

#####################
# |Bit 1| 3 # |  W  |  A  | 4 $ |  Z  |  S  |  E  | S_L |

numbersign      1 0 1
dollar          1 3 1
Shift_L         1 7 2
# shift lock
Caps_Lock       1 7 64

#####################
# |Bit 2| 5 % |  R  |  D  | 6 & |  C  |  F  |  T  |  X  |

percent         2 0 1
ampersand       2 3 1

#####################
# |Bit 3| 7 ' |  Y  |  G  | 8 ( |  B  |  H  |  U  |  V  |

apostrophe      3 0 1
grave           3 0 1
parenleft       3 3 1

#####################
# |Bit 4| 9 ) |  I  |  J  |  0  |  M  |  K  |  O  |  N  |

parenright      4 0 1

#####################
# |Bit 5|  +  |  P  |  L  |  -  | . > | : [ |  @  | , < |

plus            5 0 0
minus           5 3 0
period          5 4 0
greater         5 4 1
colon           5 5 0
bracketleft     5 5 1
at              5 6 0
comma           5 7 0
less            5 7 1

#####################
# |Bit 6|POUND|  *  | ; ] | HOME| S_R |  =  | A_UP| / ? |

sterling        6 0 0
backslash       6 0 0
bar             6 0 8
asterisk        6 1 0
semicolon       6 2 0
bracketright    6 2 1
Home            6 3 8
Shift_R         6 4 4
equal           6 5 0
# Page down -> Arrow Up
asciicircum     6 6 0
asciitilde      6 6 0
#Page_Down       6 6 8
slash           6 7 0
question        6 7 1

#####################
# |Bit 7| 1 ! |A_LFT| CTRL| 2 " |SPACE|  C= |  Q  | R/S |

exclam          7 0 1
# underscore -> arrow left
underscore      7 1 0
Control_L       7 2 8     /* Control_L = CTRL */
quotedbl        7 3 1
space           7 4 8
Tab             7 5 8     /* Tab = CBM */
ISO_Left_Tab    7 5 8     /* Shift + Tab = CBM */
Escape          7 7 8

#####################
# letters and numbers

0 4 3 0
1 7 0 0
2 7 3 0
3 1 0 0
4 1 3 0
5 2 0 0
6 2 3 0
7 3 0 0
8 3 3 0
9 4 0 0

A 1 2 1
B 3 4 1
C 2 4 1
D 2 2 1
E 1 6 1
F 2 5 1
G 3 2 1
H 3 5 1
I 4 1 1
J 4 2 1
K 4 5 1
L 5 2 1
M 4 4 1
N 4 7 1
O 4 6 1
P 5 1 1
Q 7 6 1
R 2 1 1
S 1 5 1
T 2 6 1
U 3 6 1
V 3 7 1
W 1 1 1
X 2 7 1
Y 3 1 1
Z 1 4 1
a 1 2 8
b 3 4 8
c 2 4 8
d 2 2 8
e 1 6 8
f 2 5 8
g 3 2 8
h 3 5 8
i 4 1 8
j 4 2 8
k 4 5 8
l 5 2 8
m 4 4 8
n 4 7 8
o 4 6 8
p 5 1 8
q 7 6 8
r 2 1 8
s 1 5 8
t 2 6 8
u 3 6 8
v 3 7 8
w 1 1 8
x 2 7 8
y 3 1 8
z 1 4 8

# numeric keypad
KP_0         10 1 8
KP_1          8 7 8
KP_2          8 4 8
KP_3          9 7 8
KP_4          8 5 8
KP_5          8 2 8
KP_6          9 5 8
KP_7          8 6 8
KP_8          8 1 8
KP_9          9 6 8
KP_Enter      9 4 8
KP_Subtract   9 2 8
KP_Separator 10 2 8
KP_Decimal   10 2 8
KP_Add        9 1 8

# escape - tab - alt - (caps lock)
# help - linefeed - (40/80) - no scroll

# note: its really hard to map all these keys reasonable without sacrificing
#       the symbolic mapping of f1-f7 keys. the above keys are mapped to
# first block:   f9, f10, f11, f12
# second block: end, page down, kp /, kp *

# escape
F9           9 0 8
# tab
F10          8 3 8
# alt
F11         10 0 8
# CAPS (ASCII/DIN) key
F12         -4 1

# help
End          8 0 8
# lf
Page_Down    9 3 8
# 40/80 column key
KP_Divide   -4 0
# no scroll
KP_Multiply 10 7 8


# duplicate the cursor keys
Up    10 3 8
Left  10 5 8
Right 10 6 8
Down  10 4 8

# Restore key mapping
Page_Up -3 0
Prior -3 1

# Dead keys support for those using US-International keyboard layout.
dead_acute      3 0 1  # '
dead_grave      3 0 1  # '
dead_circumflex 6 6 0  # A_UP
dead_tilde      6 6 0  # A_UP
dead_diaeresis  7 3 1  # "
