| Разработка и ромхакинг > Ромхакинг |
| Программа для "распутывания" перепутанных бит |
| (1/1) |
| Talking_Sword:
Существует ли программа, которая могла бы привести в нормальный вид дамп ПЗУ, у которого биты на шине данных были подключены неправильно? |
| Sharpnull:
Есть какой-то алгоритм, как таблица перестановки битов, или должно быть магическим способом? |
| Talking_Sword:
Sharpnull, нужна такая программа, в которой можно бы было вручную задать соответствие битов данных. То есть, например: D15=D11 D14=D3 D13=D10 D12=D2 И т.д. На самом деле, там все биты перепутаны, кроме одного. |
| Sharpnull:
Под алгоритмом имел в виду более подробное описание действий. Как понял, обработка по 2 байта из файла и порядок байтов Big-Endian. Вот скрипт на Python 3, кидать файл на него (1-й аргумент), в скрипте задайте порядок байтов: BIG_ENDIAN = True - это BE, поставить False для Little-Endian, перестановку битов: список TABLE состоит из чисел от 0 до 15, это число - индекс бита из входного числа, а индекс самого списка указывает на индекс бита куда будет на выходе, т. е. для D15=D11 (D11 из входного в D15 выходного): --- Код: ---TABLE = [ 0, # 0 1, # 1 2, # 2 3, # 3 4, # 4 5, # 5 6, # 6 7, # 7 8, # 8 9, # 9 10, # 10 11, # 11 12, # 12 13, # 13 14, # 14 11, # 15 ] --- Конец кода --- Справа после # комментарий для удобства, указывает на выходной бит. |
| Talking_Sword:
--- Цитата: Sharpnull от 25 Май 2023, 14:41:22 ---Под алгоритмом имел в виду более подробное описание действий. --- Конец цитаты --- Забыл написать, что шина 16-битная. На счет подробного описания действий - пользователь может сам задать соответствие бит, то есть такой-то бит=другой бит. Должна быть возможность менять все 16 бит. Так как шина, как уже говорилось, 16-битная, придется менять биты из соседних байт, так как программы на компьютере оперируют 8-битными байтами. Тот код, что вы выложили, похоже то что надо. Спасибо. Но еще не попробовал. --- Цитата: Sharpnull от 25 Май 2023, 14:41:22 ---в скрипте задайте порядок байтов: BIG_ENDIAN = True - это BE, поставить False для Little-Endian --- Конец цитаты --- Какой порядок нужен для ROM-ов Sega Mega Drive? |
| supremacy:
Я писал себе программку на c++, которая меняла биты, правда для 8 битного бинарника, могу исходник поискать. Но я порядок прям в коде задавал. Вроде попадалась такая тулза, возможно на romhacking даже. Сейчас поискал, но нашёл только ту, где смену бит под 27c801 можно сделать. |
| Sharpnull:
--- Цитата: Talking_Sword от 25 Май 2023, 19:06:21 ---Какой порядок нужен для ROM-ов Sega Mega Drive? --- Конец цитаты --- У MD Big-Endian, но ромы при записи и дампе могут с другим порядком байтов, это уже вы смотрите. Вы можете сделать перестановку при любом варианте, вам нужно знать как в файле у вас идут байты и их биты и что нужно получить. У меня при BE: в HEX-редакторе 01 04, значит биты от старшего (15) до младшего (0) идут слева направо как есть - 0000 0001 0000 0100, а если у меня сделать LE - будут сначала биты от 7 до 0 (bin 0000 0001), потом от 15 до 8 (bin 0000 01000). Так что наверно BE удобнее будет. |
| Навигация |
| Главная страница сообщений |