PS2 Описание команд процессора

  • Автор темы Автор темы Chook
  • Дата начала Дата начала

Chook

Дерусификато
Регистрация
26 Дек 2005
Сообщения
1.677
Реакции
85
Где взять описание команд и регистров приставки?
Хочется в дизасемблированных листрингах покопаться, а пока слишком интуитвно все.

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?
 
dimm,
Дак залей на ifolder и все дела...
 
Если не найдете, залью в понедельник, на работе.
 
В гугле все ссылки мертвые :(
 
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 сделано чтоб эта игра с ХДД шла?
Я пока сам покопаюсь. По моему разумению, ведь игры не могут на прямую к СД-ДВД обращаться? Все идет через библиотеку? Или я не прав? То есть какие-то функции библиотеки не совсем корректно эмулируются лоадером...
Заинтересовался я очень причинами незапуска и зависаний игр...
 
Если есть интерес, не поможешь разобраться что например в Jak 3 сделано чтоб эта игра с ХДД шла?
Если не ошибаюсь, то основной ELF в Jak 3 обработан каким-то упаковщиком и поэтому его просто так с ходу разобрать не получится.

о моему разумению, ведь игры не могут на прямую к СД-ДВД обращаться? Все идет через библиотеку? Или я не прав?
Да, всё идет через библиотеку. Но надо учитывать, что работать с диском может как сама игра, так и какие-нибудь вспомогательные IOP-модули, занимающиеся стримингом данных или проигрыванием музыки.

Чтобы смотреть, что происходит на EE надо сначала, как минимум, найти все функции библиотеки libcdvd, которые работают через механизм SIFRPC.
 
В игре патчится только не зашифрованный файл SCES_524.60
А подскажи какой версией ретейл ИДА ты пользуешься? А то я уже в этих версиях заблудился :(
 
А мне вот интересно,что за проблема такая с негрузящимися сейвами в суикоден4:(
 
В игре патчится только не зашифрованный файл 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 я тоже не нашел, вероятно безусловный джамп...
 
какой процессор выбирать? r5900b или r5900l
выбирай r5900l


Нужно встать на инструкцию Syscall? И тогда она напишет коментарий к ней?
Да, именно так. Запускать скрипт нужно для каждой инстукции. Эти инструкции встречаются в startup-коде из CRT, а потом как правило идут одним большим блоком в библиотеки для работы ядром системы для EE.


Как перейти к листингу по смещению в оригинальном файле например?
Увидеть смещение можно в диалоге, где предлагается самому изменять байты в коде программы - в меню это называется patch.


Листинг вообще можно в текстовик скинуть не выделяя все мышкой и не копируя в буфер?
Можно. Операция называется примерно так Produce output file.

и вот что стало после патча
Судя по коду, отключили выгрузку из памяти какого-то irx-модуля. Скорее всего игра хочет выгрузить CDVDSTM.IRX. Где-то я встречал такой патч.
 
lui $a0, 0x13
Функция номер #13 чтоль вызывается?
lui - это загрузки верхних 16-бит регистра.
По сути lui $a0, 0x13 записывает в $a0 значение 0x130000. То есть адрес в памяти записывает в регистр двумя командами - lui и какрй-нибудь addiu.

Кстати в мануале по командам я не нашел что такое LA, какой-то вызов вероятно.
Впрочем как и команды B я тоже не нашел, вероятно безусловный джамп...
la - это мнемоника загружки адреса
b - это команда branch - аналог jmp x86.
 
Тогда не понял немного...
Если LA загрузка адреса. то что выполнялось раньше перед сравнением?
Фенкция cdvd_ee_driver кажется в коде ЕЛФ самого находится выходит?
а 0x130000 это ее адрес?
Потом идут сравнения какие-то и потом если не вышло выгрузить то выдается ошибка. А после патча все сравнения пропускают и идут дальше.

Так у этого процессора исполнительный адрес в 2 приема грузится всегда выходит? У Правцов (вариантов эплов) я такое встречал, но там дурнее было еще :) Там часть адраса в опреативку писалась, а другая в регистре хранилась.
 
Если LA загрузка адреса. то что выполнялось раньше перед сравнением?
Перед сравнением выполнялась функция поиска загруженного IRX по внутреннему имени модуля. Загрузка адреса выполнялась для передачи параметра в функцию через регистр $a0. То, что команда jal находится раньше la - это так и должно быть, потому что команды выполняются парами.


Фенкция cdvd_ee_driver кажется в коде ЕЛФ самого находится выходит?
Это не функция о обычный reference на строку "cdvd_ee_driver" (с нулём на конце).


Так у этого процессора исполнительный адрес в 2 приема грузится всегда выходит?
Не только адрес, а вообще все константы. Размер опкода фиксирован и равен 4-байтам, поэтому в команду нельзя задать константы размером в 32 бита.
 
Назад
Сверху