There’s a bit of a thing going on with people crunching the Bad Apple!! shadow art video and playing it back on various 8 bits and 16 bits computers and I couldn’t find one for ATmega2560 / Arduino that didn’t stream the data off some external SD card or right off a PC through the serial port.

Something had to be done!

The entire 3m39s video is crunched down to 221KB of video data all contained inside the ATmega2560 there is no SD card and no data streamed off the serial port. Download and see for yourself 🙂   The only extra hardware needed is two resistors, a power source, and a TV (which can even be the power source if it’s got a USB port). Wiring diagram below.

Playback is 128×176 60fps (50fps for the PAL version) 1bpp x 13122 frames. The average data rate is 8Kbps. That’s an effective compression ratio of 167:1. And yes, it is lossy!


New shader pipeline

February 14, 2015
New GPU Module - PointLight Shadows (Dec 09)

Per-pixel point lights casting AA shadows

I’ve been working on my new shader pipeline supporting an unlimited number of lights and shadow sources in both forward and deferred rendering, hardware skinning with unlimited number of bones, multiple surface maps (multiple normal maps, …), point light shadow casting, uniform buffers, and a lot more capabilities.


This is the audio system and tool that were used in many commercial titles such as Project S-11, Shantae, ESPN National Hockey Night, and Who Wants to Be A Millionaire. Although I’ve made the tracker public for quite a long time now, the replay routines were not public, until now.

Game Boy Tracker running on Raspberry Pi

Game Boy Tracker running on Raspberry Pi

You may grab the latest build of the tracker and the replay routines (included in the package) off the wiki page.

To build a ROM to play on the real hardware you will need to use the Rednex Game Boy Development System (RGBDS). Instructions are in the package with two easy to use batch files for windows, there’s now a version of RGBDS for linux but I haven’t tested it.


Donations to help pay for hosting, hardware, ports, bug fixes, and other costs are very welcome.

( This is the tracker that was known as the Beyond Tracker or the Paragon 5 Game Boy Tracker. )

Hello World, Again

June 7, 2014

I switched to a new blogging software and I’ll be reposting some of the old blog posts.

The old-old page is still on

: Blog

From >200ms down to a usable 30ms.

OpenPandora forum user sebt3 started testing out scaling filter shaders on the SGX530 for use the OpenPandora console, the first working version ended up way too slow to be of any use.
Another forum user, FSO, improved the speed a bit (160ms to 180ms per frame).

I asked sebt3 if he’d let me have a go at it.


Beta Block Quest

March 31, 2012
OpenPandora Version

OpenPandora Version (Click to download)

An early preview of my new game using a tiled, procedural 3D world engine with a focus on small memory footprints targeting embedded systems such as cellphones, tablets and portable consoles.

Similar to Minecraft and other tiled games, with full 3D range of over +/-2000000000 tiles in all 3 axes, +/-9000000000000000000 for a 64bit-ranged build (supported even on 32bit architectures) and raytraced dynamic soft shadows.

The engine is currently being tested on OMAP3 SoC embedded systems such as the OpenPandora console, BeagleBoard development board and Nokia N900.
It is also running on 32bit as well as 64bit PCs and Macs natively.
Currently a memory footprint as low as 50MB and a minimum of 350Mhz processor (ARM Cortex-A8) is achievable.

The game including graphics is less than 2MB currently.

First released as an entry in the Pandora Rebirth Competition.
beta_block_quest4 beta_block_quest3 beta_block_quest2

Brickster for Game Boy Color

January 26, 2012

Brickster (Click to download)

I made this little game in 1999 as a first step into Game Boy Color programming.

This homebrew game was released for free (as in beer) at a competition organized by Bung (a flash cartridge maker) who wanted to demonstrate the purpose of their products to indie game developers.

The game is free to download, copy, distribute and play in its unmodified form.

You may include the ROM as part of any software packages and/or devices (including commercially sold ones) as long as the source is not misrepresented.

Raytracing in < 2KiB

December 31, 2011

Raytracing in 2KiB (Click to download)

A first prototype for the “4K Executable Graphics” competitions.
The executable is 1616 bytes using UPX (2178 bytes uncompressed)
including VESA RGB/BGR 24/32bit detection, automatic resolution selection and VGA fallback.

(64bit windows users will need to use dosbox to run the executable)

It’s a lot of fun to optimize for size rather than speed, making and reusing as many function calls as possible to reduce the code footprint, unrolling short loops and restructuring the code to produce as many repeating byte strings as possible for the compressor.


So, after less than 6 months my OpenPandora LCD cable broke so I ordered two new cables and while doing the replacement I used the opportunity to modify the case to lock the LCD at an angle similar to how the DS and 3DS does (a common complaint about the OpenPandora).

I can now watch movies with my OpenPandora sitting on a desk.

NOTE: this modification uses the stock hinge.




The hinge socket before, and the notches you need to grind (circled in red) with a rotary tool to fit the hinge mechanism at an angle:


After grinding:

Modified hinge socket

UPC_decoder5Some more experimenting with a cheap low quality webcam for extra challenge (Moar with less!).

This time its a barcode scanner with no controlled light source.
I wanted to scan barcodes with just the ambient lighting so I had to design an image filter that would amplify the picture’s contrast and reconstruct the dark and light zones from a very low quality source.
I was then able feed the corrected image to a barcode decoding neural network.


cheap_3d_scanningWhile working on my 3D editor back in 2010, I wrote a custom routine to automatically create a spherical mesh out of any set of arbitrary points in 3D space and got tired of testing it with semi-random points in space.

So, a quick trip to the local Canadian Tire (a weird of mix of hardware store,  home improvement store, car part store, and house applicance store) to buy
– a 20$ laser level guide,
– add a web cam (already had it, worth about $10),
– a quickly written bit of code,
and voila:
I built myself a 3D scanner for 30$.