135 lines
1.9 KiB
C
135 lines
1.9 KiB
C
#ifndef C64_KEYBOARD_H
|
|
#define C64_KEYBOARD_H
|
|
|
|
#include "types.h"
|
|
|
|
#define KEY_CSR_DOWN (17)
|
|
#define KEY_CSR_RIGHT (29)
|
|
#define KEY_CSR_UP (17 + 128)
|
|
#define KEY_CSR_LEFT (29 + 128)
|
|
|
|
#define KEY_ARROW_LEFT (95)
|
|
|
|
#define KEY_ESC (27)
|
|
#define KEY_DEL (20)
|
|
#define KEY_INST (148)
|
|
#define KEY_RETURN (13)
|
|
|
|
#define KEY_HOME (19)
|
|
#define KEY_CLR (147)
|
|
|
|
#define KEY_F1 (133)
|
|
#define KEY_F3 (134)
|
|
#define KEY_F5 (135)
|
|
#define KEY_F7 (136)
|
|
|
|
#define KEY_F2 (137)
|
|
#define KEY_F4 (138)
|
|
#define KEY_F6 (139)
|
|
#define KEY_F8 (140)
|
|
|
|
enum KeyScanCode
|
|
{
|
|
KSCAN_DEL,
|
|
KSCAN_RETURN,
|
|
KSCAN_CSR_RIGHT,
|
|
KSCAN_F7,
|
|
KSCAN_F1,
|
|
KSCAN_F3,
|
|
KSCAN_F5,
|
|
KSCAN_CSR_DOWN,
|
|
|
|
KSCAN_3,
|
|
KSCAN_W,
|
|
KSCAN_A,
|
|
KSCAN_4,
|
|
KSCAN_Z,
|
|
KSCAN_S,
|
|
KSCAN_E,
|
|
KSCAN_SHIFT_LOCK,
|
|
|
|
KSCAN_5,
|
|
KSCAN_R,
|
|
KSCAN_D,
|
|
KSCAN_6,
|
|
KSCAN_C,
|
|
KSCAN_F,
|
|
KSCAN_T,
|
|
KSCAN_X,
|
|
|
|
KSCAN_7,
|
|
KSCAN_Y,
|
|
KSCAN_G,
|
|
KSCAN_8,
|
|
KSCAN_B,
|
|
KSCAN_H,
|
|
KSCAN_U,
|
|
KSCAN_V,
|
|
|
|
KSCAN_9,
|
|
KSCAN_I,
|
|
KSCAN_J,
|
|
KSCAN_0,
|
|
KSCAN_M,
|
|
KSCAN_K,
|
|
KSCAN_O,
|
|
KSCAN_N,
|
|
|
|
KSCAN_PLUS,
|
|
KSCAN_P,
|
|
KSCAN_L,
|
|
KSCAN_MINUS,
|
|
KSCAN_DOT,
|
|
KSCAN_COLON,
|
|
KSCAN_AT,
|
|
KSCAN_COMMA,
|
|
|
|
KSCAN_POUND,
|
|
KSCAN_STAR,
|
|
KSCAN_SEMICOLON,
|
|
KSCAN_HOME,
|
|
KSCAN_RSHIFT,
|
|
KSCAN_EQUAL,
|
|
KSCAN_ARROW_UP,
|
|
KSCAN_SLASH,
|
|
|
|
KSCAN_1,
|
|
KSCAN_ARROW_LEFT,
|
|
KSCAN_CONTROL,
|
|
KSCAN_2,
|
|
KSCAN_SPACE,
|
|
KSCAN_COMMODORE,
|
|
KSCAN_Q,
|
|
KSCAN_STOP,
|
|
|
|
KSCAN_QUAL_SHIFT = 0x40,
|
|
KSCAN_QUAL_MASK = 0x7f,
|
|
KSCAN_QUAL_DOWN = 0x80,
|
|
|
|
KSCAN_MAX = 0xff
|
|
};
|
|
|
|
// map of keyboard codes to PETSCII, first 64 without shift
|
|
// second 64 with shift
|
|
|
|
extern const char keyb_codes[128];
|
|
|
|
// current status of key matrix
|
|
extern byte keyb_matrix[8];
|
|
|
|
// current key in scan code - the top level bit KSCAN_QUAL_DOWN is
|
|
// used to indicate a key is pressed, so 0 is no key
|
|
extern KeyScanCode keyb_key;
|
|
|
|
// poll keyboard matrix
|
|
|
|
void keyb_poll(void);
|
|
|
|
inline bool key_pressed(KeyScanCode code);
|
|
|
|
inline bool key_shift(void);
|
|
|
|
#pragma compile("keyboard.c")
|
|
|
|
#endif
|