# 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 lines have '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)
# '!SHIFTL shiftkey'     shift lock key (RSHIFT or LSHIFT)
#  for emulated keyboards that have only one shift key, set both LSHIFT
#  and RSHIFT to the same row/col and use RSHIFT for VSHIFT and SHIFTL.
# '!LCTRL row col'       left control keyboard row/column
# '!VCTRL ctrlkey'       virtual control key (LCTRL)
# '!LCBM row col'        left CBM keyboard row/column
# '!VCBM cbmkey'         virtual CBM key (LCBM)
# '!UNDEF keysym'        remove keysym from table
#
# Shiftflag can have these values, flags can be ORed to combine them:
# 0x0000      0  key is not shifted for this keysym/scancode
# 0x0001      1  key is combined with shift for this keysym/scancode
# 0x0002      2  key is left shift on emulated machine
# 0x0004      4  key is right shift on emulated machine (use only this one
#                for emulated keyboards that have only one shift key)
# 0x0008      8  key can be shifted or not with this keysym/scancode
# 0x0010     16  deshift key for this keysym/scancode
# 0x0020     32  another definition for this keysym/scancode follows
# 0x0040     64  key is shift-lock on emulated machine
# 0x0080    128  shift modifier required on host
# 0x0100    256  key is used for an alternative keyboard mapping, e.g. C64 mode in x128
# 0x0200    512  alt-r (alt-gr) modifier required on host
# 0x0400   1024  ctrl modifier required on host
# 0x0800   2048  key is combined with cbm for this keysym/scancode
# 0x1000   4096  key is combined with ctrl for this keysym/scancode
# 0x2000   8192  key is (left) cbm on emulated machine
# 0x4000  16384  key is (left) ctrl on emulated machine
#
# Negative row values:
# 'keysym -1 n' joystick keymap A, direction n
# 'keysym -2 n' joystick keymap B, direction n
# 'keysym -3 0' first RESTORE key
# 'keysym -3 1' second RESTORE key
# 'keysym -4 0' 40/80 column key (x128)
# 'keysym -4 1' CAPS (ASCII/DIN) key (x128)
# 'keysym -5 n' joyport keypad, key n (not supported in x128)
#
# Joystick direction values:
# 0      Fire
# 1      South/West
# 2      South
# 3      South/East
# 4      West
# 5      East
# 6      North/West
# 7      North
# 8      North/East
#
# Joyport keypad key layout:
# --------------------------
# |  0 |  1 |  2 |  3 |  4 |
# --------------------------
# |  5 |  6 |  7 |  8 |  9 |
# --------------------------
# | 10 | 11 | 12 | 13 | 14 |
# --------------------------
# | 15 | 16 | 17 | 18 | 19 |
# --------------------------
#
# When a bigger spaced key is used,
# it uses the upper left most key value.

# This file was taken from https://github.com/aminch/8-bit-pc-pi-compile/
#
# to be used in combination with https://github.com/aminch/bmc-joy-pcb

# SDL symbolic map for the C64, the SCPU64, and the C64DTV

# note: For some reason SDL does not get keyboard events for "dead keys" at all,
#       so a "nodeadkeys" layout must be used. CAUTION: apparently SDL generates
#       some tables internally at startup - switching the host layout while
#       the emulator is running produces unpredictable results (broken keycodes)

# C64 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 |
# +-----+-----+-----+-----+-----+-----+-----+-----+-----+

# C64 Keyboard layout:
#
#   arrow 1!  2"  3#  4$  5%  6&  7'  8(  9)  0   +   -   pound clr del     f1/f2
#    ctrl   q   w   e   r   t   y   u   i   o   p   @   *   ^   restore     f3/f4
#   r/s SL    a   s   d   f   g   h   j   k   l   :[  ;]  =   return        f5/f6
#   CBM LS      z   x   c   v   b   n   m   ,<  .>  /?  RS  u/d l/r         f7/f8
#                               space

!CLEAR
!LSHIFT 1 7
!RSHIFT 6 4
!VSHIFT RSHIFT
!SHIFTL LSHIFT
!LCBM 7 5
!VCBM LCBM
!LCTRL 7 2
!VCTRL LCTRL

92 1 0 33              /*            \ -> Pi  Note: On UK Pi500 is this the #~ key  */
92 6 6 129             /*            | -> Pi  Note: On UK Pi500 is this the #~ key  */

96 7 1 8               /*           `¬ -> left arrow   */
49 7 0 8               /*            1 -> 1 !          */
50 7 3 8               /*            2 -> 2 "          */

51 1 0 32              /*            3 -> 3 #          */
51 6 0 144             /*            £ -> £            */

52 1 3 8               /*            4 -> 4 $          */
53 2 0 8               /*            5 -> 5 %          */

54 2 3 32              /*            6 -> 6 &          */
54 6 6 144             /*            ^ -> Arrow up     */

55 3 0 32              /*            7 -> 7 '          */
55 2 3 129             /*            & -> &            */

56 3 3 32              /*            8 -> 8 (          */
56 6 1 144             /*            * -> *            */

57 4 0 32              /*            9 -> 9 )          */
57 3 3 129             /*            ( -> (            */

48 4 3 32              /*            0 -> 0            */
48 4 0 129             /*            ) -> )            */

45 5 3 32              /*        Minus -> Minus        */
45 5 6 2192            /*            _ -> _            */

61 6 5 32              /*            = -> =            */
61 5 0 144             /*            + -> +            */

8 0 0 8                /*    Backspace -> DEL          */

113 7 6 8              /*            Q -> Q            */
119 1 1 8              /*            W -> W            */
101 1 6 8              /*            E -> E            */
114 2 1 8              /*            R -> R            */
116 2 6 8              /*            T -> T            */
121 3 1 8              /*            Y -> Y            */
117 3 6 8              /*            U -> U            */
105 4 1 8              /*            I -> I            */
111 4 6 8              /*            O -> O            */
112 5 1 8              /*            P -> P            */
91 5 5 1               /*            [ -> [            */
93 6 2 1               /*            ] -> ]            */

97 1 2 8               /*            A -> A            */
115 1 5 8              /*            S -> S            */
100 2 2 8              /*            D -> D            */
102 2 5 8              /*            F -> F            */
103 3 2 8              /*            G -> G            */
104 3 5 8              /*            H -> H            */
106 4 2 8              /*            J -> J            */
107 4 5 8              /*            K -> K            */
108 5 2 8              /*            L -> L            */

59 6 2 32              /*            ; -> ;            */
59 5 5 144             /*            : -> :            */

39 3 0 33              /*            ' -> '            */
39 5 6 144             /*            @ -> @            */

35 1 0 33              /*            # -> #            */
35 6 6 129             /*            ~ -> Pi           */

122 1 4 8              /*            Z -> Z            */
120 2 7 8              /*            X -> X            */
99 2 4 8               /*            C -> C            */
118 3 7 8              /*            V -> V            */
98 3 4 8               /*            B -> B            */
110 4 7 8              /*            N -> N            */
109 4 4 8              /*            M -> M            */
44 5 7 8               /*            , -> ,            */
46 5 4 8               /*            . -> .            */
47 6 7 8               /*            / -> /            */

9 7 5 8192             /*          Tab -> CBM          */
13 0 1 8               /*       Return -> Return       */
306 7 2 16384          /*    Left Ctrl -> Ctrl         */
304 1 7 2              /*   Left Shift -> Left Shift   */
301 1 7 64             /*    Caps Lock -> Shift Lock   */
303 6 4 4              /*  Right Shift -> Right Shift  */
32 7 4 8               /*        Space -> Space        */

27 7 7 8               /*          ESC -> Run/Stop     */
282 0 4 8              /*           F1 -> F1           */
283 0 4 1              /*           F2 -> F2           */
284 0 5 8              /*           F3 -> F3           */
285 0 5 1              /*           F4 -> F4           */
286 0 6 8              /*           F5 -> F5           */
287 0 6 1              /*           F6 -> F6           */
288 0 3 8              /*           F7 -> F7           */
289 0 3 1              /*           F8 -> F8           */

278 6 3 8              /*         Home -> CLR/HOME     */
273 0 7 1              /*           Up -> CRSR UP      */
276 0 2 1              /*         Left -> CRSR LEFT    */
275 0 2 8              /*        Right -> CRSR RIGHT   */
274 0 7 8              /*         Down -> CRSR DOWN    */

277 0 0 1              /*       Insert -> INS          */
127 0 0 8              /*       Delete -> DEL          */
279 7 1 8              /*          End -> Left Arrow   */

# Restore key mappings
280 -3 0               /*      Page Up -> RESTORE      */

# joystick keymap A (port 1)
256 -1 0              /*     NumPad 0 -> FIRE         */
265 -1 7              /*     NumPad 9 -> UP           */
259 -1 2              /*     NumPad 3 -> DOWN         */
263 -1 4              /*     NumPad 7 -> LEFT         */
257 -1 5              /*     NumPad 1 -> RIGHT        */

# joystick Keymap B (port 2)
261 -2 0              /*     NumPad 5 -> FIRE         */
264 -2 7              /*     NumPad 8 -> UP           */
258 -2 2              /*     NumPad 2 -> DOWN         */
260 -2 4              /*     NumPad 4 -> LEFT         */
262 -2 5              /*     NumPad 6 -> RIGHT        */

# Joyport attached keypad key mappings
#300 -5 0              /*      NumLock -> keypad x0    */
#263 -5 1              /*     NumPad 7 -> keypad 7     */
#264 -5 2              /*     NumPad 8 -> keypad 8     */
#265 -5 3              /*     NumPad 9 -> keypad 9     */
#267 -5 4              /*     NumPad / -> keypad /     */
#302 -5 5              /*   ScrollLock -> keypad x1    */
#260 -5 6              /*     NumPad 4 -> keypad 4     */
#261 -5 7              /*     NumPad 5 -> keypad 5     */
#262 -5 8              /*     NumPad 6 -> keypad 6     */
#268 -5 9              /*     NumPad * -> keypad *     */
#317 -5 10             /*       SysReq -> keypad x2    */
#257 -5 11             /*     NumPad 1 -> keypad 1     */
#258 -5 12             /*     NumPad 2 -> keypad 2     */
#259 -5 13             /*     NumPad 3 -> keypad 3     */
#269 -5 14             /*     NumPad - -> keypad -     */
#316 -5 15             /*       PrtScr -> keypad x3    */
#256 -5 16             /*     NumPad 0 -> keypad 0     */
#266 -5 17             /*     NumPad , -> keypad .     */
#271 -5 18             /* NumPad Enter -> keypad enter */
#270 -5 19             /*     NumPad + -> keypad +     */

