Как стать автором
Обновить

Комментарии 2

В вашей реализации последовательного чтения порта и перехода по первому срабатыванию к выполнению отрисовки не будут обрабатываться совместные нажатия нескольких кнопок контроллера. Для этих целей обычно применяют буфер, в который побитно складывают все показания клавиш, а затем работают уже с этим буфером.
Например так:
LDX #$00 ; номер контроллера 00 - первый, 01 - второй
LDA #$01
STA $4016
LDA #$00
STA $4016
LDY #$08 ; счетчик для цикла
Cycle_start:
LDA $4016,X
LSR
ROR $14,X
DEY
BNE Cycle_start

После выполнения этого кода в ячейке $14 будет записано состояние всех кнопок первого контроллера побитно:
12345678
1 - вправо
2 - влево
3 - вниз
4 - вверх
5 - Start
6 - Select
7 - B
8 - A

И уже на основании этого значения можно организовать перемещение персонажа по диагонали (или пригнувшись) и прыжки во время движения.

По поводу zeropage.
Вообще под переменные можно использовать любое место в RAM, но для zeropage есть отдельный набор команд, который позволяет экономить место под код, так как здесь команды короче на один байт.
Да именно, одновременные нажатия сочетаний кнопок код предоставленный в статье не обработает, тут я специально сделал, для большей прозрачности, что бы показать сам принцип, что последовательно происходит чтение порта $4016.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории