4

我想比较汇编中的击键(CCS64)。如果我连续输入相同的键,我想做一些事情例如:A A= 这样做

但是如果我输入这个:A B=做其他事情

建议?

4

2 回答 2

9

我为你准备了一个你想要的例子。如果连续按相同的键两次,边框颜色变为红色,否则保持黑色。

警告!此示例使用kernal例程。没有什么不妥。但是还有一种较低级别的方法可以在不使用$ffd2(Output Vector, chrout) 和$ffe4(Get From Keyboad) 内核调用的情况下执行此操作。但由于理解起来要复杂得多,我更喜欢这个例子。

如果您想知道幕后发生的事情(内核调用),您可以轻松地从AAY64文档中跟踪内核 ROM 代码。这是链接:

AAY 主页:http ://www.the-dreams.de/aay.html

AAY64 在线 HTML 版本:http ://unusedino.de/ec64/technical/aay/c64/

内核 ROM 列表:http ://unusedino.de/ec64/technical/aay/c64/krnromma.htm

$ffd2(输出向量,chrout):http ://unusedino.de/ec64/technical/aay/c64/romffd2.htm

$ffe4(从键盘获取): http ://unusedino.de/ec64/technical/aay/c64/romffe4.htm

您可以通过按操作码和地址上的链接进行更深入的浏览。

这是示例代码。您可以使用您可以在此处找到的代码编译此代码ACME Crossassembler-> http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/

        !to "keycomp.prg",cbm

        zpBuffer = $fa  ; $fa-$fb are reserved for 2 bytes of key buffer

        * = $0801
        !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

        * = $080d

        ; key buffer initialization
        ldx #$f0        ; initialize key buffer
        stx zpBuffer    ; with two different
        inx             ; values to avoid instant
        stx zpBuffer+1  ; match at the beginning

        ; border color initialization
        lda #$00        ; set startup border color to black
        sta $d020       ; which means "no match"

        ; main loop
mainloop
        lda zpBuffer    ; shift key buffer
        sta zpBuffer+1  ; by one
readKey
        jsr $ffe4       ; read key
        beq readKey     ; if no key pressed loop forever
        jsr $ffd2       ; show key on the screen
        sta zpBuffer    ; store the key to key buffer

        lda zpBuffer    ; compare the last stored key
        cmp zpBuffer+1  ; with the old key value
        beq cmpMatch    ; if there is a match jmp to cmpMatch

        lda #$00        ; if two pressed keys are different
        sta $d020       ; change border color to black

        jmp cmpOut      ; skip the other condition code block
cmpMatch
        lda #$02        ; if there is a repeated key
        sta $d020       ; change border color to red
cmpOut
        jmp mainloop    ; wait for the next key
于 2011-11-25T08:07:58.727 回答
3

我不是 C64 人,但我知道 6502 组件。你需要知道两件事来实现你的目标。首先是学习 6502 汇编语言,如果你还不知道的话。例如,此页面具有出色的资源。

二是了解C64架构和操作系统。它在 Commodore 中被称为Kernal,快速的 google 应该会为您指明正确的方向。

但有一个替代方案。您始终可以使用cc65,这是一个优秀的免费软件包,包含一个几乎符合 ISO 标准的 C 编译器、一个 6502 汇编器、一个链接器和几个其他 6502 相关工具。它支持所有流行的 6502 平台,包括 Atari 8 位、Apple II,当然还有 Commodore 64。它有大量的文档,而且邮件列表中的人都很友善且乐于助人。作为提示,键盘输入和屏幕输出功能在conio.h中定义。

于 2011-11-07T10:50:28.263 回答