# The Key Manager

&BB00 | KM INITIALISE
Action | Initialises the Key Manager and sets up everything as it is when the computer is first switched on; the key buffer is emptied, Shift and Caps lock are tumed off amd all the expansion and translation tables are reset to normal; also see the routine KM RESET below
Entry | No entry conditions
Exit | AF, BC, DE and HL corrupt, and all other registers are preserved
&BB03 | KM RESET
Action | Resets the Key Manager; the key buffer is emptied and all current keys/characters are ignored
Entry | No entry conditions
Exit | AF, BC, DE and HL are corrupt and all other registers are preserved
Notes | See also KM INITIALISE above. On the 664 or 6128, the key buffer can also be cleared separately by calling the KM FLUSH routine
&BB06 | KM WAIT CHAR
Action | Waits for the next character from the keyboard buffer
Entry | No entry conditions
Exit | Carry is true, A holds the character value, the other flags are corrupt, and all other registers are preserved
&BB09 | KM READ CHAR
Action | Tests to see if a character is available from the keyboard buffer, but doesn't wait for one to become available
Entry | No entry conditions
Exit | If a character was available, then Carry is true, and A contains the character; otherwise Carry is false, and A is corrupt; in both cases, the other registers are preserved
&BB0C | KM CHAR RETURN
Action | Saves a character for the next use of KM WAIT CHAR or KM READ CHAR
Entry | A contains the ASCII code of the character to be put back
Exit | All registers are preserved
&BB0F | KM SET EXPAND
Action | Assigns a string to a key code
Entry | B holds the key code; C holds the length of the string; HL contains the address of the string (must be in RAM)
Exit | If it is OK, then Carry is true; otherwise Carry is false; in either case, A, BC, DE and HL are corrupt, and all other registers rlre preserved
&BB12 | KM GET EXPAND
Action | Reads a character from an expanded string of characters
Entry | A holds an expansion token (ie a key code) and L holds the character position number (starts from 0)
Exit | If it is OK, then Carry is true, and A holds the character; otherwise Carry is false, and A is corrupt; in either case, DE and flags are corrupt, and the other registers are preserved
&BB15 | KM EXP BUFFER
Action | Sets aside a buffer area for character expansion strings
Entry | DE holds the address of the buffer and HL holds the length of the buffer
Exit | If it is OK, then Carry is true; otherwise Carry is false; in either case, A, BC, DE and HL are corrupt
Notes | The buffer must be in the central 32K of RAM and must be at least 49 bytes long
&BB18 | KM WAIT KEY
Action | Waits for a key to be pressed - this routine does not expand any expansion tokens
Entry | No entry conditions
Exit | Carry is true, A holds the character or expansion token, and all other registers are preserved
&BB1B | KM READ KEY
Action | Tests whether a key is available from the keyboard
Entry | No entry conditions
Exit | If a key is available, then Carry is true, and A contains the character; otherwise Carry is false, and A is corrupt; in either case, the other registers are preserved
Notes | Any expansion tokens are not expanded
&BB1E | KM TEST KEY
Action | Tests if a particular key (or joystick direction or button) is pressed
Entry | A contains the key/joystick nurnber
Exit | If the requested key is pressed, then Zero is false; otherwise Zero is true for both, Carry is false A and HL are corrupt. C holds the Sbift and Control status and others are preserved
Notes | After calling this, C will hold the state of shift and control - if bit 7 is set then Control was pressed, and if bit 5 is set then Shift was pressed
&BB21 | KM GET STATE
Action | Gets the state of the Shift and Caps locks
Entry | No entry conditions
Exit | If L holds &FF then the shift lock is on, but if L holds &00 then the Shift lock is off; if H holds &FF then the caps lock is on, and if H holds &00 then the Caps lock is off; whatever the outcome, all the other registers are preserved
&BB24 | KM GET JOYSTICK
Action | Reads the present state of any joysticks attached
Entry | No entry conditions
Exit | H and A contains the state of joystick 0, L holds that state of joystick 1, and all others are preserved
Notes | The joystick states are bit significant and are as followsBit 0 - Up Bit1 - Down Bit2 - Left Bit3 - Right Bit4 - Fire2 Bit5 - Fire1 Bit6 - Spare Bit7 - Always zeroThe bits are set when the corresponding buttons or directions are operated
&BB27 | KM SET TRANSLATE
Action | Sets the token or character that is assigned to a key when neither Shift nor Control are pressed
Entry | A contains the key number and B contains the new token or character
Exit | AF and HL are corrupt, and all other registers are preserved
Notes | Special values for B are as follows&80 to &9F - these values correspond to the expansion tokens&FD - this causes the caps lock to toggle on and off&FE - this causes the shift lock to toggle on and off&FF - causes this key to be ignored
&BB2A | KM GET TRANSLATE
Action | Finds out what token or character will be assigned to a key when neither Shift nor Control are pressed
Entry | A contains the key number
Exit | A contains the token/character that is assigned, HL and flags are corrupt, and all others are preserved
Notes | See KM SET TRANSLATE for special values that can be returned
&BB2D | KM SET SHIFT
Action | Sets the token or character that will be assigned to a key when Shift is pressed as well
Entry | A contains the key number and B contains the new token or character
Exit | AF and HL are corrupt, and all others are preserved
Notes | See KM SET TRANSLATE for special values that can be set
&BB30 | KM GET SHIFT
Action | Finds out what token/character will be assigned to a key when Shift is pressed as well
Entry | A contains the key number
Exit | A contains the token/character that is assigned, HL and flags are corrupt, and all others are preserved
Notes | See KM SET TRANSLATE for special values that can be returned
&BB33 | KM SET CONTROL
Action | Sets the token or character that will be assigned to a key when Control is pressed as well
Entry | A contains the key number and B contains the new token/character
Exit | AF and HL are corrupt, and all others are preserved
Notes | See KM SET TRANSLATE for special values that can be set
&BB36 | KM GET CONTROL
Action | Finds out what token or character will be assigned to a key when Control is pressed as well
Entry | A contains the key number
Exit | A contains the token/character that is assigned, HL and flags are corrupt and all others are preserved
Notes | See KM SET TRANSLATE for special values that can be set
&BB39 | KM SET REPEAT
Action | Sets whether a key may repeat or not
Entry | A contains the key number B contains &00 if there is no repeat and &FF is it is to repeat
Exit | AF, BC and HL are corrupt, and all others are preserved
&BB3C | KM GET REPEAT
Action | Finds out whether a key is set to repeat or not
Entry | A contains a key number
Exit | If the key repeats, then Zero is false; if the key does not repeat, then Zero is true; in either case, A, HL and flags are corrupt, Carry is false, and all other registers are preserved
&BB3F | KM SET DELAY
Action | Sets the time that elapses before the first repeat, and also set the repeat speed
Entry | H contains the time before the first repeat, and L holds the time between repeats (repeat speed)
Exit | AF is corrupt, and all others are preserved
Notes | The values for the times are given in 1/5Oth seconds, and a value of 0 counts as 256
&BB42 | KM GET DELAY
Action | Finds out the time that elapses before the first repeat and also the repeat speed
Entry | No entry conditions
Exit | H contains the time before the first repeat, and L holds the time between repeats, and all others are preserved
&BB45 | KM ARM BREAK
Action | Arms the Break mechanism
Entry | DE holds the address of the Break handling routine, C holds the ROM select address for this routine
Exit | AF, BC, DE and HL are corrupt, and all the other registers are preserved
&BB48 | KM DISARM BREAK
Action | Disables the Break mechanism
Entry | No entry conditions
Exit | AF and HL are corrupt, and all the other registers are preserved
&BB4B | KM BREAK EVENT
Action | Generates a Break interrupt if a Break routine has been specified by KM ARM BREAK
Entry | No entry conditions
Exit | AF and HL are corrupt, and all other registers are preserved