Комментарии 2
В вашей реализации последовательного чтения порта и перехода по первому срабатыванию к выполнению отрисовки не будут обрабатываться совместные нажатия нескольких кнопок контроллера. Для этих целей обычно применяют буфер, в который побитно складывают все показания клавиш, а затем работают уже с этим буфером.
Например так:
После выполнения этого кода в ячейке $14 будет записано состояние всех кнопок первого контроллера побитно:
И уже на основании этого значения можно организовать перемещение персонажа по диагонали (или пригнувшись) и прыжки во время движения.
По поводу zeropage.
Вообще под переменные можно использовать любое место в RAM, но для zeropage есть отдельный набор команд, который позволяет экономить место под код, так как здесь команды короче на один байт.
Например так:
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 есть отдельный набор команд, который позволяет экономить место под код, так как здесь команды короче на один байт.
+3
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Считывание контроллера nes (dendy) на ассемблере