ФлеймФорумЖелезо

Я решил сделать свою игровую консоль. С нуля.

Страницы: 1 2 3 4 5 6 7 Следующая »
#0
20:09, 24 июля 2023

Под "с нуля", конечно же, понимается использование готового процессора (в данном случае - ARM-микроконтроллер), готового дисплейного модуля и.т.п. Моя задача заключается в разводке платы, придумывании дизайна (а-ля кирпич) и написании прошивки с драйверами, которая позволяет использовать ресурсы консоли на максимум.

Характеристики:

  Процессор (микроконтроллер): Raspberry Pi Pico (RP2040), 133мгц, два ядра Cortex-M3. Второе ядро пока не юзаю - притулить некуда (возможно будет растеризатором примитивной 3D-графики на уровне пс1, сонерики же смогли с Mascot Capsule - чего я не смогу?).
  ОЗУ: 264кб SRAM. При таком разрешении экрана, этого хватает даже на весьма комплексные игры.
  ПЗУ: Внешняя 2мб SPI-флэшка. Как ее организовывать пока не придумал, скорее всего сделаю сейвы как в PlayStation. ФС пока что нет - ассеты линкуются статически с игрой в виде C-массивов.
  Питание: Автономная работа от аккумулятора. Хотелось бы результата около 6 часов на BL-4C (800мАч), пока что потребление составляет 210мАч (нужно настроить клоки и подсветку дисплея - она кушает больше всего). Зарядка АКБ будет обеспечиваться модулем TP4056.
  Дисплей: 1.8", TN с разрешением 128x160. Считаю это разрешение оптимальным для МК - и процу не тяжело в роли блиттера выступать, и на SPI-контроллер нагрузка не слишком тяжелая. Жалко нет матриц диагональю побольше - на 2.4 тоже смотрелось бы нормально.
  Звук: Динамик, звук скорее всего будет через встроенный ШИМ-контроллер (хардварный само собой). Можно было бы реализовать внешний ЦАП с i2s, но для удешевления пусть звуком занимается проц
  Управление: 6 кнопок - 4 направления и 2 действий. Должно быть вполне достаточно для небольших игрушек.
  Запуск игр:  Пока не определился. Либо игры будут статически лнковаться с остальной прошивкой, либо будем писать их на lua (местное ABI пока ниасилил, но буду разбираться позже. Если разберусь - то будут бинарники).

По сути, консоль по мощности и хар-кам близка к телефонам 2004-2005 года: Siemens S65/C75, Samsung X100, Sony Ericsson K510i.

Прошивка:
  Быстрая работа с дисплеем. Отрисовкой (по сути - блиттингом, т.к векторных операций там мало) занимается процессор. После подготовки кадра, фреймбуфер скармливается DMA-контроллеру, а тот передает его через SPI на дисплей на частоте ~60мгц. Получаем неплохой FPS.
  Прямой доступ к стейту ввода. Кнопки опрашиваются каждый кадр, получить к ним доступ можно напрямую - без всяких новомодных axis и.т.п.
  Простое и понятное API. Вся игра пишется с использованием простого и понятного API, прям как Pico-8: grDrawBitmap, grFillRect, fwGetTime и.т.п.

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

  Вот так выглядит прототип:

+ Показать

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

#1
(Правка: 20:13) 20:10, 24 июля 2023

Я прост смотрю на вот эти консольки, которые люди собирают на малинах или ардуинах с готовыми библиотеками для работы с дисплеями и.т.п.
Но это же не так круто, как пилить что-то с нуля. Да, конечно же API RPi Pico весьма простое по меркам эмбеда, но оно достаточно близко к bare-metal, в отличии от ESP32, где всем рулит FreeRTOS.

Консольки на линухе я уважаю, но не когда люди подключают здоровые дисплеи через HDMI(!) с преобразователями LVDS -> HDMI, которые сами по себе жрут немало. Это дичь как по мне, и как это портативом назвать? Настоящая портативная консоль сможет работать хотя-бы 3-4 часа даже на АКБ <1.000мАч. Особенно мне не нравится, когда люди накатят иксы и ретропай и вот типа - моя консоль. Я б на их месте напрямую написал бы "морду", которая общалась бы с фреймбуфером (что я уже делал) и сам портировал эмули под свою платформу - так в разы интереснее!

#2
20:13, 24 июля 2023

monobogdan
> Управление: 6 кнопок - 4 направления и 2 действий.

Очень мало для таких характеристик. Настоятельно рекомендую ориентироваться на геймпад от SNES. Если дойдёт до эмуляции то таковым покроется и SNES и SMD, но главное что это действительно удобно и уместно для нормальных игр.

#3
20:17, 24 июля 2023

=A=L=X=
Пока консоль все еще находится на стадии прототипа, можно будет добавить) подумаю об этом, как минимум start и select пригодились бы!

Интересно что там китайцы юзают в всяких Sup. Полагаю, тоже какие-то похожие мощные МК, либо дешевые системы на чипе (AllWinner V3s/F1C100s как вариант).

Изображение
#4
20:22, 24 июля 2023

monobogdan
> как минимум start и select пригодились бы!

Вот селект довольно бестолковая кнопка. Start как вызов меню/паузы нужен, да, но опять таки исторически как кнопка запуска игры есть просто атавизм от игровых автоматов где это был сигнал от монетоприёмника. В любом случае двухкнопочность это слишком мало - даже на денди было четыре кнопки включая селект и старт. Но две кнопки экшона реально мало - сейчас уже даже аналог контры стрельбой и прыжком не обходится - нужны вещи типа выбора оружия, подката, активации крюка и так далее. :) В общем контроллер по типу SNES для таких мощностей, имхо, самое то. Можно даже 3D-шутер затащить типа Doom без костыльного управления (бамперы ходят влево-вправо).

#5
20:28, 24 июля 2023


monobogdan
> Под "с нуля", конечно же, понимается использование готового пр
Нет с нуля, так с нуля. Бери лопату иди копай руду.

#6
20:31, 24 июля 2023

=A=L=X=
Будем пилить! Порт вольфа был бы интересен, но ОЗУ не хватит.

#7
(Правка: 21:01) 20:57, 24 июля 2023

monobogdan
> Дисплей: 1.8", TN с разрешением 128x160.

Нет, такой хоккей нам не нужен.    320x200 и возможность запускать эмуляторы/пилить порты с 8/16 бит консолей это необходимый минимум.  Если в малинке нет нормального видеоядра, - можно прицепить FT81x по SPI (можно посмотреть, как это сделано на Gameduino)

monobogdan
> Можно было бы реализовать внешний ЦАП с i2s, но для удешевления пусть звуком
> занимается проц

Оно какие-то копейки стоит же.  Я себе собирал ёRadio, там как раз i2s ЦАП применяется,  в районе 200р за модуль.

=A=L=X=
> Настоятельно рекомендую ориентироваться на геймпад от SNES. Если дойдёт до
> эмуляции то таковым покроется и SNES и SMD, но главное что это действительно
> удобно и уместно для нормальных игр.

Можно увеличить характеристики до платы Raspberry Pi Pico W и цеплять  плоевский джой по блюпупу

#8
21:08, 24 июля 2023

0iStalker
> Gameduino
У Gameduino в какой-то версии вообще роль видеоядра ПЛИС выполняет :) Может сразу и фпга распаивать начнем!?

0iStalker
> Если в малинке нет нормального видеоядра
128кб фреймбуфер при 565 пиксельформате - хочешь чтобы половину ОЗУ съел чисто экран? :)

#9
21:32, 24 июля 2023

monobogdan
> половину ОЗУ съел чисто экран
Так увеличь ОЗУ, с таким-то процоп.

#10
21:35, 24 июля 2023

master-sheff
> Так увеличь ОЗУ, с таким-то процоп.
У проца нет внешней шины для ОЗУ, только для SPI-памяти. Шина есть у ESP32, причем именно для SPI SRAM :)

#11
21:38, 24 июля 2023

Ren
> Нет с нуля, так с нуля. Бери лопату иди копай руду.
В Майнкрафте давно уже процессор запилили. Накопав предварительно руды.

#12
0:05, 25 июля 2023

Запилил первую игрушку для консоли. Сейчас это еще прототип - поиграть уже можно, но цели как таковой нет.
Писал на C, трушно, практически везде статика, кроме пулов (для противников и пуль) - для них используются аллоки. Аллоки же и помогли найти попорченную память в одном из драйверов.

Изображение

https://pastebin.com/zChG6umn

#13
0:37, 25 июля 2023

monobogdan
> 128кб фреймбуфер при 565 пиксельформате - хочешь чтобы половину ОЗУ съел чисто
> экран? :)

При некоторой ловкости рук фреймбуфер заменяется на строчный буфер - https://habr.com/ru/articles/496046/

#14
1:55, 25 июля 2023

inoremap
Пасиб за наводку. Потом возможно второе ядро займется 3D-графикой полностью, там ресурсов для этого хватит.

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумЖелезо