11

我在模拟 C64 机器上玩 asm 时遇到了一些问题。

我要做的是检查是否按下了键盘上的键“N”,然后程序应该等待地址 $D012 上出现更改。现在我不明白的是我如何“等待”改变出现?谁能告诉我这是怎么一回事?

检查键盘上的 N 按钮是否被按下很简单 - 只需使用子程序 FFE4(输入)和 FFD2(输出)。

我真的不要求为我做任何事情,但如果我能快速了解 D012 的工作原理以及如何“等待”更改,我将非常感激。

提前致谢!

4

2 回答 2

6

$d012包含当前栅格线。

如果你只需要等到寄存器发生变化,即等到下一个光栅线,你可以做简单的忙等待:

lda $d012 ;load the current raster line into the accumulator
cmp $d012 ;check if it has changed
beq *-3   ;if not, jump back and check again

编辑:

如果要等待几条光栅线,例如 3:

lda $d012
clc       ;make sure carry is clear
adc #$03  ;add lines to wait
cmp $d012
bne *-3   ;check *until* we're at the target raster line
于 2013-09-15T16:22:27.157 回答
3

$d012您可以使用光栅 IRQ 处理程序来响应更改。我将从我的游戏代码中加入一些细节,因为如果你使用了错误的咒语组合,让它工作起来会很麻烦。这也应该给你足够的东西来谷歌。

特别是,您可能希望$0314像代码中提到的那样安装 int 处理程序,在这种情况下,您的 IRQ 处理程序将与 commie 自己的默认处理程序链接,并且您需要pha ... pha在处理程序的开头跳过该位。如果您需要使用它的一些 I/O 代码,这将很有用。

;;; -----------------------------------------------------------------------------
;;; install raster interrupt handler
;;; -----------------------------------------------------------------------------

        sei                     ; turn off interrupts

        ldx #1                  ; enable raster interrupts
        stx $d01a

        lda #<int_handler       ; set raster interrupt vector
        ldx #>int_handler
        sta $fffe
        stx $ffff

        ldy #$f0                ; set scanline on which to trigger interrupt
        sty $d012
        lda $d011                ; scanline hi bit
        and #%01111111
        sta $d011

        lda #$35                ; disable kernal and BASIC memory ($e000 - $ffff)
        sta $01

        asl $d019               ; acknowledge VIC interrupts
        cli

loop_pro_semper
        jmp loop_pro_semper

然后你像这样处理这些中断:

;;; -----------------------------------------------------------------------------
;;; raster IRQ handler
;;; -----------------------------------------------------------------------------

int_handler

        pha                     ; needed if our raster int handler is set in fffe instead of 0314
        txa
        pha
        tya
        pha

                    ; ... do your stuff here ...
于 2013-09-15T11:43:19.307 回答