Портируем старые плагины, такие, как Music.prx, под прошивку 6.60
Портируем старый плагин Music.prx под прошивку 6.60/6.61
В общем пришла идея телепортации старинного отличного плагина Music.prx под прошивку 6.60.
Изначально этот плагин был изготовлен для консоли "neogeoCD 0.91" разработчиками Yoyofr & ZeLurker. Затем AhMan портировал его под PSP, во времена прошивок 3.02 ОЕ и совершенствовал его до прошивки 3.52 M33-2, добавляя кодеки и функционал.
Позже за работу взялся Cpasjuste и выпустил релиз, якобы адаптировав плагин под прошивку 3.90. С тех пор эта версия так и летает по всем просторам интернета и хорошо зарекомендовала себя в работе даже на новых прошивках.
Собственно суть проблемы такова, что на прошивке 6.60 плагин всё же неплохо работает, однако присутствуют свои костыли - это игнорирование настроек в файле конфигурации music_conf.txt, не работающие некоторые функции, по сочетаниям кнопок.
В чём состоит проблема?
Я просмотрел код плагина, он поставляется с исходниками. Несмотря на заявление Cpasjuste о портировании плагина под прошивку 3.90, я прекрасно вижу функции NID-ов от прошивок 3.7x. То есть, в прошивке 3.90 все NID-ы функций поменялись и меняются эти NID-ы постоянно от прошивки к прошивке.
Что такое NID-ы?
Это названия функций, которые вызываются именно по названию и выполняют присущие им действия. Но начиная где-то с прошивок 3.7x, Sony перестала напрямую вызывать функции в файлах своими именами, а стала скрывать их, хешируя названия в 4-байтный код, то есть к названию модуля прикрепляет закодированный номер функции. Вот как это выглядет на небольшом примере, после вывода дизассемблером PRXTool v1.1
Первая 4-х байтная единица, например 0x01562BA3 - это и есть захешированный номер NID функции.
Следом в скобках указывается позиция, где она записывается.
И через тире уже нам дизассемблер даёт подсказку о самом настоящем названии функции в нехешированном виде. На самом деле этих названий вы не увидите в файле. Это разработчики PRXTool уже внесли в программу названия основных известных функций, которые не меняются.
Но на самом деле, есть ещё множество подфункций, которые SONY умышленно изменяет при выпуске очередного релиза прошивки. Вот так их опознаёт PRXTool:
То есть, дизассемблер определяет по коду программы область подфункций, принадлежащей основному модулю sceAudio_driver и, не зная настоящего названия функции, просто подставляет его цифровой хеш к названию основного модуля - sceAudio_driver_0B74AAA2
Что за 4-х байтный хеш функции?
Как я уже упоминал ранее - это хеш полного названия функции. Хотя я и раньше оперировал с хешированными НИДами и умудрялся отыскивать нужные, но не представлял откуда берётся этот хеш. Этот секрет недавно мне поведал frostegater в соседней теме, где он выложил свою консольную утилитку по превращению названия функции в её захешированный вид. Затем Yoti облегчил этот процесс, нарисовав GUI интерфейс для быстрого ввода-вывода информации . Вы можете сами потестить программку: N1D G3N3R@T0R.exe
На данном примере, на скриншоте, я взял первую строчку из 1-го блока кода выше, где указаны нерандомизированные НИДы, чтобы наглядно увидеть вывод хеша из названия функции:
0x01562BA3 [0x00001354] - sceAudioOutput2Reserve
Как видно, название функции sceAudioOutput2Reserve превращается в 4-байтный код 0x01562BA3.
А заменив это название в захешированный вид, его можно использовать как-то так: sceAudio_01562BA3.
Хешь извлекается следующим образом... Из названия функции генерируется чек-сумма SHA-1 (160 bit).
В данном случае SHA-1 равна - A32B56014147A25FDE15A7AF4D596DADA06BE3AB
Затем берутся первые 4 байта и инверсируются побайтно. Получаем 01562BA3.
С чего начинать?
Начинать следует с дизассемблирования этих функций самого плагина music.prx и вот что он нам выдаёт (я почистил лишние куски кода, которые нам абсолютно не нужны и оставил только названия функций, которые изменяются от прошивки к прошивке):
Вот это все изменяющиеся функции, используемые плагином для своей работы.
А теперь посмотрим на SilverSpring's PSP PRX Libraries Documentation Project. Эту тему я специально подготовил, т.к. его сайт постоянно находится в ауте. И он много времени отдал этому проекту, вычисляя NID-ы: имена функций на каждой прошивке.
Итак, открываем libdoc от прошивки 3.7х и смотрим файлы, соответствующие модулям в плагине music.prx, видим следующие цифры:
Сравнив показания плагина music.prx выше и функций прошивок 3.7х здесь, мы видим, что идёт 100% совпадение!!!
Скажу больше, в прошивке 3.90 нет этих цифр впомине. То есть, там НИДы функций полностью изменены. Поэтому заявление разработчика, что он адаптировал плагин под прошивку 3.90 - явная ложь.
Итог: нам теперь явно ясно, что для портирования плагина под прошивку 6.60, необходимо искать соответствующие НИДы функций в этих файлах:
Название файла Название модуля
kd/audio.prx sceAudio_Driverkd/display.prx sceDisplay_Servicekd/power.prx scePower_Servicekd/ctrl.prx sceController_Service
Проще говоря, НИДы плагина прошивки 3.7х необходимо сопоставить НИДам тех же функций прошивки 6.60.
Заменить их в исходниках и заново скомпилировать новый адаптированный плагин под 6.60.
Как правило, у каждого модуля существует определённый набор функций и их количество и порядок в файле редко изменяется. Поэтому, думаю, не составит труда сопоставить НИДы этих прошивок, либо ещё промежуточных и вывести параллели между прошивками.
Далее можно выстроить параллели каждого типа НИДа в каждой прошивке и составить таблицу.
Процесс исследования плагина music.prx
Для начала, необходимо вычислить все функции рандомных NID-ов, используемых плагином. Скачиваем дизассемблер PRXTool и закидываем туда наш подопытный файл music.prx.
Запускаем батник "16. ImpExp & Alias Print.bat" и получаем на выходе все Импорты и Экспорты функций, используемых плагином в текстовом файле "16_Import_Export.txt".
Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом.
Далее, вычисляем по рандомным НИДам версию прошивки, от которой эти НИДы были использованы. Ну тут ясное дело, что НИДы функций принадлежат прошивке 3.71.
Поэтому берём файлы прошивок 3.71, в которых используются эти функции и дизасмим их. Так как я больше разбираюсь в HTML, то я выбрал батник дизасма "24. DISASM2HTML.bat" и сохранил результаты в папке под названием прошивки "371". Затем произвёл то же самое действие с аналогичными файлами от других прошивок, чтобы проследить сдвиги функций от прошивки к прошивке.
Таким образом эти HTML файлы от разных прошивок я просто сравнил в браузере. Разница в НИДах и сходство кода видна невооруженным глазом. На этом примере я произвёл поиск в дизассемблированном файле audio.prx.html по НИДу sceAudio_driver_138A70F1 в прошивке 3.71. Затем, посмотрев на окружение найденного, произвёл поиск по соседнему значимому слову sceAudioOutput2Release в других прошивках, что явно вывело на аналогичный код и выдало изменившиеся НИДы, как на тарелочке с голубой каёмочкой.
В ообщем тут такие дела, что эти функции в прошивках 6.xx исчезли бесследно.
В sysmem.prx в основном все остальные подобные функции стоят на месте неизменно, а вот именно эти просто убрали.
Возможно в ПРО-шивке они это дело пофиксили и добавили функционал старых прошивок.
Иначе config.c совсем не работал бы.
Итак, портирование плагина music.prx for 6.60 завершено (mediafire.com). Это финальный релиз!
Результаты портирования с окончательной таблицей в шапке. Всё, что было возможно - было портировано под 6.60.
Тему по плагину music.prx можно закрывать.
Просьба потестить во всех режимах на прошивке 6.60 и доложить о багах...
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 02.04.2014 в 08:33.
Это финальный релиз!
Результаты портирования с окончательной таблицей в шапке. Всё, что было возможно - было портировано под 6.60.
Тему по плагину music.prx можно закрывать.
Просьба потестить во всех режимах на прошивке 6.60 и доложить о багах...
внутри пакета в music_conf.txt - все равно стоит дебаг вкл, зачем?
перезалью тогда с выключенным дебагом
на вите ничего не изменилось. переключение цпу не стало работать
все что работало, продолжило работать так же как в предыдущем релизе
внутри пакета в music_conf.txt - все равно стоит дебаг вкл, зачем?
music_conf.txt просто лежит оригинал из исходников. Там автор оставил его включённым и написал типа это для меня. Так что наверное нужно его отключить, обычным пользователям он не нужен наверное, чтобы глаза не мозолил.
Сообщение от SILENT-Pavel
переключение цпу не стало работать
ОК, я его не стал трогать. Там код вроде бы рабочий, раз работал на 3.7х, ниды функций полностью под 6.60, 100 раз проверял.
Ну не работает и фиг с ним. Вон смотрю PLUM делал свой MP3Player на основе этого и просто тупо удалил поддержку скорости процессора.
Думаю в инструкции по кнопкам управления нужно совсем убрать эти кнопки. Хотя на PSP видать никто не проверял, видимо PSP ни у кого не осталось.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Хотя на PSP видать никто не проверял, видимо PSP ни у кого не осталось.
Тут один человек на пда отписался, что не работает у него чего-то. Завтра попробую на трёшке. Никогда музыку не слушал с помощью ПСП, поэтому напряжно.
В общем изучаю все возможности плагина
правда все еще на вите
в общем изменил директорию в конфиге с мьюзик на ат3 фолдер в руте
положил в ат3 фолдер ат3 музыку из тёмного зеркала суфон фильтра
плагин работает, но ат3 не играет. всмысле он их нашел и понимает, но PLAYING идет. а звука от них нет
на обоих плагина. древний и 6.60 оба не играют его на вите
ну мб это норма. не так важно, ат3 кодируется другими средствами в мп3. это не косяк. просто изучаю плагин и его работу на всем чем можно
SILENT-Pavel, есть 2 формата, у обоих расширение *.at3
ATRAC3PLUS - это зашифрованный формат и он не будет проигрываться просто так, только на специальном хардварном чипе Sony. Плагин скорее не может им управлять.
ATRAC3 - это свободный формат (в хедере найдёшь RIFF....WAVEfmt) По сути это обычный WAVE контейнер с расширением *.wav и кодеком ATRAC3, просто расширение поменяли на *.at3 по названию кодека. Тема для ознакомления и кодека для PC.
В образе Сифон Фильтра скорее всего шифрованная музыка. Её нужно сначала декодировать средствами PSP, возможно Виты. В редми от Ахмана к плагину в описании затрагивается вскользь этот момент, по поводу *.at3, и его составляющих сырцов *.oma, *.omg. Раньше была прога SonicStage бесплатная, которая декодировала AT3PLUS и скидывала автоматом на PSP в папку ms0:/OMGAUDIO/. Поэтому плагин и берёт эти файлы из этой папки по-умолчанию. Потом Sony эту прогу совсем ликвидировала и удалила.
Эту прогу SonicStage можно взять в этой теме.
Там же есть прога для декодирования ATRAC3PLUS на PSP: AT3_DecodeTest_kernel150_&_3xx SILENT-Pavel, классная темка получилась!
vash, SILENT-Pavel,
Если будет время, протестите плиз PSARDumper на декриптовку 6.35 и GO(6.10,6.20,...6.60 - вроде для гошки эти прошки).
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 03.04.2014 в 20:13.
Проверил плагин Music.prx для 6.60 на ПСП3000 с прошивкой 6.60LME-1.8. Залил в папку ms0:/MUSIC/ три файла .mp3. Тестил и в игре, и в хоумбрю (Соул Калибур и Эверест). Все пункты меню, которые указаны - работают как надо по-определению. Не разобрался только с пунктом 12. + = Повторить. Чего он там повторяет? При нажатии этой комбинации ничего не происходит: как играла выбранная мелодия, так и играет.
П.С.: хотел заскринить работу музыкального плагина при выведении меню с информацией (пунктом 10), не срабатывает скриншотер.
Сообщение от ErikPshat
...протестите плиз PSARDumper на декриптовку 6.35 и GO(6.10,6.20,...6.60 - вроде для гошки эти прошки).
Проверил этот дампер. Проша 6.20 от гошки декриптовалась нормально, остальные прошивки не декриптовались, в т.ч. и 6.35 для ПСП. Причём, 6.60 для гошки вообще отказалась обрабатываться, хоть дампер и увидел её как 6.60 (сразу написал, что для выхода нажмите ).
vash, круто, а частоту процессора повышает и понижает?
Про PSARDumper забыл добавить, что нужна информация, какой table_mode показывает на прошивках, которые не декриптуются.
Он эту инфу должен выводить после старта, когда начинает грузить прошивку.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Да, как положено. Изменения частоты индицируются на экране, а также, при включённом меню плагина. В общем, с мп3-файлами, кроме последнего (пункта 12 в описании управления) непонятного повторения, всё работает.
Щас мод гляну и тут напишу.
Результаты:
mode 4 включается при прошивках 6.35, 6.39, 6.35 го, 6.39 го и не декриптует их, а также 6.60, но её декриптует.
mode 5 включается при прошивках 6.20 го (декриптует) и 6.60 го (не декриптует, см скрин)
Последний раз редактировалось vash; 03.04.2014 в 14:33.
последнего (пункта 12 в описании управления) непонятного повторения
По идее это функция loop - зацикливание воспроизведения. То есть, при нажатии клавиш, вроде бы ничего не должно происходить, но песня по окончании должна повториться снова.
И попробуй уменьшать частоту процессора до минимума, как дойдёт до 29/14, то PSP должна неадекватно себя вести, мерцать экран, особенно в играх.
Да, были жалобы по поводу воспроизвения из других папок. Вообще говорили, что проигрывает всегда только из ms0:/PSP/MUSIC/, но не подхватывает ms0:/MUSIC/
По поводу дампера вроде бы ситуация проясняется, ещё бы информации со скринами и не вперемешку c Go.
Не хватает информации по ошибке - ? -> Cannot decrypt Xg table FFFFFFFF.
Ещё просьба проверить 6.10 от Go (там в коде как раз они идут в паре для 6.10 и 6.20.)
Вот я тебя загрузил
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
И ещё, в исходниках я смотрю, что музыка должна проигрываться из поддиректорий, т.е. например в папке ms0:/MUSIC/ можно создать подпапки и из них так же должна подхватываться музыка.
По идее это функция loop - зацикливание воспроизведения. То есть, при нажатии клавиш, вроде бы ничего не должно происходить, но песня по окончании должна повториться снова.
Да, точно. При включении этой функции, воспроизводимая мелодия зацикливается. Если эта функция не включена, то воспроизводятся музфайлы подряд, а по окончании списка, стартует заново.
Сообщение от ErikPshat
И попробуй уменьшать частоту процессора до минимума, как дойдёт до 29/14, то PSP должна неадекватно себя вести, мерцать экран, особенно в играх.
Да, именно. При минимуме (индицируются цифры 028:046) игра становится слайдшоу, при максимуме (333:166) - всё нормально. И я ошибся, во включаемом меню информации я не нашёл цифр частоты проца.
Сообщение от ErikPshat
Да, были жалобы по поводу воспроизвения из других папок. Вообще говорили, что проигрывает всегда только из ms0:/PSP/MUSIC/, но не подхватывает ms0:/MUSIC/
Я воспроизводил именно из папки ms0:/MUSIC/.
П.С.: сейчас на прошивку 6.10 поищу и проверю.
Сообщение от ErikPshat
И ещё, в исходниках я смотрю, что музыка должна проигрываться из поддиректорий, т.е. например в папке ms0:/MUSIC/ можно создать подпапки и из них так же должна подхватываться музыка.
Создал в папке ms0:/MUSIC/ папку ms0:/MUSIC/1/, положил и в неё музыку, воспроизводит и из ms0:/MUSIC/, и из ms0:/MUSIC/1/, как-будто рядом лежат. В меню плагина путь правильно отображается. Только к чему так извращаться?
DIR = ms0:/MUSIC/ #must end with a slash
#DIR = ms0:/PSP/MUSIC/
Если убрать спереди знак #, то эта строчка будет активирована. Можно поменять решётки на другую папку и должна музыка подхватываться из другой папки, либо совсем убрать решётки с путей, тогда должна подхватываться с обеих папок.
Да, поставь звук в конфиге на 50, иначе звук при включении музыки по умолчанию будет сразу на 100%
VOLUME = 100 # 0-100, default volume
Сообщение от vash
Создал в папке ms0:/MUSIC/ папку ms0:/MUSIC/1/, положил и в неё музыку, воспроизводит и из ms0:/MUSIC/, и из ms0:/MUSIC/1/, как-будто рядом лежат. В меню плагина путь правильно отображается. Только к чему так извращаться?
Оу, ну это совсем отлично!!!
Ну можно в папке музыки разложить песни по своим подпапкам, например по альбому или по жанру. Чисто для себя, чтобы было, как в библиотеке, всё по своим полочкам. И потом, возможно можно выбирать музыку в порядке воспроизведения подпапок.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 03.04.2014 в 16:24.
Ага, высвечивается в меню плагина Plylst Status:00000004.
Ещё, для особо извращённых, проверил запуск файла с таким названием: _яю____C_1_=_0_O_ __C_7_K___0_ =_0_ A_0_9_B_5_ - _яюFake_Do_Am.mp3
Запустился, только вместо кириллических букв крякозяблы.
Не хватает информации по ошибке - ? -> Cannot decrypt Xg table FFFFFFFF.
Такая ошибка возникла только при попытке обработки прошивки 6.60 от гошки. На других прошивках, которые не декриптуются, картинка несколько другая, например 6.35 для ПСП:
начало запуска -
, продолжение -
, и окончание процесса -
.
Сообщение от ErikPshat
Ещё просьба проверить 6.10 от Go
Эээ? 6.10?
Сообщение от ErikPshat
Смена скорости процессора - работает, но не выводится инфа об изменении на экран. Нужно попробовать добавить вывод инфо.
Да нет, во-время изменения показывает внизу слева экрана, на пару секунд, я же писал, типа 028:046 на минимуме.
Сообщение от ErikPshat
Плейлист - получается не берётся из специального файла PLS/M3U, а генерируется плагином внутри программы на основе имеющихся треков.
Я файлы PLS/M3U не делал, поэтому такой вывод не правилен. А название файла берётся прям из названия, хотя на компе и название альбома, и артист, и фирма-производитель файла виден. Винда из самого мп3 файла данные берёт.
Да нет, во-время изменения показывает внизу слева экрана, на пару секунд, я же писал, типа 028:046 на минимуме.
Да я об этом. Я так понял, что инфа о скорости не выводится по + = Вызов на экран меню с информацией.
Сообщение от vash
И я ошибся, во включаемом меню информации я не нашёл цифр частоты проца.
Сообщение от vash
Я файлы PLS/M3U не делал, поэтому такой вывод не правилен.
Ну я уже понял, что это именно так, потому что в исходниках не нашёл данных именно по формату плейлистов PLS/M3U, поэтому из воздуха они не могут читаться. Просто автор в программе назвал так плейлисты. А на самом деле, плагин сканирует директории, находит все песни и запоминает их количество и названия. Потом использует эту инфу в памяти для переключения между треками, зацикливания, последовательного и рандомного воспроизведения.
По поводу PSARDumper-а, огромное спасибо за скрины! Хоть теперь ясно в какую сторону копать.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram