| Разработка и ромхакинг > Ромхакинг и программирование |
| [Source code] QuackShot Starring Donald Duck (Sega) |
| (1/3) > >> |
| DrMefistO:
Собственно, мои видосы к чему-то, да привели! Рад представить вашему вниманию исходник игры QuackShot Starring Donald Duck. В нём пока практически нет каких-либо именованных данных (кроме пары функций), но этот исходник легко собирается ассемблером AS, легко модифицируется без побочных эффектов, и т.д. Уже сейчас спокойно собирается "REV01 [!]" размером 512 КБ (!!!) (оригинал, если не в курсе, содержал ошибку на картриджах, из-за чего в середине рома содержался блок отзеркаленых данных размером 0xC0000, который не использовался, и размер рома получался 1.25 МБ). В планах целиком раскидать массивы по файлам, дать адекватные имена переменным, функциям, константам. В общем, работы полно! P.S. Там же можно найти и IDB-базу для IDA Pro 6.8. Но при экспорте листинга из базы необходимо пройтись скриптом asm_fixer.py, который можно найти в smd_ida_tools. Ссылка на исходник: https://github.com/lab313ru/quackshot_src |
| worm:
Отличная работа, спасибо за труд :) --- Цитата: DrMefistO от 30 Ноябрь 2018, 00:20:14 ---В общем, работы полно! --- Конец цитаты --- Жги) |
| MetalliC:
--- Цитата: DrMefistO от 30 Ноябрь 2018, 00:20:14 ---оригинал, если не в курсе, содержал ошибку на картриджах, из-за чего в середине рома содержался блок отзеркаленых данных размером 0xC0000, который не использовался, и размер рома получался 1.25 МБ --- Конец цитаты --- а есть подтверждение что это действительно ошибка ? имхо больше на примитивную защиту похоже - на картридже стоит один 512Кбайт ROM, а не 1.25МБ. |
| Rumata:
Кстати, напомню старую тему об этом: http://www.emu-land.net/forum/index.php/topic,62601.0.html |
| DrMefistO:
Ну, согласно коду, воткнута проверка чексуммы двух регионов (сумма чексумм двух регионов и записана в поле 0x18E): 1) 0x200-0x3FFFF 2) 0x100000-0x13FFFF Регион с 0x40000 по 0xFFFFF никак не используется, и содержит зеркало начала рома. Такая проверка воткнута в оригинальном карике. Добавлено позже: Кстати, b2 версия неправильная и совсем не оригинальная. Дело в том, что там во второй половине адреса захардкожены на регион 0x100000 - 0x13FFFF (нашёл это сравнением своего рома на 512КБ и оригинала из goodgen). При нормальной сборке такого не должно быть! |
| MetalliC:
Rumata, да да, не прошло и 6 лет и вот опять )) --- Цитата: DrMefistO от 30 Ноябрь 2018, 01:16:10 ---Регион с 0x40000 по 0xFFFFF никак не используется, и содержит зеркало начала рома. --- Конец цитаты --- стоит добавить- Регион с 0x140000 по 0x1FFFFF никак не используется, и содержит зеркала второй половины рома. то есть, в первом мегабайте адресного пространства отзеркалены 4 раза первые 256КБ, а во втором мегабайте то же самое но вторая половинка. такая вот разблюдовка. я лично склонен считать, что это сделано намеренно, из вредности. потому что: - версия с обычным маппингом более старая, ПЗУ там MPR-14354 - версия с извратским маппингом более новая - ПЗУ игры MPR-14371 отсюда вопросы - нафига делать новую плату ? какова вероятность того, что в более новой плате такая разводка старших адресов получилась случайно а не намеренно ? |
| MetalliC:
--- Цитата: DrMefistO от 30 Ноябрь 2018, 01:16:10 ---Дело в том, что там во второй половине адреса захардкожены на регион 0x100000 - 0x13FFFF (нашёл это сравнением своего рома на 512КБ и оригинала из goodgen).При нормальной сборке такого не должно быть! --- Конец цитаты --- не совсем понял о чем ты, я себе это так представляю: --- Код: ---ORG 0 тут пошел код всего что в первых 256КБ ORG 100000h тут пошел код и данные для второй половинки --- Конец кода --- |
| Rumata:
--- Цитата: MetalliC от 30 Ноябрь 2018, 01:43:56 ---- версия с обычным маппингом более старая, ПЗУ там MPR-14354 - версия с извратским маппингом более новая - ПЗУ игры MPR-14371 --- Конец цитаты --- Вот было бы интересно узнать номера плат (в идеале и фото с двух сторон). Подозреваю, что первая стоит на плате 171-5703 Добавлено позже: Собственно да. Плата 171-5703 Микросхема MB834200A (512k) Прошивка MPR-14354-F 91 год 42 неделя Вот посмотреть бы на вторую |
| MetalliC:
вторая - 171-6206A |
| Rumata:
Хм :-\ У меня (точнее у wiki.megadrive.org) значится как 256к |
| MetalliC:
фотки |
| Rumata:
Ага, спасибо. Я тоже уже нашел фотку. И офигел. В качестве старшего адреса используется не А18 (контакт В6), а А20 (контакт В8) 0_0 Сама ПЗУ та же, MB834200A. Добавлено позже: Кстати, 91 год 48 неделя. Разница в полтора месяца |
| DrMefistO:
--- Цитата: MetalliC от 30 Ноябрь 2018, 01:50:01 ---не совсем понял о чем ты, я себе это так представляю: --- Код: ---ORG 0 тут пошел код всего что в первых 256КБ ORG 100000h тут пошел код и данные для второй половинки --- Конец кода --- --- Конец цитаты --- Да, только инфу про захардкод констант второй половинки я привёл из 512КБ рома. |
| MetalliC:
всё равно не понимаю о каком хардкоде идет речь, я думаю исходник был побит на две части ORG-ами и не более. для мегадрайва это необычно, но глянь организацию SNES LoRom - вот там реально дичь, всю игру нужно было разбивать на 32Кбайт странички. хех, я крайне сочувствую разработчикам под SNES. |
| DrMefistO:
Я собирал ром 1 в 1 с оригинальным REV01 [b2] на 512КБ, и получил различия на уровне байтов лишь в том, что у меня адреса были 0x07XXXX, а в b2 - 0x13XXXX. |
| Rumata:
Отсюда морал: ром специально собран под такую адресацию. Откуда и зачем появилась такая плата - большой вопрос. Причём даже по разводке видно, что дорожка как бы идёт к нужному контакту (почему на менее качественных фото я и не мог это разглядеть), а потом резко прыгает через контакт. Если верить вики, то на этой плате были игры и в 256к, им на старший адрес плевать. |
| DrMefistO:
Мне не понятен один момент: как в роме на 512КБ можно использовать адреса рома старше 0x100000. В плане, выходит, что дамп b2 - кривой? |
| MetalliC:
--- Цитата: DrMefistO от 30 Ноябрь 2018, 16:46:37 ---Мне не понятен один момент: как в роме на 512КБ можно использовать адреса рома старше 0x100000. --- Конец цитаты --- шина адреса картриджа подключена не 1к1 к ША ПЗУшки: --- Цитата: Rumata от 30 Ноябрь 2018, 03:44:21 ---В качестве старшего адреса используется не А18 (контакт В6), а А20 (контакт В8) --- Конец цитаты --- |
| DrMefistO:
Не, про плату я понимаю. А в роме как? |
| Rumata:
b2- это дам ПЗУ, вынутого из картриджа. Считано как есть, исходя из того, что это 834200, без учёта адресации. ТО есть дамп сам по себе абсолютно правильный, но ему нужна неправильная плата |
| Навигация |
| Главная страница сообщений |
| Следующая страница |