Close
0%
0%

EMES - Epic Minimalist Entertainment System

A very minimalist handheld console powered by ATTiny10 MCU

Similar projects worth following
A very minimalist handheld console with removable cartridges. It features a custom made tiny LED 15x10 matrix display, 4 buttons, and a buzzer for sound. There is no MCU on the baseboard, instead an ATTiny10 MCU is placed on each cartridge, sort of like the Microvision console (the first handheld console with swapable cartridges).

This is an attempt to build a full-fledged game console, i.e. with multiple games, sound, multiple buttons - all that using one of the cheapest and lowest-end 8-bit MCU currently on the market. Thus, ATTiny10 is my MCU of choice for this project. Although, there are even cheaper and lower-spec MCUs out there,  ATTiny10 seems to be minimally viable for this purpose.

Current progress

First version of the baseboard and cartridge PCBs were designed and ordered. The first PCB prototype was assembled.

Two playable games have been implemented - variations of Pong and Snake. And also a test program - to check if the display, buttons and sound do work together. Here is a short demonstration:

Implementation details

ATTiny10 has the following specifications:

  • Main clock frequency: 8MHz
  • Program/data flash: 1KB
  • RAM: 32 bytes
  • 8-bit ADC
  • 4 GPIOs

The display - GPD340 requires at least 4 output lines to control (serial data, 2 clock inputs, PWM brightness control), one output is needed to make some noise with the buzzer, and there're 4 buttons. So all these channels need to be multiplexed to just 4 GPIOs.
So I came up with the following GPIO assignment:

  • PB0 - is shared between the keyboard and serial data input for the display
  • PB1 - outputs the same PWM for both - brightness control and the buzzer. Most of the time it outputs high-freq (>20KHz) PWM, so the buzzer appears silent. When we need to produce a sound, we just switch to a lower frequency and adjust duty cycle so the display is not too bright/dim.
  • PB2 - serial clock input for the first half of the display
  • PB3 - serial clock input for the second half of the display

The buttons connected to PB0 via a resistor ladder, so each button causes different voltage levels which could be read by the ATTiny's ADC to determine which button is pressed exactly.

The game cartridge also acts as the main power switch/jumper: when inserted, pins 7 and 8 on the edge connector are shorted allowing current to flow.

The very first prototype was built on a breadboard:

And this breadboard also doubles as a programming rig for the cartridges. There is a 12V boost converter with a switch, which is required to program an Attiny10 when the reset function on the pin PB3 is disabled.

All firmware is written in either C or assembly using avr-gcc and uploaded to the device with a cheap USBASP programmer.

EMES_04.gif

Graphics Interchange Format - 11.42 MB - 09/12/2024 at 17:46

Preview

EMES_03.gif

Graphics Interchange Format - 16.68 MB - 09/06/2024 at 23:37

Preview

emes_base_board_schem.png

Portable Network Graphics (PNG) - 46.33 kB - 09/06/2024 at 23:37

Preview

emes_cartridge_schem.png

Portable Network Graphics (PNG) - 17.01 kB - 09/06/2024 at 23:37

Preview

  • 3d printed housing/enclosure

    Michael08/04/2025 at 19:20 0 comments

    Designed the housing

    It needs some improvements, but overall it turned out pretty ok

  • New base-board and power supply PCBs, Egg game

    Michael07/27/2025 at 02:21 0 comments

    I assembled the new base-board featuring the new LED matrix. As the previous one, it also has 4 buttons and a speaker.

    Made a silly mistake in the schematics, so had to bodge the LED matrix driver chip a little. Oh well...

    Also assembled the power-supply board, it has a tiny 90mAh Li-Ion battery on it, a boost converter and a charging controller which is connected to a power-only USB-C port.

    The boards have the exact same dimensions and intended to be on top of each other inside a housing, which I'm going to design and print next. Both assembled boards seem to work fine.

    In the meantime, I coded a new game - essentially a clone of the Nintendo Game & Watch Egg game.

  • Switching to a custom-made LED matrix

    Michael07/18/2025 at 13:21 0 comments

    I decided to experiment with my own custom-made LED matrix display, since the GPD340 display is basically pure high-grade unobtanium, and 10x7 resolution is very limiting for gaming capabilities.

    So I designed a 15x10 matrix out of 0201 LEDs:

    The resulting dimensions of the display area is 15 by 10mm with diagonal of ~0.7''.

    I tried SMT-assembly service from one of the very well known PCB manufacturers for the first time ever, and gotta say the result totally exceeded my expectations: 

    No defects whatsoever, every single LED on every matrix I received works.

    To drive the matrix I chose the IS31FL3743A LED driver which is controlled through I2C bus and is 5V tolerant. I also designed a breadboard- friendly module for experimenting purposes. The module features both the driver and the matrix with just power and I2C pins being exposed.

    I evaluated this module (if it even works as intended) using a Raspberry Pi Pico.

    Of course, made an obligatory BadApple demo:

    After I played enough with it on Pico, I hooked it up to my original ATiny10-EMES proto-breadboard and started rewriting previous games/demos for the new display.

    So far, I have Pong and Snake and almost completed Tetris-like:

    Next up is to assemble a new main PCB with integrated LED matrix and its driver.

  • Snake game

    Michael09/12/2024 at 17:50 0 comments

    A playable Snake-game has been implemented. Short playthrough:

View all 4 project logs

Enjoy this project?

Share

Discussions

Dylan Turner wrote 09/09/2024 at 15:11 point

Nice! I made a similar project not too long ago with the whole "cartridges as cpu + mem" thing meant to be a business card. I've been working on a new version of it, actually.

  Are you sure? yes | no

senily64dx wrote 09/09/2024 at 11:53 point

32 Bytes of RAM? And I thought the Interton VC4000 had little, at 37 Bytes. And it's running at 1/10th the clock speed (except that the CPU takes multiple clock cycles per operation and would run circles around the S2650 CPU when clocked at the same speed)

  Are you sure? yes | no

Michael wrote 09/09/2024 at 13:34 point

Actually, RAM is not what I'm struggling with - 32B is just enough for small games like pong or snake. I'm mostly struggling to fit everything in 1KB of program flash - this one runs out very quickly, a lot of compromises must be made in game logic.

  Are you sure? yes | no

parkview78 wrote 09/09/2024 at 02:52 point

A great inspirational project!  What is the part number of the 8 wire connector and where did you buy it from?

  Are you sure? yes | no

Michael wrote 09/09/2024 at 13:20 point

Thanks! This is the datasheet for the part: https://eu.mouser.com/datasheet/2/40/9159_600-3366826.pdf

I got it from Mouser, it goes by this p/n there: 009159008603906

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates