We are now in the final days of our crowdfunding campaign, and I just wanted to express my gratitude for all the support. Thanks to you, microByte will soon be a reality! I also wanted to apologize for the lack of updates over the past few weeks. For what it’s worth, I’ve been making good use of my time! Instead of staying in touch (sorry!), I’ve been adapting MicroPython to the microByte architecture and porting the amazing Stage library, an open-source sprite engine that makes it easy to create games using MicroPython. You can check out the original uGame repository here.
By teaching the Stage library how to take full advantage of microByte’s hardware, I’ve given it the ability to sustain a higher frame rate and to display more sprite on the screen. One of the key hacks that made this possible involved using the ESP32’s multi-core architecture to render and paint on different cores.
You can see a very simple demo in the video below:
For a sense of how amazing this library is, check out the demo code below!
import machine import stage #Initialize screen display = machine.display() #Initialize the buttons btn_left = machine.gamepad(0) btn_right = machine.gamepad(1) btb_a = machine.gamepad(8) #Load sprites file bank = stage.Bank.from_bmp16("demo.bmp") #Create the background background = stage.Grid(bank,15,15) #Paint the sky y=0 while y<13: x = 0 while x<15: background.tile(x,y,6) x += 1 y += 1 #Paint some clouds background.tile(2,4,5) background.tile(5,6,5) background.tile(8,5,5) background.tile(11,7,5) #Create ball sprite ball = stage.Sprite(bank, 1, 100, 192) #Initialize game engine with a limit of 60FPS game = stage.Stage(display, 60) #Set the layers and render all the screen game.layers = [ball] + [background] game.render_block() dx = 5 # Increment on x axis of the ball dy = -10 #Increment on y axis of the ball while True: if btn_right.pressed(): #If right button was pressed move to right if ( 0 < ball.x < 220): dx = 5 ball.set_frame(ball.frame % 4 + 1) ball.move(ball.x + dx, ball.y) if btn_left.pressed(): #If left button was pressed move to left if( 0 < ball.x < 220): dx = -5 ball.set_frame(ball.frame % 4 + 1) ball.move(ball.x + dx, ball.y) if btn_a.pressed(): #If button a was pressed, the ball jump creating an animation while ball.y > 130: ball.set_frame(ball.frame % 4 + 1) ball.move(ball.x, ball.y+dy) game.render_block() while ball.y < 188: dy += 1 ball.set_frame(ball.frame % 4 + 1) ball.move(ball.x, ball.y + dy) game.render_block() dy = -10 ball.update() game.render_block() game.tick()
I made a few other modifications to MicroPython as well. More specifically, I…
Both Stage compatibility and the tweaks listed above remain works in progress, and I plan to continue improving them over time. I also plan to release a few related tutorials very soon.
Finally, I wanted to announce that enclosure production has begun! It’s a slow process, so I wanted to get a head start to ensure that I can send you your microBytes as soon as possible!
A modular, open hardware gaming platform for classic 8-bit games
Portable, DIY, open hardware retro-gaming console
An Arduino shield with a GPU, FPGA, HDMI, and Python support for gaming and audiovisuals