BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

You can talk about almost anything that you want to on this board.
User avatar
aa-dav
Posts: 339
Joined: Tue Apr 14, 2020 9:45 pm
Location: Russia

BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

Post by aa-dav »

There is nothing to be proud of - just fun with Arduino ecosystem.
Hand-made console of mine:
Image
It features monochrome display SSD1306 (128x64 1bpp) which I decided to "teach" to draw 1bpp game graphics.
It's microscopic size make it'unplayable, so "broken eyes" is the real name of the project, but my marketers rebranded it to "broken ice".
It was fun for me to discover bitmap layout in this display - every byte describes 1x8 vertical (!) stipe in display.
So there are 8x128 byte lines which fills 128x8 display stripes.
1Kb of display data (8x128 bytes) is tranferred every frame to display from ESP32 MCU via I2C bus (2 wires, serial thing) with clock size 1MGz. However FPS is about 30 frames per second. I think this is because display itself makes some delays.

My previous works and projects with old consoles make easy to adapt infrastructe for this 1bpp system.
TileEd map editor was used:
Image

Video of result can be seen here: https://rutube.ru/video/a6493643139bdb2 ... dev.ru&t=2
It's really "broken eyes", phone camera can't focus do it also.

Software rednering is fully decribed in *.h file:

Code: Select all

#include <Arduino.h>

struct map_desc
{
  uint8_t *map;
  uint8_t *tiles;
  int width;
  int height;
  int xMask;
  int yMask;
};

struct sprite_desc
{
  uint8_t *tiles;
  int width;
};

void tilesViewport(int xStart, int xEnd, int yStart, int yEnd);

void tilesCreateMap(map_desc *mapDesc, uint8_t *map, int width, int height, uint8_t *tiles);
void tilesDeleteMap(map_desc *mapDesc);
void tilesDrawBackMap(map_desc *mapDesc, int bx, int by);
void tilesDrawMap(map_desc *mapDesc, int bx, int by);

void tilesDrawSprite(sprite_desc *sprite, int x, int y);
There are can be as much map layers as wanted with sprites 8xN dimensions.
"Draw back map" draws the most back map without transparent color.
All other functions uses transparency with 1bpp OR->XOR scheme.
That is every tile data has 2 bytes of mask and pixels for every 1x8 line.

So, it was fun and that's all.
User avatar
aa-dav
Posts: 339
Joined: Tue Apr 14, 2020 9:45 pm
Location: Russia

Re: BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

Post by aa-dav »

BrokenICE 360 is in the development stage:
Image
User avatar
aa-dav
Posts: 339
Joined: Tue Apr 14, 2020 9:45 pm
Location: Russia

Re: BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

Post by aa-dav »

BrokenICE 360 features TFT ST7789 display (240х240x18bpp) with SPI bus.
It required me to print closed case to deal with all these cables:

Image

Physical display size is 1,3" and it is just a little bit larger than display of BrokenICE 2000, but it's higher resolution makes 8x8 font almost unreadable.
So, broken eyes 360 is true successor of it's legacy.
Pokun
Posts: 3482
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

Post by Pokun »

It's pretty neat! I've always wanted to make my own console some day.
Drag
Posts: 1711
Joined: Mon Sep 27, 2004 2:57 pm

Re: BrokenICE 2000 hand-made/held for loolz (ESP32+SSD1306)

Post by Drag »

Ditto, it sounds fun to make a little device with a screen and buttons on it, to just play around with. :D