Как записать игры на денди на диск

Обновлено: 07.07.2024

БОльшая часть китайских портативных и не очень двд плейеров сделаны с использованием встроенного процессора от денди. БОльшая их часть умеет играть игры от денди, как в формате просто стандартных nes файлов, так и в своем формате.

user posted image

Есть ли у кого-то диски от подобных плейеров на руках и нет ли такого, который выглядит примерно так?

Хотелось бы поиметь образ такого игрового диска или любого другого.

у меня знакомый говорит "денди игры" про всё, где видит 2д графику, ты тоже так?

user posted image

У меня в портативном китайском двд-плеере есть денди но геймпада небыло но за то показывало заставку чёрного плаща =)
Скорость была супер,даже не верилось что это эмулятор.
Был один минус не было входа для геймпад, но он оказался на большом, тоже китайском плеере =)
P.S. Там игры были в формате nes.
P.P.S. Грамар-Наци прошу не беспокоить (Попробуйте что-то нормально написать на ЕЕЕ РС).

user posted image

Список моих консолей : PSP-1000, PS2 Slim, PS3 Super Slim 500GB, PS4, PS Vita Slim, XBOX 360 Jasper Elite, Xbox Original Crystal, Xbox One S, Xbox Series X, Wii, GC-less Wii, DS Lite Guitar Hero Ed., DSi XL Mario Anniversary Edition, 3DS Red, 3DS XL Pikachu Edition, 3DS XL Super Smash Bros. Ed., New 3DS Ambassador Edition, WiiU Premium Pack, Switch Neon, GBC, GBA SP AGS-101.
у меня знакомый говорит "денди игры" про всё, где видит 2д графику, ты тоже так?

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

Обычно к таким плейерам в комплекте идет джойстик или два и соответственный порт на борту имеется.

Обычно там можно просто ромы на диск записывать или с флешки играть. Диск был какой-то 1300 в одном или супер 300 - это довольно распространено, а вот такого, как на картинке я до сих пор не видел. у меня знакомый говорит "денди игры" про всё, где видит 2д графику, ты тоже так?

вообще-то это человек gosu по 8 bit

user posted image

о, нахватались корейских пекашных слов)
просто странно показалось-говорит про 8 бит и показывает скрин уровня мд
з.ы., неужели всё настолько тяжко, что приходиться играть в них на двд плеерах? (их кстати ещё производят? лол)

Ни для кого не секрет, что сейчас можно легко скачать эмулятор почти любой игровой консоли 80х-90х и поиграть в классические игры на компьютере, телефоне и многих других платформах. В сети легко можно найти и ROM'ы этих самых игр. Зачастую люди качают их и даже не задумываются, каким же образом кто-то однажды прочитал их из картриджа. В этой статье я и постараюсь рассказать, как же это делалось в случае с NES/Famicom, которая у нас была больше известна как «Денди», и покажу, как можно сделать это самостоятельно.

image

Сразу должен сказать, что меня тут уговорили сниматься в целом многосерийном шоу на тему того, как устроены и работают игровые консоли. Поэтому публикация сегодня сразу в двух вариантах: в виде видео и по старинке в виде статьи. Кому как больше нравится, тем более целевая аудитория у каждого варианта явно разная. В статье я постараюсь раскрыть больше технических подробностей, когда видео несёт более развлекательный характер.

Видео:

Статья:

Итак, как же работает картридж у Famicom? Многие сразу же скажут, что это просто ROM-память с параллельным доступом, и ничего сложного в её чтении быть не должно, но это не совсем так. Во-первых, в картридже сразу два типа памяти: с кодом игры, и с изображениями из игры. Каждая из них включается прямо в шину данных консоли. Первая — параллельно с оперативной памятью и процессором (CPU), а вторая параллельно с видеопамятью и видеочипом (PPU). Таким образом картридж является чем-то вроде оперативной памяти, куда уже загружена игра.

Рассмотрим же распиновку слота картриджа, и как он работает.

image


Вид на консоль сверху. Слева — передняя часть.

→ CPU A0-A14 — контакты, через которые задаётся адрес для чтения CPU памяти
CPU D0-D7 — контакты, через которые мы передаём данные CPU памяти
→ PPU A0-A13 — контакты, через которые задаётся адрес для чтения PPU памяти
PPU D0-D7 — контакты, через которые мы передаём данные PPU памяти
→ M2 — местный clock-сигнал, принимает высокий уровень, когда идёт обращение к CPU памяти
→ /ROMSEL — логический NAND между M2 и CPU A15, который недоступен напрямую
→ CPU R/W — определяет, тип операции: высокий уровень — чтение, низкий — запись
← /IRQ — позволяет картриджу генерировать прерывание, внутри консоли подтянут к +5В
→ PPU /RD — принимает низкий уровень, когда консоль читает PPU память
→ PPU /WR — принимает низкий уровень, когда консоль пишет в PPU память
→ PPU /A13 — просто напросто инвертированный сигнал от PPU A13
← CIRAM A10 — позволяет картриджу определять принцип зеркалирования видеопамяти в консоли
← CIRAM /CE — при низком уровне включает видеопамять внутри консоли
→ Звук (вход) — тут в картридж идёт звук с аудиочипа
← Звук (вход) — тут из картриджа идёт звук в том виде, в каком мы его уже слышим
* Земля и питание — без комментариев, напряжение 5 вольт

Теперь подробнее, немного технической информации.

CPU память консоли лежит в диапазоне между 0 и $FFFF (16 бит адресации). К картриджу обычно относятся адреса $8000-$FFFF. Обратите внимание, что при этом у нас нет контакта CPU A15, который должен отвечать на старший разряд адреса. Вместо него есть /ROMSEL, который принимает низкий уровень только в случае, когда M2 и теоретический CPU A15 одновременно принимают высокий уровень. Т.е. когда консоль читает или пишет в адреса $8000-$FFFF. Поэтому обычно его можно напрямую подключить к /CE ноге ROM-памяти. Чтение или запись выбираются через CPU R/W. Зачем нужна запись в картридж? Да много зачем, но об этом ниже.

PPU память имеет адреса от 0 до $3FFF (14 бит адресации), к картриджу при этом обычно относится 0-$1FFF. Именно в этом диапазоне хранятся изображения, и это может быть как ROM, так и RAM, но картридж сам определяет, какие адреса относятся к нему, а какие к внутренней части консоли, именно для этого используется CIRAM /CE. Обычно (почти всегда) его замыкают напрямую на PPU /A13, т.е. память консоли активируется, когда A13 равно единице — в диапазоне от $2000 до $3FFF. Обратите внимание, что внутри Famicom и NES памяти ниже $2000 и нет вовсе, она обязана быть в картридже. У PPU используются отдельные контакты для чтения и записи: PPU /RD и PPU /WR. Отдельно стоит сказать про CIRAM A10 — этот контакт определяет, как зеркалируется память в диапазоне между $2000 и $2FFF внутри консоли. Обычно это важно определить в зависимости от того, как в игре происходит движение — вертикально или горизонтально. В старых играх это было жёстко задано перемычкой на плате, в более новых обычно может меняться программно во время игры.

Да, в оригинальном Фамикоме были ещё аудиовход и аудиовыход, что позволяло картриджу быть дополнительным источником звука. Использовалось это редко, но позволяло сделать музыку в играх гораздо приятнее за счёт дополнительных синтезаторов звука. В NES этих контактов уже не было. В современных китайских «Денди» и прочих клонах их тоже не припаивают. Само собой, звуковой чип из картриджа никак не сдампить.

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

Перейдём к практике.

Итак, вроде ничего особо сложного нет. Надо просто как-то прочитать все данные по всем адресам и сохранить их в NES-файл. Для этого я решил взять два микроконтроллера ATMEGA64. Да, это очень избыточно, но мне просто нужно огромное количество ног – у картриджа их всё-таки 60. Хотя CPU и PPU память не нужно читать одновременно, и их можно было бы подключить к одним и тем же ногам, но для первого эксперимента я решил их изолировать. Тем более так гораздо проще разводить плату, двустороннюю делать мне совсем не хотелось.

image

Слот для картриджей можно и купить, это стандартный краевой разъём на 60 ног, но он почему-то везде был только под заказ, поэтому я просто выпаял его из дешёвой новодельной денди.

После сборки и печати корпуса устройство получилось таким:

image

Не буду вдаваться в подробности прошивки, выше уже изложены принципы работы с памятью, а исходники будут в конце статьи.

Всё ли так просто? Увы, на самом деле нет. Жизненный срок у NES и Famicom был достаточно долгим, и разработчики игр очень быстро (уже в 85м году) столкнулись с тем, что при таком подходе в картридж можно впихнуть очень мало информации. И вовсе не из-за его малого объема, а из-за того, что адресное пространство для кода ограничивалось этими самыми $8000-$FFFF, а это всего-то 32 килобайта. В такой размер вписывались только самые простейшие игры типа «Battle City», «Ice Climber», «Duck Hunt», «Tetris», «Lode Runner». Проще говоря, всё то, что мы привыкли видеть на сборниках типа «9999999 in 1» с повторяющимися играми.

Так в картриджи начали ставить мапперы.

image

Это такие микросхемы, которые отвечают за переключение банков памяти, в результате чего появилась возможность существенно расширить адресное пространство. Представьте, что по какому-то адресу хранится код первого уровня игры. Вы его проходите, маппер переключает банк памяти, и в результате абсолютно по тому же самому адресу считывается уже код не первого, а второго уровня. Аналогично и с видеопамятью.

Получается, что чтобы сдампить картридж, нужно заранее знать, какой в нём стоит маппер, и какие команды надо посылать ему для переключения банков памяти. И всё это всё равно было бы легко, если бы во всех картриджах стоял одинаковый маппер, ну или если бы их было всего несколько. Но существует несколько сотен разных мапперов и способов их подключения. Иногда обходились простой логической схемой, а иногда ставили очень навороченные микросхемы с кучей регистров и дополнительных функций. При этом не редкостью было, что брали какой-то популярный маппер, но подключали его необычным образом, что в корне меняло принципы взаимодействия с ним.

Первопроходцам приходилось дампить первый банк памяти, дизассемблировать его и заниматься реверс-инжинирингом, чтобы понять, как же получить доступ к оставшейся части данных. При этом в заголовке NES-файла указывается общепринятый номер маппера, а полноценный эмулятор должен эмулировать не только саму консоль, но и весь этот зоопарк железа, которое ставили в картриджи. Получается, что теоретически может появиться картридж, который не только сложно будет сдампить, но и который не будет эмулироваться ни одним существующим эмулятором. Далеко ходить не надо: внутри популярных у нас пиратских многоигровых картриджей что только не стоит. А китайцы до сих пор выпускают новые игры на своём собственном железе, в котором разобраться стало ещё сложнее.

К слову, в картриджах чего только не было. Помимо ROM-памяти и мапперов туда ставили и дополнительную оперативную память (иногда с батарейкой для возможности сохраняться в игре), всякие счётчики времени, описанные выше синтезаторы звука и многое другое вплоть до модема. Увы, у нас в стране в девяностые лицензионных картриджей было днём с огнём не сыскать, а пираты не сильно заморачивались, и игры с такими наворотами тут не продавались.

image

У каждого реализованы методы для дампинга данных. Вот как выглядит метод чтения программной памяти игры на MMC3 маппере:

Я решил попробовать побыть на месте первопроходцев и сдампить картридж вот с таким необычным меню:


Для этого я прочитал сначала картридж так, как если бы там не было маппера, запустил его на эмуляторе и начал дизассемблировать. Вскоре я нашёл нужную мне инструкцию:


После этого я прочитал картридж снова, предварительно выполнив запись по адресу $B600, и получил уже вполне работоспособный ROM. Само собой, игры в нём не запускаются, ведь для этого нужно снова переключать банки памяти. И даже если я прослежу, что же происходит в момент выбора игры в меню, и прочитаю весь картридж, эмулятор скорее всего никак не сможет всё это запустить.

Ещё мне в руки попал лицензионный картридж одной из самых культовых игр тех времён — «The Legend of Zelda». Он без проблем работает и с дампером, и с Фамикомом через простой пассивный переходник. Делать дамп этой игры смысла нет, она заинтересовала меня другим. В этом картридже стоит дополнительная RAM память и батарейка, что позволяет сохраняться в игре. Лежит эта память в диапазоне $6000-$7FFF. Я попробовал её прочитать и скормить эмулятору. Он без проблем её понял. После этого я ради эксперимента решил увеличить в ней число сердечек и записать назад в картридж. Сработало.


Получилась забавная возможность переносить сохранения между эмулятором и реальной консолью.

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


Помню в детстве всегда было интересно, как же эти картриджи работают, и можно ли самому записывать в них игры? А не так давно на ютубе увидел видео где рассказывалось о самодельном картридже. Меня это заинтересовало, почитал форумы, посмотрел схемы, вроде все понятно и платы не сложные, но не было чем программировать параллельные микросхемы памяти.

Через некоторое время я собрал программатор EzoFlash, который подключался к LPT порту и мог много чего программировать, это клон Willem-а и работает с его софтом. Но так и не успев ни чего запрограммировать и протестировать подвернулся по дешёвке сам Willem. Так эти прогеры скучали пока я не насобирал старых памятушек для проб и сборки картриджа.

И вот настал момент записать память 27С040, это 512кбайт память. И тут я выясняю, что программатор Willem, купленный за недорого, малость подпаленный :(. Благо при сборке EzoFlash я разобрался с тестированием данного программатора и быстро нашел выгоревший смд транзистор на плате, он коммутировал питание микросхемы памяти, после его замены все стало записывать нормально и можно было приступать к созданию платы картриджа.

Вот тут было немного сложно, дело в том, что игры для денди делятся на категории, каждая категория игр работает на картридже со своей схемой, а схема в свою очередь зависит от используемого маппера памяти. Маппер, это грубо говоря микросхема, которая делит память картриджа на страницы по 16кбайт, поскольку 8 ми битный процессор больше не в состоянии переварить в связи с нехваткой адресного пространства. Вот тут то маппер и помогает с расширением адресного пространства. Мапперов целое множество, некоторые специализированные и стоят дорого, но благо есть китайские клоны, некоторые могут заменить микросхемы обычной логики.

В моем случае я создавал картридж для игры Battletoads & Double Dragon, она в качестве маппера использует логику HC161, это бинарный счетчик. Игре необходимо 256кбайт памяти, но если мы берем ПЗУ на 512кбайт памяти и просто перемычкой переключаем старший бит адреса в 0 или 1, то получаем возможность выбрать с какой половиной памяти работать. Таким образом можно в одну ПЗУ записать 2 игры и выбирать в какую хотим играть. Также выбор игры можно сделать по нажатию на ресет, но эта опция требует одну дополнительную микросхему и не всегда корректно отрабатывает, на разных приставках может работать по разному.

Схему брал ТУТ, HC02 выкинул из схемы, и поставил перемычку на адрес А18, печатку перерисовывал сам, брал ТУТ.



Картридж заработал практически сразу, ну как бы одна игра сразу заработала, а вторая не заработала, т.к. я напутал с перемычкой адреса А18 и она не включалась. Для подстраховки напаял панельки, чтоб микрухи перекидывать, в идеале паять микруху, а то с панелькой в притирочку влазит и сложно припаять к двум слоям, нужно паять на расстояние от платы.

Денди у меня 2018 года выпуска, видео показывает плохо, вертикальные линии ломанные, и цвета перенасыщены, видимо нужно дорабатывать. Лучше искать старые консоли, их проще дорабатывать.

Favorite

В закладки

Как установить и рубиться в старые игры на любой TV-приставке. Или даже на самом телевизоре

Игры того времени были довольно сложными и увлекательными, не то что современные донатные помойки или простые аркады по подписке Apple.

Сыграть в любимые игры детства и немного поностальгировать можно практически на любой современной ТВ-приставке и некоторых моделях Smart TV. Сейчас расскажем, что скачать и как настроить.

Что для этого нужно

🕹 геймпад для удобного управления. Здесь упираемся исключительно в возможности подключения к вашей приставке. Для бокса со свободным USB-портом подойдет любой проводной USB-джойстик, приставка с Bluetooth справится с беспроводным геймпадом. Практически любая ТВ-приставка на Android сможет работать с радиоджойстиком через внешний приемник.

⌚ 15 минут на настройку и загрузку игр.

Как все настроить


1. Устанавливаем на приставку приложение KODI. Это бесплатный многофункциональный медиакомбайн, который работает практически на любой платформе. Он пригодится для удобной каталогизации фильмов и сериалов, просмотра контента с сетевого накопителя, трансляции IPTV и, разумеется, для запуска ретро игр.

На чистом Android или Android TV достаточно загрузить приложение из Google Play Store, при использовании Raspberry Pi или Windows-компьютера нужно скачать соответствующую версию с сайта разработчиков.

Вот способ установки KODI на Apple TV 4:

Есть и другой вариант установки с использованием Xcode и аккаунтом разработчика.

2. Запускаем KODI и производим процедуру первоначальной настройки. Потребуется выбрать часовой пояс, язык интерфейса и еще несколько опций.

wp-image-1055467
wp-image-1055468
wp-image-1055469
wp-image-1055470

wp-image-1055474
wp-image-1055475
wp-image-1055472
wp-image-1055473

5. Соглашаемся на установку выбранного эмулятора и необходимых для его работы дополнений.

7. Файлы с расширением *.nes или *.gen извлекаем из архива и копируем на приставку любым удобным способом. Это можно сделать через сетевую папку, SMB-протокол или флешку.

8. Запускаем установленный на приставке эмулятор и указываем путь к скопированным на нее играм.

wp-image-1055479
wp-image-1055478
wp-image-1055477
wp-image-1055476

9. Остается лишь настроить подключенный геймпад в параметрах эмулятора. Это будет предложено сделать при первом запуске либо можно будет сделать в настройках.

10. Теперь можете играть в старые игры из детства на большом экране телевизора.

Разумеется, таким способом можно запускать игры с других консолей и игровых платформ. Для этого придется подобрать подходящий эмулятор и соответствующие ромы.

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

Пишите, какие игры вы первым делом протестировали на своей ТВ-приставке.

(26 голосов, общий рейтинг: 4.58 из 5)

Favorite

В закладки

Артём Суровцев

Люблю технологии и все, что с ними связано. Верю, что величайшие открытия человечества еще впереди!

Читайте также: