git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/include/duck/laptop_keycodes.h

      1 #include <gbdk/platform.h>
      2 #include <stdint.h>
      3 #include <stdbool.h>
      4 
      5 #ifndef _MEGADUCK_LAPTOP_KEYCODES_H
      6 #define _MEGADUCK_LAPTOP_KEYCODES_H
      7 
      8 
      9 // - Left /right shift are shared
     10 //
     11 // Keyboard serial reply scan codes have different ordering than System ROM character codes
     12 // - They go diagonal down from upper left for the first *4* rows
     13 // - The bottom 4 rows (including piano keys) are more varied
     14 
     15 // Modifier Keys / Flags
     16 //
     17 // See input_key_modifier_flags__RAM_D027_
     18 #define DUCK_IO_KEY_FLAG_KEY_REPEAT           0x01u
     19 #define DUCK_IO_KEY_FLAG_KEY_REPEAT_BIT       0x0u
     20 #define DUCK_IO_KEY_FLAG_CAPSLOCK             0x02u
     21 #define DUCK_IO_KEY_FLAG_CAPSLOCK_BIT         0x1u
     22 #define DUCK_IO_KEY_FLAG_SHIFT                0x04u
     23 #define DUCK_IO_KEY_FLAG_SHIFT_BIT            0x2u
     24 // Right Print Screen has actual scancode vs Left being in a flag
     25 #define DUCK_IO_KEY_FLAG_PRINTSCREEN_LEFT     0x08u
     26 #define DUCK_IO_KEY_FLAG_PRINTSCREEN_LEFT_BIT 0x3u
     27 
     28 // Keyboard scancodes
     29 // All valid keys seem to have bit 7 set (0x80+)
     30 #define DUCK_IO_KEY_BASE_BIT                  0x7u
     31 #define DUCK_IO_KEY_BASE                      0x80u
     32 
     33 
     34 // First 4 rows (top of keyboard)  ~ 0x80 - 0xB7
     35 //
     36 // - For each row, most chars are +4 vs char to immediate left
     37 //   due to the diagonal down-right scancode ordering
     38 //
     39 // Starting values
     40 // - Row 1: 0x80
     41 // - Row 2: 0x81
     42 // - Row 3: 0x82
     43 // - Row 4: 0x83
     44 
     45 // Row 1
     46 #define DUCK_IO_KEY_F1                  0x80u
     47 #define DUCK_IO_KEY_F2                  0x84u
     48 #define DUCK_IO_KEY_F3                  0x88u
     49 #define DUCK_IO_KEY_F4                  0x8Cu
     50 #define DUCK_IO_KEY_F5                  0x90u
     51 #define DUCK_IO_KEY_F6                  0x94u
     52 #define DUCK_IO_KEY_F7                  0x98u
     53 #define DUCK_IO_KEY_F8                  0x9Cu
     54 #define DUCK_IO_KEY_F9                  0xA0u
     55 #define DUCK_IO_KEY_F10                 0xA4u
     56 #define DUCK_IO_KEY_F11                 0xA8u
     57 #define DUCK_IO_KEY_F12                 0xACu
     58 // GAP at 0xB0 maybe Blank spot where F13 would be
     59 // GAP at 0xB4 maybe ON Key?
     60 
     61 // Row 2
     62 #define DUCK_IO_KEY_ESCAPE              0x81u  // Spanish label: Salida | German label: Esc
     63 #define DUCK_IO_KEY_1                   0x85u  // Shift alt: !
     64 #define DUCK_IO_KEY_2                   0x89u  // Shift alt: "
     65 #define DUCK_IO_KEY_3                   0x8Du  // Shift alt: · (Spanish, mid-dot) | § (German, legal section)
     66 #define DUCK_IO_KEY_4                   0x91u  // Shift alt: $
     67 #define DUCK_IO_KEY_5                   0x95u  // Shift alt: %
     68 #define DUCK_IO_KEY_6                   0x99u  // Shift alt: &
     69 #define DUCK_IO_KEY_7                   0x9Du  // Shift alt: /
     70 #define DUCK_IO_KEY_8                   0xA1u  // Shift alt: (
     71 #define DUCK_IO_KEY_9                   0xA5u  // Shift alt: )
     72 #define DUCK_IO_KEY_0                   0xA9u  // Shift alt: "\"
     73 #define DUCK_IO_KEY_SINGLE_QUOTE        0xADu  // Shift alt: ?  | German version: ß (eszett)
     74 #define DUCK_IO_KEY_EXCLAMATION_FLIPPED 0xB1u  // Shift alt: ¿ (Spanish) | ` (German)  // German version: ' (single quote?)
     75 #define DUCK_IO_KEY_BACKSPACE           0xB5u  // German label: Lösch
     76 // See Continued Row 2 below
     77 
     78 // Row 3
     79 #define DUCK_IO_KEY_HELP                0x82u  // Spanish label: Ayuda | German label: Hilfe
     80 #define DUCK_IO_KEY_Q                   0x86u
     81 #define DUCK_IO_KEY_W                   0x8Au
     82 #define DUCK_IO_KEY_E                   0x8Eu
     83 #define DUCK_IO_KEY_R                   0x92u
     84 #define DUCK_IO_KEY_T                   0x96u
     85 #define DUCK_IO_KEY_Y                   0x9Au  // German version: z
     86 #define DUCK_IO_KEY_U                   0x9Eu
     87 #define DUCK_IO_KEY_I                   0xA2u
     88 #define DUCK_IO_KEY_O                   0xA6u
     89 #define DUCK_IO_KEY_P                   0xAAu
     90 #define DUCK_IO_KEY_BACKTICK            0xAEu  // Shift alt: [ (Spanish, only shift mode works) | German version: Ü
     91 #define DUCK_IO_KEY_RIGHT_SQ_BRACKET    0xB2u  // Shift alt: * | German version: · (mid-dot)
     92 #define DUCK_IO_KEY_ENTER               0xB6u  // Spanish label: Entra | German label: Ein-gabe
     93 // See Continued Row 3 below
     94 
     95 // Row 4
     96 // GAP at 0x83 maybe CAPS LOCK  (Spanish label: Mayuscula, German label: Groß)
     97 #define DUCK_IO_KEY_A                   0x87u
     98 #define DUCK_IO_KEY_S                   0x8Bu
     99 #define DUCK_IO_KEY_D                   0x8Fu
    100 #define DUCK_IO_KEY_F                   0x93u
    101 #define DUCK_IO_KEY_G                   0x97u
    102 #define DUCK_IO_KEY_H                   0x9Bu
    103 #define DUCK_IO_KEY_J                   0x9Fu
    104 #define DUCK_IO_KEY_K                   0xA3u
    105 #define DUCK_IO_KEY_L                   0xA7u
    106 #define DUCK_IO_KEY_N_TILDE             0xABu  // German version: ö
    107 #define DUCK_IO_KEY_U_UMLAUT            0xAFu  // German version: ä
    108 #define DUCK_IO_KEY_O_OVER_LINE         0xB3u  // Shift alt: [A over line] (Spanish) | ^ (German) | German version: #
    109 // ? GAP at 0x87 ?
    110 
    111 
    112 // Second 4 rows (bottom of keyboard) ~ 0x80 - 0xB7
    113 //
    114 // - For each row, most chars are +4 vs char to immediate left
    115 //
    116 // Starting values
    117 // - Row 5: 0xB8
    118 // - Row 6: 0xB9
    119 // - Row 7: 0xBA
    120 // - Row 8: 0xBB
    121 
    122 // Row 5
    123 #define DUCK_IO_KEY_Z                   0xB8u  // German version: y
    124 #define DUCK_IO_KEY_X                   0xBCu
    125 #define DUCK_IO_KEY_C                   0xC0u
    126 #define DUCK_IO_KEY_V                   0xC4u
    127 #define DUCK_IO_KEY_B                   0xC8u
    128 #define DUCK_IO_KEY_N                   0xCCu
    129 #define DUCK_IO_KEY_M                   0xD0u
    130 #define DUCK_IO_KEY_COMMA               0xD4u
    131 #define DUCK_IO_KEY_PERIOD              0xD8u
    132 #define DUCK_IO_KEY_DASH                0xDCu  // Shift alt: _ | German version: @
    133 // See Continued Row 5 below
    134 // Row 6 Continued (from below)
    135 #define DUCK_IO_KEY_DELETE              0xE0u  // *  Spanish label: Borrar | German label: Entf.
    136 
    137 
    138 
    139 // Encoding is less orderly below
    140 
    141 // Row 6
    142 #define DUCK_IO_KEY_SPACE               0xB9u  // Spanish label: Espacio | German label (blank)
    143 // Continued Row 5
    144 #define DUCK_IO_KEY_LESS_THAN           0xBDu  // Shift alt: >
    145 // Continued Row 6
    146 #define DUCK_IO_KEY_PAGE_UP             0xC1u  // Spanish label: Pg Arriba | German label: Zu-rück
    147 #define DUCK_IO_KEY_PAGE_DOWN           0xC5u  // Spanish label: Pg Abajo | German label: Wei-ter
    148 #define DUCK_IO_KEY_MEMORY_MINUS        0xC9u
    149 // Continued Row 5
    150 #define DUCK_IO_KEY_MEMORY_PLUS         0xCDu
    151 #define DUCK_IO_KEY_MEMORY_RECALL       0xD1u
    152 #define DUCK_IO_KEY_SQUAREROOT          0xD5u
    153 // ** 3x3 Arrow and Math Key area **
    154 // Continued Row 6
    155 #define DUCK_IO_KEY_MULTIPLY            0xD9u
    156 #define DUCK_IO_KEY_ARROW_DOWN          0xDDu
    157 #define DUCK_IO_KEY_MINUS               0xE1u
    158 // Continued Row 3
    159 #define DUCK_IO_KEY_ARROW_LEFT          0xE5u
    160 #define DUCK_IO_KEY_EQUALS              0xE9u
    161 #define DUCK_IO_KEY_ARROW_RIGHT         0xEDu
    162 // Continued Row 2
    163 #define DUCK_IO_KEY_DIVIDE              0xE4u  // German version: :
    164 #define DUCK_IO_KEY_ARROW_UP            0xE8u
    165 #define DUCK_IO_KEY_PLUS                0xECu
    166 
    167 // Row 7
    168 // Piano Sharp Keys
    169 #define DUCK_IO_KEY_PIANO_DO_SHARP      0xBAu
    170 #define DUCK_IO_KEY_PIANO_RE_SHARP      0xBEu
    171 // GAP at 0xC2 where there is no key
    172 #define DUCK_IO_KEY_PIANO_FA_SHARP      0xC6u
    173 #define DUCK_IO_KEY_PIANO_SOL_SHARP     0xCAu
    174 #define DUCK_IO_KEY_PIANO_LA_SHARP      0xCEu
    175 // GAP at 0xD2 where there is no key
    176 //
    177 // Octave 2 maybe
    178 #define DUCK_IO_KEY_PIANO_DO_2_SHARP    0xD6u
    179 #define DUCK_IO_KEY_PIANO_RE_2_SHARP    0xDAu
    180 // Row 6 Continued
    181 #define DUCK_IO_KEY_PRINTSCREEN_RIGHT   0xDEu  // German label: Druck (* Mixed in with piano keys)
    182 // Row 7 Continued
    183 #define DUCK_IO_KEY_PIANO_FA_2_SHARP    0xE2u
    184 #define DUCK_IO_KEY_PIANO_SOL_2_SHARP   0xE6u
    185 #define DUCK_IO_KEY_PIANO_LA_2_SHARP    0xEAu
    186 
    187 // Row 8
    188 // Piano Primary Keys
    189 #define DUCK_IO_KEY_PIANO_DO            0xBBu
    190 #define DUCK_IO_KEY_PIANO_RE            0xBFu
    191 #define DUCK_IO_KEY_PIANO_MI            0xC3u
    192 #define DUCK_IO_KEY_PIANO_FA            0xC7u
    193 #define DUCK_IO_KEY_PIANO_SOL           0xCBu
    194 #define DUCK_IO_KEY_PIANO_LA            0xCFu
    195 #define DUCK_IO_KEY_PIANO_SI            0xD3u
    196 #define DUCK_IO_KEY_PIANO_DO_2          0xD7u
    197 #define DUCK_IO_KEY_PIANO_RE_2          0xDBu
    198 #define DUCK_IO_KEY_PIANO_MI_2          0xDFu
    199 #define DUCK_IO_KEY_PIANO_FA_2          0xE3u
    200 #define DUCK_IO_KEY_PIANO_SOL_2         0xE7u
    201 #define DUCK_IO_KEY_PIANO_LA_2          0xEBu
    202 #define DUCK_IO_KEY_PIANO_SI_2          0xEFu
    203 
    204 #define DUCK_IO_KEY_LAST_KEY            (DUCK_IO_KEY_PIANO_SI_2u)
    205 
    206 // Special System Codes? 0xF0+
    207 #define DUCK_IO_KEY_MAYBE_SYST_CODES_START 0xF0u
    208 #define DUCK_IO_KEY_MAYBE_RX_NOT_A_KEY     0xF6u
    209 
    210 #endif // _MEGADUCK_LAPTOP_KEYCODES_H

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.