| Разработка и ромхакинг > Ромхакинг и программирование |
| [ALL] Вопросы новичков |
| << < (4/8) > >> |
| Cyneprepou4uk:
--- Цитата: p4oeNix от 11 Август 2021, 23:21:00 ---[NES] Jackal 1988 --- Конец цитаты --- RayofJay как раз занимается этой игрой, можешь с ним перетереть. https://discord.gg/KTXkUzgMSs |
| p4oeNix:
--- Цитата: Cyneprepou4uk от 12 Август 2021, 05:04:33 ---RayofJay как раз занимается этой игрой, можешь с ним перетереть. https://discord.gg/KTXkUzgMSs --- Конец цитаты --- спасибо от души тебе человечище! я нереально счастлив, много лет думал об этом и тут момент пришел найти форум и написать на нем и тут как раз игра подоспела) лучший подарок! еще раз спасибищеее! |
| DrMefistO:
Rumata, вот что действительно не нужно было закреплять, так это темы, которые последний раз обновлялись в 2020-м году: Atari ST игры на Atari Jaguar Последний ответ 31 Декабрь 2020, 21:57:57 DOStoWIN Project - портирование DOS игр на Windows Последний ответ 30 Декабрь 2020, 03:46:45 |
| Еmsi-D:
--- Цитата: p4oeNix от 11 Август 2021, 23:21:00 ---есть такая игра [NES] Jackal 1988 на нее нет никаких хаков --- Конец цитаты --- На заморском ромхацкинге есть какие-то https://www.romhacking.net/games/2627/ |
| p4oeNix:
--- Цитата: Еmsi-D от 13 Август 2021, 10:59:45 ---На заморском ромхацкинге есть какие-то (Ссылка на вложение) https://www.romhacking.net/games/2627/ --- Конец цитаты --- спасибо добрый человек! теперь я научен и ищу сам все:) |
| Rumata:
--- Цитата: DrMefistO от 12 Август 2021, 13:45:11 ---Rumata, вот что действительно не нужно было закреплять --- Конец цитаты --- DrMefistO, а зачем ты мне об этом говоришь? o_0 У вас тут модераторов раздела аж три человека. Правда, никто из них нихрена не делает. Но это не мои проблемы :rofl: |
| DrMefistO:
--- Цитата: Rumata от 19 Август 2021, 02:09:27 ---DrMefistO, а зачем ты мне об этом говоришь? o_0 У вас тут модераторов раздела аж три человека. Правда, никто из них нихрена не делает. Но это не мои проблемы :rofl: --- Конец цитаты --- Думал, ты модер здесь:) Кто-то же закрепил местную тему. |
| Rumata:
--- Цитата: DrMefistO от 20 Август 2021, 16:27:00 ---Думал, ты модер здесь:) --- Конец цитаты --- Думать вредно. Достаточно просто читать. Тут три модератора. На сколько они функциональны - не ко мне. --- Цитата: DrMefistO от 20 Август 2021, 16:27:00 ---Кто-то же закрепил местную тему. --- Конец цитаты --- Я и закрепил. А что? Вроде я же об этом и сказал. А сейчас я типа в отпуске. И в общем-то на все местечковые проблемы мне насрать. Может вернусь. Может нет. Жизнь покажет |
| Selykreg:
Всем добра! В ромхакинге уже и не новичок и сделал довольно много хаков на тему 8 бит, но всё же есть вопрос по поводу команд 6502, а если быть точнее, то назначение действия при нажатии комбинаций (да что там, хотя бы на одну кнопку для началаo_0) кнопок.Если с записью, загрузкой, сравнением и вычитанием всё понятно,то как задать логическую команду "если - то"? С ромхакингом и структурой команд знакомился через учебник Кая по ромхакингу( автору огромное уважение за предоставление материала любителям) Часть материала доступна и понятна, но на тему кнопок сразу же предлагается "домашнее задание" без каких-либо примеров. Буду очень благодарен за наставление и объяснение на тех же самых "Танчиках"(архитектура игры и структура переноса данных по стекам логична и не замысловата, но...) Команда. Нажата кнопка select, то добавляем некое число байт попыток, например. Так понимаю, здесь имеет место быть команда сравнения CMP 🤔 |
| Cyneprepou4uk:
--- Цитата: Selykreg от 27 Ноябрь 2021, 12:55:11 ---как задать логическую команду "если - то"? --- Конец цитаты --- С помощью команд условного перехода: BEQ/BNE, BMI/BPL и другие. Простой пример: LDA адрес с кнопками CMP кнопка select BEQ переход при равенстве (то есть если нажата select) Если неравенство (если select не нажата), то перехода не будет, и код продолжит выполнять следующую команду по списку. Но отдельные кнопки лучше фильтровать через команду AND, так надежнее на случай если несколько кнопок нажаты одновременно. Логика немного другая: LDA адрес с кнопками AND кнопка select BEQ если кнопка НЕ нажата (если проверяемый бит = 0) далее идет какой-то код если кнопка нажата |
| Selykreg:
Cyneprepou4uk, спасибо за развёрнутый ответ, сейчас буду внедряться всем умственным потенциалом :wow: Если что, можно будет в будущем задать ещё парочку ( в энной степени :) ) вопросов по этому поводу❓ :blush: Добавлено позже: --- Цитата: Cyneprepou4uk от 27 Ноябрь 2021, 16:18:35 ---Простой пример: LDA адрес с кнопками CMP кнопка select BEQ переход при равенстве (то есть если нажата select) --- Конец цитаты --- При старте игры в танчиках грузится и записывается 3 байт жизней Джойстик отображает нажатие по адресу 0006 4 байт. LDA A5 06 CMP C9 04 Что делать далее, куда нужно переходить флагом, на адрес C2CD? Хотя, нет, нужно переходить к адресу выполнения инструкции, так? Но где тогда находится условие, при котором игра выполняет загрузку и запись? Команда "то" известна, это загрузка и запись, а где условие "если", где оно прописывается при старте? :neznayu: Ничего не понятно. |
| Миха42:
--- Цитата: Selykreg от 29 Ноябрь 2021, 16:54:15 ---LDA A5 06 CMP C9 04 --- Конец цитаты --- Если я правильно понял, то в ячейку 0006 пишется нажатие кнопок джойстика. После команды CMP процессор установит флаги регистра, далее следующая команда тебе и скажет куда двигаться далее в зависимости от значения регистра. Как правило дальше скорее всего будет стоять BEQ (F0) или BNE (D0) которое тебе укажет по какому адресу выполнять дальнейшую инструкцию в случае совпадения условия. Если же условие не совпадает, то процессор продолжит исполнять инструкции идущие дальше после условия. Предположим у тебя в $0006 хранится значение 04 Далее ты выполняешь команду СМР сравнивая со значением 04, команда СМР выставит флаг регистра Z=1 по скольку значения равны. Потом выполняем команду BEQ (Если флаг регистра Z=1, то) в данном случае Z у нас имеет значение 1, то процессор выполнит инструкцию прыжка на адрес указанный в команде BEQ. BEQ же у нас указывает на сколько адресов нужно сместиться вперёд (F0 00-7F) либо назад (F0 80-FF), собственно куда указал BEQ на том адресе процессор и продолжит выполнять инструкции. В случае же если бы у нас в ячейке $0006 было любое другое значение, то после команды СМР сравнения с значением 04, CMP выставил бы флаг Z = 0 по скольку значения были бы не равны. И процессор читая команду BEQ не стал бы выполнять прыжок на указанный адрес в команде, по скольку флаг Z не равен 1, значит данное условие не выполнено, процессор продолжит выполнять инструкции идущие после команды BEQ. Добавлено позже: Условие 'если' это и есть команды: BCC, BCS, BEQ, BMI, BNE, BPL, BVC, BVS. А вот какие инструкции выполнять дальше по какому адресу они и укажут в случае если это 'если' совпало. В противном случае продалжаем читать дальше следующие команды. Добавлено позже: Процессор не может выполнить прямую команду при условии 'если' на примере сравнения значений или же проверки больше или меньше, всё что он может сделать командой 'если' это проверить значения флагов регистра P процессора и не более того. А вот команды которые управляют этими самыми флагами и их возможности это уже совсем другая история. |
| Cyneprepou4uk:
Selykreg, не совсем понятно что ты хочешь сделать, сформулируй вопрос нормально. Код, который у тебя на скрине, выполняется лишь 1 раз перед началом игры. Если ты хочешь туда присунуть условие на кнопку, то в лучшем случае у тебя получится что-то типа "если я удерживаю кнопку select перед началом игры, мне дается ?? жизней вместо 3х". Если в коде нет никаких условий, он выполняет команды сверху вниз. В твоей подпрограмме C2B3-C2E5 на скрине есть лишь одно условие в C2D7 - обнулить адрес с жизнями 2го игрока, если выбран режим "1 player", так как по умолчанию игра записывает жизни обоим игрокам сразу. |
| Selykreg:
--- Цитата: Cyneprepou4uk от 01 Декабрь 2021, 01:32:22 ---Selykreg, не совсем понятно что ты хочешь сделать, сформулируй вопрос нормально. --- Конец цитаты --- Да, прошу прощения, ввёл в заблуждение... --- Цитата: Cyneprepou4uk от 01 Декабрь 2021, 01:32:22 ---Selykreg,Код, который у тебя на скрине, выполняется лишь 1 раз перед началом игры. Если ты хочешь туда присунуть условие на кнопку, то в лучшем случае у тебя получится что-то типа "если я удерживаю кнопку select перед началом игры, мне дается ?? жизней вместо 3х". --- Конец цитаты --- ...вы поняли всё правильно, это я не разобрался сам в своей ситуации. Хотел использовать данный участок кода, чтобы добавлять жизнь во время игры, конечно. Не знал, что данная инструкция грузит/пишет жизни только при загрузке ( уже прояснили мне ситуацию, амбициозному и нетерпеливому :wow: :blush:) --- Цитата: Cyneprepou4uk от 01 Декабрь 2021, 01:32:22 ---Selykreg,Если в коде нет никаких условий, он выполняет команды сверху вниз --- Конец цитаты --- Ах, вот оно что! Вот оно и условие, косвенное - запустился ром, инструкция автоматически сработала, жизни загрузились, верно? Кстати, вчера посмотрел внимательнее - в учебнике Кая есть пояснение команд сравнения, это я не понял, что для чего, вот и не внял данного урока. Вот только жаль, что в учебнике нет примера с кнопкой :blush: Cyneprepou4uk, что-то мне подсказывает, что Вы автор учебника - в VK в группе ромхакинга такая же аватара у пользователя Кай :) --- Цитата: Миха42 от 30 Ноябрь 2021, 20:14:04 ---Если я правильно понял, то в ячейку 0006 пишется нажатие кнопок джойстика. После команды CMP процессор установит флаги регистра, далее следующая команда тебе и скажет куда двигаться далее в зависимости от значения регистра. Как правило дальше скорее всего будет стоять BEQ (F0) или BNE (D0) которое тебе укажет по какому адресу выполнять дальнейшую инструкцию в случае совпадения условия. Если же условие не совпадает, то процессор продолжит исполнять инструкции идущие дальше после условия. --- Конец цитаты --- Да, именно так. Вчера битый час экспериментировал и пытался осуществить задуманное с select, опять же в Танчиках, а также Ninja gaiden III. Сейчас составлю инструкцию заново, так как после очередной неудачи ничего не сохранил и не отскринил🙊 PS Ребята, спасибо вам огромное, что помогаете разобраться🖖 Добавлено позже: --- Цитата: Cyneprepou4uk от 27 Ноябрь 2021, 16:18:35 ---Простой пример: LDA адрес с кнопками CMP кнопка select BEQ переход при равенстве (то есть если нажата select) Если неравенство (если select не нажата), то перехода не будет, и код продолжит выполнять следующую команду по списку. LDA адрес с кнопками AND кнопка select BEQ если кнопка НЕ нажата (если проверяемый бит = 0) далее идет какой-то код если кнопка нажата --- Конец цитаты --- Прописал инструкцию, но в игре при нажатии ничего не происходит, бряк активен, но ничего :neznayu: Пробовал комбинации с командами CPX, AND, флагами BNE и BEQ. --- Цитата: Миха42 от 30 Ноябрь 2021, 20:14:04 ---Предположим у тебя в $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 Почему условие не выполняется, что же я делаю не так⁉️ 😰😩 |
| Cyneprepou4uk:
Selykreg, да, я и есть автор :) Советую перечитать https://vk.com/page-143731650_52348151 И пересмотреть домашнее задание 7 https://youtu.be/-qXYnXdOclU Код на скрине частично правильный. Однако поставив после D0 (команда BNE) байт 00, это равноценно отсутствию условия, так как в обоих случаях код будет выполнять нижестоящую команду. С помощью этого байта ты указываешь смещение. Например если тебе надо перескочить твои LDA + STA, которые в сумме занимают 5 байт, после D0 тебе надо записать 05. Во-вторых, просто вставив свой код где попало, еще не значит что он будет работать. Надо чтобы на него была какая-то ссылка, обычно это JSR или JMP. |
| Миха42:
Selykreg, мало того что как тебе уже написали выше про неправильное использование условия и то, что на данный код должен быть либо JMP либо вызов подпрограммы (JSR). Так по окончанию чтения процессором кода, он должен продолжить читать что-то далее, иначе будет остановлена его работа (зависание). В случае если ты использовал JMP на данный код, то в конце кода нужно так же вернуться к коду который будет исполняться после твоего вставленного. Если же ты использовал вызов подпрограммы (JSR) для вставки кода, то подпрограмму нужно обязательно закрыть по окончанию кода прописав в конце 60, тогда процессор достанет из стека прежний адрес где была вызвана подпрограмма и вернётся обратно исполнять код дальше. Добавлено позже: Selykreg, --- Цитата ---A9 0A грузим 10 жизней в стек --- Конец цитаты --- Правильно называть не в стек, а в аккумулятор. Стек это совершенно другое. |
| Aleksey19:
Всем привет) народ подскажите как пользоваться отладчиком pSX emu, нужна полная информация, у кого может есть или ссылки, или сам может рассказать |
| perfect_genius:
Почему именно pSX? PsxIda уже заценил? |
| Aleksey19:
--- Цитата: perfect_genius от 06 Декабрь 2021, 01:17:29 ---Почему именно pSX? PsxIda уже заценил? --- Конец цитаты --- Я новичок в этом деле, не понимаю пока, хочу здесь разобраться |
| perfect_genius:
До PSX ещё не дошёл, но искал бы темы по ней тут. Даже Гугл направил на ЭмуЛенд: pSX 1.13 debugger. Учитывая опыт пользования GensIDA, порекомендую начать с PsxIda. Он должен оказаться лучше всех, но придётся привыкать к интерфейсу Иды. Благо что можно всё настроить. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |