Lets start off with a FAQ

What is The Asteroid Belt?

It's a belt.
It's a video game.
It's ridiculously awesome.

Why is it made out of brass?

'Cause I am so steam-punk-pirate-zombie and brass is the shizzle.

Seriously though, I don't have a 3D printer, I don't have a laser cutter, I don't even have a 7 axis CNC VMC. I don't have a lot of options to make a case for something that looks cool.

What I do have is an Etchinator . As the saying goes “To a 10 year old child with a hammer, everything looks like a nail”

Will it help me pick up {chicks|twinks|bears}?

Unlike many of the belts shown around here that include an "arc reactor", The Asteroid Belt will not give you any super human powers. If you where unable to lift any of the above items before donning it, you will still be unable to pick them up now.

It costs more to build than a RasPi and only runs at 16Mhz. Why did you bother?

If you don't understand already there is little I can do to help you.

Realistically though, the AVR is enough to play some retro games and pulls a few mA. This will let the unit run for 10 to 20 hours depending on how high you set the backlight current. A RasPi would run for about 2 hours

Can I make one myself?

I am sure you could. All the files you need to do so are here. There are bitmaps of the mask for the brass case. There are gerbers for the PCB (step 3), a Bill of Materials (step 4) and there is a ZIP file with the source (step 8) and HEX of the game "Rock Blaster"

If you are planning on building one yourself it would be nice if you could send me a message so I know who is having a go.

Can you make one for me?

At this stage that would be a big negative. There are a lot of Instructables out there that seem like thinly veiled adds for a Kickstarter campaign. This is not one of them. It takes a lot of time to make one of these and it is unlikely there would ever be enough interest to "tool up" to mass produce them.

Never say never though. If 1000 people all moan at me at once I could be persuaded. Don't hold your breath though.

How much will it cost me to make my own?

The BOM in step 3 lists everything needed. The prices are what I pay here in Australia to get parts and do not include shipping. So obviously your mileage will vary. I would budget somewhere between 70 to 100 USD

Will it play any other games apart from "Rock Blaster"?

At this stage no.

In the future though, I am planing on making at least three more games for the belt -


  • A puzzle game - Quad-tris
  • A platform scroller - Awesome Antonio Cousins
  • A side scroll shooter - AVR Type (almost completed the engine)



Is there a published API if I want to write my own games?

Calling it an API would be glorifying it a bit much. There is standard calls for sprites, vectors, scrolling and sound though. If you do want to try write your own game then I am more than willing to help you along.

You said "sound". Is there a speaker hidden somewhere I missed?

That's very observant of you. There is actually no speaker yet. You will see there is a "speaker out" on the schematic.  In fact all the other hardware and software for sound is present.  I have so far been unable to find a speaker I like. When I do The Asteroid Belt will be able to beep and bong with the best of them. 

OK - Now onto the build

Step 1: Doing three tricks for speed

OK.  I lied about getting onto the build.

You probably need to be told WHY you are doing step one of the build.

Well it's all about speed and smoothness.

While I am telling you the "why" about the first step, I may as well sneak in the other two speed up tricks. Just to keep them all in the same place.

Some of you out there may have hooked an LCD up to an Arduino and tried to write a video game. You will have found that the screen tore and you could not update the screen very fast. I have had to do three tricks/hacks to solve these problems and get a satisfying video game experience.


1, Frame Marker on the LCD

I am not going to go into great deal about what screen tearing is as Wikipedia covers it quite well.

So to solve the screen tearing issue we need a "vertical-sync" or "frame-marker" signal. Unfortunately none of the cheap 16 bit LCD displays of eBay have FMark bonded out.

One thing I did notice on the cheap eBay LCDs is that they all had pin 21 on the 37 pin FPC marked as NC. More expensive displays I could buy with the same 37 pin FPC sometimes used Pin 21 for FMARK.

I took a punt and bought several LCDs from eBay. I got lucky at with one of them and Pin 21 went to an unpopulated resistor that had FMark connected to it.

The store that had a suitable LCD is called coldtears electronics. Note that not all LCDs can be modified this way. If anyone else has a known modifiable LCD then please leave a comment and I will update a list here of sources.

I was able to make a break out board for this LCD, solder in R3 on the FPC and hook it up with the mess of wires shown to get smooth moving picture display.

2, Saving clocks with diodes, resistors and capacitors.

The datasheet for the IL9238 shows that there should be a 5ns hold off time between Write-Strobe and Register-Select each going low or high.

To achieve this in code you need to do this,

out portx, Register-Select-Low
out portx, Write-Strobe-Low
out portx, Write-Strobe-High
out portx, Register-Select-High

This takes four clock cycles and 240nS.

Figure 01. shows how to connect a Schottky, a resistor and a capacitor to form a one way low pass filter. With this circuit in place the code can be reduced to the following and still keep the 5nS set-up/hold times

out portx, Register-Select-Low & Write-Strobe-Low
out portx, Register-Select-High & Write-Strobe-High

Down from four clocks and 240nS to two clocks and 120nS

Figure 02. shows the resulting waveforms. The top trace is Register-Select and the bottom trace is Write-Strobe.

3, Pseudo DMA

In "Rock Blaster" the screen has to be cleared totally before each frame is drawn. With 320x240 pixels that is 76800 writes. With normal optimization and some slight loop unrolling that would take the CPU 1/90th of a second. That is 1/3 of the total time the CPU would be having to do nothing more that write out black pixels.

Seeing as writing out a single colour pixel is nothing more than toggling a pin, we can actually get the AVR hardware to help us out. If we hook up the Write-Strobe signal from the LCD to one of the AVRs Timer-Output-Compare pins we can just turn on an 8Mhz sqaure wave to clear the screen in exactly 153600 clocks and the CPU is free to run game logic. All we have to do is have another timer interrupt running to tell us when to stop the screen clear.

Now really onto the build

About This Instructable


352 favorites


Bio: Just a guy really. Like building stuff and like to help other people build stuff too. If you really need to know, am male in ... More »
More by cunning_fellow: The Asteroid Belt My response to the WS2811 with an AVR thing The Etchinator - low cost PCB spray etcher (under $100)
Add instructable to: