Merge pull request #236 from jgharston/main

Initial optimisation for *KEY
This commit is contained in:
Bobbi Webber-Manners 2022-12-28 18:31:05 -05:00 committed by GitHub
commit 12ccb3dccd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 263 additions and 46 deletions

View File

@ -36,6 +36,8 @@
* 12-Dec-2022 Test code to write *KEY data to mainmem.
* 24-Dec-2022 Minor bit of tidying.
* 26-Dec-2022 Integrated ADB extended keyboard keys.
* 27-Dec-2022 Bobbi's keyboard uses $60+n extended keys.
* TO DO: Need to special-case RAlt-2, RAlt-6 when RAlt also holds Ctrl.
* Hardware locations
@ -120,8 +122,9 @@ KBDINIT LDX #DEFBYTEEND-DEFBYTE-1
LDA #$80 ; Keypad keys are function keys
STA FXKEYPADBASE
JSR SOFTKEYCHK ; Clear soft keys
LDX #$C3 ; Default KBD=Native, MODE=3
STX FX254VAR ; b7-b4=default KBD map, b3-b0=default MODE
* LDX #$83 ; Default KBD=Native, MODE=3
* STX FX254VAR ; b7-b4=default KBD map, b3-b0=default MODE
LDX #$03 ; Default MODE=3 (map already <$C0 by startup)
BIT SETV ; Set V
JSR KBDTEST ; Test if key being pressed
BCS :KBDINITOK ; Return default MODE
@ -269,6 +272,11 @@ NEGCALL >>> XF2MAIN,MACHRD ; Try to read Machine ID
* SOFT KEY PROCESSING
* ===================
OSDECNUM EQU OSTEMP
* *SHOW (<num>)
* -------------
STARSHOW RTS
* *KEY <num> <GSTRANS string>
* ---------------------------
@ -290,42 +298,24 @@ ERRKEYUSED BRK
* out halfway through inserting a string, and we mustn't
* have mainmem paged in while parsing the string as the
* string might be "underneath" the memory we've paged in,
* we don't know how long the new definition is and if
* it will fit into memory until after we've parsed it, so
* we either have to store it to a temp area or parse it
* twice.
* we don't know how long the new definition is and if it
* will fit into memory until after we've parsed it, so we
* either have to store it to a temp area or parse it twice.
*
* All this, and we need a structure that is reasonably coded,
* but with the priority to be easy for KEYREAD to extract
* from (as called more often), even if at expense of storing
* being more complex.
*
* Optimisations:
* BBC doesn't care if the new definition is valid, it removes
* the current definition before parsing, so a parse error
* results in the definition being cleared.
* eg *KEY 1 HELLO, *KEY 1 X gives Bad string and key 1=""
* Soft key definition layout:
* FKEYLENS+n - length of key n
* FKEYBUF+n - start of key n where x=SUM(len(0)...len(n-1))
*
* BBC uses (simplified):
* SOFTBUF+key+0 -> start of definition
* SOFTBUF+key+1 -> after last byte of definition
* SOFTBUF+16 -> free space after end of last definition
* definitions stored in order of creation
* SCANDEC stores number in OSDECNUM, so we can keep it there
* We also have OSKBDx variables available for shuffling code
*
* Master uses:
* SOFTBUF+key -> lo.start of definition
* SOFTBUF+key+17 -> hi.start of definition
* SOFTBUF+key+1 -> lo.after last byte definition
* SOFTBUF+key+18 -> hi.after last byte definition
* SOFTBUF+16/33 -> free space after last byte last definition
* definitions stored in key order
*
* Initial development layout:
* 00..0F -> length of string 0..15
* 10... -> strings in key order
* (len0+len1+...len15) => start of free space
*
STARKEY1 STA FKEYNUM ; Key number being defined
STARKEY1
* STA FKEYNUM ; Key number being defined
JSR KEYOPENGAP
JSR SKIPCOMMA
SEC
@ -339,7 +329,8 @@ STARKEYLP1 JSR GSREAD
INX
CPX MOVEDST ; See if we are out of space
BNE STARKEYLP1
LDX FKEYNUM
* LDX FKEYNUM
LDX OSDECNUM
>>> WRTMAIN ; Write main memory
STZ FKEYLENS,X ; Out of space. Set len=0
>>> WRTAUX ; Back to writing aux again
@ -347,13 +338,14 @@ STARKEYLP1 JSR GSREAD
STARKEYEND TXA ; Last idx+1
SEC ; Compute length
SBC KEYINS
LDX FKEYNUM
* LDX FKEYNUM
LDX OSDECNUM
>>> WRTMAIN ; Write main memory
STA FKEYLENS,X ; Store length of new def
>>> WRTAUX ; Back to writing aux again
STARKEYCLS JSR KEYCLSGAP
RTS
FKEYNUM DB $00
* FKEYNUM DB $00
KEYINS DB $00
@ -363,10 +355,12 @@ KEYINS DB $00
KEYOPENGAP PHA
PHX
PHY
LDX FKEYNUM ; Key being defined
* LDX FKEYNUM ; Key being defined
LDX OSDECNUM
JSR KEYSUMLENS ; Len of defs 0..X exclusive
STA KEYINS ; Offset for insert
LDX FKEYNUM ; Key being defined
* LDX FKEYNUM ; Key being defined
LDX OSDECNUM
INX
JSR KEYSUMLENS ; Len of defs 0..X exclusive
STA MOVESRC ; Source offset for move
@ -398,7 +392,8 @@ KEYCLSGAP PHA
STA MOVELEN ; Length for move
LDA MOVEDST ; Old dest ...
STA MOVESRC ; ... is new source
LDX FKEYNUM ; Key being defined
* LDX FKEYNUM ; Key being defined
LDX OSDECNUM
INX
JSR KEYSUMLENS ; Len of defs 0..X exclusive
STA MOVEDST ; New dest
@ -501,7 +496,8 @@ KEYREAD2 JSR KBDREAD ; Fetch character from KBD "buffer"
BPL KEYREADOK ; Not top-bit key
AND #$CF ; Drop Shift/Ctrl bits
CMP #$C9
BCC KEYSOFTY ; Not cursor key
BCC KEYSOFTHI ; Not cursor key
* BCC KEYSOFTY ; Not cursor key
LDX FX4VAR
BEQ KEYCURSOR ; *FX4,0 - editing keys
CPY #$C9
@ -518,7 +514,8 @@ KEYSOFTHI LDX FX254VAR
CPX #$C0
BCC KEYSOFTY
TYA
AND #$BF
EOR #$40 ; Toggle keyboard map
* AND #$BF
TAY
KEYSOFTY TYA ; Get key including Shift/Ctrl
LSR A
@ -564,7 +561,7 @@ KEYCURSOR CMP #$C9
JSR GETCHRC ; Save char under cursor
STA OLDCHAR
KEYNONE SEC
RTS
KBDDONE2 RTS
KEYCOPY BIT VDUSTATUS
KEYCOPYTAB LDA FXTABCHAR ; Prepare TAB if no copy cursor
@ -589,10 +586,10 @@ KEYCOPYTAB LDA FXTABCHAR ; Prepare TAB if no copy cursor
* CC=keypress
* A =keycode, X=corrupted
* Apple+Letter -> Ctrl+Letter
* AppleL+digit -> 80+x
* AppleR+digit -> 90+x
* AppleLR+digit -> A0+x
* TAB -> $C9
* AppleL+digit -> 80+x fkey -> 80+x
* AppleR+digit -> 90+x Shift+fkey -> 90+x
* AppleLR+digit -> A0+x Ctrl+fkey -> A0+x
* TAB -> $C9 Shift+Ctrl+fkey -> B0+x
* Cursors -> $CC-$CF
* Keypad -> PADBASE+key
*
@ -600,8 +597,8 @@ KBDREAD CLV ; VC=return keypress
KBDTEST LDA KBDDATA ; VS here to test for keypress
EOR #$80 ; Toggle bit 7
CMP #$80
BCS KBDDONE ; No key pressed
BVS KBDDONE ; VS=test for keypress
BCS KBDDONE2 ; No key pressed
BVS KBDDONE2 ; VS=test for keypress
STA KBDACK ; Ack. keypress
KBDREAD2 TAX ; X=raw keypress
*
@ -636,7 +633,13 @@ KBDREAD2B AND #$10
BEQ KBDREAD5 ; Not keypad
PLP ; Drop NoALT
TXA ; A=raw keypress
LDX FXKEYPADBASE
BMI KBDREADPAD ; Translate keypad
CMP #$60
BCC KBDREADPAD
LDA KBDADBKEYS-$60,X ; Translate $60-$7E keys
BRA KBDREAD6
KBDREADPAD LDX FXKEYPADBASE
BEQ KBDCHKESC ; $00=use unchanged
BPL KBDREAD4 ; Keypad not function keys
CMP #$20
@ -699,6 +702,10 @@ KBDCURSR CLC
ADC #$C4 ; Cursor keys $C0+x
BRA KBDFUNC
KBDADBKEYS DB $85,$86,$87,$83,$88,$89,$80,$8B
DB $80,$8D,$80,$8E,$80,$8A,$80,$8C
DB $80,$8F,$C6,$C8,$CB,$C7,$84,$87
DB $82,$CA,$81,$CC,$CD,$CE,$C4,$7F
* Poll the keyboard to update Escape state
* On exit, MI=Escape state pending

209
docs/Keyboard.txt Normal file
View File

@ -0,0 +1,209 @@
Apple II Keyboard
=================
<----------------------------------------------------Apple IIgs---------------------------------------------------->
<-------------------------------------Apple IIe/IIc------------------------------------->
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---------+ +-----+-----+-----+-----+
| | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | | | | | | |
| ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | DELETE | |CLEAR| = | / | * |
+-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+------+ +-----+-----+-----+-----+
| | Q | W | E | R | T | Y | U | I | O | P | { | } | | | | | | |
| TAB | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | - |
+--------+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+ | +-----+-----+-----+-----+
| | A | S | D | F | G | H | J | K | L | : | " | | | | | | |
| CONTROL | a | s | d | f | g | h | j | k | l | ; | ' | RETURN | | 4 | 5 | 6 | + |
+----------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+----------+ +-----+-----+-----+-----+
| | Z | X | C | V | B | N | M | < | > | ? | | | | | | E |
| SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT | | 1 | 2 | 3 | N |
+-----+-----+-+-----+--+--+--+--+-----+-----+-----+-----+-+---+-+---+-+---+-+-----+-----+ +-----+-----+-----+ T |
|CAPS |SOLID| OPEN | ~ | | | | | | | | | | | E |
|LOCK |APPLE| APPLE | ` | SPACE | \ | Lft | Rgt | Dwn | Up | | 0 | . | R |
+-----+-----+----------+-----+----------------------------+-----+-----+-----+-----+-----+ +-----------+-----+-----+
Keycodes when running Applecorn MOS
-----------------------------------
<----------------------------------------------------Apple IIgs---------------------------------------------------->
<-------------------------------------Apple IIe/IIc------------------------------------->
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---------+ +-----+-----+-----+-----+
L+R | &1B | &A1 | &A2 | &A3 | &A4 | &A5 | &A6 | &A7 | &A8 | &A9 | &A0 | - | = | &1F | | &1B | &AC | &AF | &AA |
Rapp | &1B | &91 | &92 | &93 | &94 | &95 | &96 | &97 | &98 | &99 | &90 | - | = | &1F | | &1B | &9C | &9F | &9A |
Lapp | &1B | &81 | &82 | &83 | &84 | &85 | &86 | &87 | &88 | &89 | &80 | - | = | &1F | | &1B | &8C | &8F | &8A |
ctrl | &1B | ! | &00 | 3 | 4 | 5 | &1E | 7 | * | ( | ) | &1F | = | &7F | | &1B | &AC | &AF | &AA |
shift | &1B | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | &7F | | &1B | &9C | &9F | &9A |
key | &1B | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | &7F | | &1B | &8C | &8F | &8A |
+-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+------+ +-----+-----+-----+-----+
L+R | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | | | &A7 | &A8 | &A9 | &AD |
Rapp | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | | | &97 | &98 | &99 | &9D |
Lapp | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | | | &87 | &88 | &89 | &8D |
ctrl | &E9 | &11 | &17 | &05 | &12 | &14 | &19 | &CD | &C9 | &0F | &10 | &1B | &1D | | | &A7 | &A8 | &A9 | &AD |
shift | &D9 | Q | W | E | R | T | Y | U | I | O | P | { | } | | | &97 | &98 | &99 | &9D |
key | &C9 | q | w | e | r | t | y | u | i | o | p | [ | ] | | | &87 | &88 | &89 | &8D |
+--------+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+ | +-----+-----+-----+-----+
L+R | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &A4 | &A5 | &A6 | &AB |
Rapp | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &94 | &95 | &96 | &9B |
Lapp | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &84 | &85 | &86 | &8B |
ctrl | | &01 | &13 | &04 | &06 | &07 | &CC | &CE | &CF | &0C | ; | ' | &0D | | &A4 | &A5 | &A6 | &AB |
shift | | A | S | D | F | G | H | J | K | L | : | " | &0D | | &94 | &95 | &96 | &9B |
key | CONTROL | a | s | d | f | g | h | j | k | l | ; | ' | &0D | | &84 | &85 | &86 | &8B |
+----------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+----------+ +-----+-----+-----+-----+
L+R | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &A1 | &A2 | &A3 | |
Rapp | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &91 | &92 | &93 | |
Lapp | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &81 | &82 | &83 | |
ctrl | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &A1 | &A2 | &A3 | |
shft | | Z | X | C | V | B | N | M | < | > | ? | | | &91 | &92 | &93 | |
key | SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT | | &81 | &82 | &83 | |
+-----+-----+-+-----+--+--+--+--+-----+-----+-----+-----+-+---+-+---+-+---+-+-----+-----+ +-----+-----+-----+ |
L+R | | | | &00 | &20 | &1C | &08 | &15 | &0A | &0B | | &A0 | &AE | &0D |
Rapp | | | | &00 | &20 | &1C | &08 | &15 | &0A | &0B | | &90 | &9E | &0D |
Lapp | | | | &00 | &20 | &1C | &08 | &15 | &0A | &0B | | &80 | &8E | &0D |
ctrl | | | | ` | &20 | &1C | &DC | &DD | &EE | &EF | | &A0 | &AE | &0D |
shift |CAPS |SOLID| OPEN | ~ | &20 | | | &DC | &DD | &DE | &DF | | &90 | &9E | &0D |
key |LOCK |APPLE| APPLE | ` | &20 | \ | &CC | &CD | &CE | &CF | | &80 | &8E | &0D |
+-----+-----+----------+-----+----------------------------+-----+-----+-----+-----+-----+ +-----------+-----+-----+
With TAB set to &09 with *FX219,9 and keypad base set to &80 with *FX238,128.
AppleII ADB Extended Keyboard
=============================
+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+ +-----+
| | | | | | | | | | | | | | | | | | | | | === === === | |
| ESC | | f1 | f2 | f3 | f4 | | f5 | f6 | f7 | f8 | | f9 | f10 | f11 | f12 | | f13 | f14 | f15 | |POWER|
+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+ +-----+
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------------+ +-----+-----+-----+ +-----+-----+-----+-----+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | | | Ins | | Pge | | | | | |
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | DELETE | | Hlp |Home | Up | |CLEAR| = | / | * |
+-----+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+--------+ +-----+-----+-----+ +-----+-----+-----+-----+
| | Q | W | E | R | T | Y | U | I | O | P | { | } | | | | | | Pge | | | | | |
| TAB | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | | Del | End | Dwn | | 7 | 8 | 9 | - |
+---------+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+--------+ +-----+-----+-----+ +-----+-----+-----+-----+
| | A | S | D | F | G | H | J | K | L | : | " | | | | | | |
| CAPS LOCK | a | s | d | f | g | h | j | k | l | ; | ' | RETURN | | 4 | 5 | 6 | + |
+-----------+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+------------+ +-----+ +-----+-----+-----+-----+
| | Z | X | C | V | B | N | M | < | > | ? | | | | | | | | E |
| SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT | | Up | | 1 | 2 | 3 | N |
+---------+-----+-+---+---+-+-----+-----+-----+-----+-----+-----+---+-+-----+-------+------+ +-----+-----+-----+ +-----+-----+-----+ T |
| | | SOLID | | SOLID | | | | | | | | | | E |
| CTRL |OPTION | APPLE | SPACE | APPLE | OPTION| CTRL | | Lft | Dwn | Rgh | | 0 | . | R |
+---------+-------+-------+-----------------------------------------+-------+-------+------+ +-----+-----+-----+ +-----------+-----+-----+
AppleII Extended Keyboard Keycodes when running Applecorn MOS
-------------------------------------------------------------
+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+ +-----+
L+R | &1B | | &A1 | &A2 | &A3 | &A4 | | &A5 | &A6 | &A7 | &A8 | | &A9 | &AA | &AB | &AC | | &AD | &AE | &AF | |POWER|
Rapp | &1B | | &91 | &92 | &93 | &94 | | &95 | &96 | &97 | &98 | | &99 | &9A | &9B | &9C | | &9D | &9E | &9F | |POWER|
Lapp | &1B | | &81 | &82 | &83 | &84 | | &85 | &86 | &87 | &88 | | &89 | &8A | &8B | &8C | | &8D | &8E | &8F | |POWER|
ctrl | &1B | | &A1 | &A2 | &A3 | &A4 | | &A5 | &A6 | &A7 | &A8 | | &A9 | &AA | &AB | &AC | | &AD | &AE | &AF | |POWER|
shift | &1B | | &91 | &92 | &93 | &94 | | &95 | &96 | &97 | &98 | | &99 | &9A | &9B | &9C | | &9D | &9E | &9F | |POWER|
key | &1B | | &81 | &82 | &83 | &84 | | &85 | &86 | &87 | &88 | | &89 | &8A | &8B | &8C | | &8D | &8E | &8F | |POWER|
+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+ +-----+
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------------+ +-----+-----+-----+ +-----+-----+-----+-----+
L+R | &00 | &A1 | &A2 | &A3 | &A4 | &A5 | &A6 | &A7 | &A8 | &A9 | &A0 | - | = | &1F | | &E6 | &E8 | &EB | | &1B | &AC | &AF | &AA |
Rapp | &00 | &91 | &92 | &93 | &94 | &95 | &96 | &97 | &98 | &99 | &90 | - | = | &1F | | &D6 | &D8 | &DB | | &1B | &9C | &9F | &9A |
Lapp | &00 | &81 | &82 | &83 | &84 | &85 | &86 | &87 | &88 | &89 | &80 | - | = | &1F | | &C6 | &C8 | &CB | | &1B | &8C | &8F | &8A |
ctrl | ` | 1 | &00 | 3 | 4 | 5 | &1E | 7 | 8 | 9 | 0 | &1F | = | &7F | | &E6 | &E8 | &EB | | &1B | &AC | &AF | &AA |
shift | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | &7F | | &D6 | &D8 | &DB | | &1B | &9C | &9F | &9A |
key | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | &7F | | &C6 | &C8 | &CB | | &1B | &8C | &8F | &8A |
+-----+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+--------+ +-----+-----+-----+ +-----+-----+-----+-----+
L+R | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | &1C | | &E7 | &E9 | &EA | | &A7 | &A8 | &A9 | &AD |
Rapp | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | &1C | | &D7 | &D9 | &DA | | &97 | &98 | &99 | &9D |
Lapp | &09 | &11 | &17 | &05 | &12 | &14 | &19 | &15 | &09 | &0F | &10 | &1B | &1D | &1C | | &C7 | &C9 | &CA | | &87 | &88 | &89 | &8D |
ctrl | &E9 | &11 | &17 | &05 | &12 | &14 | &19 | &CD | &C9 | &0F | &10 | &1B | &1D | &1C | | &E7 | &E9 | &EA | | &A7 | &A8 | &A9 | &AD |
shift | &D9 | Q | W | E | R | T | Y | U | I | O | P | { | } | | | | &D7 | &D9 | &DA | | &97 | &98 | &99 | &9D |
key | &C9 | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | | &C7 | &C9 | &CA | | &87 | &88 | &89 | &8D |
+---------+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+--------+ +-----+-----+-----+ +-----+-----+-----+-----+
L+R | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &A4 | &A5 | &A6 | &AB |
Rapp | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &94 | &95 | &96 | &9B |
Lapp | | &01 | &13 | &04 | &06 | &07 | &08 | &0A | &0B | &0C | ; | ' | &0D | | &84 | &85 | &86 | &8B |
ctrl | | &01 | &13 | &04 | &06 | &07 | &CC | &CE | &CF | &0C | ; | ' | &0D | | &A4 | &A5 | &A6 | &AB |
shift | | A | S | D | F | G | H | J | K | L | : | " | &0D | | &94 | &95 | &96 | &9B |
key | CAPS LOCK | a | s | d | f | g | h | j | k | l | ; | ' | &0D | | &84 | &85 | &86 | &8B |
+-----------+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+---+-+------------+ +-----+ +-----+-----+-----+-----+
L+R | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &0B | | &A1 | &A2 | &A3 | |
Rapp | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &0B | | &91 | &92 | &93 | |
Lapp | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &0B | | &81 | &82 | &83 | |
ctrl | | &1A | &18 | &03 | &16 | &02 | &0E | &0D | , | . | / | | | &EF | | &A1 | &A2 | &A3 | |
shift | | Z | X | C | V | B | N | M | < | > | ? | | | &DF | | &91 | &92 | &93 | |
key | SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT | | &CF | | &81 | &82 | &83 | |
+---------+-----+-+---+---+-+-----+-----+-----+-----+-----+-----+---+-+-----+-------+------+ +-----+-----+-----+ +-----+-----+-----+ |
L+R | | | | &20 | | | | | &08 | &0A | &15 | | &A0 | &AE | &0D |
Rapp | | | | &20 | | | | | &08 | &0A | &15 | | &90 | &9E | &0D |
Lapp | | | | &20 | | | | | &08 | &0A | &15 | | &80 | &8E | &0D |
ctrl | | | | &20 | | | | | &EC | &EE | &ED | | &A0 | &AE | &0D |
shift | | | SOLID | &20 | SOLID | | | | &DC | &DE | &DD | | &90 | &9E | &0D |
key | CTRL | OPTION| APPLE | &20 | APPLE | OPTION| CTRL | | &CC | &CE | &CD | | &80 | &8E | &0D |
+---------+-------+-------+-----------------------------------------+-------+-------+------+ +-----+-----+-----+ +-----------+-----+-----+
With TAB set to &09 with *FX219,9 and keypad base set to &80 with *FX238,128.
AppleMOS Regular Keymapping
===========================
+==+====+====+====+====+====+====+====+====+=====+====+=====+=====+====+====+====+====+
| | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF |
+==+====+====+====+====+====+====+====+====+=====+====+=====+=====+====+====+====+====+
|0x| | | | | | | | | | Tab| | | | Ret| | |
| | c2 | cA | cB | cC | cD | cE | cF | cG | | | | | cL | cM | cN | cO |
| | a2 | aA | aB | aC | aD | aE | aF | aG | aH | aI | aJ | aK | aL | aM | aN | aO |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|1x| | | | | | | | | | | | Esc | | | | |
| | cP | cQ | cR | cS | cT | | cV | cW | cX | cY | cZ | c[ | c\ | c] | c6 | c_ |
| | aP | aQ | aR | aS | aT | aU | aV | aW | aX | aY | aZ | a[ | a\ | a] | a6 | a_ |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|7x| | | | | | | | | | | | | | | | BS |
+==+====+====+====+====+====+====+====+====+=====+====+=====+=====+====+====+====+====+
|8x| | F1| F2| F3| F4| F5| F6| F7| F8 | F9| F10 | F11 | F12| F13| F14| F15|
| | K0| K1| K2| K3| K4| K5| K6| K7| K8 | K9| K* | K+ | K= | K- | K. | K/ |
| | La0| La1| La2| La3| La4| La5| La6| La7| La8 | La9| | | | | | |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|9x| | sF1| sF2| sF3| sF4| sF5| sF6| sF7| sF8 | sF9| sF10| sF11|sF12|sF13|sF14|sF15|
| | sK0| sK1| sK2| sK3| sK4| sK5| sK6| sK7| sK8 | sK9| sK* | sK+ |sK= |sK- |sK. |sK/ |
| | Ra0| Ra1| Ra2| Ra3| Ra4| Ra5| Ra6| Ra7| Ra8 | Ra9| | | | | | |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Ax| | cF1| cF2| cF3| cF4| cF5| cF6| cF7| cF8 | cF9| cF10| cF11|cF12|cF13|cF14|cF15|
| | cK0| cK1| cK2| cK3| cK4| cK5| cK6| cK7| cK8 | cK9| cK* | cK+ |cK= |cK- |cK. |cK/ |
| |LRa0|LRa1|LRa2|LRa3|LRa4|LRa5|LRa6|LRa7|LRa8 |LRa9| | | | | | |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Bx| | | | | | | | | | | | | | | | |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Cx| | | | | | | Ins| Del| Home| End| PgDn| PgUp| <- | -> | Dn | Up |
| | | | | | | | | | | cI | | | cH | cU | cJ | cK |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Dx| | | | | | |sIns|sDel|sHome|sEnd|sPgDn|sPgUp| s<-| s->| sDn| sUp|
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Ex| | | | | | |cIns|cDel|cHome|cEnd|cPgDn|cPgUp| c<-| c->| cDn| cUp|
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
|Fx| | | | | | | | | | | | | | | | |
+--+----+----+----+----+----+----+----+----+-----+----+-----+-----+----+----+----+----+
With TAB set to &09 with *FX219,9 and keypad base set to &80 with *FX238,128.
s=shift, c=ctrl, a=apple, La=left apple, Ra=right apple, LRa=both apple.
Applecorn BBC MOS keyboard API calls
====================================
OSBYTE 4 (237) - Cursor keys: 0:editing, 1:&88-&8A, 2:topbit &xC-&xF with ctrl+shift
OSBYTE 126 - Acknowledge Escape: effects set by OSBYTE 230 will be actioned
OSBYTE 200 - Break/Escape response: b0=ignore Escape entirely, b1=clear memory on RESET
OSBYTE 202 - Keyboard state: b5=ctrl, b4=shift at last keypress (may change)
OSBYTE 219 - TAB character: character for TAB key to return
OSBYTE 220 - ESC character: character to match as Escape key
OSBYTE 221-228 - Top-set interpretation: 0:ignore, 1:soft key, 2:key base
OSBYTE 229 - Escape enable: 0:Escape key, <>0:return character
OSBYTE 230 - Escape effects: 0:Escape closes and flushes, <>0 no Escape effects
OSBYTE 238 - Keypad base: character to add to keypad key offset
OSBYTE 254 - Keyboard map: <&C0:map that matches OSBYTE 0, &C0+n:semi-regular map
Applecorn BBC MOS character read API calls
==========================================
OSBYTE 176 - VSync counter for flashing cursor
OSBYTE 198 - *EXEC handle
OSBYTE 199 - *SPOOL handle
OSBYTE 216 - Length of current soft key
OSBYTE 233 - Offset to current soft key
OSBYTE 244 - Soft keys not unstable
OSBYTE 128,255 - Return XY<>0 if keypresses pending
OSBYTE 128,127 - Return raw low-level keycode

1
docs/x Normal file
View File

@ -0,0 +1 @@
x