| Приставки > Картриджи / диски |
| Есть ли у NEs ромов заголовок? |
| (1/2) > >> |
| ajak:
Собственно сабж - Где находится точка входа в программу у ромов для дедндика. Вот у Сеговсих ромов есть заголовок на 512 байт, в одном из полей которых написано точка исполнения программы, и ещё даже значение, которое надо положить в стек. А дендика я так понял заголовка нету. Но всю картину портят мапперы. Они как-то влияют на исполнительный адрес. |
| evgeny:
В конце последнего prg рома 3 вектора. начальный адрес(reset), NMI и IRQ. |
| ajak:
А как определить конец последнего prg рома? |
| HardWareMan:
--- Цитата: ajak от 16 Октябрь 2008, 16:00:02 ---Собственно сабж - Где находится точка входа в программу у ромов для дедндика. Вот у Сеговсих ромов есть заголовок на 512 байт, в одном из полей которых написано точка исполнения программы, и ещё даже значение, которое надо положить в стек. А дендика я так понял заголовка нету. Но всю картину портят мапперы. Они как-то влияют на исполнительный адрес. --- Конец цитаты --- Это не заголовок. Это часть ROMки. И в силу особенностей процессора М68К там распологаются вектора прерываний. --- Цитата: evgeny от 16 Октябрь 2008, 16:35:34 ---В конце последнего prg рома 3 вектора. начальный адрес(reset), NMI и IRQ. --- Конец цитаты --- Не последнего, а банка по умолчанию, который зависит от конкретного маппера. А заголовок у NES ROMки есть - первые 16 байт. Гугль в помощь. |
| ajak:
Чёт ничего я не нашел :'( http://nesdev.parodius.com/neshdr20.txt Добавлено позже: this is the complete header information i've been using lately, if you see something wrong or incomplete please tell me!. | 0 | 3 | 'NES' | | 3 | 1 | $1A | | 4 | 1 | 16K PRG-ROM page count | | 5 | 1 | 8K CHR-ROM page count | | 6 | 1 | ROM Control Byte #1 | | | | %####vTsM | | | | | ||||+- 0=Horizontal Mirroring | | | | | |||| 1=Vertical Mirroring | | | | | |||+-- 1=SRAM enabled | | | | | ||+--- 1=512-byte trainer present | | | | | |+---- 1=Four-screen VRAM layout | | | | | | | | | | +--+----- Mapper # (lower 4-bits) | | 7 | 1 | ROM Control Byte #2 | | | | %####0000 | | | | | | | | | | +--+----- Mapper # (upper 4-bits) | | 7 | 1 | 01=00-> nes rom | | 7 | 1 | 01=01-> vs unisystem rom | | 7 | 1 | 01=02-> playchoice rom | | 8 | 1 | $00 | | 9 | 1 | $00 | | 10 | 1 | 0=0->"100% compatible with NTSC console" | | 10 | 1 | 1=0->"Not necessarily 100% compatible | | | | with PAL console"" | | 10 | 1 | 4=0->"extra ram at $6000-$7fff | | 10 | 1 | 5=0->"don't have bus conflicts | | 11 | 6 | $00 Чёт не вижу. |
| HardWareMan:
--- Цитата: ajak от 17 Октябрь 2008, 11:53:06 ---Чёт не вижу. --- Конец цитаты --- Чего ты не видишь? Номера маппера? --- Цитата: HardWareMan от 16 Октябрь 2008, 17:10:17 ---Не последнего, а банка по умолчанию, который зависит от конкретного маппера. --- Конец цитаты --- |
| ajak:
Ааааааааа.А как определить? Помойму 3-й. |
| HardWareMan:
--- Цитата: ajak от 17 Октябрь 2008, 12:36:30 ---Ааааааааа.А как определить? Помойму 3-й. --- Конец цитаты --- Погуглить инфу по мапперу, как вариант... |
| evgeny:
Ну я говорил про вектора. Я так понимаю нужен именно вектор, который указывает на начало программы. Я уже говорил, что обычно они в конце последнего prg банка, т.к. чаще всего именно он является стартовым по умолчанию. Бывает, конечно и иначе, например в маппере AOROM он в конце первого банка размером 32кб. Кстати нужно еще помнить что старший и младший байт идут в обратном порядке. И еще что адресное пространство рома обычно начинается с 8000h. Если программа (reset) идет с самого начала, то вектор значит будет выглядеть так : 0080. |
| HardWareMan:
FFFB : FFFA = NMI FFFD : FFFC = RESET FFFF : FFFE = IRQ |
| ajak:
Парни , подскажите. Почему здесь нули. Ведь вы говори что в самом конце находятся вектора? Добавлено позже: А вот заголовок помогите разобраться Добавлено позже: Почему там где должны быть вектора -всё нулями забито? :-\ |
| evgeny:
Кто-то дописал лишний кусок вот и все. Ром не должен заканчиваться на 40080. С заголовком на 40000 долен был закончиться. Значит вектора: NMI D1A2 RESET EC50 IRQ C378 В данном роме, учитывая маппер и заголовок это будет: 0003D1B2 0003EC60 0003C388 Хм..мне показалось, что это 2 маппер а это 71. Но скорее всего так же. |
| ajak:
А почему он не может заканчиваться на 40080? Добавлено позже: 0003D1B2 0003EC60 0003C388 Чтот не нашел, эти значения, откуда ты их взял? --- Цитата ---Хм..мне показалось, что это 2 маппер а это 71. --- Конец цитаты --- Откуда это видно ответьте плиз. |
| HardWareMan:
Считывать файл надо согласно маппера и тогда все встает на свои места. |
| ajak:
подробней плиз, могу файл залить сам и ссылку дать. |
| ajak:
evgeny, можно более подробно :blush: |
| evgeny:
Да запусти игру через дебаггер и просмотри память по адресам: D1A2 EC50 C378 А те адреса это я уже в самом роме посчитал - где они будут, если в хексе смотреть. И именно адреса, а не значения, что тут непонятного? |
| CaH4e3:
Берешь ром. Берешь fceu. Запускаешь ром на fceu. Запускаешь дебаггер. Жмешь step, потом reset. В окне дизассемблера отображается точка входа и код после нее. |
| ajak:
Санч, можеш помочь разобраться, а то я тут не понимаю. 1) Вот есть карик с редким маппером или вообще самопальным. Причём по микросхеме ничего нельзя пробить, никакую инфу, или она залита в компауд. Как тогда можно дампить. 2) Как присваивается номер мапперу новому. Вот ты добавляеш в fceu мапперы и пишеш добавлен номер такой-то. А откуда эти номера узнаются? Что где то про все уже известны, кто придумывает эту нумерацию? Добавлено позже: А почему он не может заканчиваться на 40080? --- Цитата ---Хм..мне показалось, что это 2 маппер а это 71. --- Конец цитаты --- Откуда это видно ответьте плиз. Дебаггер не в счёт . Так на глаз, по хексам ;) |
| CaH4e3:
Какой маппер я решаю сам. И присваиваю какой хочу номер, если такого маппера еще нет. Определить, как работает картридж и какой у него маппер можно только отладкой и реверсингом. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |