I want to compare keystrokes in assembly (CCS64). If I type in the same key in a row I want to do something example: A A = do this
but if I type this: A B = do something else
Suggestions?
I'm not a C64 person but I know 6502 assembly. You need to know two things to achieve your goal. The first is to learn 6502 assembly language if you don't already know about it. This page has excellent resources for example.
The second is to learn about C64 architecture and OS. It's called Kernal in Commodore speak, a quick google should point you in the right direction.
But there is an alternative. You can always use cc65, an excellent freeware package consisting of an almost-ISO-complient C compiler, a 6502 assembler, a linker and couple of other 6502 related tools. It has support for every popular 6502 platform including Atari 8-bit, Apple II and, of course, Commodore 64. It has a good amount of documentation and the people in the mailing list are nice and helpful. As a hint, keyboard entry and screen output functions are defined in conio.h.
I prepared an example to you just like you've wanted. If you press same keys in a row twice, border color changes to red, otherwise stays black.
Warning! This example uses
kernal
routines. There is nothing wrong with that. But there is also a lower level way to do this without using$ffd2
(Output Vector, chrout) and$ffe4
(Get From Keyboad) kernal calls. But since it is much more complicated to understand, I prefered this example.If you want to know what is happening behind the scenes (kernal calls), you can easily trace the kernal ROM codes from
AAY64
documentation. Here is the links:Main AAY Page: http://www.the-dreams.de/aay.html
AAY64 Online HTML Version: http://unusedino.de/ec64/technical/aay/c64/
Kernal ROM Listing: http://unusedino.de/ec64/technical/aay/c64/krnromma.htm
$ffd2
(Output Vector, chrout): http://unusedino.de/ec64/technical/aay/c64/romffd2.htm$ffe4
(Get From Keyboad): http://unusedino.de/ec64/technical/aay/c64/romffe4.htmYou can browse deeper by pressing links on the opcodes and addresses.
Here goes the example code. You can compile this code using
ACME Crossassembler
which you can find here -> http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/