2

我是 C64 汇编程序编程的新手,我对保存和加载内存区域的过程有疑问。我担心以下问题:

lda #$01
sta $0400

将字母 A 放在屏幕的左上角

ldx #$00
lda #$01
sta $0400, x

有了这个,我可以使用 x 寄存器作为计数器,并且可以比较我使用循环的频率。

但现在我有一个 16 位计算(屏幕起始地址加上 xxx)并将结果存储在一个内存地址中,如 4000 美元和 4001 美元。如何使用这个值作为新的屏幕地址,在屏幕的计算区域上打印出字母 a?

4

1 回答 1

1

好的,现在我理解了(间接)的含义,Y 我的解决方案现在看起来像这样:

.var lines = $28       //40 characters
.var currentPos = $fd  //save screen address

calcLine:  
ldx #$05               //counter 5 backward
ldy #$00               //Sets carry to 0
lda #lines             //A=40 
asl                    //A=80 

calc:
clc 
adc #lines             //A=120 (or $78 in hex) 
bcc next               //If carry, then increase
iny

next:
dex
cpx #$00
bne calc
sta currentPos     //If carry, then increase 
sty currentPos+1   //Save value if carry

//add screen start address ($0400)
clc
lda currentPos+1
adc #$04
sta currentPos+1

lda #$42    //the sign

sta (currentPos),y 
于 2020-09-20T17:46:37.973 回答