]> git.sur5r.net Git - cc65/commitdiff
Support for self explanatory KBCODE values
authorIrgendwerA8 <c.krueger.b@web.de>
Wed, 7 Nov 2018 22:05:05 +0000 (23:05 +0100)
committerOliver Schmidt <ol.sc@web.de>
Mon, 12 Nov 2018 13:36:40 +0000 (14:36 +0100)
asminc/atari_pokey.inc
doc/atari.sgml
include/_pokey.h

index 99d192fbd82467e8900a7e2470407230f0c018a7..07e9c00ef8279a8e839742da7a0a1ae9fd0f8e2b 100644 (file)
@@ -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
index cb41e1105d45e3ac36ac630adc87321a96ab5506..db76c673628fa62dddcad05b71bcea06e3f75086 100644 (file)
@@ -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)&amp;DisplayList);             // SDLSTL
+POKEW(560,(unsigned int)&amp;DisplayList);      // SDLSTL
 ...
 </verb>
 
@@ -411,6 +411,29 @@ char* pcAtasciiMappingString = "Hello Atari!";
 
 does not.
 
+<sect1>Keyboard codes<p>
+
+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:
+<verb>
+...
+    while (!kbhit());
+    switch (PEEK(764))
+    {
+        case KEY_RETURN:
+        ...
+        case KEY_SPACE:
+        ...
+        case KEY_1:
+        ...
+    }
+...
+</verb>
+
+You can find the C defines in the file "<tt/_pokey.h/" or "<tt/atari_pokey.inc/" for the assembler variant.
+
 
 <sect>Loadable drivers<p>
 
@@ -932,16 +955,16 @@ chunk #2 (RAM memory area).
 The contents of the new NEXEHDR and CHKHDR segments come from this
 file (split.s):
 <tscreen><verb>
-       .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
 </verb></tscreen>
 <p>
 Compile with
@@ -1008,16 +1031,16 @@ FEATURES {
 
 New contents for NEXEHDR and CHKHDR are needed (split2.s):
 <tscreen><verb>
-       .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
 </verb></tscreen>
 
 Compile with
@@ -1096,14 +1119,14 @@ including commercial applications, and to alter it and redistribute it
 freely, subject to the following restrictions:
 
 <enum>
-<item> 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.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
+<item>  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.
+<item>  Altered source versions must be plainly marked as such, and must not
+    be misrepresented as being the original software.
+<item>  This notice may not be removed or altered from any source
+    distribution.
 </enum>
 
 </article>
index df10eac3f022a860282e0f4cbadf600599d9629c..2c2f7167eef37492ee4f0cda99468c371db11da6 100644 (file)
@@ -7,6 +7,7 @@
 /*                                                                           */
 /*                                                                           */
 /* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
+/* 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 */