Автор Тема: [SMD] Создание собственной многоигровки на одном чипе  (Прочитано 525 раз)

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

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
Можно ли реализовать многоигровку на перезаписываемом картридже?

Интересует именно программный способ, без каких-либо аппаратных изменений.

Возможно, кто-то уже сталкивался с этой задачей и есть идеи или готовые решения.

Некоторые эмуляторы (например, BizHawk) корректно работают с самодельными «многоигровками»: можно взять образ такого картриджа и заменить одну из игр на свою — и это будет работать.

Однако на реальном картридже такой подход, насколько я понимаю, не работает. Вероятно, проблема связана с адресацией: каждая игра «ожидает», что она загружается с начала адресного пространства, тогда как в многоигровом ROM она находится по смещению.

При этом в оригинальных многоигровых картриджах, судя по всему, проблема решается на уровне железа — за счёт использования отдельных чипов или специальной логики (mapper), которая подменяет адресацию и «подставляет» нужную игру как будто она начинается с нуля.

Отсюда вопрос:
существуют ли программные инструменты или методы, позволяющие переразметить ROM (изменить адресацию, точки входа и т.д.), чтобы игра могла корректно работать не с начала файла, а со смещением?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
по моему если и сделаешь, то все, к примеру 4 игры - могут быть только в пределах 4 мегабайт в сумме. если по 1 мегабайту к примеру взять игры, то можно самому "запускатор" сделать. и просто потом джампами на нужные игры прыгать. но это надо будет чтоб все эти четыре игры были одного региона.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
мне и надо в пределах 4 мб разместить игры

если по 1 мегабайту к примеру взять игры, то можно самому "запускатор" сделать. и просто потом джампами на нужные игры прыгать.

Я делал что-то подобное, у готового меню менял адреса jmp, но это не работает на реальном железе, запуститься только та игра которая вначале Рома стоит. Или я что-то не так понял. Можешь по подробней рассказать.

но это надо будет чтоб все эти четыре игры были одного региона.

причем здесь регион? у меня есть многоигровки где у игр может быть разный регион

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 1008
  • Happy Games Only!
    • Просмотр профиля
Можно ли реализовать многоигровку на перезаписываемом картридже?

Интересует именно программный способ, без каких-либо аппаратных изменений.
Чисто в теории можно "чисто программно", без каких-либо аппаратных изменений, но на практике это будет очень сложно, я бы с этим не связывался.

Нужно учитывать, что пираты все равно ставят в многоигровки Mega Drive схему переключения банков, значит, "чисто программный способ", как мне кажется, слишком сложный, иначе бы уже давно делали многоигровки для Mega Drive с одним лишь ПЗУ. Этим пиратам лишь бы на чем-то сэкономить. Раз не делают, значит есть сложности.

Сразу говорю, намного проще будет купить картидж с вот такой платой (смотрите фотографию в посте). Далее, вот стандартная схема переключения банков для многоигровок Mega Drive. Покупаете эти микросхемы в DIP-корпусах, сверлите отверстия в пластике на плате картриджа, в которые потом вставите микросхемы. То, что над текстолитом, это именно пластик, он нужен только для экономии текстолита, чтобы увиличить плату, чтобы она доставала до креплений, в нем ничего важного нет, его можно сверлить смело. Потом соединяете микросхемы согласно схеме с обратной стороны проводками. Там еще нужно обрезать дорожки от VA17-21, они пойдут через HC32.

Вторую HC174 ставить не нужно, она нужна только для многоигровок большого объема. На этой плате можно сделать картридж максимум 8 МБ, так как там микросхема в корпусе TSOP48, а они идут максимум 8 МБ.

P.S.: вы еще помучаетесь с самостоятельной сборкой многоигрового ROM-а, так как еще не написали сборщик многоигровых ROM-ов для Mega Drive, поэтому ROM придется собирать вручную, как это делал я.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1428
    • ВКонтакте
    • Steam
    • Просмотр профиля
Только если скомпилировать сборник из игр, которые кто-то дизасэмблировал или у которых есть исходники.
Можно ещё попробовать тупо сместить все абсолютные адреса в ромах :biggrin:

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
во во... утро вечера мудреннее - проснулся и понял что погорячился :) если первую игру можно втулить влегкую. то начиная со второй - надо будет ковырять все адреса и изменять. они-же по сути указаны от начала рома. бывают конечно относительные адреса и с ними проблем невозникнет. но вот абсолютные адреса... тут без правок не обойтись. то есть это надо игру разобрать, сделать резиновой и только тогда можно будет втулить в единый общий ром.


Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 966
  • Пол: Мужской
    • Просмотр профиля
А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные?

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
Можно ещё попробовать тупо сместить все абсолютные адреса в ромах
вот я об этом как раз и подумал в первую очередь. типа написать такую программу которая за тебя будет искать что нужно сместить и на сколько.

Только если скомпилировать сборник из игр, которые кто-то дизасэмблировал или у которых есть исходники.
ну это я так понял будет работать НЕ с ассемблерными исходниками, а например с исходниками на SGDK или BEX.
Мне кажется нельзя создать например многоигровку из исходников первого и второго Соника просто дописав меню.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
ну поэксперементировать можно... какие есть самые галимые, то есть маленькие игры? и желательно простенькие.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
ну поэксперементировать можно... какие есть самые галимые, то есть маленькие игры? и желательно простенькие.
можно сначала здесь посмотреть https://github.com/And-0/awesome-megadrive?tab=readme-ov-file#open-source-games
или если хочешь вручную дизассемблировать то самые известные это: Alien 3, Rambo 3, streets of rage, flicky, sunset riders..

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
японских бох! никогда не думал что моя любимая Alien 3 всего 512 килобайт щасья :) Рэмбо так и вовсе 256. класс класс. будем посмотреть надосуге. заодно хоть повод будет свой дизассемблер забэкапить со старого компа  :cool:

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1428
    • ВКонтакте
    • Steam
    • Просмотр профиля
написать такую программу которая за тебя будет искать что нужно сместить и на сколько
Простое решение, но, скорее всего, надо будет постоянно отлавливать и исправлять баги в игре, т.к. таким образом нельзя точно распознать адрес в роме, это можно только через дизасм. Takamura-kun вот дизасмит ромы быстро, но не знаю, делает ли он это на заказ.

ну это я так понял будет работать НЕ с ассемблерными исходниками, а например с исходниками на SGDK или BEX.
Мне кажется нельзя создать например многоигровку из исходников первого и второго Соника просто дописав меню.
По идее, все компилятры должны давать выбрать начальный адрес будущего рома.

А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные?
Аппаратно проблемы быть не должно, раз многоигровки просто как бы переставляют картридж. А вот програмно уже действительно интересно, если проц смотрит вектры только от нулевово адреса и никак его не уговорить смотреть не там. Тут варианты - вместить трапы всех игр многоигровки:

Но тут я пока не разбираюсь и надо будет исправить в игре все инструкцыи TRAP на новое расположение в этом списке.
Или же записать тут адреса отдельного обработчика, который смотрит, что за игра его потревожила и выполнять код для него. Но это может сказаться на производительности. Например, Квакшот активно использует трапы при распаковке архивов, если правильно помню.
« Последнее редактирование: 25 Март 2026, 21:20:53 от Yaranga »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
надо кароче однокликовый дизассемблер сделать. чтоб он сам формулы просчитывал, где адреса по формулам считаются. наугад тыркать кнопку С на неразмеченном участке кода - такая себе идея... он там разберет и что надо и что не надо :) так-же отчасти могла бы помочь некая эвристика, типа код разбирает, и сразу-же анализирует - адекватный ли это код, или абракадабра.

пока предлагаю на эти самые Трапы забить. SegaMark, ты Rambo III (W) (REV 01) [!] попробуй в иде поковырять. там что-то я помню эмулятор запускается и адреса после обратно в иду шлет, чтобы хоть отчасти полный дизасм сделать... надо кароче список адресов собрать в кучу, а после думать как зарезинить игру. причем не разбираясь это адрес для музыки или графики, или еще для чего... достаточно что просто на этот кусок рома какая-то часть кода ссылается. если хоть одну игру мы так зарезиним - то тогда уже про эти трапы можно будет думать.

Добавлено позже:
сижу тут разбираюсь в своем собственном дер... то есть коде. пытаюсь понять как ручную метку втулить, чтобы метка была как метка, без необходимости разбора кода. говорила мама - не забрасывай на год проект, все забудешь! не послушал  :)

видимо надо чтоб дополнительное окошко вылазило с ручными метками, а там уже отмечать флагами какие метки не нужно разбирать. но блин, я не хочу вылазить за 1024х768, а места итак уже нет - под завязку все забито и всё нужное.

Добавлено позже:
и у меня затуп  :blush:

мой чудо-дизассемблер рожает как:
and.w     (pc,d0.w), d1         ; C27B
ASM68K.exe ругается: Illegal value (-1532)

в эмуляторе:
and.w    $E2 (pc,d0), d1

как правильно? и откуда этот $E2 взялся...

Добавлено позже:
ога... с Е2 разобрались. мой косяк. надо же читать 2 следующих байта... пойду искать где это в коде и исправлять  :blush:

Добавлено позже:
вроде поправил... но один хрен не собирает ASM68K.exe... ругается на негативное число. $E2 - ну как бы понятно, что меньше $7F... вот только чего он мне всю малину портит?
« Последнее редактирование: Вчера в 11:04:14 от SeregaZ »

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3261
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Соника делали 3 в 1:
https://www.emu-land.net/forum/index.php/topic,55005.0.html

Ещё официальные сборники есть Mega Games 6 (Vol 1 - Vol 3), Mega Games 1,2,3  , Mega Games 10 in 1 :
« Последнее редактирование: Вчера в 11:32:57 от Ti_ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
все. я кароче как Виннипух... застрял :) ругается на 
and.w     $E2(pc, d0.w), d1и все прочие and такого-же типа с рс.

это сам ASM68K.exe гонит (ибо он и правда в некоторых вещах хромает) или все-таки я что-то навертел не то в своем дизассемблере?

Добавлено позже:
я тут проконсультировался у гугеля более пристрастно - надо кароче переделать. читая сырой байт данного опкода and - нужно не рисовать его как есть, а надо сразу расчитывать метку и добавлять её в дизасм. завтра попробую.
« Последнее редактирование: Вчера в 17:39:58 от SeregaZ »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
Соника делали 3 в 1:
https://www.emu-land.net/forum/index.php/topic,55005.0.html
Ух ты, это реально работает. Я записал картридж с этим РОМом и все три игры запустились. Я не успел подумать о таком сборнике а его уже сделали :thumbup:. Интересно как он этого добился o_0?

Ещё официальные сборники есть Mega Games 6 (Vol 1 - Vol 3), Mega Games 1,2,3  , Mega Games 10 in 1 :
Буду теперь все эти проверять.

Интересно будет еще проверить. Будет ли работать если заменить игру, которая лежит первая в памяти
« Последнее редактирование: Вчера в 15:08:31 от SegaMark »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
тем временем глянул в другом месте... а я уже такое оказывается делал :) просто получается для and недоделал... эм... ну тогда проще. оттуда копирнем и в and вставим :)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3261
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Ух ты, это реально работает. Я записал картридж с этим РОМом и все три игры запустились. Я не успел подумать о таком сборнике а его уже сделали . Интересно как он этого добился ?
Соников давно дизассемблировали просто, что он и использовал.
На СОР1-2-3 также можно попробовать: https://github.com/gsaurus/sor-disassemblies/

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
и все равно я рад, что хоть маленько седня попрограммил :) кароче еще ошибку нашел... завтра исправлю. и еще адреса кучу нашел. тоже добавлю. старое вложение пока снесу за ненадобностью. завтра если доделаю приложу. а если оно еще и сдвинется из коробки, то буду писать кипятком от восторга. хотя сомневаюсь конечно что прям из коробки сработает. обычные move то останутся без изменений... но я надеюсь что хотя-бы запустится начальная заставка или что-то в этом роде. это будет уже успех.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1428
    • ВКонтакте
    • Steam
    • Просмотр профиля
официальные сборники есть
Вот это интересно :ohmy:
Я сравнил некоторые игры этих сборников и увидел, что различаются только адреса. Т.е. изучив эти смещения можно делать из них сборники игр. Ещё это облегчает их декомпиляцию и дизасм :thumbup:
Вот все сборники для Сеги:
Mega Games I, 2, 3, 6, 6 (Vol. 2, Vol. 3), 10, 6-Pak, Sega Top Five, Sonic Classics, Sega Sports 1, Classic Collection, The Disney Collection
« Последнее редактирование: Сегодня в 03:34:41 от Yaranga »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
итак, все нытье под снос... вроде ашипки поправил, пофиксил, сижу кайфую... разве что проблема с exg, ибо ASM68K ставит порядок параметров как ему удобно. в итоге именно на этой команде есть расхождение между оригиналом и ресборкой после моего дизасма. ну думаю херня вопрос! ща своим чексумм-фиксером все поправлю... угу... щаззззз... именно с Рэмбой он не хочет работать :) как бы считает что-то, но фиксенный ром гружу во Фьюжен - пишет чек сумм инкоррект, а в игре видимо вшита защита и поэтому игра не стартует.

это какой-то нюанс с ромами-коротышами? и чек сумму там надо считать как-то по другому? на других ромах вполне себе вроде успешно сумма фиксится.

***

ясно. надо читать размер рома, и гонять только в пределах размера. а не на всю длину рома.
« Последнее редактирование: Сегодня в 08:05:05 от SeregaZ »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 70
  • Пол: Мужской
    • Просмотр профиля
Я сравнил некоторые игры этих сборников и увидел, что различаются только адреса.
А как сравнивал? типа брал например Columns находил его в сборнике и сделал двоичное сравнение.
И как понял что отличаются адреса а не команды Ассемблера?

Добавлено позже:
Mega Games I, 2, 3, 6, 6 (Vol. 2, Vol. 3), 10, 6-Pak, Sega Top Five, Sonic Classics, Sega Sports 1, Classic Collection, The Disney Collection
Спасибо за полный список. The Disney Collection без The ищется
« Последнее редактирование: Сегодня в 07:49:51 от SegaMark »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
ушел за хлебом кароче... надо еще подумать какие функции должны иметь ссылки, вместо конкретных значений. сейчас пока еще не дает сдвигать данные - надо больше вникать в процесс :) после пересборки из-за глюка ASM68K с exg - чек сумма не бьется и надо править (обновленный чекфиксер приложил, хотя надо будет обновить его еще раз - заявленный размер рома может не соответствовать размеру файла. это надо учесть будет в обновлении). после все запускается. доволен как слон.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2770
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
еще чуть добавил моменты, где в командах могут быть ссылки. но пока все равно код двигаться не хочет :) впрочем уже прогресс - синий экран выбивает. раньше и такого не было.