[A83] Re: Repetative keys.


[Prev][Next][Index][Thread]

[A83] Re: Repetative keys.




> Yeah,=20
> I 've thought of using direct input, but the disadvantage 
is that
> it would require quite a deal of code.
> 
Wrong. Unless you consider 20 lines a great deal. Here's a 
nice solution for you.

http://www.extra.hu/cobb/input.inc

How to use?

Simply call ReadKeyboard which fills the array at 
KeyPressed.

To verify a key (an example):

call ReadKeyboard         ; filling the array
ld a,(KeyPressed+1)       ; choosing the appropriate byte
and 64                    ; selecting the bit (bit 6)
jr z,Clear_is_being_pressed

You can also use this to handle multiple keypresses:

call ReadKeyboard         ; filling the array
ld a,(KeyPressed)
and 1                     ; bit 0
call z,Press_Down
ld a,(KeyPressed)
and 8                     ; bit 3
call z,Press_Up
ld a,(KeyPressed)
and 2                     ; bit 1
call z,Press_Left
ld a,(KeyPressed)
and 4                     ; bit 2
call z,Press_Right

In this case, all the Press_XXX subroutines will be called 
whose arrow was pressed. Note that the subroutines should 
not use ReadKeyboard, although it wouldn't cause much 
problem.

If you want non-repetitive keys with direct input:

call ReadKeyboard
call ValidateKeys
ld a,(ValidKey+1)         ; choosing the appropriate byte
and 64                    ; selecting the bit (bit 6)
jr z,Clear_was_once_pressed

note that you have to use ValidKey instead of KeyPressed; 
you can still use KeyPressed for repetitions.

if you put this in a loop like:

MAINLOOP:
call ReadKeyboard
call ValidateKeys

; ... doing the checks and calling the subroutines

jp MAINLOOP

you have to release the keys to be able to detect the next 
keypress in the ValidKey table.

PG



References: