22/10/02 Фиксим поганый CRC (SNES); для
форума:
Берем, к примеру, "Secret of Mana II". Поехали!
Запускаем утилитку: smc /s SEIKEN3.SMC
Он говорит:
Filename: SEIKEN3.SMC
CartName: SeikenDensetsu3e
CheckSUM: BAD (ROM= 6639 / CALC= 37240(+30601))
Нужно подсчитать, сколько байт (n) нам потребуется.
Берем вот это самое "+30601".
Если тут "+" то n=(65536-30601)/255, если бы был "-" то n=30601/255
Делим на 255: (65536-30601)/255=137
Итак, нам потребуется 137 байт свободного места (т.е., заполненного нулями(!)). Ищем его.
Кажется, есть подходящее место по адресу 3E5908h (знакогенератор, это место хорошо тем, в случае попадания нами на используемый участок - это сразу будет заметно).
Заполняем, начиная с этого адреса, 137 байт значением FF.
Опять запускаем: smc /s SEIKEN3.SMC
Вуаля: CheckSUM: OK (6639). Все счастливы! (Кроме Hero ;) )
Блин, это был неудачный пример! Как правило, n получается дробное. Нужно округлить его в большую сторону, и последний байт будет не 0FFh (255), а иным. Утилитой SMC его легко подобрать.
И вот ещё что. Я был не прав, в худшем случаем может потребоваться не 128, а 257 байт. (?) %-(
2Hero: Еще одна причина восстановить CRC. Если юзер возьмет для патча "неправильную" или просто битую версию РОМки - он сразу это заметит. Имхо, это хорошо.
2All: Обратите внимание, мы НЕ фиксим чексум, а наоборот - подгоняем РОМку под чек-сум. Чек-сумма нашего рома и оригинального будет совпадать. В принципе, это плохо, и метод здорово напоминает удаление гланд через задний проход. Но, "А шо делать?" (с) ;)
|