Основные типы брейкпоинтов

Вернуться на главную страницу

Содержание

Типы брейкпоинтов

Тип указывается в окне создания/редактирования брейкпоинта.

Брейкпоинт можно создать и без указания типа. В любой момент его можно отредактировать.

Типы Read (чтение), Write (запись) и Execute (выполнение) могут быть активны одновременно. Тип Forbid (запрет) выставляется отдельно, отменяя все остальные типы.

Список инструкций, активирующих Read и Write брейкпоинты, смотри в разделе с инструкциями процессора. Некоторые инструкции, например INC и DEC, способны вызывать срабатывание как Read, так и Write брейкпоинтов, из-за механики работы этих инструкций.

Причина кроется в подсветке брейкпоинта в списке, условие которого было выполнено. Если создать 2 отдельных брейкпоинта с одинаковым условием на адрес, и разделив между ними условия Read и Write, то при срабатывании брейкпоинта ты сразу поймешь какой из них сработал по синему выделению.

Но если ты создашь один брейкпоинт с условиями Read и Write одновременно, он будет подсвечен независимо от того, какое из этих двух условий было выполнено.

Понять это можно будет только по инструкции, которая вызвала срабатывание брейкпоинта. Поэтому лучше не выставлять эти 2 условия в одном брейкпоинте одновременно.

Описание типов

Выбери тип брейкпоинта для просмотра информации по нему.

Read

Условие на чтение из адреса. Брейкпоинт сработает при попытке процессора считать байт из адреса, указанного в условии.

Применение

С помощью условия Read можно понять каким образом байт, записанный в некий адрес, влияет на игру, определив код, который считывает этот байт. Следовательно, можно определить за что отвечает данный адрес.

Флаг

Read брейкпоинт отображается с флагом R.

Write

Условие на запись в адрес. Брейкпоинт сработает при попытке процессора записать байт в адрес, указанный в условии.

Применение

С помощью условия Write можно найти, например, запись начального количества жизней, здоровья, таймеров. Также Write брейкпоинт поможет найти код, который изменяет это количество в процессе игры.

Флаг

Write брейкпоинт отображается с флагом W.

Execute

Условие на выполнение инструкции по адресу. Брейкпоинт сработает при попытке процессора выполнить инструкцию, расположенную по адресу, указанному в условии брейкпоинта.

Применение

С помощью условия Execute можно выяснить предназначение незнакомой подпрограммы, определив игровой момент, при котором код этой подпрограммы будет задействован. Также может использоваться в качестве закладок, чтобы остановить игру до того, как срабатывает брейкпоинт на интересующем адресе RAM, чтобы подробнее изучить предшествующий код.

Тип Execute недоступен для условия на тип памяти PPU Memory и Sprite Memory. Если поставить Execute, а затем изменить память с CPU Memory на другой тип, условие Execute будет деактивировано при сохранении.

Добавление

Чтобы быстро добавить Execute брейкпоинт по нужному адресу, дважды кликни по адресу слева от инструкции. В появившемся окне уже будет стоять галочка на Execute, достаточно сохранить предложенный брейкпоинт.

Дополнительное условие K==#xx в поле ввода Condition, которое добавляется автоматически при создании Execute брейкпоинта, означает условие на PRG банк под номером #$xx. Номер банка указан слева от адреса инструкции.

Флаг

Execute брейкпоинт отображается с флагом X.

Адреса обработчиков прерываний

Для Execute брейкпоинта в поле ввода адреса можно вводить сокращения RST, NMI (или VBL) и IRQ вместо адресов обработчиков сооветствующих прерываний процессора. При сохранении брейкпоинта адрес будет автоматически заменен на нужный.

Эти сокращения можно вводить и для любых других типов условий брейкпоинта, однако смысл это делать есть только для Execute, чтобы изучить код этих обработчиков.

Если маппер игры позволяет переключать PRG банки, то при наличии дополнительного условия K==#xx во время ввода сокращений следует правильно указать номер банка, или же удалить это условие, иначе брейкпоинт не будет срабатывать там, где это было задуманно.

Forbid

Запрещает инструкциям, находящимся по адресам, указанных в условии Forbid брейкпоинта, вызывать срабатывание Read, Write и Execute брейкпоинтов. Если условие некого брейкпоинта выполняется, но в то же время существует Forbid брейкпоинт на адрес расположения этой инструкции процессора, срабатывание по данному адресу будет проигнорировано и эмуляция продолжится.

Forbid не блокирует срабатывание прочих типов брейкпоинтов, которые описаны в отдельной статье.

Применение

С помощью условия Forbid можно отключить лишние срабатывания брейкпоинтов в определенных местах. Это значительно упрощает поиск дополнительных срабатываний брейкпоинта, особенно когда тот срабатывает ежекадрово и/или мест срабатываний довольно много.

К примеру, если некий Read брейкпоинт срабатывает на инструкциях, находящихся по адресам $8765 и $9876, то при создании Forbid брейкпоинта на адрес $8765 (или на диапазон адресов, включающий $8765), Read брейкпоинт станет срабатывать только на адресе $9876. Если поставить Forbid еще и на $9876, Read брейкпоинт вообще перестанет срабатывать на данный момент, что позволит тебе найти еще какие-то срабатывания, продолжив играть в обычном режиме со все еще активированным Read брейкпоинтом.

Добавление

Можно быстро добавить Forbid брейкпоинт точно также, как и Execute, дважды кликнув по адресу слева от инструкции. В появившемся окне нужно выставить условие Forbid перед сохранением брейкпоинта.

Флаг

Forbid брейкпоинт отображается с флагом F.