From f86ebbd2587558b63062b26a4d9042e3471a11e2 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 Date: Wed, 7 Nov 2018 23:05:05 +0100 Subject: [PATCH] Support for self explanatory KBCODE values --- asminc/atari_pokey.inc | 98 ++++++++++++++++++++++++++++++++++++++++ doc/atari.sgml | 95 ++++++++++++++++++++++++--------------- include/_pokey.h | 100 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 257 insertions(+), 36 deletions(-) diff --git a/asminc/atari_pokey.inc b/asminc/atari_pokey.inc index 99d192fbd..07e9c00ef 100644 --- a/asminc/atari_pokey.inc +++ b/asminc/atari_pokey.inc @@ -42,3 +42,101 @@ SEROUT = POKEY + $0D ;serial port output IRQEN = POKEY + $0E ;IRQ interrupt enable SKCTL = POKEY + $0F ;serial port and keyboard control + +; KBCODE Values + +KEY_NONE = $FF + +KEY_0 = $32 +KEY_1 = $1F +KEY_2 = $1E +KEY_3 = $1A +KEY_4 = $18 +KEY_5 = $1D +KEY_6 = $1B +KEY_7 = $33 +KEY_8 = $35 +KEY_9 = $30 + +KEY_A = $3F +KEY_B = $15 +KEY_C = $12 +KEY_D = $3A +KEY_E = $2A +KEY_F = $38 +KEY_G = $3D +KEY_H = $39 +KEY_I = $0D +KEY_J = $01 +KEY_K = $05 +KEY_L = $00 +KEY_M = $25 +KEY_N = $23 +KEY_O = $08 +KEY_P = $0A +KEY_Q = $2F +KEY_R = $28 +KEY_S = $3E +KEY_T = $2D +KEY_U = $0B +KEY_V = $10 +KEY_W = $2E +KEY_X = $16 +KEY_Y = $2B +KEY_Z = $17 + +KEY_COMMA = $20 +KEY_PERIOD = $22 +KEY_SLASH = $26 +KEY_SEMICOLON = $02 +KEY_PLUS = $06 +KEY_ASTERISK = $07 +KEY_DASH = $0E +KEY_EQUALS = $0F +KEY_LESSTHAN = $36 +KEY_GREATERTHAN = $37 + +KEY_ESC = $1C +KEY_TAB = $2C +KEY_SPACE = $21 +KEY_RETURN = $0C +KEY_DELETE = $34 +KEY_CAPS = $3C +KEY_INVERSE = $27 +KEY_HELP = $11 + +KEY_F1 = $03 +KEY_F2 = $04 +KEY_F3 = $13 +KEY_F4 = $14 + +KEY_SHIFT = $40 +KEY_CTRL = $80 + +; Composed keys + +KEY_EXCLAMATIONMARK = KEY_1 | KEY_SHIFT +KEY_QUOTE = KEY_2 | KEY_SHIFT +KEY_HASH = KEY_3 | KEY_SHIFT +KEY_DOLLAR = KEY_4 | KEY_SHIFT +KEY_PERCENT = KEY_5 | KEY_SHIFT +KEY_AMPERSAND = KEY_6 | KEY_SHIFT +KEY_APOSTROPHE = KEY_7 | KEY_SHIFT +KEY_AT = KEY_8 | KEY_SHIFT +KEY_OPENINGPARAN = KEY_9 | KEY_SHIFT +KEY_CLOSINGPARAN = KEY_0 | KEY_SHIFT +KEY_UNDERLINE = KEY_DASH | KEY_SHIFT +KEY_BAR = KEY_EQUALS | KEY_SHIFT +KEY_COLON = KEY_SEMICOLON | KEY_SHIFT +KEY_BACKSLASH = KEY_PLUS | KEY_SHIFT +KEY_CIRCUMFLEX = KEY_ASTERISK | KEY_SHIFT +KEY_OPENINGBRACKET = KEY_COMMA | KEY_SHIFT +KEY_CLOSINGBRACKET = KEY_PERIOD | KEY_SHIFT +KEY_QUESTIONMARK = KEY_SLASH | KEY_SHIFT +KEY_CLEAR = KEY_LESSTHAN | KEY_SHIFT +KEY_INSERT = KEY_GREATERTHAN | KEY_SHIFT + +KEY_UP = KEY_UNDERLINE | KEY_CTRL +KEY_DOWN = KEY_EQUALS | KEY_CTRL +KEY_LEFT = KEY_PLUS | KEY_CTRL +KEY_RIGHT = KEY_ASTERISK | KEY_CTRL diff --git a/doc/atari.sgml b/doc/atari.sgml index cb41e1105..db76c6736 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -329,20 +329,20 @@ unsigned char ScreenMemory[100]; void DisplayList = { - DL_BLK8, - DL_BLK8, - DL_BLK8, - DL_LMS(DL_CHR20x8x2), - ScreenMemory, - DL_CHR20x8x2, - DL_CHR20x8x2, - DL_CHR20x8x2, - DL_BLK4, - DL_CHR20x8x2, - DL_JVB + DL_BLK8, + DL_BLK8, + DL_BLK8, + DL_LMS(DL_CHR20x8x2), + ScreenMemory, + DL_CHR20x8x2, + DL_CHR20x8x2, + DL_CHR20x8x2, + DL_BLK4, + DL_CHR20x8x2, + DL_JVB }; ... -POKEW(560,(unsigned int)&DisplayList); // SDLSTL +POKEW(560,(unsigned int)&DisplayList); // SDLSTL ... @@ -411,6 +411,29 @@ char* pcAtasciiMappingString = "Hello Atari!"; does not. +Keyboard codes

+ +For direct keyboard scanning in conjunction with e.g. the OS location "CH" (764/$2FC), +all keyboard codes are available as defined values on C and assembler side. + +Example: + +... + while (!kbhit()); + switch (PEEK(764)) + { + case KEY_RETURN: + ... + case KEY_SPACE: + ... + case KEY_1: + ... + } +... + + +You can find the C defines in the file "Loadable drivers

@@ -932,16 +955,16 @@ chunk #2 (RAM memory area). The contents of the new NEXEHDR and CHKHDR segments come from this file (split.s): - .import __CODE_LOAD__, __BSS_LOAD__, __CODE_SIZE__ - .import __DATA_LOAD__, __RODATA_LOAD__, __STARTUP_LOAD__ + .import __CODE_LOAD__, __BSS_LOAD__, __CODE_SIZE__ + .import __DATA_LOAD__, __RODATA_LOAD__, __STARTUP_LOAD__ - .segment "NEXEHDR" - .word __STARTUP_LOAD__ - .word __CODE_LOAD__ + __CODE_SIZE__ - 1 + .segment "NEXEHDR" + .word __STARTUP_LOAD__ + .word __CODE_LOAD__ + __CODE_SIZE__ - 1 - .segment "CHKHDR" - .word __RODATA_LOAD__ - .word __BSS_LOAD__ - 1 + .segment "CHKHDR" + .word __RODATA_LOAD__ + .word __BSS_LOAD__ - 1

Compile with @@ -1008,16 +1031,16 @@ FEATURES { New contents for NEXEHDR and CHKHDR are needed (split2.s): - .import __STARTUP_LOAD__, __BSS_LOAD__, __DATA_SIZE__ - .import __DATA_LOAD__, __RODATA_LOAD__ + .import __STARTUP_LOAD__, __BSS_LOAD__, __DATA_SIZE__ + .import __DATA_LOAD__, __RODATA_LOAD__ - .segment "NEXEHDR" - .word __RODATA_LOAD__ - .word __DATA_LOAD__ + __DATA_SIZE__ - 1 + .segment "NEXEHDR" + .word __RODATA_LOAD__ + .word __DATA_LOAD__ + __DATA_SIZE__ - 1 - .segment "CHKHDR" - .word __STARTUP_LOAD__ - .word __BSS_LOAD__ - 1 + .segment "CHKHDR" + .word __STARTUP_LOAD__ + .word __BSS_LOAD__ - 1 Compile with @@ -1096,14 +1119,14 @@ including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - This notice may not be removed or altered from any source - distribution. + The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + This notice may not be removed or altered from any source + distribution. diff --git a/include/_pokey.h b/include/_pokey.h index df10eac3f..2c2f7167e 100644 --- a/include/_pokey.h +++ b/include/_pokey.h @@ -7,6 +7,7 @@ /* */ /* */ /* (C) 2000 Freddy Offenga */ +/* 06-Nov-2018: Christian Krueger: Added defines for keyboard codes */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -73,6 +74,105 @@ struct __pokey_read { unsigned char skstat; /* serial port status */ }; + +/* Keyboard values returned by kbcode */ + +#define KEY_NONE (unsigned char) 0xFF + +#define KEY_0 (unsigned char) 0x32 +#define KEY_1 (unsigned char) 0x1F +#define KEY_2 (unsigned char) 0x1E +#define KEY_3 (unsigned char) 0x1A +#define KEY_4 (unsigned char) 0x18 +#define KEY_5 (unsigned char) 0x1D +#define KEY_6 (unsigned char) 0x1B +#define KEY_7 (unsigned char) 0x33 +#define KEY_8 (unsigned char) 0x35 +#define KEY_9 (unsigned char) 0x30 + +#define KEY_A (unsigned char) 0x3F +#define KEY_B (unsigned char) 0x15 +#define KEY_C (unsigned char) 0x12 +#define KEY_D (unsigned char) 0x3A +#define KEY_E (unsigned char) 0x2A +#define KEY_F (unsigned char) 0x38 +#define KEY_G (unsigned char) 0x3D +#define KEY_H (unsigned char) 0x39 +#define KEY_I (unsigned char) 0x0D +#define KEY_J (unsigned char) 0x01 +#define KEY_K (unsigned char) 0x05 +#define KEY_L (unsigned char) 0x00 +#define KEY_M (unsigned char) 0x25 +#define KEY_N (unsigned char) 0x23 +#define KEY_O (unsigned char) 0x08 +#define KEY_P (unsigned char) 0x0A +#define KEY_Q (unsigned char) 0x2F +#define KEY_R (unsigned char) 0x28 +#define KEY_S (unsigned char) 0x3E +#define KEY_T (unsigned char) 0x2D +#define KEY_U (unsigned char) 0x0B +#define KEY_V (unsigned char) 0x10 +#define KEY_W (unsigned char) 0x2E +#define KEY_X (unsigned char) 0x16 +#define KEY_Y (unsigned char) 0x2B +#define KEY_Z (unsigned char) 0x17 + +#define KEY_COMMA (unsigned char) 0x20 +#define KEY_PERIOD (unsigned char) 0x22 +#define KEY_SLASH (unsigned char) 0x26 +#define KEY_SEMICOLON (unsigned char) 0x02 +#define KEY_PLUS (unsigned char) 0x06 +#define KEY_ASTERISK (unsigned char) 0x07 +#define KEY_DASH (unsigned char) 0x0E +#define KEY_EQUALS (unsigned char) 0x0F +#define KEY_LESSTHAN (unsigned char) 0x36 +#define KEY_GREATERTHAN (unsigned char) 0x37 + +#define KEY_ESC (unsigned char) 0x1C +#define KEY_TAB (unsigned char) 0x2C +#define KEY_SPACE (unsigned char) 0x21 +#define KEY_RETURN (unsigned char) 0x0C +#define KEY_DELETE (unsigned char) 0x34 +#define KEY_CAPS (unsigned char) 0x3C +#define KEY_INVERSE (unsigned char) 0x27 +#define KEY_HELP (unsigned char) 0x11 + +#define KEY_F1 (unsigned char) 0x03 +#define KEY_F2 (unsigned char) 0x04 +#define KEY_F3 (unsigned char) 0x13 +#define KEY_F4 (unsigned char) 0x14 + +#define KEY_CTRL (unsigned char) 0x80 +#define KEY_SHIFT (unsigned char) 0x40 + +/* Composed keys */ + +#define KEY_EXCLAMATIONMARK (KEY_1 | KEY_SHIFT) +#define KEY_QUOTE (KEY_2 | KEY_SHIFT) +#define KEY_HASH (KEY_3 | KEY_SHIFT) +#define KEY_DOLLAR (KEY_4 | KEY_SHIFT) +#define KEY_PERCENT (KEY_5 | KEY_SHIFT) +#define KEY_AMPERSAND (KEY_6 | KEY_SHIFT) +#define KEY_APOSTROPHE (KEY_7 | KEY_SHIFT) +#define KEY_AT (KEY_8 | KEY_SHIFT) +#define KEY_OPENINGPARAN (KEY_9 | KEY_SHIFT) +#define KEY_CLOSINGPARAN (KEY_0 | KEY_SHIFT) +#define KEY_UNDERLINE (KEY_DASH | KEY_SHIFT) +#define KEY_BAR (KEY_EQUALS | KEY_SHIFT) +#define KEY_COLON (KEY_SEMICOLON | KEY_SHIFT) +#define KEY_BACKSLASH (KEY_PLUS | KEY_SHIFT) +#define KEY_CIRCUMFLEX (KEY_ASTERISK | KEY_SHIFT) +#define KEY_OPENINGBRACKET (KEY_COMMA | KEY_SHIFT) +#define KEY_CLOSINGBRACKET (KEY_PERIOD | KEY_SHIFT) +#define KEY_QUESTIONMARK (KEY_SLASH | KEY_SHIFT) +#define KEY_CLEAR (KEY_LESSTHAN | KEY_SHIFT) +#define KEY_INSERT (KEY_GREATERTHAN | KEY_SHIFT) + +#define KEY_UP (KEY_UNDERLINE | KEY_CTRL) +#define KEY_DOWN (KEY_EQUALS | KEY_CTRL) +#define KEY_LEFT (KEY_PLUS | KEY_CTRL) +#define KEY_RIGHT (KEY_ASTERISK | KEY_CTRL) + /* End of _pokey.h */ #endif /* #ifndef __POKEY_H */ -- 2.39.5