Sharpnull, извините, что не сразу ответил.
Можно. Составляете список нужных инструкций, в программу записываете их байты и смещение для проверочного байта, ищите каждые 2 байта по кратным 2 позициям в файле (хотя код может быть записан в RAM с нечётной позиции в роме, тогда каждый байт проверять) и проверяете байт адреса. Легко пишется, мне лень выбрать инструкции, все инструкции есть в тестах для ассемблеров (например, https://github.com/Clownacy/clownassembler/blob/master/tests/valid instructions.asm), должны сами осилить.
Не. вряд ли осилю.
Ошибки нужно исправлять, а не играть в говнохаки.
Да, я с вами согласен. Но просто всегда остается параноя, что какую-то еще ошибку не отловил. А с таким костылем, возможно, игра как-нибудь худо-бедно продолжит работать.
UPD3: Сделал пропуск кривых инструкций, пробовал на нечётном адресе и неправильной инструкции. Некоторые прерывания точно не работают. Положить к файлам из архива ром - input.gen, в файле shit_hack_remedy.asm указать адрес свободного места размером 0x36 байта вместо org $ (например, org $3FFF00) запустить compile_shit_hack_remedy.bat, на выходе - input_crash_handler.gen.
Спасибо. Попробовал. На Tiny Toon 3 заработало. После применения этого костыля игра начинает работать, даже если не NOPать инструкцию по адресу 0x226. Проверено на эмуляторе Exodus, а также на настоящей приставке. Конечно, я эту инструкцию потом заNOPал, но костыль в игре оставил, а то мало ли что, может там еще где-то есть "сюрпризы".
А вот на хаках Соника не работает - они просто виснут. Sharpnull, ой извините, нет, все работает. Попробовал еще раз - работает, игра не зависает после проблемного места и даже продолжает нормально работать. Видимо в первый раз что-то не так сделал. Единственное что, при прохождении проблемного места есть небольшое подтормаживание, но совершенно незначительное. Но это лучше, чем надпись "Address error" посреди экрана, необходимостьпрощелкивать и испорченная графика.
Правда на настоящей приставке все же может зависнуть, но не "гарантировано", чаще всего "прокатывает".
Sharpnull, вы - сверхразум.
Ещё BlastEm нацелен на точность, лучше и на нём всё проверять. Похоже, он единственный эмулятор, где не заставке Flashback картинка и звук совпадают почти как на реальной приставке.
Где-то Exodus все-таки лучше. Вот например, в сборнике хаков игр серии Sonic the Hedgehog от
Razor-а нашел Sonic Megamix версии 3.5. До этого года даже не знал о такой версии, знал после третей только 4.0 и 5.0, но они уже для Mega CD. А этот похож на версию 4.0, но при этом запускается с картриджа, а в версии 3.0 были кое-какие моменты, которые не устраивали.
Попробовал запустить этот хак на приставке - картинка оказалась какой-то ужасно темной. После этого догадался скачать эмулятор Exodus (до этого проверял только на Gens) - там картинка такая же. А вот в BlastEm картинка нормальная, хотя настоящая приставка выдает темную.
Проблему кстати исправил - в Exodus открыл VDP Registers и начал там тыкать все галочки наугад. После одной картинка посветлела. Это был бит 2 из Mode Register 1. Во всплывающей подсказке было написано, что это какой-то непонятный незадокументированный режим, в котором используются только по одному биту из каждого цвета (красный, зеленый, синий), причем для нормальной работы этот бит должен быть установлен. Поискал,
как к этому регистру обращаться. После некоторых мучений нашел, что там по всему ROM-у было разбросано:
lea ($00c00004),A6
move.w #$8000,(A6)
Похоже на какое-то намеренное вредительство. Исправил все move.w #$8000,(A6) на move.w #$8004,(A6)