Автор Тема: О формате катриджа для денди.  (Прочитано 8956 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ajak

  • Пользователь
  • Сообщений: 235
  • Пол: Мужской
    • Просмотр профиля
О формате катриджа для денди.
« : 05 Октябрь 2007, 17:58:31 »
Привет ещё раз. Расскажите что есть дамп катриджа. просто обычный дамп, слепок памяти или у него есть формат, ну к примеру как у PE  у винды, или ELF у Лина. С какого смещения начинается код, данные? Ведь  через хекс видно заголовок NES. По мне так значит есть формат, но после анализа, мне кажется что я жестоко ошибаюсь. Посоветуйте что почитать.Спасибо.

Добавлено через 16 минут
:ohmy: Пардон, в заголовке написал сега, имел ввиду - денди.:)

[Neon] -_-
« Последнее редактирование: 05 Октябрь 2007, 18:02:26 от Neon »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #1 : 05 Октябрь 2007, 18:12:31 »
Заголовок ромов NES - искуственный, его ввели для заэмулирывовывания ромов.
В картриджах SMD в $100-$200 есть заголовок, но сам по себе он ничего не даёт. Строго говоря, по адресам 0-$200 прописаны вектора прерываний, но вторую половину обычно используют как этот самый "заголовок".

Оффлайн sergi

  • Пользователь
  • Сообщений: 1650
    • ВКонтакте
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #2 : 05 Октябрь 2007, 18:13:36 »
В начале рома пишется заголовок - в нем написано что за маппер используется ну и еще чегото там - нужно для эмулятора
А для картриджа заголовок не нужен - поэтому первые 16 байт файла нужно отрезать и выкинуть из рома - и потом писать на картридж

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #3 : 06 Октябрь 2007, 01:01:09 »
Цитата: GManiac;175845
Заголовок ромов NES - искуственный, его ввели для заэмулирывовывания ромов.
В картриджах SMD в $100-$200 есть заголовок, но сам по себе он ничего не даёт. Строго говоря, по адресам 0-$200 прописаны вектора прерываний, но вторую половину обычно используют как этот самый "заголовок".

Векторов у М68К ровно 256 и занимают они область с $000000 по $0003FF. Т.е. ровно первый килобайт. Но реально юзается совсем немного - 3-5, иногда до 7 доходит. Причем, аппаратных прерываний всего 3. У пресловутого МК заведен вектор BusErr, отсюда и вылетает дебаггер. А больше всего векторов юзает софт для компов на базе Сеги (это Магистр и т.д.). Они юзают даже некоторые из векторов User, это как INT для х86. В качестве точек входа в подпрограммы. Остальное заглушено. Но чтобы место не пропадало они используют только первые 256 байт под вектора (доступны только первые 64 вектора), а с 100h адреса сделали заголовок человеческий. Да и нужен он был наверно только для показания копирайтов, и указания региона защите. В остальном он бесполезен.
« Последнее редактирование: 06 Октябрь 2007, 14:03:41 от HardWareMan »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #4 : 06 Октябрь 2007, 01:27:33 »
Попутал, действительно, векторов 256, мне почему-то казалось, что их 128.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #5 : 06 Октябрь 2007, 05:11:48 »
Во всех нормальных программах все 64 вектора исключений обрабатываются. Просто на неиспользуемые обычно ставится заглушка, приводящая к рестарту. Хотя иногда, как в том же МК3, ставится специальный обработчик. Причем обрабатывает он не только Bus Error, но и Addres Error, и Zero Divide, и Trap Instruction, и прочие.
А вот "указаний защите" там нет.

Однако, что-то мы сильно удалились от темы.
Лучше расскажите, из чего состоит заголовок РОМа НЕС. Первые 3 байта понятно - NES, а следующие 4? Должна быть информация о размере PRG и CHR.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #6 : 06 Октябрь 2007, 08:00:36 »
После NES идет какой-то байт (обычно 1А), затем количество банков графики, потом количество банков PRG, потом сам маппер и mirroring, тип VS или обычный, W-RAM, и вроде регион. А дальше расширеные параметры, какие-то.

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #7 : 06 Октябрь 2007, 08:49:30 »
Цитата: Rumata;175948А
вот "указаний защите" там нет.

Я имел в виду, что 2К "ОС" в оригинальной приставке сначала смотрит надпись "SEGA" по адресу $000100, потом страну по адресу $0001F0, закодированную буквой (JUE). И ты это знал.
Цитата: Rumata;175948А
Однако, что-то мы сильно удалились от темы.
Лучше расскажите, из чего состоит заголовок РОМа НЕС. Первые 3 байта понятно - NES, а следующие 4? Должна быть информация о размере PRG и CHR.

Да, сначала для заголовка использовались только первые 7 байт, а в остальные пираты заносили свою подпись (например знаменитый "DiskDude!"). Но потом, 7ми байт перестало хватать и стали использовать больше, поэтому старые РОМы могут не работать на новых эмуляторах без правки заголовка. Получается, просто испорчен номер маппера, т.к. в байте, содержащем старшие 4 бита маппера была буква "D" (0x44).
[b]Байт     Содержание[/b]
---------------------------------------------------------------------------
0-3      Строка "NES^Z" "^Z" = 0x1A
4        Количество 16кБ банков PRG.
5        Количество 8кБ банков CHR.
6        бит 7-4   Эти 4 бита - младшие биты номера типа маппера ROM.
-        бит 3     1 для 4х экранного VRAM.
-        бит 2     1 для 512ти байтного тренера по адресам $7000-$71FF.
-        бит 1     1 для энергонезависимого SRAM по адресам $6000-$7FFF.
-        бит 0     1 для вертикального отражения, 0 для горизонтального отражения.
7        бит 7-4   Старшие 4 бита номера типа маппера ROM.
-        бит 3-1   Резерв, должны быть 0!
-        бит 0     1 для картриджей систем VS.
8        Количество 8кБ банков RAM. Для совместимости с предыдущими
-        версиями формата .NES, использовать одну страницу 1x8кБ RAM когда
-        этот байт равен 0.
9        бит 7-1   Резерв, должны быть 0!
-        бит 0     1 для картриджей PAL, иначе для NTSC.
10-15    Резерв, должны быть 0!
16-...   Банки PRG по 16кБ каждый. Порядок - по возрастанию. Если используется
-        тренер, то он занимает 512 байт перед первым банком PRG.
...-EOF  Банки CHR.
« Последнее редактирование: 06 Октябрь 2007, 14:59:48 от HardWareMan »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #8 : 06 Октябрь 2007, 13:36:26 »
Не в тему: порядок описания битов должен идти от старшего к младшему, т.к. старший бит внутри байта находится левее (мы ведь слева направо читаем).

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #9 : 06 Октябрь 2007, 14:00:25 »
Цитата: GManiac;175999
Не в тему: порядок описания битов должен идти от старшего к младшему, т.к. старший бит внутри байта находится левее (мы ведь слева направо читаем).
Так (см выше)?
Чета тэг [code] местами парится...

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #10 : 06 Октябрь 2007, 14:40:56 »
Угу.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #11 : 06 Октябрь 2007, 18:05:40 »
Спасибо. Теперь всё ясно.

Цитата: HardWareMan
И ты это знал.
Ты меня на слове не лови :)
Цитата: HardWareMan
и указания региона защите.
. Вот я и говорю, что на регион укзаний защите нет, и вообще, он его не обрабатывает. Регион определяется по чтению $А10000. Мегакеи, созданные изначально для приставок с ОС, именно этот регистр и подменяют. И ты это тоже знаешь:)

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #12 : 06 Октябрь 2007, 18:33:52 »
Цитата: Rumata;176035
Ты меня на слове не лови :)
. Вот я и говорю, что на регион укзаний защите нет, и вообще, он его не обрабатывает. Регион определяется по чтению $А10000. Мегакеи, созданные изначально для приставок с ОС, именно этот регистр и подменяют. И ты это тоже знаешь:)
Согласен. Но та самая "ОС" проверяла регион железа и регион (наверно правильнее язык) игры, который указан в заголовке. И при несоответствии не запускала игру. Так правильно?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #13 : 06 Октябрь 2007, 20:21:40 »
Не-а. Не могу согласиться. ОС проверяла только "легальность" игры. SEGA - это "тм", охраняется законом. Если некто создал некий программный код, который "случайно" запускается на МД, то очень сложно предъявить ему претензии. Но, если он вынужден вставлять в свой код SEGA, то тут он попал. А язык (регион) определяет сама игра, все тексты записанны в ней. В этом легко убедиться на эмуляторе, меняя регион (т.е. отклик на опрос $A10000)

PS
А давай создадим группу по "Полному дизассемблеру ОС"? Очень инересно, что там прописано. Там ведь и свой фонт есть.

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #14 : 06 Октябрь 2007, 21:08:50 »
Вот только что подумалось, а ведь на клонах мегадрайва не было такой надписи "андер лиценз и все такое", да и каких-либо пзух на плате, которую я видел, я не помню... Значит пираты клепали приставки без осей?

Румата, там 2 килобайта... Туда даже проверку нажатия кнопок не вставили - мессага по таймеру появляется. ;) Какая группа. ;) Там собственно кода едва пятая часть - остальное фонт. ;)

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #15 : 06 Октябрь 2007, 21:16:40 »
И вовсе не фонт там. И я ее уже раскручивал. Картинка с надписью так тупо и хранится. Дизассемблил собственноручно написанным кросс-дизассемблером (других нормальных нету, а Никодимовский с багами). Кстати, пока писал его нашел кучу багов в дизассемблере Генса (тот, что в отладчике), но сам проц у них работает как положенно. Вектор AdrErr я специально установил на тот код, который работает в ОЗУ (он туда копируется и запускается. Именно он включает карт назад и проверяет его). Смотрите, изучайте, коментируйте.
« Последнее редактирование: 06 Октябрь 2007, 21:26:07 от HardWareMan »

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #16 : 06 Октябрь 2007, 21:21:41 »
Цитата: CaH4e3
а ведь на клонах мегадрайва не было такой надписи "андер лиценз и все такое",
Правильно, этот текст  выводит только оригинальная консоль. Или клон это не обрабатывает (как и самая первая версия МД, или затерт фонт). А ПЗУ быть и не должно. Ну прикинь, ПЗУ 1 КилоБайт. Это встороено в чип
Я имею в виду Полный Дизассемблер, с построчными комментариями, иначе не интересно
Добавлено через 3 минуты
Фонт, вынутый из ОС.
« Последнее редактирование: 06 Октябрь 2007, 21:27:18 от Rumata »

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #17 : 06 Октябрь 2007, 21:28:13 »
Цитата: Rumata;176078
Фонт, вынутый из ОС.
Ах да, там просто 28 букв латинского алфавита + 4 буквы "SEGA".

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #18 : 06 Октябрь 2007, 21:29:02 »
HardWareMan, а под "dc.w" что, не фонт?

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #19 : 06 Октябрь 2007, 21:38:07 »
Цитата: Rumata;176085
HardWareMan, а под "dc.w" что, не фонт?
Под какими адресами? Там много где "dc.w" ;) Кстати, заметь, надпись "SEGA" в другом цвете... Ну что, бум коментировать?

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #20 : 07 Октябрь 2007, 08:01:40 »
http://xcult.sonic-cult.org/dispart.php?catid=16&gameid=16&subid=1&artid=1
Хвмен, И чем тебе IDA не нравится?
« Последнее редактирование: 07 Октябрь 2007, 08:18:43 от CaH4e3 »

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #21 : 07 Октябрь 2007, 08:37:33 »
Цитата: CaH4e3;176184
http://xcult.sonic-cult.org/dispart.php?catid=16&gameid=16&subid=1&artid=1
Хвмен, И чем тебе IDA не нравится?
А ты присмотрись. Меня вообще бесит, что все пытаются затыкнуть Идой все дыры.

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #22 : 07 Октябрь 2007, 12:12:45 »
Лично я проблем не вижу. Как ты файл оформишь, так он и будет выглядеть. перекрестные ссылки, опять таки. Дизасм с идой превращается в сплошное удовольствие, когда скачешь по ссылкам. А что может сделать plane дизасм? Только то, что ты в него сам закодишь. На сегодня ИДА - самая удобная система для дизасма. Я не имею ввиду возможность потом идашный код на чем-то откомпилировать, я имею ввиду именно дизасм.

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #23 : 07 Октябрь 2007, 14:00:29 »
Цитата: CaH4e3;176217
Лично я проблем не вижу. Как ты файл оформишь, так он и будет выглядеть. перекрестные ссылки, опять таки. Дизасм с идой превращается в сплошное удовольствие, когда скачешь по ссылкам. А что может сделать plane дизасм? Только то, что ты в него сам закодишь. На сегодня ИДА - самая удобная система для дизасма. Я не имею ввиду возможность потом идашный код на чем-то откомпилировать, я имею ввиду именно дизасм.
Я написал не plane дизасм, а cross, что разные вещи. Кросс пробегает по коду, выделяя данные. 100% вариант, даже с табличными переходами.

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #24 : 07 Октябрь 2007, 15:11:16 »
Нормального кросс дизасма нет, потому что невозможно стопроцентно отделить данные от кода, даже при "пробегании". Константные параметры, которые явно вычисляются из пзушных данных кросс может вычислить, но неконстантные, взятые, скажем, из портов - нет. Не говори мне, что твой кросс сам нашел бы точку входа в процедуру, выполняющуюся в ОЗУ, если бы ты не поставил на нее вектор AdrErr. Причем, чтобы сделать это в IDA, нужно иметь всего лишь глаза и один раз ткнуть кнопку 'C'.
« Последнее редактирование: 07 Октябрь 2007, 15:13:25 от CaH4e3 »

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #25 : 07 Октябрь 2007, 19:23:08 »
Цитата: CaH4e3;176258
Нормального кросс дизасма нет, потому что невозможно стопроцентно отделить данные от кода, даже при "пробегании". Константные параметры, которые явно вычисляются из пзушных данных кросс может вычислить, но неконстантные, взятые, скажем, из портов - нет. Не говори мне, что твой кросс сам нашел бы точку входа в процедуру, выполняющуюся в ОЗУ, если бы ты не поставил на нее вектор AdrErr. Причем, чтобы сделать это в IDA, нужно иметь всего лишь глаза и один раз ткнуть кнопку 'C'.
Ну да. Кто чем привык пользоваться. Да и ИМХО все же IDA больше под х86 заточена. Да и как ты только "глазами" бы нашел подрограмму, которая окружена данными? Наугад бы тыкал? Я делал заточенный кросс под Сегу конкретно, с последующим описанием всех портов. Причем, вариант с определением кода, работающего в ОЗУ (при наличии команды перехода в область ОЗУ осматривать какие данные туда пересылаются и выбрать их из библиотеки собранных констант) очень даже поддается автоматизации. И вообще, завязываем оффтопить, иначе модер нас прибьет. %)
Rumata, будем делать отдельную тему с полным описанием исходника SegaOS (неважно как оно выглядит, лишь бы читалось удобно)?

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #26 : 07 Октябрь 2007, 20:06:57 »
Тему пора переименовать в genesis tech и удалить первых два поста оффтопа. ;)))) Как это делается руками - видно по исходнику, который я положил. Не представляю, сколько тебе придется кодить, чтобы сделать то, о чем ты говоришь, но по двум опкодам адрес начала кода определяется с закрытыми глазами, а именно - регистр, который загружается адресом блока данных для загрузки регистров, используется и для чтения кода. Регистров читается ровно 9 по 4 байта, следовательно 36ой байт - есть адрес начала блока кода. Теперь нарисуй мне блоксхемку, как это будет в общем виде искать кросс? ;)
Ты можешь закодить поиск конкретного варианта, одного, двух... но не всех, котоыре могут быть использованы. В общем случае, программа для полного дизасма невозможна.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24676
    • Просмотр профиля
О формате катриджа для денди.
« Ответ #27 : 07 Октябрь 2007, 21:36:51 »
Цитата: HardWareMan
Rumata, будем делать отдельную тему с полным описанием исходника SegaOS (неважно как оно выглядит, лишь бы читалось удобно)?
Естественно. И очень интересно проследить взаимодействие этой ОС с железом
Цитата: CaH4e3
Тему пора переименовать в genesis tech и удалить первых два поста оффтопа
Угу. Так и поступим, но с некоторыми нюансами. Поскольку тема формата РОМов раскрыта, её прикроем, а по МД будем открывать новую. Кто первый?