Как использовать предопределенную константу в качестве адреса памяти? - PullRequest
1 голос
/ 22 июня 2019

У меня есть игра NES.Я определяю несколько констант, чтобы помочь мне в управлении спрайтами.У меня есть

spriteyposition = $0200
spritetile = $0201
spriteattribute = $0202
spritexposition = $0203
sprite1 = $00
sprite2 = $04
sprite3 = $08
sprite4 = $0c
sprite5 = $10
sprite6 = $14
sprite7 = $18
sprite8 = $1c

Мой пример использования следующий:

Я хочу изменить позицию y спрайта 1

Я делаю:

ldx sprite1
lda spriteyposition, x
adc #$8
sta spriteyposition, x

В моем сценарии использования spriteyposition должен быть указателем на память, но у меня есть ощущение, что ассемблер рассматривает его как обычное число

Как я называю spriteyposition адресом памяти, а не числом?

1 Ответ

4 голосов
/ 23 июня 2019

В моем случае использования spriteyposition должен быть указателем памяти, но у меня есть ощущение, что ассемблер рассматривает его как обычное число

Ваше чувство неверно. Этот код собирается в нужный код операции BD (LDA ABS,x) - режим адресации IMM,x отсутствует.

Что неверно, это

ldx sprite1

sprite1 определяется как $00, так что это завершается загрузкой X со значением адреса $0000. То, что вы хотите, это ldx #sprite1.

...