Денди своими руками конструктор

Обновлено: 24.04.2024

Современная элементная база для наколенных разработок уже давно перешагнула возможности те компоненты, на которых строились такие вещи, как Dendy (NES), Coleco Vision, ну и так далее.
Совершенно понятно, что geek-сообщество не могло оставаться в стороне и проекты настоящего hard-core DIY не замедлили себя ждать.

Итак, представляем Вашему вниманию UZEBOX!

Это homebrew-консоль, которую можно изготовить дома.

Базируется она всего на 2х чипах - ATMega 644 и кодер NTSC-сигнала AD725 (опционально, есть версия с ЧБ изображением, но без этого кодера)

  • Low parts count and cost: The system is made of only two chips and discrete components.
  • Interrupt driven kernel: No cycle counting required, sound mixing and video generation are all made in the background.
  • 256 simultaneous colors: Accomplished by using a R-2R resistor ladder DAC.
  • 4 channels sound engine: The sound subsystem is composed of 3 wavetable channels and 1 noise or PCM channel.
  • MIDI In: With a music sequencer, allows the creation of music directly on the console.
  • Retro controllers: The joypad inputs uses standard NES/SNES controllers interface.
  • SNES Mouse Support
  • SD/MicroSD card interface
  • Expandable: I/O lines and peripherals are still available, like the UART and SPI port for one to experiment.
  • Emulator: A fully, cycle-perfect, emulator was developed and greatly eases development.
  • Gameloader (beta): Load and flash games stored on SD cards!
  • API: Develop games using an API that provides multiple video modes, sound driver and more.
  • Open Source: The software and hardware design are totally free and licensed under the GPL.

Для тех, кто не дружит с электроникой, с сайта разработчиков можно скачать эмулятор (для Windows, требуется SDL.dll) и попробовать консоль без риска попортить детали.

Для программистов - есть специальный SDK, позволяющий писать игры на языке Си с удобными вызовами и хорошо документированным интерфейсом.

А теперь будут слайды. Кликабельные.

Ну и конечно же, видео!


Ну а если вы настолько круты, что щелкаете такие проекты, как орешки, попробуйте повторить вот это (но это уже совсем другая история)
Scopetris - тетрис на экране осциллографа. В главных ролях - микроконтроллер ATMEGA32.


На мой взгляд, вся суть сборки приставки заключается в 3 этапах.

Найти сбалансированную плату для монтажа Dendy своими руками.

Так выглядит готовая плата. Заказывал я её у китайских друзей с АЛИ. Приехала она в течении 2 недель. Заказывал 10 штук, приехало 11. За что им и спасибо. По Москве сделать такую плату предлагали в 4 раза дороже. Она полностью подходит под стандартный корпус, имеет стереовыход аудио. Микросхемы выставлены оптимально для распайки и уменьшения длины дорожек.

плата для монтажа Dendy

Сами граберы для вытравливания, версия платы 01. Есть более новая, в ней отличается только расположение одного конденсатора. Считаю такую доработку не новой версией. Выкладывать её не буду. Собирал по версии 01, всё отлично, рабочая и отлично встаёт в стандартный корпус.

Полный комплект деталей для спайки Dendy своими руками.

Вот тут возникают сложности. Процессоры и сопроцессоры уже не выпускают, и найти можно либо старые запасы, либо через китайских друзей.

Процессоры и сопроцессоры. Для заказа через АЛИ обязательно вступать в переговоры о том, что будет высылать китайский друг. Короче капец) Но рано или поздно приезжают рабочие микросхемы и даже с небитыми пикселями. Последний, у которого заказывал, вот этот. От него приехали UA6527p, но они оказались обычными UA6527 и работали на частоте 21.47, пришлось собрать 2 генератор и проверять работоспособность процессора и сопроцессора на разной частоте. Будьте внимательны.

Самих систем может быть 2 варианта: PAL и NTSC версии.

NTSC версии: Процессор — UA6527, Видео процессор UA6528
PAL версии: Процессор — UA6527p, Видео процессор UA6538

Для выбора системы передачи видео сигнала, не забываем про основной генератор приставки. Разница в выдаваемой частоте генерации, на которых работают эти разные системы.

PAL работает на частоте 26.6
NTSC работает на частоте 21.47

Это все отличия в деталях при сборе PAL или NTSC систем.

По задумке ребят, которые делали данную плату, все CMD компоненты размера 0805, но это большие по 2 мм детали я рекомендую впаивать размер 0603. Они более подходят для монтажа на данную плату.

Перед закупкой рекомендую посмотреть компоненты на старых платах модемов, материнках, роутерах и подобном хламе. Я выпаял от туда порядка 60% всех CMD компонентов.

Микросхемы: Как выяснилось, память не так уж и ограничена маркировкой. Главное — найти подобную память с характеристиками: 5V 32K X 8 CMOS SRAM, очень часто встречаются на старых материнках.

После того, как у нас есть все компоненты, осталось найти 60-пиновый разъём для картриджа)


Или мы его выпаиваем со старой приставки, или опять на АЛИ. Я заказывал вот тут, и у меня в запасе ещё остались, могу вручить по себестоимости закупки.

Ну и заключительный поиск упрётся в разъёмы для джойстиков. Тут, к сожалению, альтернатив мало: либо снимать со старой, либо лепить ляпуху из вот такой альтернативы: D-Sub DB15 Вилка должна быть угловая. Она отлично входит в плату и отлично держит джойстик.

Некоторые ссылки на детали:

Диодный мост — его можно устанавливать и на 1 ампер. 1.5 стоит с запасом.

И сама плата в сборе со всеми деталями.


Дорожная карта при сборке Dendy своими руками

Схема, если кто всё-таки дочитал до этапа сборки) Чтобы открыть в полном расширении, на открывшейся картинке правой кнопкой — открыть в новой вкладке и уже левой кнопкой +.

Dendy своими руками

Первым делом

Впаиваем 60-пиновый разъём и проверяем, как прозваниваются все его 60 контактов по дорожкам до тех мест, куда приходит каждый контакт. Почти половина ведёт к СPU, вторая половина — к PPU. Питание и выходы с генератора.

Вторым делом

Собираем схему питания. Разъём питания, диодный мост, стабилизатор с радиатором, конденсаторы до стабилизатора и после, кнопка включения и кнопка resset. Подаём питание и проверяем все последние ножки на всех микросхемах на наличие стабильного питания в +5 вольт. Последняя нога микросхемы +, минус находится на противоположной стороне в конце микросхемы.

Третьим делом

Собираем схему усилителя звука и вывода изображения. После сборки можно проверить работоспособность каскада касаниями к выходам левого и правого каналов с CPU, ножки 1 и 2. При касании к ним рукой должен появляться тихий шум на выходе усилителя звука. На вашем телевизоре, если вы подключили красный и белый выход ко входу аудио)

Касаниями к выходам с PPU ножка 21 на телевизоре при подключенном желтом кабеле к входу видео будет появляться мелкая рябь.

Четвёртым делом

Паяем все детали и каретки для микросхем на плату. Проверяем каждую припаянную деталь трижды: номинал, как припаяли, прозвонили её по месту.

Пятым делом

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

Вставляем картридж и включаем.

Долгие мучения с бубном и тщательная проверка пайки ведёт к запуску данного аппарата)


Жёлтым — каскад аудио и видео усилителей и выходов.

Красным — детали питания схемы.

Синим — генератор частоты — для смены частоты с PAL на NTSC меняется только кварц, PPU и CPU.

Напоследок опишу основные проблемы, которые почерпнул на форуме и с которыми сталкивался сам:

Основная проблема: картинка есть, игра идёт на экране артефакты — битый PPU, не починить никак, только замена на заранее стабильный для проверки.



Вторая причина

Питание есть, ничего не запускается вообще HELP.

Причин море)

Первое и главное: ПАЙКА. Проверяйте 10 раз все детали на работоспособность перед пайкой.

Второе: микросхемы. Очень часто купленные микры не совместимы с китайскими катриками на 400 игр. Не хватает скорости обработки. Проверяйте работоспособность на старых картриджах, которые ещё на капле. У них микры на 5 вольт и там скорость медленнее, чем на новый китайских многоигровках. В моём случае причина незапуска картриджа Кулбой была в микросхеме SN74HC139N. На каплях все катрики работали , а новый 400 в 1 не запускался, пока я её не поменял.



Третья причина:

Криво спаянный генератор частоты. Проверяйте, есть ли генерация на ножках: PPU нога 18 и на CPU нога 29.

На них и проверяем осцилографом наличие генерации с нашего генератора частоты сигнала.

Если чего еще вспомню, добавлю)

За некоторыми деталями можно обращаться ко мне.

На основании всего вышеизложенного можно самому вполне быстро и с удовольствием собрать Dendy своими руками.

Всем удачной сборки.

Related Posts:

138 комментариев

Eugen

Добрый день, Woot. Спасибо за информацию. Буду искать дальше.

Valery
Valery

Года полтора проходя мимо ретро игровых приставок в магазинах, аналогов Денди и Сеги, я думал прикупить и поиграть с детьми. Но останавливало то, что покупать в совокупности все приставки дорого, игр на них не так много, а картриджи не то чтобы массово продаются. Поэтому решил сделать приставку своими руками и чтобы была возможность запускать игры от любых приставок.

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

Сборку приставки я решил делать на одноплатном компьютере Raspbery Pi 3. Немного покопавшись в недрах AliExpress нашел комплект специально для сборки игровой ретро консоли. Заказал с доставкой из России и уже через 5 дней получил вот такую радость. Ссылка на магазин в котором покупал будет в конце статьи.

Сборка ретро консоли на Raspbery Pi 3

В комплекте шел собственно сам микрокомпьютер Raspbery Pi 3, корпус стилизованный под приставку, кулер с радиаторами, microSD карточка на 32GB 10class, 2 джойстика и блок питания. Первым делом собрал все это в корпус.

Как видите в корпусе размещен хаб с USB портами для подключения джойстиков. Хаб подключается напрямую к одному из портов Raspbery Pi. Так же на корпус выведен разъем RJ45 для подключения к локальной сети, но можно использовать и WiFi.

С помощью пин конекторов на шину микрокомпьютера подключаются кнопка управления питанием и кнопка Reset, а так же питание для кулера, который подсоединяется к разъему на плате в корпусе.

Приклеиваем на плату радиаторы идущими в комплекте термопроводящим скотчем. Сам кулер крепится на крышку в пластиковый зажим. Но лучше всего прикрутить его парой саморезов из комплекта, чтобы не гремел во время раоты.

Удобно, что разъемы HDMI, MicroUSB для блока питания, а так же слот для карты памяти доступны снаружи при собранном корпусе, поэтому я все скрутил и перешёл к следующему этапу - установке операционной системы и закачке игр.

В собранном виде приставка очень компактная и практически бесшумная. Для настройки нам так же понадобятся клавиатура с USB разъемом и компьютерная мышь.

Установка RetroPie

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

2. Распаковываем образ в папку RetroPie. У вас должен появится файл с расширением img.

3. Записываем файл образа на флэшку с помощью программы Win32 Disk Imager.

4. Вставляем флэшку в консоль и включаем. При первом запуске вам будет предложено настроить кнопки джойстика. Обычно RetroPie самостоятельно определяет джойстик, просто следуйте инструкциям на экране (к сожалению на английском). Тем не менее вы можете переназначить кнопки при необходимости в настройках. Подключить можно практически любые джойстики, в том числе от XBox например.

5. Установка игр. Игры можно установить в консоль с любой флэшки или по сети. При втором варианте сеть предварительно нужно настроить (смотрите видео). Чтобы скопировать с флэшки достаточно вставить ее в один из портов консоли. Затем выбрать раздел Configuration и затем File Manager. В файловом менеджере в одной панели выбрать /mnt/usb - это флэшка, во второй панели выбрать /home/pi/RetroPie/roms . Скопировать из первой панели во вторую выбрав файлы rom-ов и нажав F5.

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

6. Когда скопировали файлы rom перезапустите консоль и в соответствующем разделе эмулятора, например NES увидите список игр. Запускаем и наслаждаемся ретро играми.

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


После моей статьи про дампер картриджей (которую пока что оставили на Хабре почему-то), меня очень много раз просили рассказать, как собирать и записывать картриджи для Денди/Famicom самому. Да, это очень избитая тема, даже в древних номерах журнала «Радио» про это можно было почитать, но прогресс не стоит на месте. Рассмотрим эту тему с точки зрения современных компонентов. Тем более, по-моему, она идеально подходит для изучения азов работы с ПЛИС, именно на этом я и сам учился.


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

Начать, наверное, нужно с того что, картриджи, которые продавались и продолжают продаваться в наших магазинах, перезаписать, увы, не получится (на самом деле некоторые можно, но об этом в другой раз). Связано это с тем, что в них установлена обычная EPROM память, которую можно записать только один раз. Однако, ничто не мешает собрать свой собственный картридж с нуля.

Напомню, что картридж включается прямо в шину CPU и в шину PPU, а соответственно в первую очередь содержит две микросхемы памяти с параллельным доступом: PRG — к ней обращается процессор, и она содержит непосредственно код игры, и CHR — с ней работает PPU (графический процессор), и она содержит изображения. При чём последняя запросто может быть не ПЗУ, а оперативной памятью, куда уже в процессе игры записываются данные.

Таким образом, самый простой картридж можно сделать из любых двух микросхем памяти с параллельным доступом, будь то хоть EPROM, хоть flash. При этом больше ничего из обвязки не нужно. Например, вот так выглядел мой первый самодельный картридж:


Микросхемы просто подключаются напрямую к соответствующим выводам на разъёме картриджа. Ноги /RD можно припаять напрямую к земле, ведь консоль всегда будет только читать данные, но я записывал данные уже после сборки картриджа, с помощью всё того же дампера, поэтому подключил все выводы как положено. Биты адреса и данных при этом перепутаны местами, но это абсолютно не имеет значения. Внизу можно увидеть перемычку, которая определяет «mirroring» — как будет зеркалироваться видеопамять: горизонтально или вертикально. Это зависит от игры, и в простейших играх определялось именно перемычкой на картридже.

И ещё очень важный момент — активировать нашу память нужно только тогда, когда консоль обращается к картриджу, иначе будет возникать конфликт на шине. Для этого у микросхем есть вывод /CE (chip enable), который включает память. Тут в ход идёт достаточно простая математика. Программная (PRG) память картриджа начинается с адреса $8000 и заканчивается $FFFF, это два в пятнадцатой степени. Графическая (CHR) память картриджа начинается с адреса $0000 и заканчивается $1FFF, имея объём в 8 килобайт, а это два в тринадцатой степени. Соответственно включать нашу память надо пятнадцатым и тринадцатым контактом на адресной шине. На разъёме картриджа уже есть специальные выводы, которые выдают необходимый нам сигнал. Более того, в случае с PRG памятью нужный нам контакт так и называется — /ROMSEL — сокращённо от ROM Select. Туда консоль выдаёт 0 вольт, когда обращается к памяти картриджа в районе между $8000 и $FFFF. Всё проще некуда.

Однако, на такой картридж можно будет записать только самые простейшие игры. Более серьёзные уже используют картриджи с мапперами, чтобы увеличить максимальный объём игры. Попробую объяснить, как они работали.

У памяти с параллельным доступом каждый бит адреса задаётся отдельным выводом у микросхемы. В разъёме для картриджа есть выводы A0-A14 (15 выводов) для PRG памяти. Это соответственно 15 бит адреса, которые дают 32768 комбинаций единиц и нолей, т.е. позволяют адресовать 32 килобайта. Для CHR памяти там соответственно выводы A0-A13, это 16384 комбинаций, т.е. 16 килобайт, но половина из них отдана памяти внутри консоли.

Уже в восьмидесятые годы таких объёмов стало не хватать. Конечно ничто не мешает поставить в картридж память бОльшего объёма, но у такой памяти и адресных выводов больше. Не трудно посчитать, что каждый дополнительный вывод увеличивает количество возможных адресов ровно в два раза. Но куда их подключать, если количество контактов в разъёме картриджа ограничено? Вот тут на помощь и приходят мапперы, именно они управляют дополнительными выводами в зависимости от различных условий. Почти всегда такими условиями является попытка запись в PRG-область памяти картриджа. Да, в ту, куда нельзя ничего записать.

Многие игры используют для этих целей простейшие логические микросхемы. Например, в картридже у Battletoads стоит четырёхбитный счётчик 74161, который используется как триггер. При записи по любому адресу от $8000 до $FFFF он запоминает записанное значение и выдаёт его на те самые дополнительные выводы у памяти, он же переключает мирроринг.

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


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

Первым делом читаем, как происходит взаимодействием с ним. А происходит оно через запись по определённым адресам, их 8 групп: $8000-$9FFE (чётные), $8001-$9FFF (нечётные), $A000-$BFFE (чётные), $A001-$BFFF (нечётные), $C000-$DFFE (чётные), $C001-$DFFF (нечётные), $E000-$FFFE (чётные) и $E001-$FFFF (нечётные). Запись по любому адресу внутри группы равнозначна. Видите закономерность? Регистр выбирается с помощью трёх адресных бит: A0, A13 и A14, остальные же значения не имеют.

Попробуем же имитировать работу маппера с помощью ПЛИС. Код я пишу на языке Verilog. Он тут не подсвечивается, прошу прощения за это.
Сначала описываем наши регистры, которые хранят текущее состояние:


Описываем реакцию на запись по соответствующим адресам. Возрастающий сигнал /ROMSEL говорим о том что было обращение к памяти картриджа, т.е. по адресам $8000-$FFFF, нам надо реагировать именно в этот момент.


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



Теперь CHR. Там такая схема:



Режим зеркалирования описывается всего одной строкой. В зависимости от него мы замыкаем вывод картриджа CIRAM A10 либо на A10, либо на A11:


Дальше сложнее. MMC3 умеет генерировать прерывания, когда на экране рисуется определённая строка. Это весьма полезно, и игры часто это используют. Строки на экране считаются с помощью обращений к A12 у PPU. При типичных настройках сигнал на A12 переходит из логического 0 в логическую 1 ровно один раз за строку, если не считать кратковременные переходы в 0. А их надо не считать, это всё немного усложняет:

Ах да, MMC3 поддерживает ещё подключение дополнительной оперативной памяти по адресу $6000-$7FFF! Надо не забыть и это описать:

На самом деле собрать картридж для какой-то одной определённой игры весьма просто, ведь нужно будет установить только необходимые компоненты. А вот сделать универсальный картридж гораздо сложнее.Если установить ПЛИС на 128 макроячеек, flash на 512 килобайт для PRG, flash на 512 килобайт для CHR, SRAM на 32 килобайта для CHR, SRAM на 32 килобайта в качестве дополнительной памяти, питание которой поддерживается батарейкой для игр, которые умеют сохраняться, то на нём пойдёт уже около 90%-95% игр. Схема получается весьма замороченная, я долго вручную рисовал плату под всё это дело. Кстати, при выборе компонентов не стоит забывать, что у Famicom/Dendy пятивольтовые уровни. Китайцы сейчас очень часто это игнорируют.

Первая ревизия моего универсального картриджа выглядела как-то так:


Ну и программу для записи игр написал конечно же:


Как видите, всё не так сложно, если немного посидеть и разобраться в принципах работы.


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

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

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

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

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

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



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

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

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