2015-10-19 2 views
1

В настоящее время я работаю над (6502) сборочными играми NES, но я не понимаю, как сделать спрайт move.Heres, как я думаю, что его предполагается работа: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. Так что я немного потерял это. Должен ли я использовать STA вместо LDA? Но я хочу использовать содержимое адреса $ 200 и не размещать значение, которое я выбираю в нем. Я не понимаю, как сделать мой спрайт.

Спасибо!

+0

Увеличение регистра означает его добавление. Нет инструкции инкремента A, но есть команда add в A. Вы также можете использовать регистры X или Y, для которых есть инструкции по увеличению. –

+0

Вы можете * INC * указать адрес памяти непосредственно, например. 'INC $ 0200.' – LawrenceC

ответ

4

На самом деле нет версии INA по варианту 6502, используемому в РЭШ. Вы можете увеличивать A на 1, используя следующую пару инструкций:

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

Или, если любой из регистров индекса свободны вы можете использовать:

LDX $200 ; or LDY 
INX  ; or INY 

Имейте в виду, однако, что другой арифметические операции, такие как ADC, SBC, LSR и т. д. не могут быть выполнены на X или Y.

2

Если графический чип ищет позицию спрайта в $ 200, вам необходимо будет записать измененное значение после его вычисления. Если все, что вы хотите сделать, это увеличить его, вы можете сделать это напрямую, используя абсолютный режим адресации INC:

INC $200 

увеличит любое значение хранится в $ 200, без изменения каких-либо значений регистров.

+0

ну, я хочу, чтобы мой спрайт перемещался, так что да, мне нужно его изменить/записать в регистр, чтобы он двигался (я об этом не думал). Не совсем уверен, как это сделать ? спасибо –

+0

Если вы используете 'INC $ 200', это происходит на месте: текущее значение $ 200 читается, а еще один (mod 256) записывается обратно в $ 200, так что вы закончили. Если вы загрузите его в A, то после его изменения вы должны записать его обратно до 200 долларов США, используя «STA», поэтому ваш код будет: 'LDA $ 200; вычислить новое значение в A; STA $ 200'. – Cactus

+0

Спасибо за ваш ответ. Я не знаю, что случилось. Я пробовал это и все еще ничего не двигается. Позиция спрайта Y всегда написана на адресе $ 200 правильно? Я не понимаю, почему он не увеличивает его и не заставляет его двигаться. Я пишу код в разделе «NMI:» –

 Смежные вопросы

  • Нет связанных вопросов^_^