Сообщение от Scorpeg
Я про команду branch (bne например), не про jump. У джампа 3 байта + 2 бита (26 бит) под адрес, у бранча - 2 байта под указатель смещения (16 бит). Еще раз отсылаю читать доку по mips, а не спорить ради спора.
|
Ну так а я про джампы веду разговор. Это ты же читаешь мои посты про джампы, а отвечаешь про бранчи. Бранчи-то понятно, что там там другой алгоритм и математическая формула. Там 2 регистра и значение, где в значении указывается смещение, относительно места расположения этого самого значения и расчитывается по формуле:
значение - offset : 4 - 1.
И по ходу дела, я смотрю структуру кода и сразу выписываю формулы, чтобы закрепить знания в постах. Тебе может это не надо, но другие люди тоже могут искать ответы на подобные вопросы и им может помочь информация, каким образом эти цифры появляются и генерируются в файлах.
Короче, я просто посмотрел твои формулы и заметил, что ты использовал абсолютные смещения, хотя в EBOOT.BIN кругом используются относительные внутренние смещения. Поэтому подумал, почему бы не воспользоваться стандартами по аналогии с файлом, и вынес этот вопрос на обсуждение. От тебя просто хотелось услышать пояснения, почему был избран такой путь, а не то, как "
у Erik'а задвиг не туда" или всякие ликбезы.
Ладно, признаю, что я полный лох педальный.
За твою реализацию хитрого плана с кнопками, присваиваю тебе звание Про-Геймера
riku.kh3, почитал ещё раз твою ссылку:
http://bbs.blacklabel-translations.c...?tid=35&pid=84
В первый раз как-то не так дошло и я не туда полез выполнять шаг 2. Сейчас наконец допёрло, что это относилось всё к тем же строкам. Там помимо смены $zero на регион, чтобы не было глюков, надо было ещё сменить функцию
move на
li. После первой правки было так, с move:
0x0000C7D0: 0x00002025 '% ..' - move $a0, $zr
0x0000C7D4: 0x0C045016 '.P..' - jal sceImposeSetLanguageMode
0x0000C7D8: 0x00002825 '%(..' - move $a1, $zr
Чтобы сменить регистры, нужно поменять регистры
move: 2025 и 2825 на
li: 2404 и 2405 (для 10-тичного формата) или на 3404 и 3405 (для 16-ричного формата)
0x0000C7D0: 0x24040008 '...$' - li $a0, 8
0x0000C7D4: 0x0C045016 '.P..' - jal sceImposeSetLanguageMode
0x0000C7D8: 0x24050001 '...$' - li $a1, 1
Я сделал смену языка в десятичном формате. Если в первой строке поставить 1, то будет надпись на английском языке, я поставил на 8 для русского языка. Готовый файл, с правками кнопок от
Scorpeg, во вложении...