Alright. Curiosity got the best of me. I have a few tools that I have been working on that have pretty much reverse engineered the Run-DMD image format and allow me to put my own raw, gif, or video clips into a RunDMD image. I have used these to create some of my own animations, and I plan on open sourcing them once I clean things up a bit more. The goal of these tools was to allow me to add some of the animations from games that I like to my personal clock that are missing from the B134 image that I have been using. This includes games like Party Zone, Safe Cracker, and Tommy. For reference, the B134 image is completely missing the following 90s Williams/Bally/Data East/Sega games that have 128x32 displays:
- Williams/Bally
- Gilligan's Island
- Safe Cracker
- SlugFest (questionable inclusion, but WPC-based)
- Tales of the Arabian Nights
- Party Zone
- Data East
- Adventures of Rocky and Bullwinkle and Friends
- Guns N' Roses
- Jurassic Park
- Last Action Hero (added in B237, see below)
- Star Wars
- Tales from the Crypt
- The Who's Tommy Pinball Wizard
- WWF Royal Rumble
- Sega
- Apollo 13 (added in B237 image, see below)
- Godzilla
- Golden Cue
- Goldeneye
- Harley-Davidson
- Independence Day
- Lost In Space
- South Park
- Space Jam
- Starship Troopers
- The Lost World Jurassic Park
- The Star Wars Trilogy Special Edition
- The X Files
- Twister
- Viper Night Drivin
Sorry. I didn't dig in to see what is missing from the Stern games.
One of the tools that I wrote extracts all of the existing images from a Run-DMD image to easily readable JSON files. These are organized per game. I just used this to compare the B134 vs B237 image. The deltas that I see in the B134 image vs the B237 image are:
- Addition of Apollo 13 animations (10 animations)
- Addition of Last Action Hero animations (66 animations)
- Addition of one more Terminator 2 animation (just the animation of the T2 slamming together)
So, basically the B237 supersedes the B134 image in every way. I see absolutely *nothing* that is lost by using the B237 image.
For any of you programmer types that are skilled at UX design (not me!), here is a small snippet of the JSON format that my tools produces. If you want to discuss creating an animation editor for these files, please PM me:
{
"header": {
"global_id": 129,
"flags": "Enable",
"num_bitmaps": 14,
"frames_addr": 8950784,
"total_frames": 56,
"display_width": 128,
"display_height": 32,
"clock_type": "ClockBehind",
"intro_transition": "Disable",
"outro_transition": "Disable",
"clock_size": "ClockSmall",
"clock_position_x": 0,
"clock_position_y": 0,
"clock_start_frame": 0,
"clock_end_frame": 0,
"unknown_byte19": 0,
"name": "BIG_BANG_BAR_004"
},
"frames": [
{
"duration": 100,
"bitmap": [
"|00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000|",
"|0aaaaaaaaaaaaaaaaaa00111111111111000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaaaaaaaa001111111111111111100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaaaaaa001111111111331113ff3110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaaaaa0111111113f310f303ffff3110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaaaa0111133311ffff0f303ff0ff1110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaaa011113fff110fff00f00f100111110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaaa01f311ffff310ffff0f10ff01f311110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaa03f3f30ff0ff30ff0fff303f101f111110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaaaaaa0f313f03f00f30ff00fff01ff01ff111110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaa00a01f003f03f03ff03f000ff303ff0f3111110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaa011001ff0f303fffff00ff000ff003ff301111110aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa0133f011fff000ff00f10ff100ff100000011111100000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa03f0f0f0fff300f100ff03f10000100000111113333333000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa03f00110f11f103f100f100010001113ffffffffffffffff300aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa01300110330ff00f100010013fffffffffffffffffffffffff10aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa0130ff110f1f30001111fffffffff1000000000000000111ff30aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa013f0f1103ff0000fffffff30000001333333333333333313f0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaa03fff1100003ffffff3000013333333333333333333333310aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaa01ff301133ffff30001333333333311111111111000333310aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaaa000013ffff000113333333111111111111111110a033330aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaa0003ffff300133333331111111111111111111110033330aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaa0133fff0011333331111113ff01111f3011fff010013310aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aa033fff00133333111111111f00f011f0f011f00f0033100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0a03fff1013333311111111113f03f01f30f01f001f03100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|003fff1033331111111111111f0ff001f00f01f01f0a00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|01fff1033330011111111111ff00f0fffff301fff0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|00f31133330aa01111111111f001f01f00f00f00ff0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0a01113333000a001111111f00ff00f001f01f0a0ff0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aa00133333330110111111111111111111110aaa00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|0aaaa00133333333300111111111111111100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0|",
"|00000000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000|"
]
},
... (more items of {duration, bitmap} form here
]
}
Pinside's forum will likely crush the formatting above, but a JSON reader won't care.
In the "bitmap" above, value 0x0 through 0xf represent dot intensity for a 128x32 pixel image, except that 0xa represents transparency when clock_type in the header is "ClockBehind". In those cases, the time is shown through from all pixels that have a value of 0xa.
I have my own frame editor that I created to work with the JSON files from above (browser based, pure Javascript), but it is not as intuitive as I would like. I would love it if the community would create something better that all of us could benefit from and ultimately use to have a complete image with all DMD-based games. I will hopefully be open-sourcing my work within the next few weeks. I will not be providing any binary images or JSON files, but hopefully the larger community can find a way to create more comprehensive images and host them somewhere for the benefit of everyone.
Side note: When I was working on my tooling that created images I wasted a *month* trying to determine why my tool was creating an image that would work for a while and then show corrupt images. The short story is that there was nothing wrong with my tool. I was using a new SD card for testing (Microcenter 32GB micro SD) that was causing the issue. What is bizarre is that if I did a binary comparison on my computer of the micro SD card before and after corruption was seen on the RunDMD, there would be *zero* bytes different. Only after changing to a name brand, reliable card (Sandisk High Endurance 32GB micro SD), I have been running with my custom images for months now without a single issue. Lesson learned...a $3 price difference between cards is not work the potential headache. Go with a name brand, high reliability/endurance card and sleep easy!