NES(6502组件)精灵运动

问题描述 投票:2回答:3

我目前正在开发NES(6502)组装游戏,但我不了解如何进行精灵移动。在这里,我认为它应该起作用:

(loop)
LDA $200 ;will load into the A register the content of address $200,wich contain the Y postion of my sprite
INA ;Increment the A register wich would increment the content of A wich is the Y position of my sprite..?

但是您似乎无法增加A寄存器累加器的数量,因为在尝试使用INA指令进行汇编时出现错误。但是我想使用地址$ 200的内容,而不是在其中选择一个值。我不知道如何使子画面移动。

谢谢!

assembly sprite 6502 nes
3个回答
5
投票

NES中使用的6502确实没有可用的INA。您可以按照以下说明将A加1:

CLC     ; Clear carry
ADC #1  ; A = A + 1 + carry = A + 1

或者,如果任何一个索引寄存器都是空闲的,则可以使用:

LDX $200  ; or LDY
INX       ; or INY

但是请记住,ADCSBCLSR等其他算术运算无法在XY上执行。


3
投票

如果图形芯片在$ 200中寻找精灵位置,则需要在计算出修改后的值后写回。如果您只想增加它,则可以使用INC的绝对寻址模式直接完成它:

INC

将增加$ 200中存储的任何值,而不会更改任何寄存器值。


1
投票

请注意,通常游戏不会直接编辑精灵。更新Sprite位置的常用方法是先更新对象的位置,然后使用Sprite构造函数子例程将每个8x8 Sprite组装到相对于对象位置的正确位置。您可以有一个表格列出所有精灵。该列表指定了该精灵的图块和相对偏移,因此您可以将其添加到对象位置,以获取写入下一个空闲OAM插槽的精灵的位置。

© www.soinside.com 2019 - 2024. All rights reserved.