Разработка и ромхакинг > Ромхакинг
Программа для "распутывания" перепутанных бит
(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 удобнее будет.
Навигация
Перейти к полной версии