(29.01.2016 00:36)MetalliC писал(а): хм, а каким образом ?
игры-то к VMU-шкам напрямую обращаются, не через какие-нибудь сисколлы.
По прерыванию Maple DMA ходить в буфер обмена и подменять данные. Естественно раньше, чем игра туда посмотрит, я и так в общем то перехватываю прерывания раньше чем игра их получает, могу делать что угодно. Ну это если красиво делать и универсально, чтобы во всех играх работало. Таким образом можно в принципе любое Maple устройство эмулировать, этот вот буфер обмена для DMA облегчает задачу. Вот если бы игра сама как то с Maple BUS дружила, т.е. был бы протокол какой то, то тогда было бы сложнее. А тут просто буфер на 16 кило летает туда сюда.
Но можно сделать проще, по крайне мере для KATANA. Просто пропатчить в бинарнике функции для работы с VMU, чтобы был редирект на мои. Возможно не везде корректно будет работать, но я думаю в большинстве случаев прокатит. А найти эти функции не проблема в принципе, SDK все есть, binutils'ами пользоваться умею
Создаем ключ для поиска по начальному коду функции и ищем в памяти. Потом пару инструкций с прыжком записываем туда и радуемся. Я так уже в общем то делал, просто в другом контексте.
Во всем этом только одна загвоздка есть - нехватка памяти. Во первых код разрастется, так как добавится эмуляция VMU, плюс еще и кусок файловой системы и драйверов надо прилеплять, что за запись отвечает, сейчас он просто отключен для экономии памяти. Вот откуда ее брать пока не понятно.