Где взять описание команд и регистров приставки? Хочется в дизасемблированных листрингах покопаться, а пока слишком интуитвно все. PS: romka кудато пропал... Может ему тут не интересно стало И если кто пользуется IDA, то напишите какой версией и как заставить ее писать имена вызываемых функций из подгружаемых модулей...
У меня есть все доки по процам PS2. Но их общий объем около 9 мегабайт. Здесь выложить не смогу. Ссылки откуда я их когда-то качал уже убитые. Но я могу дать названия файло погугли их, наверняка найдешь: EE-Core manual - coreum_e.pdf EE-Overview - eeover_e.pdf EE Usermanual - eeuser_e.pdf GS Usermanual - gsuser_e.pdf EE Core Instruction Set Manual - inst_0e.pdf VU0 Manual - vu0e.pdf А вообще не пропобовал в качестве отладчика использовать эмуль pcsx2?
Chook, вот пока EE Core Instruction Set Manual http://ifolder.ru/5743094 может тебе его и хватит, посмотри
dimm, спасиб! Этого думаю мне хватит чтобы разобраться. Вот козлы... заблокировали даже копирование из файла текста... Мне просто интересно что делают патчи образов для совместимости с HDLoader
По IOP специальной документации что-то не помню, но можно почитать вот это: cgi.cse.unsw.edu.au/~cs3231/doc/R3000.pdf Для EE ещё очень пригодится приложенный скрипт, так как сигнатуры хоть и есть, но сделаны они по очень старым версиям официальных библиотек.
romka, привет! Если есть интерес, не поможешь разобраться что например в Jak 3 сделано чтоб эта игра с ХДД шла? Я пока сам покопаюсь. По моему разумению, ведь игры не могут на прямую к СД-ДВД обращаться? Все идет через библиотеку? Или я не прав? То есть какие-то функции библиотеки не совсем корректно эмулируются лоадером... Заинтересовался я очень причинами незапуска и зависаний игр...
Если не ошибаюсь, то основной ELF в Jak 3 обработан каким-то упаковщиком и поэтому его просто так с ходу разобрать не получится. Да, всё идет через библиотеку. Но надо учитывать, что работать с диском может как сама игра, так и какие-нибудь вспомогательные IOP-модули, занимающиеся стримингом данных или проигрыванием музыки. Чтобы смотреть, что происходит на EE надо сначала, как минимум, найти все функции библиотеки libcdvd, которые работают через механизм SIFRPC.
В игре патчится только не зашифрованный файл SCES_524.60 А подскажи какой версией ретейл ИДА ты пользуешься? А то я уже в этих версиях заблудился
Подойдёт любая более менее новая Advanced-версия, потому что в Standard нет поддержки MIPS. 5.x.x я не смотрел, но во всех виденных 4.x.x поддержка MIPS была и везде были одинаковые недостатки при разборе IRX.
Так, отлично. Есть 4.3.0.740а Загрузил твой скрипт после декомпиляции... он сказал Can not find a system call instruction. Нужно встать на инструкцию Syscall? И тогда она напишет коментарий к ней? я не пользовался ИДА... какой процессор выбирать? r5900b или r5900l Как перейти к листингу по смещению в оригинальном файле например? Листинг вообще можно в текстовик скинуть не выделяя все мышкой и не копируя в буфер? вобщем вот оригинал.... .text:00102B98 jal sub_125690 .text:00102B9C la $a0, aCdvd_ee_driver # "cdvd_ee_driver" .text:00102BA0 bltz $v0, loc_102BD4 .text:00102BA4 daddu $a1, $0, $0 .text:00102BA8 daddu $s0, $v0, $0 .text:00102BAC daddu $a0, $s0, $0 .text:00102BB0 daddu $a2, $0, $0 .text:00102BB4 jal sub_1253F8 .text:00102BB8 daddu $a3, $sp, $0 .text:00102BBC bltzl $v0, loc_102BD8 .text:00102BC0 lui $a0, 0x13 .text:00102BC4 jal sub_125600 .text:00102BC8 daddu $a0, $s0, $0 .text:00102BCC bgezl $v0, loc_102BF0 .text:00102BD0 lw $v0, -0x6C34($s2) .text:00102BD4 .text:00102BD4 loc_102BD4: # CODE XREF: sub_102A28+178j .text:00102BD4 lui $a0, 0x13 .text:00102BD8 .text:00102BD8 loc_102BD8: # CODE XREF: sub_102A28+194j .text:00102BD8 daddu $a1, $v0, $0 .text:00102BDC jal sub_100FC8 .text:00102BE0 la $a0, aUnloadCdvd_ee_ # "unload cdvd_ee_driver failed %d\n" .text:00102BE4 jal sub_116A70 .text:00102BE8 daddu $a0, $0, $0 .text:00102BEC nop .text:00102BF0 .text:00102BF0 loc_102BF0: # CODE XREF: sub_102A28+1A4j .text:00102BF0 addiu $s1, $sp, 0x140+var_130 и вот что стало после патча ..text:00102B98 jal sub_125690 .text:00102B9C la $a0, aCdvd_ee_driver # "cdvd_ee_driver" .text:00102BA0 b loc_102BF0 .text:00102BA4 daddu $a1, $0, $0 .text:00102BA8 # --------------------------------------------------------------------------- .text:00102BA8 daddu $s0, $v0, $0 .text:00102BAC daddu $a0, $s0, $0 .text:00102BB0 daddu $a2, $0, $0 .text:00102BB4 jal sub_1253F8 .text:00102BB8 daddu $a3, $sp, $0 .text:00102BBC bltzl $v0, loc_102BD8 .text:00102BC0 lui $a0, 0x13 .text:00102BC4 jal sub_125600 .text:00102BC8 daddu $a0, $s0, $0 .text:00102BCC bgezl $v0, loc_102BF0 .text:00102BD0 lw $v0, -0x6C34($s2) .text:00102BD4 lui $a0, 0x13 .text:00102BD8 .text:00102BD8 loc_102BD8: # CODE XREF: sub_102A28+194j .text:00102BD8 daddu $a1, $v0, $0 .text:00102BDC jal sub_100FC8 .text:00102BE0 la $a0, aUnloadCdvd_ee_ # "unload cdvd_ee_driver failed %d\n" .text:00102BE4 jal sub_116A70 .text:00102BE8 daddu $a0, $0, $0 .text:00102BEC nop .text:00102BF0 .text:00102BF0 loc_102BF0: # CODE XREF: sub_102A28+178j .text:00102BF0 # sub_102A28+1A4j .text:00102BF0 addiu $s1, $sp, 0x140+var_130
Там кстати до этого было lui $a0, 0x13 Функция номер #13 чтоль вызывается? Кстати в мануале по командам я не нашел что такое LA, какой-то вызов вероятно. Впрочем как и команды B я тоже не нашел, вероятно безусловный джамп...
выбирай r5900l Да, именно так. Запускать скрипт нужно для каждой инстукции. Эти инструкции встречаются в startup-коде из CRT, а потом как правило идут одним большим блоком в библиотеки для работы ядром системы для EE. Увидеть смещение можно в диалоге, где предлагается самому изменять байты в коде программы - в меню это называется patch. Можно. Операция называется примерно так Produce output file. Судя по коду, отключили выгрузку из памяти какого-то irx-модуля. Скорее всего игра хочет выгрузить CDVDSTM.IRX. Где-то я встречал такой патч.
lui - это загрузки верхних 16-бит регистра. По сути lui $a0, 0x13 записывает в $a0 значение 0x130000. То есть адрес в памяти записывает в регистр двумя командами - lui и какрй-нибудь addiu. la - это мнемоника загружки адреса b - это команда branch - аналог jmp x86.
Тогда не понял немного... Если LA загрузка адреса. то что выполнялось раньше перед сравнением? Фенкция cdvd_ee_driver кажется в коде ЕЛФ самого находится выходит? а 0x130000 это ее адрес? Потом идут сравнения какие-то и потом если не вышло выгрузить то выдается ошибка. А после патча все сравнения пропускают и идут дальше. Так у этого процессора исполнительный адрес в 2 приема грузится всегда выходит? У Правцов (вариантов эплов) я такое встречал, но там дурнее было еще Там часть адраса в опреативку писалась, а другая в регистре хранилась.
Перед сравнением выполнялась функция поиска загруженного IRX по внутреннему имени модуля. Загрузка адреса выполнялась для передачи параметра в функцию через регистр $a0. То, что команда jal находится раньше la - это так и должно быть, потому что команды выполняются парами. Это не функция о обычный reference на строку "cdvd_ee_driver" (с нулём на конце). Не только адрес, а вообще все константы. Размер опкода фиксирован и равен 4-байтам, поэтому в команду нельзя задать константы размером в 32 бита.