Zerk Zone

Pages for the Creations of Ryan Armstrong

Olimex Teres A64 Review

Posted on May 27th, 2019 @ 5:58 pm by Zerker

It’s not very often you get to build your own laptop. Doubly-so for a laptop built on open hardware designs, which is exactly the selling point for the Teres A64 from Olimex. However, almost all information available on-line is regarding the actual build process, with nary a hardware review to be found of what you will end up with. This post aims to fill that void.

(more…) Comments (0)

Filed under: Reviews |

Disk Benchmarking Script

Posted on May 5th, 2019 @ 7:03 am by Zerker

This script exists to serve a simple purpose: benchmark a disk and store the results in an easy-to-use CSV format. The script will write and read a variety of block sizes to the specified location, which will gather similar statistics to the ATTO Disk Benchmark tool on Windows. The maximum file size can also be specified, in order to benchmark small file systems. Here are some sample results, benchmarking floppy disks:

This particular script is only compatible with Unix-like OSes. It assumes that /dev/zero and /dev/null are valid filesystem paths, and it relies on dd to perform the actual benchmark. It also requires Python 3.5.

(more…) Comments (0)

Filed under: Linux,Programs/Libraries,Python |

Anago (Kazzo board utility) Linux Port

Posted on March 30th, 2019 @ 8:14 am by Zerker

This is a port of anago command-line NES and Famciom cartridge dumping utility for the kazzo interface board, which was previously part of the unagi project. The existing project was designed to support Windows primarily, though it was almost compatible with Linux, with some included porting notes. I’ve completed the port, and switched the build system to CMake in order for simpler dependency resolution.

Note that this is based on anago 0.6.0, which seems more compatible with a wider variety of cartridges than the newer version. The newer version itself appears to more fully support Linux, so who knows if my port was strictly necessary :).

This is probably a project that nobody besides me will use. And that’s okay, because learning is its own reward.

See the anago github page for more details, source and downloads.

Comments (0)

Filed under: Linux,Programs/Libraries |

Teensy-based XInput Arcade Stick

Posted on January 20th, 2019 @ 11:41 am by Zerker

Having built a couple joysticks and devices since then, it seemed about time to revisit the first joystick I made: the PC/SNES stick. My original stick still works well, but there were a few minor issues that started adding up:

  1. No direct support for XInput games or games with limited controller compatibility
  2. I accidentally used 25 mm action buttons and would have preferred the full-size 30 mm buttons.
  3. The box I picked is a bit higher than I would like

And then a bunch of minor wishlist items that started coming up (pinball buttons!) while I was thinking more about it. So I started planning and found the MSF-XINPUT library by Zack Littell, which then directed my attention to the Teensy LC. This also informed my use of the Teensy 2.0 on the previous project, as both were planned concurrently. I also still wanted SNES-compatibility, but the Teensy uses 3.3V logic while the SNES uses 5 V logic. So this also meant a line-level converter, but I conveniently already had a 4-channel one from Adafruit. Beyond that, it was just a matter of finding a suitably-sized box, and ordering a bunch of arcade parts including my current favourite stick, the Seimistu LS-40.

(more…) Comments (0)

Filed under: Hardware |

Sega Genesis/Master System to USB Converter

Posted on December 24th, 2018 @ 9:42 am by Zerker

With my Sega Genesis arcade stick, and a more recent Master System/C64 stick I put together, I have been increasingly unhappy with commercial Genesis to USB converters. The one I have essentially assumes a 6-button Genesis Pad, and doesn’t do proper detection. This means nuisance extra button presses when using a less capable device, which is no good. So I decided to make my own.

For this project, I decided on the Teensy 2.0, which gives me a small size, good IO complement, nice USB features, and most importantly: 5 volt logic.

Mechanical design was pretty basic: just a small project box, a DE9 connector, wiring to the Teensy and some drilling/dremelling. The Teensy, however, seems to be designed to mount directly by pins into a protoboard/breadboard. Since I was wiring directly to the board, I needed a different solution. Thankfully, I already had some Scotch Brand mounting tape, which works extremely well for securing small PCBs into a project.

When assembled and programmed, the converter works the way a converter of this type should work. If a 1-button C64/Atari stick is inserted, that button registers as the primary button 1 only. If a 2-button Master System stick is inserted, those two buttons become buttons 1 and 2. For the 3-button Genesis pad, the buttons are 1, 2, 3 and 10, which is a customary position for the start button on Windows games. The 6-button pad therefore adds buttons 4, 5, 6 and 9 to fill out the set. Buttons 7 and 8 positions are unused; most software would expect those to be L2/R2 buttons which have no equivalent.

For source code and more information on the software, check out the github project page. Per the project page readme, I am intentionally maintaining several branches depending on the desired USB device type. Please see the readme for more information and select the branch of interest.

Comments (0)

Filed under: Hardware |

Automatic .desktop launcher generation Python library

Posted on January 29th, 2018 @ 6:57 pm by Zerker

Having tried a number of different frontends to emulators over the years (e.g. EmulationStation, Attract Mode, DBGL), I’ve never found one that I particularly like. In the end, I decided to let the operating system be my ‘frontend’ and created a library that can be used to auto-generate launchers for games. And here we are.

For example, you can give it a folder to search for SNES games and generate a launcher with matching icon for every .sfc file found. Or DOSBOX .conf files. Or give it the path to the Mame executable to generate a full lookup of short name to full name, then give it the path to your Mame .zip files and generate launchers for every name recognized. Or just give it a list of Doom wad files and create launchers directly for them.

For illustration purposes, here’s the menu on my system:

First up: this is not going to be useful for anyone who doesn’t run some *nix variant. And right now, I only directly supported Xfce and Gnome menu systems, though the Xfce technique probably works with most other desktop environments. It also requires a little bit of Python knowledge, though it’s rather tame overall.

If this sounds like something you are interested in, give it a download and see how you like it. You will need to create your own ‘generate’ script to create the launchers for the systems/emulators/whatever you have on your machine. Either extract the download to one of your site-packages/dist-packages folders, or just use it in the same folder as your generate script. Full documentation is inside the file, as well as a pydoc html render inside the tarball. The documentation has a few example snippets of script that you can use in your generate script as a starting point for a few scenarios.

Download (9 kb)

Comments (0)

Filed under: Programs/Libraries,Python |

Jazz Jackrabbit Mapper

Posted on August 27th, 2017 @ 10:16 am by Zerker

To create the most recent Jazz Jackrabbit maps, I leverged and then horribly mangled the code from the OpenJazz project. This post provides downloads for my patch, the resultant source code, and a brief description on how to use it and what I did.


jazzmapper.patch (8.4 kb)
Patch to be applied to OpenJazz-src-160214

OpenJazz-src-Mapper.tar.bz2 (131.0 kb)
The full modified OpenJazz source with the patch applied, if there are troubles using the patch or finding the matching version.


First, a warning: due to how this mapper tool works, it should NOT be run in full-screen mode. This will be more apparent in the ‘How it Works’ section.

To map the first level in an episode, simply start openjazz normally and start the desired episode. As soon as the map loads, a BMP file for the level will be written to disk and the application will exit.

To map any other level, a new command-line argument was added (-w) which will warp to the specified world and level. For example, to load and map the file LEVEL1.035, you would type:

./openjazz -w 35 1


Comments (0)

Filed under: Jazz Jackrabbit,Programs/Libraries |

Holiday Hare ’95 Maps

Posted on August 26th, 2017 @ 11:54 am by Zerker

Related to the main Jazz Jackrabbit maps, here are the maps for Holiday Hare ’95, the second Holiday-themed free expansion for the game. These levels are listed separately, because the filenames actually overlap with the original Holiday Hare levels a bit.


Comments (0)

Filed under: Jazz Jackrabbit,Maps |

Jazz Jackrabbit (CD Edition) Maps

Posted on August 26th, 2017 @ 11:34 am by Zerker

So it’s been a while, but I decided to create more game maps. This time, it’s Jazz Jackrabbit, the classic DOS platformer by Epic Megagames. Unlike some of my from-scratch maps, this time I leveraged the work from the [a href=”http://www.alister.eu/jazz/oj/”]OpenJazz[/a] project. And totally hacked up the code to just generate maps, instead of be an actual playable game. I’ll be posting the modified source code for reference in a later post, but for now, the maps:

Comments (0)

Filed under: Jazz Jackrabbit,Maps |

Sega Genesis to Gameport Converter

Posted on January 1st, 2017 @ 1:43 pm by Zerker

Hurray, more hardware projects. This one is a bit esoteric, and probably won’t appeal to any but the most dedicated retro gamer.

But that’s OK with me.

It started when I was getting frustrated with the quality of gamepads available for DOS games. Analog Joysticks are easy, but quality gamepads are few and far between. I had two criteria for a gamepad:

  1. It had to have a good D-pad
  2. It had to support both 2 and 4 button games, with reasonable button arrangements for each

The ‘classic’ Gravis Gamepad passes on the second point with the 2 to 4 button switch, but fails quite dramatically on the first one. Most other gamepads I looked up mirrored the Gravis pad’s four button arrangement, but unfortunately this is absolutely terrible for 2-button games.

So I made an adaptor. I picked the Sega Genesis (3 button) gamepad as my source, because, if you count the start button, it has exactly four buttons. And I recently made my Genesis arcade stick, so I’d like to use that for DOS games too.

Comments (4)

Filed under: Hardware |

Next Page »