| Разработка и ромхакинг > Программирование |
| [SMD] Создание собственной многоигровки на одном чипе |
| (1/5) > >> |
| SegaMark:
Можно ли реализовать многоигровку на перезаписываемом картридже? Интересует именно программный способ, без каких-либо аппаратных изменений. Возможно, кто-то уже сталкивался с этой задачей и есть идеи или готовые решения. Некоторые эмуляторы (например, BizHawk) корректно работают с самодельными «многоигровками»: можно взять образ такого картриджа и заменить одну из игр на свою — и это будет работать. Однако на реальном картридже такой подход, насколько я понимаю, не работает. Вероятно, проблема связана с адресацией: каждая игра «ожидает», что она загружается с начала адресного пространства, тогда как в многоигровом ROM она находится по смещению. При этом в оригинальных многоигровых картриджах, судя по всему, проблема решается на уровне железа — за счёт использования отдельных чипов или специальной логики (mapper), которая подменяет адресацию и «подставляет» нужную игру как будто она начинается с нуля. Отсюда вопрос: существуют ли программные инструменты или методы, позволяющие переразметить ROM (изменить адресацию, точки входа и т.д.), чтобы игра могла корректно работать не с начала файла, а со смещением? |
| SeregaZ:
по моему если и сделаешь, то все, к примеру 4 игры - могут быть только в пределах 4 мегабайт в сумме. если по 1 мегабайту к примеру взять игры, то можно самому "запускатор" сделать. и просто потом джампами на нужные игры прыгать. но это надо будет чтоб все эти четыре игры были одного региона. |
| SegaMark:
мне и надо в пределах 4 мб разместить игры --- Цитата: SeregaZ от 24 Март 2026, 17:32:17 ---если по 1 мегабайту к примеру взять игры, то можно самому "запускатор" сделать. и просто потом джампами на нужные игры прыгать. --- Конец цитаты --- Я делал что-то подобное, у готового меню менял адреса jmp, но это не работает на реальном железе, запуститься только та игра которая вначале Рома стоит. Или я что-то не так понял. Можешь по подробней рассказать. --- Цитата: SeregaZ от 24 Март 2026, 17:32:17 ---но это надо будет чтоб все эти четыре игры были одного региона. --- Конец цитаты --- причем здесь регион? у меня есть многоигровки где у игр может быть разный регион |
| Talking_Sword:
--- Цитата: SegaMark от 24 Март 2026, 17:13:44 ---Можно ли реализовать многоигровку на перезаписываемом картридже? Интересует именно программный способ, без каких-либо аппаратных изменений. --- Конец цитаты --- Чисто в теории можно "чисто программно", без каких-либо аппаратных изменений, но на практике это будет очень сложно, я бы с этим не связывался. Нужно учитывать, что пираты все равно ставят в многоигровки Mega Drive схему переключения банков, значит, "чисто программный способ", как мне кажется, слишком сложный, иначе бы уже давно делали многоигровки для Mega Drive с одним лишь ПЗУ. Этим пиратам лишь бы на чем-то сэкономить. Раз не делают, значит есть сложности. Сразу говорю, намного проще будет купить картидж с вот такой платой (смотрите фотографию в посте). Далее, вот стандартная схема переключения банков для многоигровок Mega Drive. Покупаете эти микросхемы в DIP-корпусах, сверлите отверстия в пластике на плате картриджа, в которые потом вставите микросхемы. То, что над текстолитом, это именно пластик, он нужен только для экономии текстолита, чтобы увиличить плату, чтобы она доставала до креплений, в нем ничего важного нет, его можно сверлить смело. Потом соединяете микросхемы согласно схеме с обратной стороны проводками. Там еще нужно обрезать дорожки от VA17-21, они пойдут через HC32. Вторую HC174 ставить не нужно, она нужна только для многоигровок большого объема. На этой плате можно сделать картридж максимум 8 МБ, так как там микросхема в корпусе TSOP48, а они идут максимум 8 МБ. P.S.: вы еще помучаетесь с самостоятельной сборкой многоигрового ROM-а, так как еще не написали сборщик многоигровых ROM-ов для Mega Drive, поэтому ROM придется собирать вручную, как это делал я. |
| Беларус:
Только если скомпилировать сборник из игр, которые кто-то дизасэмблировал или у которых есть исходники. Можно ещё попробовать тупо сместить все абсолютные адреса в ромах :biggrin: |
| SeregaZ:
во во... утро вечера мудреннее - проснулся и понял что погорячился :) если первую игру можно втулить влегкую. то начиная со второй - надо будет ковырять все адреса и изменять. они-же по сути указаны от начала рома. бывают конечно относительные адреса и с ними проблем невозникнет. но вот абсолютные адреса... тут без правок не обойтись. то есть это надо игру разобрать, сделать резиновой и только тогда можно будет втулить в единый общий ром. |
| Томахомэ:
А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные? |
| SegaMark:
--- Цитата: Беларус учит русский от 24 Март 2026, 20:41:08 ---Можно ещё попробовать тупо сместить все абсолютные адреса в ромах --- Конец цитаты --- вот я об этом как раз и подумал в первую очередь. типа написать такую программу которая за тебя будет искать что нужно сместить и на сколько. --- Цитата: Беларус учит русский от 24 Март 2026, 20:41:08 ---Только если скомпилировать сборник из игр, которые кто-то дизасэмблировал или у которых есть исходники. --- Конец цитаты --- ну это я так понял будет работать НЕ с ассемблерными исходниками, а например с исходниками на SGDK или BEX. Мне кажется нельзя создать например многоигровку из исходников первого и второго Соника просто дописав меню. |
| SeregaZ:
ну поэксперементировать можно... какие есть самые галимые, то есть маленькие игры? и желательно простенькие. |
| SegaMark:
--- Цитата: SeregaZ от 25 Март 2026, 10:55:21 ---ну поэксперементировать можно... какие есть самые галимые, то есть маленькие игры? и желательно простенькие. --- Конец цитаты --- можно сначала здесь посмотреть 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:
японских бох! никогда не думал что моя любимая Alien 3 всего 512 килобайт щасья :) Рэмбо так и вовсе 256. класс класс. будем посмотреть надосуге. заодно хоть повод будет свой дизассемблер забэкапить со старого компа :cool: |
| Беларус:
--- Цитата: SegaMark от 25 Март 2026, 10:53:38 ---написать такую программу которая за тебя будет искать что нужно сместить и на сколько --- Конец цитаты --- Простое решение, но, скорее всего, надо будет постоянно отлавливать и исправлять баги в игре, т.к. таким образом нельзя точно распознать адрес в роме, это можно только через дизасм. Takamura-kun вот дизасмит ромы быстро, но не знаю, делает ли он это на заказ. --- Цитата: SegaMark от 25 Март 2026, 10:53:38 ---ну это я так понял будет работать НЕ с ассемблерными исходниками, а например с исходниками на SGDK или BEX. Мне кажется нельзя создать например многоигровку из исходников первого и второго Соника просто дописав меню. --- Конец цитаты --- По идее, все компилятры должны давать выбрать начальный адрес будущего рома. --- Цитата: Томахомэ от 25 Март 2026, 08:35:11 ---А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные? --- Конец цитаты --- Аппаратно проблемы быть не должно, раз многоигровки просто как бы переставляют картридж. А вот програмно уже действительно интересно, если проц смотрит вектры только от нулевово адреса и никак его не уговорить смотреть не там. Тут варианты - вместить трапы всех игр многоигровки: $00 - Stack pointer $04 - Code start $08 - Bus error $0C - Address error $10 - Illegal instruction $14 - Divistion by zero $18 - CHK exception $1C - TRAPV exception $20 - Privilege violation $24 - TRACE exeption $28 - LINE 1010 EMULATOR $2C - LINE 1111 EMULATOR $30-$5F - Reserved by Motorola $60 - Spurious exception $64 - Interrupt request level 1 $68 - Interrupt request level 2 $6C - Interrupt request level 3 $70 - Interrupt request level 4 (VDP interrupt / Horizontal blank) $74 - Interrupt request level 5 $78 - Interrupt request level 6 (Vertical blank) $7C - Interrupt request level 7 $80 - TRAP #00 exception $84 - TRAP #01 exception $88 - TRAP #02 exception $8C - TRAP #03 exception $90 - TRAP #04 exception $94 - TRAP #05 exception $98 - TRAP #06 exception $9C - TRAP #07 exception $A0 - TRAP #08 exception $A4 - TRAP #09 exception $A8 - TRAP #10 exception $AC - TRAP #11 exception $B0 - TRAP #12 exception $B4 - TRAP #13 exception $B8 - TRAP #14 exception $BC - TRAP #15 exception $C0-$FF - Reserved by Motorola Но тут я пока не разбираюсь и надо будет исправить в игре все инструкцыи TRAP на новое расположение в этом списке. Или же записать тут адреса отдельного обработчика, который смотрит, что за игра его потревожила и выполнять код для него. Но это может сказаться на производительности. Например, Квакшот активно использует трапы при распаковке архивов, если правильно помню. |
| SeregaZ:
надо кароче однокликовый дизассемблер сделать. чтоб он сам формулы просчитывал, где адреса по формулам считаются. наугад тыркать кнопку С на неразмеченном участке кода - такая себе идея... он там разберет и что надо и что не надо :) так-же отчасти могла бы помочь некая эвристика, типа код разбирает, и сразу-же анализирует - адекватный ли это код, или абракадабра. пока предлагаю на эти самые Трапы забить. 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... вот только чего он мне всю малину портит? |
| Ti_:
Соника делали 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 : Mega Games 1 (Super Hang-on, Columns, World Cup Italia 90) Mega Games 2 (Golden Axe, Streets of Rage, Revenge of Shinobi) Mega Games 6 Volume 1 (all six titles in Mega Games 1 and 2) Mega Games 6 Volume 2 (Sonic the Hedgehog, Streets of Rage, Columns, Sega Soccer, Super Monaco Grand Prix, Revenge of Shinobi) Mega Games 4-in-1 (Gunstar Heroes, Flicky, Alex Kidd, Altered Beast - так же известная как Classic Collection 4-in-1 в США) Mega Games 10-in-1 (Tec Toy выпустила в Португалии: Sonic, Super Shinobi, Super Monaco GP, и 7 других малоизвестных названий) Genesis 6-Pak (Американская версия Mega Games 6 Volume 2 - те же игры, за исключением Super Monaco Grand Prix, замененной Super Hang-On) |
| SeregaZ:
все. я кароче как Виннипух... застрял :) ругается на --- Код: ---and.w $E2(pc, d0.w), d1 --- Конец кода --- и все прочие and такого-же типа с рс. это сам ASM68K.exe гонит (ибо он и правда в некоторых вещах хромает) или все-таки я что-то навертел не то в своем дизассемблере? Добавлено позже: я тут проконсультировался у гугеля более пристрастно - надо кароче переделать. читая сырой байт данного опкода and - нужно не рисовать его как есть, а надо сразу расчитывать метку и добавлять её в дизасм. завтра попробую. |
| SegaMark:
--- Цитата: Ti_ от 26 Март 2026, 11:17:45 ---Соника делали 3 в 1: https://www.emu-land.net/forum/index.php/topic,55005.0.html --- Конец цитаты --- Ух ты, это реально работает. Я записал картридж с этим РОМом и все три игры запустились. Я не успел подумать о таком сборнике а его уже сделали :thumbup:. Интересно как он этого добился o_0? --- Цитата: Ti_ от 26 Март 2026, 11:17:45 ---Ещё официальные сборники есть Mega Games 6 (Vol 1 - Vol 3), Mega Games 1,2,3 , Mega Games 10 in 1 : --- Конец цитаты --- Буду теперь все эти проверять. Интересно будет еще проверить. Будет ли работать если заменить игру, которая лежит первая в памяти |
| SeregaZ:
тем временем глянул в другом месте... а я уже такое оказывается делал :) просто получается для and недоделал... эм... ну тогда проще. оттуда копирнем и в and вставим :) |
| Ti_:
--- Цитата: SegaMark от 26 Март 2026, 14:52:38 ---Ух ты, это реально работает. Я записал картридж с этим РОМом и все три игры запустились. Я не успел подумать о таком сборнике а его уже сделали . Интересно как он этого добился ? --- Конец цитаты --- Соников давно дизассемблировали просто, что он и использовал. На СОР1-2-3 также можно попробовать: https://github.com/gsaurus/sor-disassemblies/ |
| SeregaZ:
и все равно я рад, что хоть маленько седня попрограммил :) кароче еще ошибку нашел... завтра исправлю. и еще адреса кучу нашел. тоже добавлю. старое вложение пока снесу за ненадобностью. завтра если доделаю приложу. а если оно еще и сдвинется из коробки, то буду писать кипятком от восторга. хотя сомневаюсь конечно что прям из коробки сработает. обычные move то останутся без изменений... но я надеюсь что хотя-бы запустится начальная заставка или что-то в этом роде. это будет уже успех. |
| Беларус:
--- Цитата: Ti_ от 26 Март 2026, 11:17:45 ---официальные сборники есть --- Конец цитаты --- Вот это интересно :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 |
| Навигация |
| Главная страница сообщений |
| Следующая страница |