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

Перейти к полной версии