Приставки > Картриджи / диски
О формате катриджа для денди.
(1/2) > >>
ajak:
Привет ещё раз. Расскажите что есть дамп катриджа. просто обычный дамп, слепок памяти или у него есть формат, ну к примеру как у PE  у винды, или ELF у Лина. С какого смещения начинается код, данные? Ведь  через хекс видно заголовок NES. По мне так значит есть формат, но после анализа, мне кажется что я жестоко ошибаюсь. Посоветуйте что почитать.Спасибо.

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

[Neon] -_-
GManiac:
Заголовок ромов NES - искуственный, его ввели для заэмулирывовывания ромов.
В картриджах SMD в $100-$200 есть заголовок, но сам по себе он ничего не даёт. Строго говоря, по адресам 0-$200 прописаны вектора прерываний, но вторую половину обычно используют как этот самый "заголовок".
sergi:
В начале рома пишется заголовок - в нем написано что за маппер используется ну и еще чегото там - нужно для эмулятора
А для картриджа заголовок не нужен - поэтому первые 16 байт файла нужно отрезать и выкинуть из рома - и потом писать на картридж
HardWareMan:

--- Цитата: GManiac;175845 ---Заголовок ромов NES - искуственный, его ввели для заэмулирывовывания ромов.
В картриджах SMD в $100-$200 есть заголовок, но сам по себе он ничего не даёт. Строго говоря, по адресам 0-$200 прописаны вектора прерываний, но вторую половину обычно используют как этот самый "заголовок".
--- Конец цитаты ---

Векторов у М68К ровно 256 и занимают они область с $000000 по $0003FF. Т.е. ровно первый килобайт. Но реально юзается совсем немного - 3-5, иногда до 7 доходит. Причем, аппаратных прерываний всего 3. У пресловутого МК заведен вектор BusErr, отсюда и вылетает дебаггер. А больше всего векторов юзает софт для компов на базе Сеги (это Магистр и т.д.). Они юзают даже некоторые из векторов User, это как INT для х86. В качестве точек входа в подпрограммы. Остальное заглушено. Но чтобы место не пропадало они используют только первые 256 байт под вектора (доступны только первые 64 вектора), а с 100h адреса сделали заголовок человеческий. Да и нужен он был наверно только для показания копирайтов, и указания региона защите. В остальном он бесполезен.
GManiac:
Попутал, действительно, векторов 256, мне почему-то казалось, что их 128.
Rumata:
Во всех нормальных программах все 64 вектора исключений обрабатываются. Просто на неиспользуемые обычно ставится заглушка, приводящая к рестарту. Хотя иногда, как в том же МК3, ставится специальный обработчик. Причем обрабатывает он не только Bus Error, но и Addres Error, и Zero Divide, и Trap Instruction, и прочие.
А вот "указаний защите" там нет.

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

--- Цитата: 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.
--- Конец кода ---
GManiac:
Не в тему: порядок описания битов должен идти от старшего к младшему, т.к. старший бит внутри байта находится левее (мы ведь слева направо читаем).
HardWareMan:

--- Цитата: GManiac;175999 ---Не в тему: порядок описания битов должен идти от старшего к младшему, т.к. старший бит внутри байта находится левее (мы ведь слева направо читаем).
--- Конец цитаты ---
Так (см выше)?
Чета тэг [code] местами парится...
GManiac:
Угу.
Rumata:
Спасибо. Теперь всё ясно.


--- Цитата: HardWareMan ---И ты это знал.
--- Конец цитаты ---
Ты меня на слове не лови :)

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

--- Цитата: Rumata;176035 ---Ты меня на слове не лови :)
. Вот я и говорю, что на регион укзаний защите нет, и вообще, он его не обрабатывает. Регион определяется по чтению $А10000. Мегакеи, созданные изначально для приставок с ОС, именно этот регистр и подменяют. И ты это тоже знаешь:)
--- Конец цитаты ---
Согласен. Но та самая "ОС" проверяла регион железа и регион (наверно правильнее язык) игры, который указан в заголовке. И при несоответствии не запускала игру. Так правильно?
Rumata:
Не-а. Не могу согласиться. ОС проверяла только "легальность" игры. SEGA - это "тм", охраняется законом. Если некто создал некий программный код, который "случайно" запускается на МД, то очень сложно предъявить ему претензии. Но, если он вынужден вставлять в свой код SEGA, то тут он попал. А язык (регион) определяет сама игра, все тексты записанны в ней. В этом легко убедиться на эмуляторе, меняя регион (т.е. отклик на опрос $A10000)

PS
А давай создадим группу по "Полному дизассемблеру ОС"? Очень инересно, что там прописано. Там ведь и свой фонт есть.
CaH4e3:
Вот только что подумалось, а ведь на клонах мегадрайва не было такой надписи "андер лиценз и все такое", да и каких-либо пзух на плате, которую я видел, я не помню... Значит пираты клепали приставки без осей?

Румата, там 2 килобайта... Туда даже проверку нажатия кнопок не вставили - мессага по таймеру появляется. ;) Какая группа. ;) Там собственно кода едва пятая часть - остальное фонт. ;)
HardWareMan:
И вовсе не фонт там. И я ее уже раскручивал. Картинка с надписью так тупо и хранится. Дизассемблил собственноручно написанным кросс-дизассемблером (других нормальных нету, а Никодимовский с багами). Кстати, пока писал его нашел кучу багов в дизассемблере Генса (тот, что в отладчике), но сам проц у них работает как положенно. Вектор AdrErr я специально установил на тот код, который работает в ОЗУ (он туда копируется и запускается. Именно он включает карт назад и проверяет его). Смотрите, изучайте, коментируйте.
Rumata:

--- Цитата: CaH4e3 ---а ведь на клонах мегадрайва не было такой надписи "андер лиценз и все такое",
--- Конец цитаты ---
Правильно, этот текст  выводит только оригинальная консоль. Или клон это не обрабатывает (как и самая первая версия МД, или затерт фонт). А ПЗУ быть и не должно. Ну прикинь, ПЗУ 1 КилоБайт. Это встороено в чип
Я имею в виду Полный Дизассемблер, с построчными комментариями, иначе не интересно
Добавлено через 3 минуты
Фонт, вынутый из ОС.
HardWareMan:

--- Цитата: Rumata;176078 ---Фонт, вынутый из ОС.
--- Конец цитаты ---
Ах да, там просто 28 букв латинского алфавита + 4 буквы "SEGA".
Rumata:
HardWareMan, а под "dc.w" что, не фонт?
HardWareMan:

--- Цитата: Rumata;176085 ---HardWareMan, а под "dc.w" что, не фонт?
--- Конец цитаты ---
Под какими адресами? Там много где "dc.w" ;) Кстати, заметь, надпись "SEGA" в другом цвете... Ну что, бум коментировать?
Навигация
Главная страница сообщений
Следующая страница

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