| |
Testicle Account closed
Registered: Sep 2002 Posts: 131 |
cursor-control.
well, for a diskmag-system i want the user to be able to use both joystick and/or cursor-keys to choose chapters.
joystick is no problem, but then i tried to implement the cursor-function:
.keyboard lda $c5
cmp #7
beq .leftright
cmp #2
beq .updown
cmp #1
beq .jfire
rts
.leftright lda $028d
and #1
bne .jleft
jmp .jright
.updown lda $028d
and #1
bne .jup
jmp .jdown
first i used this function during the irq, but it didn't work. now i use this function beside my irq-routines, but nothing happens.
do i have to set special registers to get access to the cursor-keys or something like that?!?
|
|
... 18 posts hidden. Click here to view all posts.... |
| |
Fresh
Registered: Jan 2005 Posts: 101 |
For sure not the most accurate and possibly fast implementation, but it's a bit more reliable than C64 kernal version.
Moreover, I'm far to be a CIA guru, but I'm with ninja: I'm not sure you can 100% avoid joy1/keyboard collisions.
But I'd love to be proved wrong! :)
Here's the code, part of my 1541U2 Mod Player: routine GetKeyJoy, (set GKJtemp to any free location).
https://bitbucket.org/freshness79/mod-player/src/master/keyboar.. |
| |
Krill
Registered: Apr 2002 Posts: 3070 |
Quoting FreshI'm with ninja: I'm not sure you can 100% avoid joy1/keyboard collisions. If simultaneous JOY1 and keyboard input isn't required, then i guess this can be done.
$DC00 (output) selects keyboard matrix column, then $DC01 (input, also JOY1) reflects pressed keys in the bits corresponding with the keybard matrix row.
Now, if no column is selected ($DC00 set to $ff) and $DC01 reads $ff, then JOY1 isn't active.
Do the required keyboard scans, then re-check if JOY1 still isn't active. Use the scanned keys if so, discard if JOY1 was active.
Oh, and you can also scan keys on the top 3 matrix rows without having to worry about JOY1 interference, as it isn't connected to bits 7..5 of $DC01. =) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11499 |
You can also do more fun stuff by scanning the keyboard in different ways than the standard way - see https://sourceforge.net/p/vice-emu/code/HEAD/tree/testprogs/CIA.. (this doesnt work very well in any emulator) |
| |
Fresh
Registered: Jan 2005 Posts: 101 |
Quoting KrillIf simultaneous JOY1 and keyboard input isn't required, then i guess this can be done.
$DC00 (output) selects keyboard matrix column, then $DC01 (input, also JOY1) reflects pressed keys in the bits corresponding with the keybard matrix row.
Now, if no column is selected ($DC00 set to $ff) and $DC01 reads $ff, then JOY1 isn't active.
Do the required keyboard scans, then re-check if JOY1 still isn't active. Use the scanned keys if so, discard if JOY1 was active.
That's exactly the approach I used in the code I linked in my previous post: I read CIA 1 port B before and after checking keyboard, if both reads are $ff I can consider reliable the keyboard data.
This indeed works but if you use both keyboard and joystick simultaneously, only the status of the latter will be read.
Yes, you can scan a limited number of rows but again, it won't be the 100% I mentioned before either. |
| |
Krill
Registered: Apr 2002 Posts: 3070 |
Yes yes, the disclaimers remain valid.
Quoting FreshThat's exactly the approach I used in the code I linked in my previous post Which... wasn't quite so obvious from the barely-commented code, to be honest. =) So apologies for stating in prose what your code does in... code. :D |
| |
Fresh
Registered: Jan 2005 Posts: 101 |
Quoting KrillWhich... wasn't quite so obvious from the barely-commented code, to be honest.
Ehm... Touchez :D |
| |
Frantic
Registered: Mar 2003 Posts: 1651 |
Quote: @digger: necro-poster of the year! Congrats! :)
For custom keyscan I recommend Codebase and TLR’s routine.
@Jackasser: What article do you refer to here? |
| |
JackAsser
Registered: Jun 2002 Posts: 2038 |
Quote: @Jackasser: What article do you refer to here?
TWW/CTR ffs. Sorry. :D https://codebase64.org/doku.php?id=base:scanning_the_keyboard_t.. |
| |
Oswald
Registered: Apr 2002 Posts: 5118 |
3 key rollover is an overkill in most cases. usually you need this for menus or simple navigation, not for a text editor for fast typers :) |
| |
JackAsser
Registered: Jun 2002 Posts: 2038 |
Quote: 3 key rollover is an overkill in most cases. usually you need this for menus or simple navigation, not for a text editor for fast typers :)
Indeed. I use that routine in EotB but extended to support c128 keyboard also. |
Previous - 1 | 2 | 3 - Next |