Автор Тема: [Source code] QuackShot Starring Donald Duck (Sega)  (Прочитано 4007 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« : 30 Ноябрь 2018, 00:20:14 »


Собственно, мои видосы к чему-то, да привели!

Рад представить вашему вниманию исходник игры 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

  • Пользователь
  • Сообщений: 1071
  • Пол: Мужской
  • Сожру
    • Просмотр профиля
Re: [Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #1 : 30 Ноябрь 2018, 00:56:24 »
Отличная работа, спасибо за труд :)

В общем, работы полно!
Жги)

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #2 : 30 Ноябрь 2018, 01:02:52 »
оригинал, если не в курсе, содержал ошибку на картриджах, из-за чего в середине рома содержался блок отзеркаленых данных размером 0xC0000, который не использовался, и размер рома получался 1.25 МБ
а есть подтверждение что это действительно ошибка ? имхо больше на примитивную защиту похоже - на картридже стоит один 512Кбайт ROM, а не 1.25МБ.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #3 : 30 Ноябрь 2018, 01:13:15 »
Кстати, напомню старую тему об этом: http://www.emu-land.net/forum/index.php/topic,62601.0.html

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #4 : 30 Ноябрь 2018, 01:16:10 »
Ну, согласно коду, воткнута проверка чексуммы двух регионов (сумма чексумм двух регионов и записана в поле 0x18E):
1) 0x200-0x3FFFF
2) 0x100000-0x13FFFF
Регион с 0x40000 по 0xFFFFF никак не используется, и содержит зеркало начала рома.

Такая проверка воткнута в оригинальном карике.

Добавлено позже:
Кстати, b2 версия неправильная и совсем не оригинальная.

Дело в том, что там во второй половине адреса захардкожены на регион 0x100000 - 0x13FFFF (нашёл это сравнением своего рома на 512КБ и оригинала из goodgen).
При нормальной сборке такого не должно быть!
« Последнее редактирование: 30 Ноябрь 2018, 01:25:01 от DrMefistO »

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: [Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #5 : 30 Ноябрь 2018, 01:43:56 »
Rumata, да да, не прошло и 6 лет и вот опять ))

Регион с 0x40000 по 0xFFFFF никак не используется, и содержит зеркало начала рома.
стоит добавить-
Регион с 0x140000 по 0x1FFFFF никак не используется, и содержит зеркала второй половины рома.

то есть, в первом мегабайте адресного пространства отзеркалены 4 раза первые 256КБ, а во втором мегабайте то же самое но вторая половинка.
такая вот разблюдовка.

я лично склонен считать, что это сделано намеренно, из вредности. потому что:
- версия с обычным маппингом более старая, ПЗУ там MPR-14354
- версия с извратским маппингом более новая - ПЗУ игры MPR-14371
отсюда вопросы - нафига делать новую плату ? какова вероятность того, что в более новой плате такая разводка старших адресов получилась случайно а не намеренно ?

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: [Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #6 : 30 Ноябрь 2018, 01:50:01 »
Дело в том, что там во второй половине адреса захардкожены на регион 0x100000 - 0x13FFFF (нашёл это сравнением своего рома на 512КБ и оригинала из goodgen).При нормальной сборке такого не должно быть!
не совсем понял о чем ты, я себе это так представляю:

ORG 0
тут пошел код всего что в первых 256КБ

ORG 100000h
тут пошел код и данные для второй половинки

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #7 : 30 Ноябрь 2018, 02:09:11 »
- версия с обычным маппингом более старая, ПЗУ там MPR-14354
- версия с извратским маппингом более новая - ПЗУ игры MPR-14371
Вот было бы интересно узнать номера плат (в идеале и фото с двух сторон). Подозреваю, что первая стоит на плате 171-5703

Добавлено позже:
Собственно да.
Плата 171-5703
Микросхема MB834200A (512k)
Прошивка MPR-14354-F
91 год 42 неделя

Вот посмотреть бы на вторую
« Последнее редактирование: 30 Ноябрь 2018, 02:28:22 от Rumata »

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #8 : 30 Ноябрь 2018, 02:32:59 »
вторая - 171-6206A

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #9 : 30 Ноябрь 2018, 03:06:22 »
Хм :-\ У меня (точнее у wiki.megadrive.org) значится как 256к

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #10 : 30 Ноябрь 2018, 03:22:47 »
фотки

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #11 : 30 Ноябрь 2018, 03:44:21 »
Ага, спасибо. Я тоже уже нашел фотку. И офигел. В качестве старшего адреса используется не А18 (контакт В6), а А20 (контакт В8) 0_0

Сама ПЗУ та же, MB834200A.

Добавлено позже:
Кстати, 91 год 48 неделя. Разница в полтора месяца

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #12 : 30 Ноябрь 2018, 07:51:10 »
не совсем понял о чем ты, я себе это так представляю:

ORG 0
тут пошел код всего что в первых 256КБ

ORG 100000h
тут пошел код и данные для второй половинки

Да, только инфу про захардкод констант второй половинки я привёл из 512КБ рома.
« Последнее редактирование: 30 Ноябрь 2018, 10:39:13 от DrMefistO »

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #13 : 30 Ноябрь 2018, 15:55:43 »
всё равно не понимаю о каком хардкоде идет речь, я думаю исходник был побит на две части ORG-ами и не более.
для мегадрайва это необычно, но глянь организацию SNES LoRom - вот там реально дичь, всю игру нужно было разбивать на 32Кбайт странички. хех, я крайне сочувствую разработчикам под SNES.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #14 : 30 Ноябрь 2018, 16:09:04 »

Я собирал ром 1 в 1 с оригинальным REV01 [b2] на 512КБ, и получил различия на уровне байтов лишь в том, что у меня адреса были 0x07XXXX, а в b2 - 0x13XXXX.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #15 : 30 Ноябрь 2018, 16:43:53 »
Отсюда морал: ром специально собран под такую адресацию. Откуда и зачем появилась такая плата - большой вопрос. Причём даже по разводке видно, что дорожка как бы идёт к нужному контакту (почему на менее качественных фото я и не мог это разглядеть), а потом резко прыгает через контакт. Если верить вики, то на этой плате были игры и в 256к, им на старший адрес плевать.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #16 : 30 Ноябрь 2018, 16:46:37 »
Мне не понятен один момент: как в роме на 512КБ можно использовать адреса рома старше 0x100000. В плане, выходит, что дамп b2 - кривой?

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #17 : 30 Ноябрь 2018, 16:56:34 »
Мне не понятен один момент: как в роме на 512КБ можно использовать адреса рома старше 0x100000.

шина адреса картриджа подключена не 1к1 к ША ПЗУшки:
В качестве старшего адреса используется не А18 (контакт В6), а А20 (контакт В8)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #18 : 30 Ноябрь 2018, 16:57:08 »
Не, про плату я понимаю. А в роме как?

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #19 : 30 Ноябрь 2018, 16:57:17 »
b2- это дам ПЗУ, вынутого из картриджа. Считано как есть, исходя из того, что это 834200, без учёта адресации.
ТО есть дамп сам по себе абсолютно правильный, но ему нужна неправильная плата

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #20 : 30 Ноябрь 2018, 16:57:55 »
А, т.е. в эмуль его пихать бесполезно. Окей. Это и хотелось выяснить)

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9385
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #21 : 30 Ноябрь 2018, 17:20:19 »
DrMefistO, на счет туповатых мегодрайвовых эмулей, самый правильный вариант - собирать 2МБ ром. 1й МБ - отзеркаленные 4 раза первые 256КБ, 2й МБ - отзеркаленные 4 раза вторые 256КБ.

плюс к этому, эмуляторы обычно зеркалят ром автоматом, чтоб было как на реальном железе, то есть если игра 256КБ - эмулятор ее отзеркалит кучу раз на всё адресное пространство отведенное под картридж.
но могут быть ньюансы, если вдруг окажется что ROM по размеру не кратен степени двойки.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #22 : 16 Январь 2023, 13:34:52 »
Интересные находки, спустя ~4 года: во время реверсинга игры обнаружились битые структуры анимации спрайтов. В итоге, где-то в игре у 3 таких анимаций баги. Обнаружено во всех ревизиях игры. В моём ребилде это будет поправлено:)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1144
    • ВКонтакте
    • Steam
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #23 : 17 Январь 2023, 02:26:28 »

Находить баги - одна из прелестей реверса любимых игр :)
В самой игре эти баги можно заметить?
(я смотрю - у тебя особая любовь к этой игре? Она у тебя была первой на Сеге что ли? :lol:)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #24 : 17 Январь 2023, 03:00:48 »
Я пока не смотрел кому принадлежат битые анимации, но как найду скажу. Определилось, когда размечал структуры, и там, где должны были находиться нормальные ссылки на каждый кадр анимации, были ссылки, которые указывали в середину этих кадров, т.е. в середину массивов.
Видимо, во время разработки игры ссылки (они относительные) были ещё нормальные, но потом были добавлены данные между этими ссылками и самими данными.

А так да, эта игра, плюс Thunder Force 3 - мои любимчики на сегу.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #25 : 20 Январь 2023, 01:17:56 »
Прикладываю перекомпиленый "QuackShot Starring Donald Duck (REV02)" размера 506 КБ с некоторыми исправлениями:
 - Поправлены баги в анимациях некоторых персонажей/врагов
 - Убран лишний код и данные

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #26 : 20 Январь 2023, 01:30:29 »
Здорово. А чего не 512 к (7FFFF)?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #27 : 20 Январь 2023, 01:34:29 »
Здорово. А чего не 512 к (7FFFF)?
Как я понял, разницы всё равно нет, выровнен ли размер, плюс так собралось ассемблером:)

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24640
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #28 : 20 Январь 2023, 01:40:17 »
Просто привык к дампам стандартных размеров :) Там бы ещё в заголовке чего написать, есть же поле для комментов. А то потом ведь никто не вспомнит и не поймёт.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[Source code] QuackShot Starring Donald Duck (Sega)
« Ответ #29 : 20 Январь 2023, 01:46:02 »
Можно будет:) По сути, это просто эксперимент пока.

Думаю, когда сделаю полноценную русскую версию (в процессе), тогда и добавлю коменты, плюс выравнивание.