61
Ромхакинг и программирование / [ALL] Вопросы новичков
« : 25 Февраль 2024, 09:30:39 »А насчет 00 20 00 02 - а там не может быть еще какого-нибудь адреса, то есть не только 02?В данной игре вряд ли, но как обычно нужно либо тестировать, либо разбирать всю игру.
насколько реально сделать из Gens эмулятора - библиотеку dll, как с GEMS ты делал? то есть чтоб можно было вшивать в программы и запускать из памяти ромы в ней и все такое прочееВы хотите взаимодействовать между своей программой и эмулятором. Есть разные способы. Написать Lua-скрипт для форка Gens - мало возможностей, дополнить Gens - не вариант для сложных программ, выделить ядро эмуляции в DLL по аналогии с libretro - много работы и в вызывающей программе много кода, но вы имеете в виду весь эмулятор выделить в DLL. Последний вариант наверно не потребует много изменений, но по-моему лучше оставить эмулятор отдельной программой (EXE) и добавить межпроцессное взаимодействие (IPC), для примера можно посмотреть на GDB отладчик, который работает через сокеты. Т. е. будет форк Gens с набором команд, одна из которых для передачи рома, и внешняя программа передающая команды, которая может быть написана на любом языке, нужна только поддержка данного IPC (сокеты есть почти везде).
игра зависает после инструкции JSR 00006664 по адресу 0x00022A - после нее переходит на адрес 0x006690, хотя по логике вещей должно переходить на 0x006664Адрес 0x006690 - заглушка для таблица векторов (https://tcrf.net/User:Andlabs/68000_ROM_guide#The_68000_Vector_Table), указанная в заголовке рома, поэтому в случае ошибок переход туда. На PC 226 происходит запись в (A1): move.w #$8134,(A1), но регистр A1 не инициализирован, в Exodus он FFFFFFFF на старте, а записывать 2 байта нельзя по нечётным адресам, поэтому срабатывает прерывание Address Error и переход на заглушку. Gens к тому же игнорирует запись по нечётным адресам, но делает кривую запись, из-за чего были хаки/переводы игры, которые работают только в Gens. Другие эмуляторы не игнорируют, но A1 - ноль, поэтому ошибки нет.
Разработчики наверно хотели записать #$8134 в $00C00004. Для исправления поставьте NOP (226: 4E 71 4E 71). Я брал ром отсюда: http://pscd.ru/games/smd/tsmd/1297-tiny-toon-adventures-3.html.
Для Phantasy Star IV (и позже Pirates! Gold) я делал обработчик падений (Crash Handler) на основе кода RoboCop Versus The Terminator. Он универсальный и помогает поймать такие падения (показывает PC и др.), но я не выкладывал код, может позже. Попробовал в Tiny Toon Adventures 3 и он подтвердил причину падения, заодно я нашёл свою недоработку.
UPD: Exodus у меня вечно падал, ещё неудобный, такое себе.