Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Бряк на кнопку [?]

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
Griever
RRC2008
RRC2008


Зарегистрирован: 15.07.2005
Сообщения: 112
Откуда: Н.Новгород

СообщениеДобавлено: Пн Дек 19, 2005 2:55 pm    Заголовок сообщения: Бряк на кнопку [?] Ответить с цитатой

Здрасте! недавно понадобилось в отладчике на NES сделать так чтобы останов произошел сразу после нажатия кнопки(в
моем случае START), заглянул в документацию - вроде опрос джойстиков чисто программный[Через порт $4016 для 1-го
джойстика] поставил бряк на запись в порт - естессно в порт пишется $FF несколько сот раз в секунду - пробовал
использовать Conditional Breakpoints - никакого эффекта. Может я чего-то не так делаю? Embarassed стопудово должен быть способ
заставить игру встать после нажатия START!
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Вт Дек 27, 2005 9:22 pm    Заголовок сообщения: Ответить с цитатой

Скажи, что за игра.
В ФСЕУшном дебаггере не очень удобно взламывать кнопку: скажем, меняешь значение регистра A на нужное (пусть Start), а оно всё равно не срабатывает. Приходится ломать в нужный момент адрес оперативки, куда пишется кнопка.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Griever
RRC2008
RRC2008


Зарегистрирован: 15.07.2005
Сообщения: 112
Откуда: Н.Новгород

СообщениеДобавлено: Вт Дек 27, 2005 10:35 pm    Заголовок сообщения: Ответить с цитатой

Скажем, Dick Tracy. А какой за адрес оперативки? есть только один порт 4016
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Ср Дек 28, 2005 3:40 pm    Заголовок сообщения: Ответить с цитатой

Любая нормальная игра после обработки порта записывает текущую кнопку в оперативку в пару адресов, хотя бы для будущего использования: например, чтобы определить, была ли нажата кнопка ДО текущего момента и т.д.
Для Dick Tracy ставь бряк на чтение $375 или на выполнение $C76D. Как только нажмёшь кнопку - попадёшь в дебаггер.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Griever
RRC2008
RRC2008


Зарегистрирован: 15.07.2005
Сообщения: 112
Откуда: Н.Новгород

СообщениеДобавлено: Ср Дек 28, 2005 7:51 pm    Заголовок сообщения: Ответить с цитатой

Спасибо большое, еще бы узнать как ты это нашел =)
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Ср Дек 28, 2005 8:04 pm    Заголовок сообщения: Ответить с цитатой

Можно посмотреть в самом дебаггере, в какой адрес записывается текущая кнопка. Но можно открыть окно с памятью, так чтобы видно было всё окно, и нажимать в игре кнопки - какие-то адреса в памяти будут меняться соответственно кнопкам. Вот я заметил, что по адресам $000A, $000C и $000E устанавливается значение кнопки (там есть ещё другие адреса, но они не нужны). Поставил бряк на чтение $E и оттуда уже вышел к чтению $375.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Griever
RRC2008
RRC2008


Зарегистрирован: 15.07.2005
Сообщения: 112
Откуда: Н.Новгород

СообщениеДобавлено: Ср Дек 28, 2005 10:47 pm    Заголовок сообщения: Ответить с цитатой

спасибо =)
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Чт Мар 13, 2008 4:26 pm    Заголовок сообщения: Ответить с цитатой

Здрасте ромхакеры.
У меня возникла одна проблема, и я честно пытался решить её методом научного тыка. Но у меня нечего не вышло, и теперь приходится задавать глупые вопросы. Вобщем мне надо взломать кнопку. А точнее - найти код отвечающий за какиелибо действия после нажатия кнопок. К примеру как найти TMNT3(черепашки ниндзя 3) процедуру прыжка или удара?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Shredder



Зарегистрирован: 20.02.2007
Сообщения: 73
Откуда: Россия, Самара.

СообщениеДобавлено: Чт Мар 13, 2008 4:36 pm    Заголовок сообщения: Ответить с цитатой

Интересно, а для чего тебе это?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Мар 13, 2008 4:40 pm    Заголовок сообщения: Ответить с цитатой

Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Chronix
RRC2008
RRC2008


Зарегистрирован: 27.12.2003
Сообщения: 288
Откуда: CYBERIA

СообщениеДобавлено: Чт Мар 13, 2008 6:11 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам.

Точно так. Smile
Опрос джойстиков происходит ч/з регистр 4016h (4017h - для второго порта), так что ставь бряк на запись в регистр 4016h, чтобы поймать момент формирования строба, и тогда ты без труда попадешь на самое начало подпрограммы опроса джойстиков. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Чт Мар 13, 2008 7:26 pm    Заголовок сообщения: Ответить с цитатой

Самая *опа - когда таких процедур тьма тьмущая, и среди них надо найти одну единственную...
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Вс Мар 23, 2008 12:35 pm    Заголовок сообщения: Ответить с цитатой

Chronix писал(а):
HoRRoR писал(а):
Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам.

Точно так. Smile
Опрос джойстиков происходит ч/з регистр 4016h (4017h - для второго порта), так что ставь бряк на запись в регистр 4016h, чтобы поймать момент формирования строба, и тогда ты без труда попадешь на самое начало подпрограммы опроса джойстиков. Wink

Нечего я там в коде не понял, в ассемблере почти не разбираюсь. Объясните пожалуйста как на кнопку селект повесить какую нибудь команду. Если это конечно вообще возможно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Мар 23, 2008 2:16 pm    Заголовок сообщения: Ответить с цитатой

Это возможно, если сперва разобраться в ассемблере.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Пн Мар 24, 2008 9:45 am    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Это возможно, если сперва разобраться в ассемблере.

Я и не сомневаюсь. Просто хотелось уточнить. Но мне бы хотелось увидеть пример хотя бы с переназначением одной клавиши на другую, дальше я бы разобрался сам. А вообще я хочу в TMNT3 сделать смену черепах кнопкой селект прямо в процессе игры, а не только когда тебя убивают.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Мар 24, 2008 11:20 am    Заголовок сообщения: Ответить с цитатой

- Как мне написать программу?
- Сперва надо научиться программировать.
- Я и не сомневаюсь. Покажите мне на примере, я хочу написать серьезную программу.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Пн Мар 24, 2008 11:49 am    Заголовок сообщения: Ответить с цитатой

HoRRor, несмешно, потомучто програмировать учаться именно на примерах. И тем более я не прошу написать всё за меня. Чтобы реализовать смену черепах, надо в памяти изменить всего две ячейки - это я сделать смогу. Но вот как повесить всё это дело на кнопку я не знаю, и прошу показать на примере. А доков в сети по этому поводу нет(по крайне мере на русском языке).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Мар 24, 2008 12:23 pm    Заголовок сообщения: Ответить с цитатой

Мда... Ты можешь понять, что если ты ничего не будешь понимать, то примеры бесполезны? Научись сперва хотя бы просто ставить бряки и понимать, что делает игра.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Пн Мар 24, 2008 2:10 pm    Заголовок сообщения: Ответить с цитатой

Я думаю тебе не составит труда объснить мне убогому следующий код:
Код:

$F928:A0 08     LDY #$08
$F92A:AD 16 40  LDA $4016 = #$FF
$F92D:85 0C     STA $000C = #$FF
$F92F:4A        LSR
$F930:05 0C     ORA $000C = #$FF
$F932:4A        LSR
$F933:36 08     ROL $08,X @ $0008 = #$40
$F935:AD 17 40  LDA $4017 = #$FF
$F938:85 0D     STA $000D = #$01
$F93A:4A        LSR
$F93B:05 0D     ORA $000D = #$01
$F93D:4A        LSR
$F93E:36 09     ROL $09,X @ $0009 = #$A0
$F940:88        DEY
$F941:D0 E7     BNE $F92A
$F943:60        RTS

Код:

$F8F2:A5 08     LDA $0008 = #$02
$F8F4:C5 0A     CMP $000A = #$02
$F8F6:D0 1C     BNE $F914
$F8F8:A5 09     LDA $0009 = #$00
$F8FA:C5 0B     CMP $000B = #$00
$F8FC:D0 16     BNE $F914
$F8FE:A2 00     LDX #$00
$F900:20 04 F9  JSR $F904
$F903:E8        INX
$F904:B5 08     LDA $08,X @ $000A = #$02
$F906:A8        TAY
$F907:55 FA     EOR $FA,X @ $00FC = #$00
$F909:35 08     AND $08,X @ $000A = #$02
$F90B:95 F8     STA $F8,X @ $00FA = #$02
$F90D:95 54     STA $54,X @ $0056 = #$02
$F90F:94 FA     STY $FA,X @ $00FC = #$00
$F911:94 56     STY $56,X @ $0058 = #$00
$F913:60        RTS

Точто мне нужно сдесь или нужно смотерть дальше?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Мар 24, 2008 2:36 pm    Заголовок сообщения: Ответить с цитатой

Первый фрагмент кода - цикл чтения кнопок из порта ввода и запись результата в ячейку памяти. Из порта 4016 пишутся 8 битов (кнопки первого джойстика) в 0C, их 4017 (кнопки второго джойстика) - в 0D.

Дальше игра не будет обращаться к портам 4016/4017, а при проверке нажатия Start она просто смотрит ячейку памяти (0C/0D).

Второй кусок кода явно не в тему.

Ни на каких примерах ты не научишься, тут надо заниматься этим плотно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Пн Мар 24, 2008 4:59 pm    Заголовок сообщения: Ответить с цитатой

АнС спасибо, буду разбираться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ZURG



Зарегистрирован: 13.03.2008
Сообщения: 7

СообщениеДобавлено: Вт Мар 25, 2008 11:14 am    Заголовок сообщения: Ответить с цитатой

Сделал финт ушами - впихнул свою проверку на нажатие селекта и пробный код. Всё работает, но как и следовало ожидать слишком быстро. Как можно сделать чтобы мой код выполнялся только один раз после нажатия кнопки, а не всё время пока она зажата? Думаю сделать флаг, который будет устанавливаться сразу после нажатия нужной кнопки, и обнуляться при нажатии постронних кнопок. Но может есть способ попроще?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вт Мар 25, 2008 2:49 pm    Заголовок сообщения: Ответить с цитатой

Напиши свой код, который добавил.
В игре помимо 0C/0D должны быть ещё две ячейки рядом, которые XOR'ятся с предыдущими значениями состояния джойстика. В итоге операции EOR остаются только кнопки, нажатые в данный момент, в следующем кадре они не будут считаться нажатыми, пока не отпустишь кнопку и не нажмёшь снова.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
KDEboroda



Зарегистрирован: 13.11.2015
Сообщения: 2
Откуда: СССР

СообщениеДобавлено: Пт Ноя 13, 2015 2:11 pm    Заголовок сообщения: Отладчик SMD - останов по нажатию клавиши. Ответить с цитатой

Работаю над игрой Operation Europe - Path to Victory (1939-1945) (SMD).
Есть тема на emu-land . net по адресу / forum / index.php?topic=27971.120 (убрать пробелы, если интересно)
Задача: пропустить экран установки параметров командиров, чтобы изначально задать их жёстко и назначать команду себе из уже готовых.
Что делаю: в отладчике ставлю точку останова на чтение последней (перед экраном изменения параметров) строки текста, далее по одной команде выполняю - и попал в какой-то замкнутый цикл. Нужно посмотреть, что происходит после нажатия кнопки "C" любого джойстика. И там соответственно пропустить эту часть, чтобы сразу появился экран назначения на должности.
Предполагаю, что можно поступить аналогично тому, что тут описано: отслеживать память по нажатию кнопок, затем ставить точки останова на эти места в памяти.
Есть ещё варианты?
P.S. Кстати, пока что не нашёл, где нажатие кнопок меняет память. Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group