Selykreg, не совсем понятно что ты хочешь сделать, сформулируй вопрос нормально.
Да, прошу прощения, ввёл в заблуждение...
Selykreg,Код, который у тебя на скрине, выполняется лишь 1 раз перед началом игры. Если ты хочешь туда присунуть условие на кнопку, то в лучшем случае у тебя получится что-то типа "если я удерживаю кнопку select перед началом игры, мне дается ?? жизней вместо 3х".
...вы поняли всё правильно, это я не разобрался сам в своей ситуации. Хотел использовать данный участок кода, чтобы добавлять жизнь во время игры, конечно. Не знал, что данная инструкция грузит/пишет жизни только при загрузке ( уже прояснили мне ситуацию, амбициозному и нетерпеливому
)
Selykreg,Если в коде нет никаких условий, он выполняет команды сверху вниз
Ах, вот оно что! Вот оно и условие, косвенное - запустился ром, инструкция автоматически сработала, жизни загрузились, верно?
Кстати, вчера посмотрел внимательнее - в учебнике Кая есть пояснение команд сравнения, это я не понял, что для чего, вот и не внял данного урока. Вот только жаль, что в учебнике нет примера с кнопкой
Cyneprepou4uk, что-то мне подсказывает, что Вы автор учебника - в VK в группе ромхакинга такая же аватара у пользователя Кай
Если я правильно понял, то в ячейку 0006 пишется нажатие кнопок джойстика.
После команды CMP процессор установит флаги регистра, далее следующая команда тебе и скажет куда двигаться далее в зависимости от значения регистра.
Как правило дальше скорее всего будет стоять BEQ (F0) или BNE (D0) которое тебе укажет по какому адресу выполнять дальнейшую инструкцию в случае совпадения условия. Если же условие не совпадает, то процессор продолжит исполнять инструкции идущие дальше после условия.
Да, именно так. Вчера битый час экспериментировал и пытался осуществить задуманное с select, опять же в Танчиках, а также Ninja gaiden III. Сейчас составлю инструкцию заново, так как после очередной неудачи ничего не сохранил и не отскринил🙊
PS Ребята, спасибо вам огромное, что помогаете разобраться🖖
Добавлено позже:Простой пример:
LDA адрес с кнопками
CMP кнопка select
BEQ переход при равенстве (то есть если нажата select)
Если неравенство (если select не нажата), то перехода не будет, и код продолжит выполнять следующую команду по списку.
LDA адрес с кнопками
AND кнопка select
BEQ если кнопка НЕ нажата (если проверяемый бит = 0)
далее идет какой-то код если кнопка нажата
Прописал инструкцию, но в игре при нажатии ничего не происходит, бряк активен, но ничего
Пробовал комбинации с командами CPX, AND, флагами BNE и BEQ.
Предположим у тебя в $0006 хранится значение 04
Далее ты выполняешь команду СМР сравнивая со значением 04, команда СМР выставит флаг регистра Z=1 по скольку значения равны.
Потом выполняем команду BEQ (Если флаг регистра Z=1, то) в данном случае Z у нас имеет значение 1, то процессор выполнит инструкцию прыжка на адрес указанный в команде BEQ. BEQ же у нас указывает на сколько адресов нужно сместиться вперёд (F0 00-7F) либо назад (F0 80-FF), собственно куда указал BEQ на том адресе процессор и продолжит выполнять инструкции.
По логике всё должно работать, но код мёртвый❌
A5 06 загрузка из адреса, в котором при нажатии select байт=4
C9 04 сравниваем с байт=4
D0 00 Z не равно 0, выполняем инструкцию ниже
A9 0A грузим 10 жизней в стек
85 51 записываем эти жизни в адрес 0051
Почему условие не выполняется, что же я делаю не так⁉️ 😰😩