| Приставки > Картриджи / диски |
| О формате катриджа для денди. |
| (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" в другом цвете... Ну что, бум коментировать? |
| Навигация |
| Главная страница сообщений |
| Следующая страница |