Depois vendo o post novamente me dei conta que você não quer usar inkey$, pois não da para usar duas teclas ao mesmo tempo, analisando usa rotina é muito boa, então resolvi adaptar para meu game
Consegui fazer funcionar, essa sua rotina complica pois ao apertar uma tecla ela tende a fazer muitas contagens no loop, dando chamada de função inválida por facilmente ultrapassar os limites da contagem, uma solução é usar o _LIMIT depois usar um desvio no loop para contar numero por numero, bom deixo uma rotina básica, para alguém que esteja a procura disso.
CONST KL = 75
CONST KR = 77
CONST KU = 72
CONST KD = 80
CONST KCL = &H40 'LEFT
CONST KCR = &HA 'RIGHT
CONST KCU = &H4 'UP
CONST KCD = &H1 'DOWN
scrennn% = 1000
'------------- velocit= items, velocit2 = square
velocit% = 12
velocit2% = 20
PALETTE 0, 0
' -------------------------------- Creating items
' -------------------------------- Creating test item
Test$ = STRING$(2, CHR$(1))
Xtest% = 5
YTest% = 5
' -------------------------------- Defining square location
a% = 41
b% = 22
' ------------------------------ start
start:
IF countmove% = velocit2% THEN
IF T = KCL THEN a% = a% - 1
IF T = KCR THEN a% = a% + 1
IF T = KCD THEN b% = b% + 1
IF T = KCU THEN b% = b% - 1
IF T = KCD + KCR THEN a% = a% + 1
IF T = KCD + KCL THEN a% = a% - 1
IF T = KCU + KCR THEN a% = a% + 1
IF T = KCU + KCL THEN a% = a% - 1
END IF
IF scrennn% = 1000 THEN GOTO home
' -------------------------------- home screen
home:
CLS
IF a% = 3 THEN a% = a% + 1
IF a% = 79 THEN a% = a% - 1
IF b% = 25 THEN b% = b% - 1
IF b% = 1 THEN b% = b% + 1
COLOR 1, 7
FOR i% = 1 TO 24
LOCATE i%, 1
PRINT STRING$(2, CHR$(219));
NEXT i%
FOR i% = 1 TO 24
LOCATE i%, 79
PRINT STRING$(2, CHR$(219));
NEXT i%
LOCATE 1, 1
PRINT STRING$(80, CHR$(219));
LOCATE 25, 1
PRINT STRING$(80, CHR$(219));
GOTO items
' ----------------------------------------items instructions
items:
' ---------------------------------------- show items
' ---------------------------------------- Square item
COLOR 1, 7
LOCATE b%, a%
PRINT STRING$(1, CHR$(219));
LOCATE b%, a% - 1
PRINT STRING$(1, CHR$(219));
' ---------------------------------------- Test item
COLOR 0, 7
LOCATE YTest%, Xtest%
PRINT Test$;
GOTO keyloop
' ---------------------------------------------------------------------Movement of objects
move:
Xtest% = Xtest% + 1
IF Xtest% = 77 THEN Xtest% = 2
GOTO start
keyloop:
' -------------------------------------------------------------------------------------- loop keyboard
IF countmove% = velocit2% THEN
countmove% = 0
IF T = KCD + KCR THEN b% = b% + 1: GOTO start
IF T = KCD + KCL THEN b% = b% + 1: GOTO start
IF T = KCU + KCR THEN b% = b% - 1: GOTO start
IF T = KCU + KCL THEN b% = b% - 1: GOTO start
END IF
DO
countmove% = countmove% + 1
IF countmove% = velocit% GOTO move
IF countmove% = velocit2% GOTO start
_LIMIT 900
K = INP(&H60)
IF K = KL THEN
T = T OR KCL
ELSEIF K = (KL + 128) THEN
T = T AND NOT KCL
END IF
SELECT CASE K
CASE 1: END
CASE KL: T = T OR KCL
CASE KL + 128: T = T AND NOT KCL
CASE KR: T = T OR KCR
CASE KR + 128: T = T AND NOT KCR
CASE KU: T = T OR KCU
CASE KU + 128: T = T AND NOT KCU
CASE KD: T = T OR KCD
CASE KD + 128: T = T AND NOT KCD
END SELECT
LOOP