Home

Awesome

PEEKPOKE

Tiny minimum retro fantasy console having only two commands: peek and poke.

Sample game 'BOMB SNAKE'

BOMB SNAKE

Games for PEEKPOKE can be written in simple JavaScript code. PEEKPOKE games run in the browser of any PC or mobile device.

Memory map

memory_map

You can draw pixels or text by writing a number to a specific address in memory (poke), or get the input status of a key by reading a number from the address (peek).

Getting started

Download docs/getting_started/index.html and write your game code in the <script> element. Open index.html in a browser and play the game.

Use with npm

% npm i peekpoke

The peekpoke library must be imported and initialized.

import "peekpoke";
initPeekpoke({ setup, loop, enableSplashScreen: false });

function setup() { ... }

function loop() { ... }

Sample snippets

Draw a pixel

// Draw a red pixel at (x, y).
poke(ADDRESS_VIDEO + x + y * VIDEO_WIDTH, COLOR_RED);

Draw a text

// Draw a 'A' text at (x, y).
poke(ADDRESS_TEXT + x + y * TEXT_WIDTH, "A",charCodeAt(0));

Set text color

// Make the text color green.
poke(ADDRESS_TEXT_COLOR + x + y * TEXT_WIDTH, COLOR_GREEN);

Set text background color

// Make the text background color blue.
poke(ADDRESS_TEXT_BACKGROUND + x + y * TEXT_WIDTH, COLOR_BLUE);

Check keystroke state

// Check if the up key is pressed.
if (peek(ADDRESS_KEY + KEY_UP) & KEY_STATE_IS_PRESSED) ...
// Check if the left key is just pressed.
if (peek(ADDRESS_KEY + KEY_LEFT) & KEY_STATE_IS_JUST_PRESSED) ...
// Check if the X key is just released.
if (peek(ADDRESS_KEY + KEY_X) & KEY_STATE_IS_JUST_RELEASED) ...

Buzzer

// Buzzer at 500 (50 x 10) Hz.
poke(ADDRESS_BUZZER, 50);
// Stop buzzer.
poke(ADDRESS_BUZZER, 0);

Other sample games

Click on the image to play the game.

<a href="https://abagames.github.io/peekpoke/dashracket/"><img src="https://raw.githubusercontent.com/abagames/peekpoke/main/docs/dashracket/screenshot.gif" width="25%" loading="lazy"></a><a href="https://abagames.github.io/peekpoke/beebees/"><img src="https://raw.githubusercontent.com/abagames/peekpoke/main/docs/beebees/screenshot.gif" width="25%" loading="lazy"></a><a href="https://abagames.github.io/peekpoke/laserlaser/"><img src="https://raw.githubusercontent.com/abagames/peekpoke/main/docs/laserlaser/screenshot.gif" width="25%" loading="lazy"><a href="https://abagames.github.io/peekpoke/banebox/"><img src="https://raw.githubusercontent.com/abagames/peekpoke/main/docs/banebox/screenshot.gif" width="25%" loading="lazy"></a>

The source code is located in the docs directory. See main.js in the directory for each game.