我想比较组装中的击键(CCS64)。
如果我连续输入相同的键,我想做点什么
例如:A A =执行此操作

但是如果我输入以下内容:A B =做其他事情

有什么建议吗?

最佳答案

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

警告!本示例使用kernal例程。没有什么不妥。但是,还有一种不使用$ffd2(输出向量,chrout)和$ffe4(从键盘输入)内核调用的较低级别的方法。但是由于要理解它要复杂得多,所以我更喜欢此示例。

如果您想了解幕后发生的事情(内核调用),则可以轻松地从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(输出向量,hrout):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

08-16 11:44