Login
Back to forumReply to this topicGo to last reply

Posted By

Hendriks
on 2020-08-20
10:42:51
 Help needed with keyboard matrix in assembly

Hi there, after more than three decades I'm back fiddling in assembly on my favorite Plus/4 machine.

I am using the following code to verify if the user presses the LEFT arrow on the keyboard. It works, when the key is pressed the memory location currChar is decreased. The code is in my main loop (not in an interrupt or something).

The issue is that it fires rapidly and continuously when the key is pressed down. I want it to happen only once until the key goes back up again. Is there a way to wait until the key goes back up again or until a certain time has passed (if the key keeps being pressed)? How do you solve this issue?

LDA #$BF ; Check column 6
STA $FD30 ; Write to Keyboard Matrix
STA $FF08 ; Write to Keyboard Latch
LDA $FF08 ; Read from Keyboard Latch
AND #$01 ; Query keyboard for "LEFT"
BNE LEFT_not_pressed
DEC currChar ; What happens when LEFT is pressed
LEFT_not_pressed
RTS

Thanks!

Posted By

gerliczer
on 2020-08-20
12:17:20
 Re: Help needed with keyboard matrix in assembly

You should define a flag that holds the state of key left being depressed or not. If it is clear check for left being pressed like you did in your code, but instead of the action set the flag. If the flag is set check for left being released, which is the opposite condition of your code, then do your action and clear the flag.

Posted By

Hendriks
on 2020-08-20
12:58:43
 Re: Help needed with keyboard matrix in assembly

Thanks for pointing me in the right direction. I did the check for the key release before, but it didn't work. I will try with setting a flag.

Posted By

Hendriks
on 2020-08-20
13:09:18
 Re: Help needed with keyboard matrix in assembly

Yes, it works now. Thanks!



Back to topReply to this topic


Copyright © Plus/4 World Team, 2001-2024