Приставки > Картриджи / диски
Есть ли у NEs ромов заголовок?
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:
Какой маппер я решаю сам. И присваиваю какой хочу номер, если такого маппера еще нет. Определить, как работает картридж и какой у него маппер можно только отладкой и реверсингом.
Навигация
Перейти к полной версии