111nation/TinyEngine

TinyEngine - Game Engine for Microcontrollers

3

stars

65

commits

C++

primary language

Aug 29, 2026

updated

game-engine
retrocomputing
retrogaming
tree-walk-interpreter

README

TinyEngine - Game Engine For Microcontrollers


TinyEngine - A game engine to turn your ESP32/Arduino into a mini retro game console! TinyEngine supports TinyScript, a high-level interpreted custom scripting language to allow you to make games on the fly without recompiling TinyEngine for your microcontroller. Inspired by the Game Boy and PSP.

Demo

Features

  • TinyEngine 2D Game Engine
  • TinyScript scripting language
  • Console Emulation on PC

TinyEngine

TinyScript

TinyScript is a high-level interpreted scripting language with its distinct BASIC-like syntax.

# Display Player in updated position
DEFINE FUNC0 BEGIN 
	M0 = M0 + (M1*JOYSTICK_X)/100

	# Bound player position
	IF M0-M3 < 0 THEN 
		M0 = M3
	ELSE IF M0+M3 > 319 THEN
		M0 = 319-M3
	END

	M63 = 0
	WHILE M63 < M2 DO 
		CALL LINE M0-M3, (239-M63), M0+M3, (239-M63), 255, 255, 255  
		M63 = M63 + 1
	END
END

More Game Demos



Make sure to leave a GitHub star on this repo to show your support <3 :)


[!NOTE] The project is WIP! You can currently emulate and run the Game Engine on your laptop/computer. Future goals are to implement this on microcontrollers.

Getting Started

The documentation for TinyScript lives under Docs/README.md.

TinyEngine Controls

KeysDescription
W / A / S / D or Arrow Keys Movement controls. emulates joystick, maps a keypress to -100%, 0% or 100% of equivalent joystick position.
E Mapping to joystick click
O Mapping to auxillary 'A' button

Installation

Binary Releases

Install the binary releases here for your target Operating System.

Windows

Unzip the downloaded zipped file and run the project within the folder by double-clicking on it.

Alternatively, you can open a terminal window within the root of the folder and execute the following to run via the CLI.

.\main.exe
Linux (Unix)

Unzip the downloaded zip file by running the following in the same directory as the downloaded zip file.

unzip <Folder Name> .
cd <Folder Name>

To execute the binary via CLI, execute:

./main
MacOS

Unzip the downloaded zip file. You can do this by running the following in the same directory as the downloaded zip file.

unzip <Folder Name> .
cd <Folder Name>

Execute main within the unzipped folder or to execute the binary via CLI, execute:

./main

Build From Source

Make sure you have the various prerequisites.

Requirements

  • C++ Compiler linked to your PATH
  • CMake Version 3.23 or higher
  • Make
  • Git

Building & Executing

[!NOTE] Building commands may differ depending on your environment

Clone the repository onto your local system using the following.

git clone --recursive https://github.com/111nation/TinyEngine

Enter the cloned repository and enter the GameEngine directory to build and execute the Emulator.

cd Arduino-Handheld-Console
cd GameEngine

cmake -S . -B build
cmake --build build

How TinyEngine Works

Loading Games

When emulating the game engine on your personal computer, TinyEngine loads games from the programs folder, $ROOT/programs/main, where $ROOT is the current working directory of where TinyEngine was executed at. This currently functions as a basic bootloader for the game console to fetch the first instructions (which is just a single game at this point).

Depending if you downloaded a precompiled binary or built from source, $ROOT is the unzipped folder installed the precompiled binary or $ROOT is the GameEngine folder where cmake was executed.

Keep all custom-written games in $ROOT/programs/, 'load' a game by renaming it to main in the programs folder.

[!TIP] Two sample games, a drawing and a pong game has been included as a demo

TinyScript

This is the most fun part! This section is viewable at Docs/README.md

Project Structure

Directory / ComponentDescription
Depreciated/PyGameEngineStores the legacy, deprecated Python-based game engine codebase.
ArduinoStores the Arduino implementation used to control physical hardware inputs.
GameEngineStores the main source code and data for the TinyEngine game engine.
DocsContains the system and API documentation for TinyEngine.

Contributors

111nation

65 commits

111nation/TinyEngine

TinyEngine - Game Engine for Microcontrollers

3

stars

65

commits

C++

primary language

Aug 29, 2026

updated

game-engine
retrocomputing
retrogaming
tree-walk-interpreter

README

TinyEngine - Game Engine For Microcontrollers


TinyEngine - A game engine to turn your ESP32/Arduino into a mini retro game console! TinyEngine supports TinyScript, a high-level interpreted custom scripting language to allow you to make games on the fly without recompiling TinyEngine for your microcontroller. Inspired by the Game Boy and PSP.

Demo

Features

  • TinyEngine 2D Game Engine
  • TinyScript scripting language
  • Console Emulation on PC

TinyEngine

TinyScript

TinyScript is a high-level interpreted scripting language with its distinct BASIC-like syntax.

# Display Player in updated position
DEFINE FUNC0 BEGIN 
	M0 = M0 + (M1*JOYSTICK_X)/100

	# Bound player position
	IF M0-M3 < 0 THEN 
		M0 = M3
	ELSE IF M0+M3 > 319 THEN
		M0 = 319-M3
	END

	M63 = 0
	WHILE M63 < M2 DO 
		CALL LINE M0-M3, (239-M63), M0+M3, (239-M63), 255, 255, 255  
		M63 = M63 + 1
	END
END

More Game Demos



Make sure to leave a GitHub star on this repo to show your support <3 :)


[!NOTE] The project is WIP! You can currently emulate and run the Game Engine on your laptop/computer. Future goals are to implement this on microcontrollers.

Getting Started

The documentation for TinyScript lives under Docs/README.md.

TinyEngine Controls

KeysDescription
W / A / S / D or Arrow Keys Movement controls. emulates joystick, maps a keypress to -100%, 0% or 100% of equivalent joystick position.
E Mapping to joystick click
O Mapping to auxillary 'A' button

Installation

Binary Releases

Install the binary releases here for your target Operating System.

Windows

Unzip the downloaded zipped file and run the project within the folder by double-clicking on it.

Alternatively, you can open a terminal window within the root of the folder and execute the following to run via the CLI.

.\main.exe
Linux (Unix)

Unzip the downloaded zip file by running the following in the same directory as the downloaded zip file.

unzip <Folder Name> .
cd <Folder Name>

To execute the binary via CLI, execute:

./main
MacOS

Unzip the downloaded zip file. You can do this by running the following in the same directory as the downloaded zip file.

unzip <Folder Name> .
cd <Folder Name>

Execute main within the unzipped folder or to execute the binary via CLI, execute:

./main

Build From Source

Make sure you have the various prerequisites.

Requirements

  • C++ Compiler linked to your PATH
  • CMake Version 3.23 or higher
  • Make
  • Git

Building & Executing

[!NOTE] Building commands may differ depending on your environment

Clone the repository onto your local system using the following.

git clone --recursive https://github.com/111nation/TinyEngine

Enter the cloned repository and enter the GameEngine directory to build and execute the Emulator.

cd Arduino-Handheld-Console
cd GameEngine

cmake -S . -B build
cmake --build build

How TinyEngine Works

Loading Games

When emulating the game engine on your personal computer, TinyEngine loads games from the programs folder, $ROOT/programs/main, where $ROOT is the current working directory of where TinyEngine was executed at. This currently functions as a basic bootloader for the game console to fetch the first instructions (which is just a single game at this point).

Depending if you downloaded a precompiled binary or built from source, $ROOT is the unzipped folder installed the precompiled binary or $ROOT is the GameEngine folder where cmake was executed.

Keep all custom-written games in $ROOT/programs/, 'load' a game by renaming it to main in the programs folder.

[!TIP] Two sample games, a drawing and a pong game has been included as a demo

TinyScript

This is the most fun part! This section is viewable at Docs/README.md

Project Structure

Directory / ComponentDescription
Depreciated/PyGameEngineStores the legacy, deprecated Python-based game engine codebase.
ArduinoStores the Arduino implementation used to control physical hardware inputs.
GameEngineStores the main source code and data for the TinyEngine game engine.
DocsContains the system and API documentation for TinyEngine.

Contributors

111nation

65 commits

Languages

C++

85.1%

Python

12.5%

CMake

2.4%