Захотелось помучать эту визуалку на эмуляторе, но столкнулся с проблемой - эмулятор не хочет грузить игру. Сначало проходит прогрузка модулей: Далее игра пытается считывать(присоединять ???) игровые файлы, и это у нее не получается, потому она уходит в бесконечный цикл: При этом считывание с дивидюка не происходит(4 мб кэш вырублен) Не знаю даже что и делать, толи сидеть и мучать функции загрузки этих UNI, или же мучать модули DVD...
Вот "exe" SLPM_661.rar Точнее так - оно не выходит из функции sub_157510 которая уходит в бесконечный цикл на таком участке где sub_156200 возвращает ноль с прочтенного адреса 0x157E444 в памяти. при чтении 0x157E440 - считывается 1. аналогичная ситуация чуть ниже по коду где функция sub_156190 абсолютно схожа с sub_156200, отличие только в адресе 0x157E444, здесь этот адрес 0x157E448 Да, возможно здесь косяк из-за того, что v1, равен 0, помойму. Во всяком случае, даже если занопить эти циклы, все равно не работает. Есть подозрение что это все из-за модулей, подгружаемых игрой. Это первая игра на PS2, с которой начал разбираться, так что ещё много по адресам и принципам работы PS2 не знаю.
Я поверхностно посмотрел, что там происходит и пришел к выводу, что приведенный код скорее всего взаимодействует с IRX через RPC. То есть я нашел там рядом набор вызовов пользовательского RPC-сервера (судя по логу в первом сообщении он находится в модуле MEDIA.IRX), но логику работы понять я сходу не смог. В аттаче карта стандартных функций, которые я опознал. Некоторые названия могут быть неточными, так как ни документации, ни интернета под рукой не было, так что разбирался в основном по памяти.
Т.е. получается что rpc-сервер работает некорректно, и должен оставлять данные по тем адресам, что читают функции в цикле? Если так, то становится интересна причина некорректной работы(не совсем корректная эмуляция вызовов, или способа подгрузки модулей, не соответствующая тому, как это происходит на PS2), или же тут возможна ситуация, когда на реальной железке какие-то части кода работают не так, как они описаны в документации. Кстати, могу создать и выложить торрент, если будет интересно, т.к. без всех файлов и модулей, что-то конкретное сложно сделать. Кстати, какой дебаг есть попродвинутей для ps2? Просто с PS1 было хороший дебаггер, в который ещё добавил всякие бряки по сидюку(сектору на диске) и т.п.
RPC - это высокоуровневая надстройка на SIF (Serial InterFace) и DMA, которые предают данные между процессорами и двумя блоками памяти. RPC-сервер действительно может писать данные в тот участок памяти, который проверяется в цикле, но делает он это через DMA-канал. RPC-сервер (внутри IRX-модуля), также как и клиент использует лишь стандартный набор функций, а вся работа с "железом" происходит внутри биоса и модулей из файла IOPRP280.IMG. Я врядли смогу особо помочь, так как свободного времени сейчас очень мало, и мне пришлось свернуть все свои исследования внутренностей PS2. Я им никогда не пользовался, так ps2-девкита у меня нет, а запустить эмулятор с нормальной скоростью я не могу, так как тормозит "графика".