Собираем свою игровую консоль
Здраствуйте уважаемые читатели!
В детстве я всегда мечтал делать компьютеры и т.д и т.п. Но детство еще не прошло как я уже собираю компьютеры и занимаюсь их продажей. Уже стало немного скучно, хотелось чего то особенного. Я немного подумав и посмотрев на свой Xbox 360, захотел сделать свою игровую консоль. Я назову его GetPlay 220. Итак, сборка прототипа GetPlay 220 Prototype.
Заранее извиняюсь за плохие фотографии 🙂
Идея была такова: консоль должна иметь в себе все функции PC; консоль должна управляться не клавиатурой, не мышью, а геймпадом; консоль должна иметь Wi-Fi и все прочие штуки; консоль должна быть тихой и мощной; консоль должна быть компактной.
Конечно, свою операционную систему не буду писать, оно будет на базе Windows 7. Почему не на Windows 8? Потому что Windows 8 слишком сильно нагружает железо. Я оформлю Windows 7 на свою тему.
1. Подготовка к сборке.
Я решил не покупать корпус, а сделать его самому.

Да, картонная коробка от видеокарты Asus GTX 560 не очень прочная, но это же прототип. Меня спрашивали друзья: «А не сгорит ли он?» (Тупой вопрос да?) Мой ответ: «Если процессор перегревается при температуре больше 100 C, а картон уж точно не сгорит при 100 C. Тем более процессор не касается картона.» 🙂




Где то в моем барахле валялся Core 2 Duo, и еще пара оперативных планок DDR3 по 4GB. У друга купил GT 440 Low Profile за 400р. И получил одну материнскую плату Asus P5G41T-M LX3 даром. В этом проекте участвовали несколько моих друзей. Один из них, мой друг Толя, дал мне блок питания на 350W. Спасибо ему большое. Халява закончилась, теперь покупать по рыночным ценам. Сьездив в г. Якутск (650 км. от Верхневилюйска) на каникулах, я купил: 120 мм кулер, алюминиевый пылевой фильтр, 500 GB HDD, охлаждение для процессора. Вот что мне удалось собрать:
1. Процессор: Intel Core 2 Duo E4500 2.20GHz s775 0р.
2. Материнская плата: Asus P5G41T-M LX3 s775 DDR3 mATX 0р.
3. Оперативная память: Crusial DDR3-1333 4GBx2 0р.
4. Видеокарта: NVIDIA GeForce GT440 Palit 1GB GDDR3 Low Profile 400р.
5. Жесткий диск: Samsung 1TB Sata-2 1790р.
6. Блок питания: Microlab 350W 0р.
7. Корпус: Картонка 0р.
8. Охлаждение: 120×120 Вентилятор для корпуса 80р. 92×92 Охладитель для процессора 400р.
Я все расчитал: видеокарта должна влезть, если убрать металлический «зад». Впрочем, увидим. Привод не нужен, так как есть интернет и «флэшка» 🙂
2. Сборка.
Сначала надо поставить материнскую плату:


Поработав с лобзиком, я получил такую панель. И прикрепил к нему материнскую плату. А заднюю панель сделал так:

Отлично встала 🙂 Итак, пока что все отлично получается. Потом, разбираем блок питания и вставляем:

Как разобрать блок питания, я фотки то снимал, но увы почти все потерял где-то… 🙁

Оставил только радиатор от кулера.

Как видите на этой фотографии видна видеокарта 🙂 Слава богу, ОНА ВЛЕЗЛА! Теперь можно спокойно спать ночью.

Вот это вид сверху. Два 120 мм кулера будут дуть: первая на блок питания и видеокарту; а вторая на радиатор процессора. Один 120 мм кулер снял с блока питания. А на середине будет кнопка включения и выключения.

А вот это вид спереди. Там стоит 80 мм вентилятор который выводит горячий воздух из корпуса. Вентилятор снял со старого компьютера. Рещетку снял с блока питания. 🙂
Вот это да! Мне посчастливилось найти дисковод от ноутбука. Ура! 🙂

Теперь надо поставить. Можно поставить… Но черт возьми мы совсем забыли про жесткий диск! Тогда от дисковода нужно избавиться, но ничего.

Все влезло. Теперь приступим к тестированию!
3. Тест.






Все работает прекрасно! 2 часовой стресс-тест и не было ни одного сбоя и перегрева!
Теперь не хватает только геймпада, а вид корпуса просто омерзительный! 🙁
4. Продолжение сборки.

Я купил искусственную кожу. Теперь его надо приклеить к корпусу:

Красота! Теперь собираем и включаем. Все хорошо работает…
Настал вопрос о покупке геймпада. Немного подумав, и погуглив, я нашел информацию о том что можно подключить беспроводной геймпад от Xbox 360 к ПК!
У меня же есть 2 беспроводных геймпада от Xbox 360.
Поехав в г.Якутск (на олимпиаду по физике), я купил ресивер для подключения беспроводного геймпада к ПК. Стоил 900 р. Но несмотря на цену, я купил.
Пришел домой. И все поставил, установил, настроил.
Для управления OC геймпадом, я скачал программу Xpadder. Эта великолепная программа позволяет кнопки мыши и клавиши клавиатуры переводить в геймпад.
5. Итоги.




Все прекрасно работает и функционирует. 🙂 Единственный минус в том, что при клеивании корпуса, корпус немного деформировался:

У 80 мм кулера смотри. Я исправил на несколько миллиметров, положив сверху 3 килограммовый гантель. 🙂
Так от такой сборки я точно получил огромное удовольствие!
Дополнения и тесты я выложу потом, когда будет время. После этого я сделаю настоящий GetPlay 220, не ПРОТОТИП и выложу его сюда 🙂 Не судите строго, это моя первая публикация.
Как сделать игровую приставку своими руками и занять себя на вечер
![]()
Как сделать игровую приставку? Подготовьте старый компьютер / ноутбук, накопитель на 2 Гб и более, два джойстика и желательно отдельный монитор с кабелем для подключения. После смонтируйте все элементы, установите операционную систему и выполните настройку. Средние расходы при самостоятельном изготовлении минимальны, что позволяет сэкономить на покупке до 10-15 тысяч рублей.
Что потребуется
Перед тем как сделать игровую приставку своими руками, запаситесь необходимым оборудованием. Вам потребуется:
- старый ПК или ноутбук — можно использовать уже имеющийся или купить за 2000-3000 р;
- USB-накопитель емкостью от 2 Гб и выше — от 160 р;
- пара джойстиков на USB — от 200 р;
- старый монитор, HDMI-кабель или переходник — от 1500 р (не обязательно).
При выборе старайтесь брать компьютер с необходимым набором портов. Мощность не имеет большого значения. Главное, чтобы можно было установить хотя бы Виндовс ХР. Флешку лучше брать отдельно с классом не меньше 10. Игровые джойстики должны быть любыми и с USB-разъемом, чтобы не было проблем с подключением.

Как сделать приставку своими руками
После подключения всех элементов игровая приставка из очень старого компьютера или ноутбука почти готова. Теперь необходимо установить ОС Recalbox, построенную на базе Линукс, но имеющую более удобный для игровой функции интерфейс. Если сделать все правильно, игровая приставка из старого ноутбука позволит играть как в старые, так и в более новые игры.
Алгоритм действий имеет следующий вид:
- Подготовьте все комплектующие.
- Загрузите образ Recalbox. При выборе системы отдавайте предпочтение 32 или 64 битам с учетом вашего компьютера. Необходимая программа занимает не больше 300-400 Мб и доступна по ссылке download.recalbox.com.

- Установите файл на USB-накопитель и сделайте его загрузочным. Для этого вставьте флешку в разъем, загрузите утилиту Etcher по ссылке balena.io/etcher/ и установите программу. После входа в Софт выберите загруженный образ, USB-накопитель и жмите Флеш, после чего дождитесь завершения копирования.

- Чтобы сделать игровую приставку из ПК, вставьте флешку в USB-разъем, перезагрузите компьютер и выберите в роли источника карту памяти. Для решения этой задачи на ПК с MAC зажмите Option до появления картинки Apple, а после выберите карту памяти из перечня. На устройстве с Windows войдите в БИОС, в настройках отыщите пункт First Boot Device и выберите флешку. Для входа в БИОС можно использовать разные кнопки в зависимости от материнской платы, к примеру, Del, F10, F1 и т. д.
- Дождитесь появления надписи Recalbox.
- Подключите джойстики для управления.
На этом главный этап, как из ПК сделать игровую приставку, завершен. Теперь можно перейти непосредственно к установке игр и настройке.
Как настроить систему
Игровая приставка из старого ПК мало отличается от обычной бюджетной консоли по своему функционалу и возможностям. После установки системы в каких-то сложных настройках нет необходимости — достаточно установить необходимые игры. В установленной ОС уже имеется несколько старых игрушек из серии приставок Сега, Супер Ниндендо и других. Многим игрокам этого набора недостаточно, поэтому лучше дополнить игротеку. Это не трудно, ведь в Интернете можно найти почти любую игру, скопировав ее на флешку.
Разобравшись, как сделать из старого ПК игровую приставку, отправляйтесь на поиск развлечений. Информацию можно найти на следующих площадках:
- emu-land.net;
- freeroms.com/nes.htm
- bestoldgames.net/eng и других.

Просто выбирайте подходящий вариант и загружайте себе на ПК. Сделать это не составляет труда, ведь игровой софт запакован в ZIP-архив. Он используется для установки на операционную систему игровой приставки. При этом просто копировать игру на USB-накопитель на ПК / ноутбук не получится — необходимо подключить устройство к Интернету.
Здесь имеется два варианта:
- Сделать подключение новоиспеченной игровой приставки по проводу через порт Ethernet. Преимущество в том, что здесь не нужно выполнять какие-либо настройки.
- Подключиться по Вай-Фай. В таком случае войдите в настройки Рекалбокс (зажмите кнопку Старт на джойстике), перейдите в Настройки сети, а далее Включить Вай-Фай. На следующем шаге задайте настройки WiFi и укажите пароль. После соединения на консоли появляется IP адрес. Запомните его и вбейте в адрес ноутбука, к примеру, 192.168.1.1.

После этого в новую игровую приставку можно загружать софт. Сделать это проще всего через FTP-менеджер. Размер игр, которые загружены в интерфейсе Recalbox ограничены по объему. Далее сделайте следующее:
- Войдите в интерфейс Рекалбокс.
- На боковой панели выберите платформу (ROMs).
- Жмите Upload ROMs.
- Загрузите скачанный актив.
- После завершения загрузки перезапустите приставку Рекалбокс на ноутбуке / ПК.
- Проверьте, что игра появилась в перечне.
- Кликните Старт и наслаждайтесь процессом.

Как видно, сделать игровую приставку из компьютера сможет даже новичок. Здесь не нужны специальные знания, опыт паечных работ или другие сложные навыки.
Плюсы и минусы самодельной приставки
В завершение приведем преимущества и недостатки выполненной работы. Их необходимо учитывать до того, как сделать консоль из имеющегося оборудования.
- Минимальные расходы. При наличии старого ПК и USB-накопителя необходимо потратиться только на покупку старых USB-джойстиков (около 200 рублей);
- Большой ассортимент игрового софта для скачивания в Интернете;
- Минимальная сложность. Сделать игровую приставку может любой желающий в домашних условиях.;
- Для развлечений будут доступны только старые игры;
- Необходимо загружать ряд сторонних программ и делать загрузочную флешку;
- Желательно иметь старый ПК / ноутбук. Если его нет, придется покупать.;
Если у вас пылиться старый компьютер или ноутбук, можно потратить минимальную сумму и сделать игровую приставку своими руками. Она не выдаст всех возможностей современной консоли, но позволит хорошо провести время за старыми и любимыми играми. В комментариях поделитесь своим опытом создания игровой консоли (если есть) и задавайте вопросы.
Самодельная консоль (Ещё одна)
Знаете я очень люблю портативные консоли, если вы читали мои предыдущие блоги то наверняка знаете об этом. Я понимаю, что тема уже довольно заезженная, одним из моих самых успешных блогов был тот который был о создании ретро-консоли, потом были ещё подобные блоги от сторонних авторов, но в целом все рассказывали об одном и том же. Я помню, что даже в далёком 2014 году на сайте выходил блог, который даже получил недельный касарь, но там было совсем не то.
Так вот, я вдохновившись тем блогом и зарубежными роликами с Ютуба решил попробовать вновь. Но теперь это будет не просто очередной блог о ретро-консоли, нет. Это будет большой блог со своей конкретной целью, приготовьтесь, это будет очень интересно.
Экскурс в историю
Но для начала историческая справка.
Прародителем портативных консолей можно назвать MicroVision от компании Milton Bradley, выпущенную в 1979 году. В приставке можно было менять картриджи, что позволяло запускать более одной игры. MicroVision является раритетом в наше время и некоторые коллекционеры готовы прилично заплатить за эту портативку.

Спустя год появляется Nintendo со своим Game and Watch, так же известная у нас благодаря кампании «Электроника». Особенностью был жидкокристаллический экран КОТОРЫЙ не позволял запускать другие игры кроме той, что была уже предустановлена. Можно выделить то, что именно на приставке от Nintendo впервые появилась «крестовина» без которой трудно представить современные контроллеры.

Nintendo вновь решила показать на что способна в 1989 году выпустив легендарный GameBoy. У портативки был простенький экран, но это позволило уменьшить энергопотребление до минимума. Так же была возможность мультиплеера по специальному кабелю.

В том же году на рынок выходит консоль от Atari, под названием Atari Lynx. Её главным отличием от конкурента в лице GameBoy был цветной экран. Хоть качество графики и поражало, но высокое энергопотребление в купе с конским ценником быстро похоронили приставку.

В 1990 году уже другой гигант выходит со своей портативной консолью, это была Sega Game Gear. У приставки был более привычный горизонтальный вид, так же она имела цветной экран, но так же как и Atari Lynx имела большие затраты электричества, что было жирным минусом.

Спустя 6 лет Nintendo выпускает обновлённую версию GameBoy с приставкой Pocket. Экран стал больше, а вместо 4 батареек стали использовать всего две. Благодаря этому играть стало гораздо комфортнее. Стоит также сказать, что в том же году вышла небезызвестная «Тамагочи». Симулятор ухаживания за виртуальным питомец, что было больше похоже на работу чем на развлечение, но людям нравилось.

Ещё через два года выходит GameBoy Color. Улучшенная версия предыдущей портативки и как ясно из названия, наконец-то появился цветной экран. Так же можно было запускать картриджи старой приставки.

В 1999 году в борьбу включилась Sony. Хотя как включилась, она провела эксперимент выпустив PocketStation. Маленькое устройство, напоминающее своим видом уже упомянутый «Тамагочи». Под устройство делались специальные версии игр, даже выходила 7 «финалка». Конечно это не гриндилка на 300+ часов, но всё равно интересное приключение одного из «Чокобо». Народ одобрил.

В 2001 году выходит принципиально новая GameBoy Advance. С повышенным качеством картинки и более тонкая она пришлась по душе фанатам. В 2003 вышла GameBoy Advance SP, та же консоль но в удобном формате «раскладушки».

В том же 2003 выходит первый «игровой смартфон» (как странно это звучало в том году) от кампании Nokia с интересным именем N-GaGe. У устройства была очень интересная конструкция и неплохие технические характеристики. (Мне запомнилась одна из игр серии Might and Magic). Но новую приблуду невзлюбили и попытка Nokia откусить кусок пирога с треском провалилась.

В 2004 «большая N» выпускает одну из самых продаваемых консолей за всю историю — Nintendo DS. Спасибо Глебу за то, что подробно рассказал о ней в одном из своих роликов. Но всё же кратко поясню, что приставка имела форм фактор «раскладушки» и на обоих панелях были экраны, причем нижний был сенсорный и это не для красоты. Функциями консоли пользовались по полной.

В том же году Sony возвращается, но уже не с маленьким экспериментом, а полноценной приставкой, всем известной PlayStation Portable. Консоль произвела в своё время фурор. В течении следующих лет вышло ещё несколько вариаций данной приставки. PSP получила много похвалы, хоть и не смогла добраться до уровня DS.

Спустя 7 лет ситуация повторилась. На рынок выходит приемник DS — Nintendo 3DS. Во многом схожая со своей предшественницей, но имевшая важные отличия, одним из которых была возможность просмотра 3D без специальных очков. Так же появилась возможность доступа к сети (которое использовалось не для просмотра Ютуба, а для мультиплеера и общения во внутреннем чате.), а так же камера.

В этом же году выходит PlayStation Vita. Своеобразная преемница PSP! Так люди полагали. А вот тут давайте по подробнее.

PS Vita вышла 17 декабря 2011 года в Японии, далее уже в других странах. Поддержка консоли осуществлялась аж до 1 марта 201 года. Новшеством в отличии от PSP было добавление второго стика, сенсорный передний экран и задняя панель. 3G модем, Bluetooth, возможность серфинга по сети, а характеристики консоли! Четырёхъядерный процессор с частотой 2Ггц, видеочип с частотой 200 Мгц и объемом видеопамяти 128 мегабайт, и целых пол гигабайта ОЗУ! Это было довольно внушительно. Но к разочарованию Sony, консоль провалилась. Её ругали за маленькое количество AAA-проектов и консоль довольно быстро загнулась.
Но спустя десять, покупка PS Vita кажется довольно неплохим вариантом даже при условии существования конкурента в виде Nintendo Switch. Почему? Потому что благодаря фанатам на консоли появилось множество полезного и крутого. Порты популярных проектов, новые игры которые выходят до сих пор, возможность стриминга с пк на Виту (об этом я кстати рассказывал в своём предыдущем блоге), ну и конечно не стоит забывать о том, что существует возможность эмуляции PSP. Так что купив PS Vita вы убиваете двух зайцев одним ударом. Но есть одно «но». Всегда есть это неприятное но. Технические характеристики приставки очень скудны по меркам 2021 года. По этому.
. Я решил сделать PS Vita X, ну или 2, или Next, называйте как хотите. На фоне набирающего популярность тренда портативных ПК-консолей я попытаюсь сделать тоже самое. Но давайте создадим цель и некоторые правила. Целью будет создание портативной приставки работающей на ОС от ПК и имеющей сенсорный экран. А чтобы было интересней, мы поставим ограничение. Постараемся уложиться в определенную сумму денег. И за основу мы возьмем стоимость полноценного комплекта новой PS Vita там с чехольчиками, наушниками и картой памяти на 32 гб. В среднем такой комплект обойдется вам за 18000 рублей, вот в эту сумму и попробуем уложиться. Приступим!

Вот как примеры самых популярных ПК-консолей. Aya Neo и GPD WIN 3

Вот как примеры самых популярных ПК-консолей. Aya Neo и GPD WIN 3
Начинка
Изначально я думал собрать пк с начала, на распечатанной плате, но как оказалось во первых, я не смогу сделать мощную начину, а во вторых у меня не было специальных навыков для этого. Да это бы сильно уменьшило стоимость, но я все же решил пойти по пути наименьшего сопротивления и купить обычный одноплатный компьютер. Да не мужик, но зато, одну из главных задач мы преодолели, практически любой современный одноплатный компьютер будет мощнее системок PS Vita.
И после долгих поисков, выбор пал LatePanda. Да вариант далеко не самый лучший, но в целом нам подходит. -11 тысяч рублей.
Но по итогу мы имеем 2Гб оперативной памяти и 32 встроенной, четырёхъядерный CPU и GPU от Intel, на чистоте 1.9 Ггц и 350 Мгц соответственно. Есть небольшие потери, но так как мы ограничены в средствах жаловаться не приходиться. Так же здесь есть 2 разъема USB, разъём для в интернет (хоть и есть Wi-Fi модуль).

Экран
Было решено вместо покупки обычного сенсорного мини экрана, а немного заморочится и купить отдельно специальные экран и сенсорную «наклейку», что примечательно оба эти элемента от всё той же кампании LattePanda. Нам нужно на сам экран наклеить «сенсорную наклейку» (предварительно сняв плёнки с того и другого). На плате компьютера будут два разъема от этих элементов, единственное, с чем придется потрудиться так это с корпусом. Нужно будет сделать специальное крепление для экрана. Минус 4000.

Оба нужных элемента

Оба нужных элемента
Контроллер
До этого все было легко, но на удивление, с геймпадом произошло больше всего проблем. Изначально планировалось взять раздвижной геймпад и попробовать прикрепить его на всю конструкцию, но это показалось мне очень скучным вариантом и я решил сделать это чуть более оригинально. Кто-нибудь помнит PSP GO? Экспериментальную версию знакомой консоли, которую довольно сильно ругали, но это другая история. Так вот, она имела довольно интересный вид, по этому было решено взять старенький DualShock 3, разобрать его, засунуть в самодельный корпус для геймпада который позднее прикрепим к основному корпусу. Причем нужно будет оставить отверстие для разъема для зарядки, это важно. Да звучит довольно сложно, но ведь хоть что-то здесь должно быть не просто куплено? Ещё минус 1000 рублей.
Так же стоит сказать, что в комплекте идет Windows 10, уже активированная, что несомненно приятно.


Питание
*Изменение блога. Благодаря замечанию одного из комментаторов я решил изменить структуру блока питания. По совету я прошерстил интернет на эту тему и нашел довольно интересное решение. Существует такой зарубежный канал «The Wrench», парень делает разные интересные электронные штуки. Так вот в одном из роликов о создании карманного ПК он показал хороший способ сделать миниатюрный блок питания. В общем. Нам понадобятся три мини-аккумулятора 18650 (да они довольно громоздкие, но это не так уж и страшно). Склеиваем их вместе, но так что бы средняя батарея была повернута в другую сторону относительно двух других. Далее нам понадобятся проволока и умение обращаться с паяльником. Припаиваем к центрам средней и правой батареи кусок проволоки, делаем тоже самое только с другой стороны и со средней и левой батареей. Далее нам понадобятся два небольших провода. Каждый из них припаиваем к тем местам с которыми не работали.
Следующий элемент с которым мы будем взаимодействовать это защитная плата для аккумулятора под названием 3S BMS. Стоит она копейки.

Далее воспользуемся розеткой питания. Её как и многое другое можно найти на Aliexpress. Припаиваем провода от розетки к плюсу и минусу на плате.
Теперь нам нужны 5-ти вольтовый регулятор и старый USB-кабель.


Далее подключаем старый USB к подходящему слоту на LattePand’е.
Остается только припаять оставшиеся два серых провода к миниатюрному переключателю и готово.
Совсем забыл рассказать о том как консоль будет выводить звук. Но тут совсем кратко. Нам понадобиться миниатюрный усилитель звука, который нужно будет прикрепить внутри корпуса, на котором придется сделать специальные отверстия. Сам же усилитель перед установкой нужно будет подключить к компьютеру в соответствующий порт. Готово

Заключение
Да вышло довольно криво и я бы даже сказал бедно, но как я уже говорил специальных навыков у меня нету. В принципе соединив все перечисленные выше элементы можно играть, но вам вряд ли понравилось бы играть на такой «консоли». По этому за основу корпуса был взят концепт портативной игровой консоли PGS. В своё время она наделала много шума, но вскоре о ней благополучно забыли. Но не пропадать же добру? Для создания корпуса можно воспользоваться и обычным картоном, но что бы было красивее думаю использовать станок для 3D-печати. (На Ютубе наткнулся на ролик зарубежного автора который сделал нечто похожее только там всё намного интересней.)

В общем это вышла довольно интересная игрушка. Понятно, что не о каких больших проектах речи не идет, но серфинг в браузере, работа с аппаратными программами, запуск эмулятор вплоть до той же PSP, все это стало возможно. Ну и да стримить со своего пк на это чудо тоже получиться. Да и если бы было больше денег то можно было бы поставить, например LettePanda Alpha которая без проблем смогла запустить даже GTA 5!
Автор вместо обычного одноплатного компьютера, взял материнскую плату от ноутбука! Да это дало значительный буст в мощности, но и повлияло на размеры консоли.
Ретро игровая приставка своими руками

Этот пост является введением в мой проект «самодельной» консольной видеоприставки сделаной с нуля. Я вдохновлялся как ретро консолями так и современными образцами, но у меня получилась своя собственная архитектура. Мои друзья постоянно мне говорили, что я должен рассказать о своём проекте, а не делать всё исключительно «для себя», так что вот я публикую этот пост.
Внимание, это — перевод
Как всё началось
Меня зовут Серхио Виейра (Sérgio Vieira) я выроc в Португалии в 80-е и 90-е годы, у меня давно ностальгия по ретро-геймингу, особенно по приставкам третьего и четвертого поколения.
Несколько лет назад я решил получше разобраться в электронике и попытаться сделать свою собственную приставку.
По профессии я программист и не имел никакого опыта как электронщик, если не считать (и не стоит этого считать) самостоятельных апгрейдов своего десткопа.
Хотя у меня и не было опыта, я сказал себе «почему бы и нет?», купил несколько книжек, несколько наборов электронщика и начал изучать исходя из своих ощущений о том, что именно стоит изучать.
Я хотел сделать приставку похожую на те которые вызывают у меня ностальгические чувства, я хотел что-то между NES и Super Nintendo, или может между Sega Master System и Mega Drive.
У этих приставок были CPU, оригинальный видео чип (тогда их ещё не называли GPU) и аудио чип, иногда встроеный, а иногда внешний.
Игры распространялись на картриджах, которые в общем были расширениями железа иногда просто ROM чипами, а иногда имели дополнительные компоненты.
Изначальный план был сделать приставку со следущими характеристиками:
- Без эмуляции, игры и программы должны работать на настоящем железе, не обязательно том самом из тех времён, но достаточно быстром для задачи, и не более того.
- С настоящим ретро CPU.
- С аналоговым ТВ выходом.
- Со звуком
- С поддержкой двух контроллеров
- Скроллинг бэков и анимация спрайтов
- С возможностями для поддержки платформерных игр вроде Mario, ну и конечно всяких других игр.
- С загрузкой игр и программ с SD карт.
Почему именно SD карты, а не картриджи, ну в основном просто так намного практичнее, их можно копировать с компа. А картриджи это значило бы, во-первых больше железа в приставке, а во-вторых производить железо для каждой программы.
Производство
Видео сигнал
Первое чем я занялся это генерация видео сигнала.
Любая консоль того периода, который я взял за образец, имела различные проприетарные графические чипы, что означает, что у всех у них были различные технические характеристики.
По этой причине я не хотел использовать готовый графический чип, я хотел чтобы и моя консоль имела уникальные технические характеристики по графике. И поскольку я не мог сделать свой собственный графический чип, и в то время ещё не умел использовать FPGA, я решил ограничиться софтварным генерированием графического сигнала используя 8-битный, 20 мегагерцовый микроконтроллер.
Это не перебор, и как раз достаточно мощное решение для графики того уровня который мне был интересен.
И так, я начал использовать микроконтроллер Atmega644 на чистоте 20 Мгц для генерации видеосигнала в формате PAL для телевизора. Мне пришлось бит-бангить протокол PAL, поскольку сам чип не умеет его.


Микроконтроллер выдаёт 8-битный цвет (RGB332, 3 бита красный, 3 бита зелёный и 2 синий) и пассивный ЦАП преобразует это всё в RGB. К счастью в Португалии почти все телевизоры оборудованы разъёмом SCART и они поддерживают RGB вход.
Правильная графическая подсистема
Поскольку микроконтроллер довольно мощный, а использовать его я решил исключительно для генерации видео сигнала (я назвал это VPU — Video Processing Unit), то я решил заодно организовать дабл-буфер.
У меня получилось что второй микроконтроллер (PPU, Picture Processing Unit, чип Atmega1284 тоже на 20 МГц) генерировал картинку в микросхему ОЗУ номер 1 (я назвал её VRAM1), а первый в это же время отправлял содержимое второй микросхемы (VRAM2) в телевизор.
После одного кадра, а два кадра в системе PAL это 1/25 секунды, VPU переключает VRAM-ы и они меняются местами, PPU генерирует картинку в VRAM2, а VPU дампит VRAM1 на ТВ вывод.
Видео плата получилась очень сложной поскольку мне пришлось использовать внешнее железо чтобы оба микроконтроллера могли пользоваться обоими модулями памяти и чтобы ускорить доступ к ОЗУ, ведь там тоже бит-бангинг, так что пришлось добавить чипы 74 серии как счётчики, line-селекторы, трансиверы и тд.
Прошивки для VPU и PPU тоже получились громоздкие поскольку пришлось писать много кода чтобы выжать максимум скорости из графики. Сначала всё было написано на ассемблере, потом часть была переписана на Си.


В результате PPU генерирует картинку 224×192 пикселей, которая потом отпраляется на ТВ через VPU. Может разрешение вам покажется низким, но вообще-то это почти столько, сколько консоли того времени имели на самом деле, обычно 256×224. Несколько меньшее разрешение зато позволило мне добавить больше фич которые система успевает просчитать за один кадр.
Как и в старину, PPU имеет свою жёсткую механику которой надо уметь пользоваться. Подложка (бэк) рендерится из символов 8×8 пикселей, так же называемых тайлами. Получается что размер бэкграунда 28х24 тайла.
Чтобы бэк мог скроллиться плавно, попиксельно, я сделал так что всего есть 4 виртуальных экрана, каждый по 28х24 тайла которые идут в памяти последовательно и обёрнуты вокруг друг друга, на картинке это понятнее.


Поверх бэкграунда, PPU может отрендерить 64 спрайта которые могут быть 8 или 16 пикселей по высоте или ширине, то есть 1, 2 или 4 тайла и ещё могут быть флипнуты горизонтально и/или вертикально.
Сверху бэка можно ещё рендерить оверлеем один буфер размером 28х6 тайлов, это было задумано для отрисовки HUD-ов, скоров так чтобы не мешать основным спрайтам и скроллингу бэка.
Одна «продвинутая» фича в том, что бэк можно скролить не целиком, а каждую линию в отдельности, что позволяет всякие интересные эффекты вроде сплит скрина или почти-параллакса.
Ещё есть таблица аттрибутов, которая позволяет задавать каждому тайлу значение от 0 до 3, и потом можно всем тайлам с одним аттрибутом задать страницу тайлов или инкрементировать их символьное значение. Это удобно когда есть части бэка которые надо регулярно изменять и CPU не придётся обсчитывать каждый тайл в отдельности, ему достаточно только сказать что-то вроде: «все тайлы с аттрибутом 1 инкрементируйте числовое значение своего символа на 2», подобные вещи реализованые разными техниками можно наблюдать, например, в блочных тайлах в Mario где знак вопроса анимируется или в играх где есть водопад в котором все тайлы постоянно меняются создавая эффект падающей воды.
Когда моя видеоплата заработала, я начал работать с CPU в качестве которого для моей приставки был выбран Zilog 80.
Одна из причин по который был выбран именно Z80, ну кроме того, что это классный ретро CPU, это его способность адресовать два 16 битных пространства, одно для памяти и второе для портов ввода-вывода, не менее легендарный 6502, например, так не может, он может только одно адресовать 16 битное пространство и в него приходится мапить как память так и различные внешние устройства, видео, аудио, джойстики, апаратный генератор случайных чисел и тд. Удобнее иметь два адресных пространства, одно полность отданное на 64 килобайта кода и данных в памяти и второе для доступа к внешним устройствам.
Сначала я подсоединил CPU к EEPROM в котором разместилась моя тестовая программка и ещё присоединил его через пространство ввода-вывода к микроконтроллеру который я установил чтобы можно было общаться с моим компом через RS232, и мониторить как работает CPU и всё остальное. Этот микроконтроллер Atmega324 работающий на 20 МГц я называю IO MCU — input/output microcontroller unit, он отвечает за контроль доступа к игровым контроллерам (джойстикам), SD карт ридеру, клавиатуре PS/2 и коммуникатору по RS232.

CPU подключается к микросхеме памяти на 128 килобайт, из которых только 56 килобайт доступны, это конечно бред, но я мог достать только микросхемы по 128 или 32 килобайта. Получилось, что память состоит из 8 килобайт ПЗУ и 56 килобайт ОЗУ.
После этого я обновил прошивку IO MCU с помощью этой библиотеки и у меня появилась поддержка SD карт ридера.
Теперь CPU мог ходить по директориям, смотреть что в них лежит, открывать и читать файлы. Всё это делается посредством записи и чтения в определённые адреса пространства ввода-вывода.
Подключение CPU к PPU
Следущее, что я сделал это связь между CPU и PPU. Для этого я применил «простое решение» которое заключалось в приобретении двухпортового ОЗУ, это такая микросхема ОЗУ которую можно подключать сразу к двум разным шинам. Это позволяет избавиться он дополнительных микросхем вроде лайн-селекторов и, к тому-же, позволяет практически одновременный доступ к памяти с обоих чипов. Ещё PPU напрямую может обращаться к CPU на каждом кадре активируя свои немаскируемые прерывания. Получается, что CPU получает прерывание на каждом кадре, что полезно для разных задач по таймингу и для понимания когда пора заняться апдейтом графики.
Каждый кадр взаимодествия CPU, PPU и VPU происходит согласно следующей схеме:
- PPU копирует информацию из памяти PPU в внутреннюю память.
- PPU отправляет сигнал прерывания на CPU.
- Одновременно:
- CPU прыгает на функцию прерывания и начинает обновлять PPU память новым графическим состоянием. Программа должна вернуться из прерывания до следующего кадра.
- PPU рендерит картинку на основании информации ранее скопированой в одну из VRAM.
- VPU отправляет картинку из другой VRAM на ТВ выход.
Примерно тогда же я занялся поддержкой игровых контроллеров, сначала я хотел использовать контроллеры от Nintendo, но сокеты для них проприетарные и вообще их трудно найти, поэтому я остановился на 6-кнопочных контроллерах совместимых с Mega Drive/Genesis, у них стандартные сокеты DB-9 которые везде есть.

Написание первой настоящей игры
В это время у меня уже был CPU способный контролировать PPU, работать с джойстиками, читать SD карточки… пора было писать первую игру, конечно на ассемблере Z80, у меня на это ушло несколько дней из свободного времени.
Добавляем динамическую графику
Всё было супер, у меня была своя игровая приставка, но мне этого было мало, потому-что приходилось в игре использовать графику прошитую в памяти PPU и нельзя было нарисовать тайлы для конкретной игры и изменить её можно было только перепрошив ПЗУ. Я стал думать как добавить ещё памяти, чтобы CPU в неё мог бы загружать символы для тайлов, а PPU потом мог оттуда это всё считывать и как это сделать попроще поскольку приставка и так уже получалась сложной и большой.
И я придумал следущее: только PPU будет иметь доступ к этой новой памяти, а CPU будет загружать туда данные через PPU и пока этот процесс загрузки происходит, эта память не может быть использована для отрисовки, но можно будет в это время рисовать из ПЗУ.
После конца загрузки CPU переключит внутреннюю ПЗУ память на эту новую память, которую я назвал Character RAM (CHR-RAM) и в этом режиме PPU начнет рисовать динамическую графику, это наверное не лучшее решение, но оно работает. В результате новая память была установлена 128 килобайт и может хранить 1024 символа 8х8 пикселей каждый для бэкаграунда и ещё столько-же символов для спрайтов.

И наконец звук
До звука руки дошли в последнюю очередь. Сперва я хотел звук наподобие того что есть в Uzebox, то есть чтобы микроконтроллер генерировал 4 канала ШИМ-звука.
Однако, оказалось, что я могу легко достать винтажные чипы и я заказал несколько микросхем FM синтеза YM3438, эти ребята полностью совместимы с YM2612 которые использовались в Mega Drive/Genesis. Установив их можно получить музыку качества Mega Drive и звуковые эффекты производимые микроконтроллером.
Я установил ещё один микроконтроллер и назвал его SPU (Sound Processor Unit), он управляет YM3438 и сам может генерировать звуки. CPU управляет им через двух-портовую память, в этот раз она всего 2 килобайта.
Как и в графическом блоке, звуковой блок имеет 128 килобайта памяти для хранения PCM сэмплов и звуковых патчей, CPU загружает данные в эту память обращаясь к SPU. Получилось, что CPU либо говорит SPU исполнять комманды из этой памяти или обновляет комманды для SPU каждый кадр.
CPU управляет четырьмя ШИМ каналами через четыре циркулярных буфера находящихся в памяти SPU. SPU проходит через эти буферы и исполняет комманды записаные в них. Ещё есть один такой-же буфер для микросхемы FM синтеза.
Итого, как и в графике взаимодействие между CPU и SPU идёт согласно схеме:
- SPU копирует данные из памяти SPU во внутреннюю память.
- SPU ждёт сигнала прерывания от PPU (это для синхронизации)
- Одновременно
- CPU обновляет буферы ШИМ каналов и буферы FM синтезатора.
- SPU исполняет комманды в буферах согласно данным во внутренней памяти.
- Одновременно со всем этим, SPU обновляет ШИМ звуки на частоте 16 килогерц.

Что вышло в итоге
После того как все блоки были готовы, некоторые пошли на макетные платы.
Для блока CPU я смог разработать и заказать кастомную PCB, не знаю стоит ли сделать это и для остальных модулей, думаю мне на самом деле повезло, что моя PCB сразу заработала.
На макетной плате сейчас (пока) остался только звук.
Вот как всё выглядит на сегодняшний день:

Архитектура
Диаграмма иллюстрирует компоненты в каждом блоке и как они взаимодействуют друг с другом. Единственное, что не показано это сигнал от PPU к CPU на каждом кадре в виде прерывания и такой-же сигнал который идёт в SPU.

- CPU: Zilog Z80 на 10 МГц
- CPU-ROM: 8KB EEPROM, содержит код загрузчика
- CPU-RAM: 128KB RAM (56KB доступных), код и данные для программ/игр
- IO MCU: Atmega324, является интерфейсом между CPU и RS232, клавиатурой PS/2, джойстиками и файловой системой SD карт
- PPU-RAM: 4 килобайта двухпортовой памяти, промежуточная память между CPU и PPU
- CHR-RAM: 128KB RAM, хранит динамические тайлы для бэка (подложки) и спрайтов (в символах по 8×8 пикселей).
- VRAM1, VRAM2: 128KB RAM (43008 реально доступно), используются для фреймбуфера в них пишет PPU и читает из них VPU.
- PPU (Picture Processing Unit): Atmega1284, рисует кадр во фреймбуфер.
- VPU (Video Processing Unit): Atmega324, читает фреймбуфер и генерирует RGB и PAL сигнал и синхронизацию.
- SPU-RAM: 2KB двухпортовая RAM, служит интерфейсом между CPU и SPU.
- SNDRAM: 128KB RAM, хранит ШИМ патчи, PCM сэмплы и блоки инструкций для FM синтезатора.
- YM3438: YM3438, микросхема FM синтеза.
- SPU (Sound Processing Unit): Atmega644, генерирует звуки на принципе широтно-импульсной-модуляции (ШИМ) и управляет YM3438.
Окончательные спецификации
CPU:
- 8-bit CPU Zilog Z80 на частоте 10Mhz.
- 8KB ROM для загрузчика.
- 56KB RAM.
IO:
- Чтение данных с FAT16/FAT32 SD карт ридера.
- Чтение/запись в порт RS232.
- 2 MegaDrive/Genesis-совместимых игровых контроллера.
- Клавиатура PS2.
Видео:
- Разрешение 224×192 пикселя.
- 25 кадров в секунду (половина FPS от PAL).
- 256 цветов (RGB332).
- 2×2 виртуальная подложка (448×384 пикселей), с двунаправленым по-пиксельным скроллингом, на базе четырёх полноэкранных страниц.
- 64 спрайта с шириной и высотой 8 или 16 пикселей с возможностью как вертикального так и горизонтального флипа.
- Подложка и спрайты состоят из символов по 8х8 пикселей каждый.
- Символьная видеопамять на 1024 символа для бэкграунда и 1024 для спрайтов.
- 64 независимых горизонтальных скроллинга по задаваемым линиям
- 8 независимых вертикальных скроллингов по задаваемым линиям
- Оверлей на 224х48 пикселей с опциональной прозрачностью по цветовому ключу.
- Таблица аттрибутов бэкграунда.
- RGB и композитный PAL через разъём SCART.
Звук:
- ШИМ на 8 бит и 4 канала, с встроенными вейвформами: квадрат, синус, пила, шум и тд.
- Сэмплы на 8 бит, 8 КГц в одном из ШИМ каналов.
- Микросхема FM синтеза YM3438 загружаемая инструкциями на частоте 50 герц.
Разработка для приставки
Для приставки был написан загрузчик. Загрузчик помещается в CPU ПЗУ и может занимать до 8 килобайт. Он использует первые 256 байт ОЗУ. Загрузчик это первое, что исполняет CPU. Он нужен чтобы показать программы находящиеся на SD карте.
Эти программы находятся в файлах которые содержат скомпилированый код и могут также содержать графику и звук.
После выбора программы она загружается в память CPU, память CHR и память SPU. После чего программный код исполняется. Максимальный размер кода загружаемого в приставку 56 килобайт, кроме первых 256 байт и конечно надо учесть место для стека и данных.
И этот загрузчик и другие программы написаные для этой приставки создавались одинаковым нижеописаным способом.
Memory/IO Mapping
Что важно при разработке под эту приставку, так это учитывать как CPU обращается к различным блокам, и правильно распределять адресное пространство ввода вывода и адресное пространство памяти.
CPU обращается к оперативной и постоянной памяти загрузчика через адресное пространство памяти.
Адресное пространство памяти 
А к PPU-RAM, SPU-RAM и IO MCU через адресное пространство ввода-вывода.
Адресное пространство ввода-вывода 
Как видно из таблицы, внутри адресного пространства ввода-вывода выделены адреса для всех устройств, IO MCU, PPU и SPU.
Управление PPU
Из информации в таблице видно, что для управления PPU надо писать в память PPU которая доступна по адресам 1000h-1FFFh в адресном пространстве ввода-вывода.
Распределение адресного пространства PPU

PPU Status может принимать следущие значения:
- Режим вшитой графики
- Режим динамической графики (CHR-RAM)
- Режим записи в CHR память
- Запись завершена, ждём подтверждения режима от CPU
Вот, например, как можно работать со спрайтами:
Приставка может рисовать 64 спрайта одновременно. Данные по ним доступны через CPU через адресное пространство ввода-вывода по адресам 1004h-1143h (320 байт), на каждый спрайт приходится 5 байт информации (5 * 64 = 320):
- Байт разных флагов, каждый бит этого байта флаг: Active, Flipped_X, Flipped_Y, PageBit0, PageBit1, AboveOverlay, Width16, Height16.
- Байт символа, номер символа из таблицы (определяемой флагами выше).
- Байт цветового ключа (то есть какой цвет — прозрачность)
- Байт координаты X
- Байт координаты Y
Итого, чтобы увидеть спрайт, надо установить флаг Active в 1, и задать координаты X и Y в пределах видимости, координаты 32/32 помещают спрайт в верхний левый угол экрана, меньшие значения спрячут его либо сделают частично видимым.
Потом мы можем установить код символа и цвет прозрачности.
Например, если нам нужно показать спрайт номер 10, то адрес будет 4145 (1004h + (5 x 9)), пишем значение 1 для активирования и координаты, например, x=100 и y=120, пишем по адресу 4148 значение 100 и по адресу 4149 значение 120.
Используем ассемблер
Один из способов программирования для приставки это ассемблер.
Вот пример как показать один спрайт и анимировать его чтобы он двигался и отталкивался от краёв экрана.
Использование языка Си
Можно также использовать язык Си, для этого нам понадобится компилятор SDCC и некоторые дополнительные утилиты.
Код на Си может получится медленнее, но зато написать его быстрее и проще.
Вот пример кода, который делает то же самое, что и код на ассемблере выше, тут используется библиотека которая помогает делать вызовы к PPU:
Динамическая графика
(В оригинале Custom graphics. прим. пер.)
В ПЗУ приставки зашиты 1 страница тайлов для бэка и ещё страница готовых спрайтов), по умолчанию можно использовать только эту фиксированую графику, однако можно переключиться на динамическую.
Цель у меня была такая, чтобы вся необходимая графика в бинарной форме сразу грузилась в оперативную память CHR, причём делать это умеет код в загрузчике из ПЗУ. Для этого я сделал несколько картинок правильного размера с разными полезными символами:

Поскольку память динамической графики состоит из 4-х страниц по 256 символов 8х8 пикселей каждый и 4-х страниц таких же символов для спрайтов, я перевёл картинки в PNG формат, удалил повторяющиеся одинаковые:

И потом использовал самописную тулзу чтобы перевести это всё в бинарный формат RGB332 с блоками 8х8.

В результате имеем файлы с символами, где все символы идут последовательно один за другим и каждый занимает по 64 байта.
Волновые RAW сэмплы переведены в 8-битный 8-килогерцовые PCM сэмплы.
Патчи для звуковых эффектов на ШИМ и музыки пишутся особыми инструкциями.
Что касается микросхемы FM синтеза Yamaha YM3438, то я нашел программку называемую DefleMask которая выдаёт музыку синхронизируемую по PAL и предназначеную для YM2612 микросхемы из Genesis, которая совместима с YM3438.
DefleMask экспортирует музыку в формате VGM и я её конвертирую ещё одной самописной утилитой в свой собственный двоичный формат.
Все бинарники всех трёх типов звука комбинируются в один двоичный файл, который мой загрузчик умеет читать и загружать в звуковую память SDN RAM.

Линковка окончательного файла
Двоичный исполняемый код, графика и звук соединяются в один PRG файл. PRG файл имеет заголовок в котором всё описано, есть ли звуковые и графические данные, сколько они занимают и сами эти данные.
Такой файл можно записать на SD карту и загрузчик приставки считает его и загрузит всё в соотвествующие места и запустит исполняемый код программы.

Эмулятор
Я написал эмулятор своей приставки на С++ с применением wxWidgets, чтобы проще было девелопить для неё.
CPU эмулируется библиотекой libz80.
В эмулятор добавлены фичи для отладки, я могу его остановить в любой момент и заняться пошаговой отладкой ассемблера, есть маппинг к исходному коду на Си если для игры был использован этот язык.
По графике, я могу заглянуть в видео память, в таблицы символов и в саму CHR память.
Вот пример программы запущеной на эмуляторе со включёнными средствами отладки.
Демка программирования
Эти видео снимались камерой смартфона направленой на экран ЭЛТ телевизора, прошу прощения за неидеальное качество картинки.
Интерпретатор БЭЙСИКа программируемый с PS/2 клавиатуры, после первой программы, я показываю как писать напрямую в память PPU через адресное пространство ввода-вывода активируя и двигая спрайт:
Демка графики, в этом видео программно скачут 64 спрайта 16х16, на фоне бэкграунда с динамическим скроллингом и оверлеем который двигается под и над спрайтами:
Звуковая демка показывает возможности YM3438 и ШИМ звук, звуковые данные этой демки и FM музыка и ШИМ звуки вместе занимают почти все доступные 128 килобайт звуковой памяти.
Тетрис, для графики использваны почти только возможности бэкграунда, музыка на YM3438, звуковые эффекты на ШИМ патчах.
Заключение
Этот проект поистине воплощение мечты, я над ним работал уже несколько лет, с перерывами, смотря по свободному времени, никогда не думал, что дойду так далеко в создании собственной игровой ретро видео приставки. Она, естественно, не идеальна, я уж точно не эксперт в электронике, в приставке явно вышло слишком много элементов и несомненно можно было сделать лучше и наверное кто-то из читателей как раз об этом думает.
Но всё-же, в процессе работы над этим проектом, я узнал многое об электронике, игровых приставках и дизайне компьютеров, языке ассемблера и других интересных вещах, и главное я получил огромное удовлетворение играя в игры которые я сам написал на железе которое я сам разработал и собрал.
У меня есть планы делать приставки/компьютеры и дальше. Вообще-то, я уже делаю новую приставку, она почти готова, и является упрощёной ретро приставкой на базе FPGA платы и нескольких дополнительных компонетов, (в намного меньшем количестве чем в этом проекте, уж точно), задуманой быть намного дешевле и повторяемее.
Хотя я тут очень много написал об этом проекте, несомненно ещё многое можно обсудить, я едва упомянул как звуковой движок работает, как CPU с ним взаимодействует, да и о графической системе и других входах-выходах и обо всей приставке в целом ещё много чего можно было бы расказать.
Смотря на реакцию читателей я может быть напишу ещё статей сфокусировавшись на обновлениях, подробностях об отдельных блоках приставки или других проектах.
Проекты, сайты, каналы Youtube которые вдохновляли меня и помогали мне с техническими знаниями:
Эти сайты/каналы не только вдохновляли, но и помогли мне найти решения сложных проблем которые возникали по ходу работы над этим проектом.
Спасибо, если дочитали до сюда. 🙂
Если у вас есть вопросы или фидбек пишите в комментариях внизу (Оригинальной статьи на английском языке на Гитхабе. прим. пер.)
