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

Тема в разделе "PlayStation 4", создана пользователем Chook, 15 мар 2008.

  1. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    Где взять описание команд и регистров приставки?
    Хочется в дизасемблированных листрингах покопаться, а пока слишком интуитвно все.

    PS: romka кудато пропал... Может ему тут не интересно стало :(

    И если кто пользуется IDA, то напишите какой версией и как заставить ее писать имена вызываемых функций из подгружаемых модулей...
     
  2. Лекс

    Лекс РАЖДЁН, ШТОБ ЖРАТЬ

    Сообщения:
    16.843
    Симпатии:
    550
    Баллы:
    523
    Вообще-то он сегодня ночью писал на форуме.
     
  3. dimm

    dimm Moderator Команда форума

    Сообщения:
    15.625
    Симпатии:
    3.813
    Баллы:
    623
    У меня есть все доки по процам 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?
     
  4. Vic

    Vic L0neWarri0r

    Сообщения:
    2.170
    Симпатии:
    157
    Баллы:
    123
    dimm,
    Дак залей на ifolder и все дела...
     
  5. dimm

    dimm Moderator Команда форума

    Сообщения:
    15.625
    Симпатии:
    3.813
    Баллы:
    623
    Если не найдете, залью в понедельник, на работе.
     
  6. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    В гугле все ссылки мертвые :(
     
  7. dimm

    dimm Moderator Команда форума

    Сообщения:
    15.625
    Симпатии:
    3.813
    Баллы:
    623
    Chook, вот пока EE Core Instruction Set Manual
    http://ifolder.ru/5743094
    может тебе его и хватит, посмотри
     
  8. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    dimm, спасиб! Этого думаю мне хватит чтобы разобраться.
    Вот козлы... заблокировали даже копирование из файла текста...

    Мне просто интересно что делают патчи образов для совместимости с HDLoader
     
  9. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    По IOP специальной документации что-то не помню, но можно почитать вот это:
    cgi.cse.unsw.edu.au/~cs3231/doc/R3000.pdf

    Для EE ещё очень пригодится приложенный скрипт, так как сигнатуры хоть и есть, но сделаны они по очень старым версиям официальных библиотек.
     

    Вложения:

    • ida-script.zip
      Размер файла:
      1,9 КБ
      Просмотров:
      45
  10. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    romka, привет!
    Если есть интерес, не поможешь разобраться что например в Jak 3 сделано чтоб эта игра с ХДД шла?
    Я пока сам покопаюсь. По моему разумению, ведь игры не могут на прямую к СД-ДВД обращаться? Все идет через библиотеку? Или я не прав? То есть какие-то функции библиотеки не совсем корректно эмулируются лоадером...
    Заинтересовался я очень причинами незапуска и зависаний игр...
     
  11. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    Если не ошибаюсь, то основной ELF в Jak 3 обработан каким-то упаковщиком и поэтому его просто так с ходу разобрать не получится.

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

    Чтобы смотреть, что происходит на EE надо сначала, как минимум, найти все функции библиотеки libcdvd, которые работают через механизм SIFRPC.
     
  12. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    В игре патчится только не зашифрованный файл SCES_524.60
    А подскажи какой версией ретейл ИДА ты пользуешься? А то я уже в этих версиях заблудился :(
     
  13. Vic

    Vic L0neWarri0r

    Сообщения:
    2.170
    Симпатии:
    157
    Баллы:
    123
    А мне вот интересно,что за проблема такая с негрузящимися сейвами в суикоден4:(
     
  14. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    Подойдёт любая более менее новая Advanced-версия, потому что в Standard нет поддержки MIPS. 5.x.x я не смотрел, но во всех виденных 4.x.x поддержка MIPS была и везде были одинаковые недостатки при разборе IRX.
     
  15. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    Так, отлично. Есть 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
     
  16. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    Там кстати до этого было
    lui $a0, 0x13
    Функция номер #13 чтоль вызывается?

    Кстати в мануале по командам я не нашел что такое LA, какой-то вызов вероятно.
    Впрочем как и команды B я тоже не нашел, вероятно безусловный джамп...
     
  17. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    выбирай r5900l


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


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


    Можно. Операция называется примерно так Produce output file.

    Судя по коду, отключили выгрузку из памяти какого-то irx-модуля. Скорее всего игра хочет выгрузить CDVDSTM.IRX. Где-то я встречал такой патч.
     
  18. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    lui - это загрузки верхних 16-бит регистра.
    По сути lui $a0, 0x13 записывает в $a0 значение 0x130000. То есть адрес в памяти записывает в регистр двумя командами - lui и какрй-нибудь addiu.

    la - это мнемоника загружки адреса
    b - это команда branch - аналог jmp x86.
     
  19. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    83
    Баллы:
    93
    Тогда не понял немного...
    Если LA загрузка адреса. то что выполнялось раньше перед сравнением?
    Фенкция cdvd_ee_driver кажется в коде ЕЛФ самого находится выходит?
    а 0x130000 это ее адрес?
    Потом идут сравнения какие-то и потом если не вышло выгрузить то выдается ошибка. А после патча все сравнения пропускают и идут дальше.

    Так у этого процессора исполнительный адрес в 2 приема грузится всегда выходит? У Правцов (вариантов эплов) я такое встречал, но там дурнее было еще :) Там часть адраса в опреативку писалась, а другая в регистре хранилась.
     
  20. romka

    romka Очень главный

    Сообщения:
    4.459
    Симпатии:
    180
    Баллы:
    203
    Перед сравнением выполнялась функция поиска загруженного IRX по внутреннему имени модуля. Загрузка адреса выполнялась для передачи параметра в функцию через регистр $a0. То, что команда jal находится раньше la - это так и должно быть, потому что команды выполняются парами.


    Это не функция о обычный reference на строку "cdvd_ee_driver" (с нулём на конце).


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