какой программой можно это сделать?m68k debugger-ом(gens r57shell mod) пробую ставить бряк на vdp, ничего не происходит
Я не подумал, что там DMA, а эмулятор с отладчиком, где можно ставить брейкпоинт на адрес в VRAM я не знаю и пришлось бы всё равно дольше разбираться.
Нашёл код декомпрессии для алгоритма
lzkn3 - ROM $1E2C, адрес начала данных в регистре A5, но для lzkn3_comp.exe
нужно вычесть 2, там размер сжатых данных, который не используется. Алгоритм lzkn2 не смотрел. Нашёл, посмотрев на RAM, так как записываются большие куски и их легко заметить, несжатые данные копируются с $FF1000 и с $FF0000 вроде тоже, буфер с $FF8800 (очищается перед декомпрессией).
Чтобы не собирать вручную адреса, я написал скрипт на Lua для BizHawk (для версий 2.5+ баг из-за которого эмулятор падает, поэтому используйте
версию 2.4.2). Открываете Tools > Lua Console, перетаскиваете .lua скрипт, в окно будут выводиться адреса, а адреса после запуска и до остановки сохранятся в offset.txt без повторов рядом со скриптом. Потом запускаете decompress.bat, который берёт смещения и запускает lzkn3_comp.exe с ромом "Tiny Toon Adventures - Acme All-Stars (U) [!].gen". Обратно придётся вставлять руками через HEX-редактор или написать скрипт, который будет проверять размер и вставлять, если он не больше.
Для lzkn2 будет также, только в .lua нужно поменять адрес на код декомпрессии (event.onmemoryexecute(onexecute, 0x1E2C)) и изменить регистр, если он другой (emu.getregister("M68K A5")) и возможно без "- 2". Ну и в .bat файле lzkn3_comp.exe на lzkn2_comp.exe.