courtesy Paul Olson (KLOV)

Feb 2013 update- 

  • Mame 0.148 era saw a re-write of the Blitter/Special Chip code to make it more accurate. (ie Mame 0.149u1 contain some new updates)  Full details from Sean Riddle-
  • Please be aware, the mamedev releases are focusing on blitter timing fixes and don’t yet take into account for the control input variations of PC/USB, which DOES alter the CPU timing.  The gameplay “feel” of these versions won’t feel exactly accurate for someone used to real Robotron hardware
  • Detailed Installation Steps HERE including the Robotron patched blue rom and a romset that starts at Wave 201.  Use this version if you want Robotron to have very accurate “gameplay feel” and will feel just like playing real Robotron hardware.

Drama- The subject of MAME causes polarized viewpoints between gamers, restoration enthusiasts, and casual hobbyists.  The facts are that it is a versatile medium for experiencing all the old games without having to own a garage of plywood cabinets, or live near a large city with a supply of Craigslists items.

Mythology- You might be told that MAME isn’t capable of properly emulating Williams games due to the complexity of the original hardware.  Thankfully due to the work from folks like Sean Riddle and Aaron Giles, the information below will stand on it’s own to prove the sentiments false.  But before you get to the good stuff, here is an example of “Blitter gone wrong”- Psychadelic Robotron!

TUNING MAME TO MATCH ARCADE EXPERIENCE- Sean Riddle tweaked MAME to perfection for CPU and Blitter timings around Oct 2013, BUT MAME is unable to adjust coding for the external USB interface which brings in controller inputs for MAME.  A USB interface can’t bring in as many controller inputs as the real Williams interface PCB, so minor adjustments in CPU timing are required to properly compensate.  Due to this limitation of PC related hardware, the official MAME version will always be slightly harder than what you experience on a real machine UNLESS YOU use the “tuned version” offered below.

If you want to play the most accurate MAME ” arcade gameplay” emulation of Robotron you will have to use the files below.

  • The 2015 Tie-Die romset can be found at WilliamsPlayersUnite.
  • Pre-compiled 32-bit versions of MAME 148 found HERE
  • To create the compiled versions above the romset info was updated in C:\mame\src\mame\drivers\williams.c
  • To create the compiled versions above the blitter info was updated in C:\mame\src\mame\video\williams.c


  1. Create a desktop folder and extract one of the downloadable mame versions above
  2. Right click on the desktop, New, Shortcut
  3. Create a shortcut to MAME.EXE
  4. Double click the shortcut, Mame will start, proceed as normal
  5. Configure General Inputs will allow you to map controls
  6. Upon starting a game, you can click Tab to configure the game
  7. Once Robotron is running, use F2 to get into advanced settings to adjust the lives/hardness, etc.
  8. The P key will pause your game….ah yes, Mame is awesome.
  9. If you have a “Jamma wired” Arcade cabinet, you can interface the control panel on the cabinet with your computer via an Ultimarc J-PacBest product on the market!

Manual Setup for Patched Blue ROMS to fix firing glitch (ignore this if using the mame versions above-

The patched blue rom set is available from Sean Riddle’s site:

  • needs to be renamed to and stored in the Roms folder of the MAME program
  • you have use Notepad to edit  ….src\mame\drivers\williams.c and change the 2 entries to the values below.  Then recompile your mame.exe
  • ROM_LOAD( “robotron.sbb”, 0x0e000, 0x1000, CRC(e83a2eda) SHA1(4A62FCD2F91DFB609C3D2C300BD9E6CB60EDF52E) )
  • ROM_LOAD( “robotron.sb5”, 0x14000, 0x1000, CRC(827cb5c9) SHA1(1732D16CD88E0662F1CFFCE1AEDA5C8AA8C31338) )

Miscellaneous MAME Info

ANCIENT HISTORY, Left this raw info incase you really want to dig into the topic as it progressed in learning and design toward proper emulation like you see in the details above.

Williams Driver rewrite in 0.96 (started with .95u3)- Changes from Aaron Giles.

  • rederived all addressing from schematics
  • cleaned up banking mechanisms
  • fixed sound CPU clock in later games
  • simplified blitter code significantly
  • added timing to the blitter (just a guess right now)
  • implemented clipping circuits correctly
  • simplified palette handling significantly
  • rewrote video system to use tilemaps for later games

Video fix in 0145u8- The observed problem prior to update 8 was that the player movement was sluggish compared to a real machine.  Noticable at the start of Grunt wave 9’s, making it harder to get out of the center of screen.  Also, when near an enemy, the player might “jump” into the enemy causing a death.

The technical reason for this was- Williams games are set up with 260 scan lines, but the read handler for the video beam position is just 8-bit, which only goes to 255. The function that returns the vertical beam position returns an int, which gets truncated to a byte. This makes the register values in MAME not match the real machine.

In the file src\mame\video\williams.c, around line 349 is this fix in the code:

  • /*************************************
  • *
  • * Video position readout
  • *
  • *************************************/
  • READ8_HANDLER( williams_video_counter_r )
  • {
  • if(space->machine().primary_screen->vpos()<0x100)
  • return space->machine().primary_screen->vpos()&0xfc;
  • else
  • return 0xfc;
  • }

Blitter fix in 0145u2- The observed problem prior to update 2 was the speed of the enemy shots. You’ll notice the enforcer shots are too plentiful and move too rapidly.  Starting at wave 5 you’ll notice the lightning bolt cruise missiles were very fast and aggressive.  Wave 7, the quarks generate tanks too quickly and the tank bullets are blistering fast.  Wave 9, the grunts and tanks move too quickly.  Making the game very hard by wave 17, extremely hard after wave 28, and almost unplayable by wave 39.

The technical reason for this was- relates to the speed MAME was incorrectly emulating Rom and Ram calls for the blitter

  • Explanation from JROK- RAM to RAM blits take 2x longer as it can only read RAM during an E high cycle, so ‘E’ read, ‘E’ Write. With the ROM -> RAM mode it can read ROM during the E low cycle and write on the next ‘E’ high, so you end up with 2x the speed of RAM to RAM.

These are the fixed lines in src\mame\video\williams.c

  • estimated_clocks_at_4MHz = 20 + ((data & 4) ? 4 : 2) * accesses;
    device_adjust_icount(&space->device(), -((estimated_clocks_at_4MHz + 3) / 4));

The blitter is clocked at 4MHz and the CPU at 1 MHz, which is where the /4 comes in on the 2nd line.

In my observations (see note below), 0.145u2 still felt too fast in the gameplay. So to tone it down a bit, multiply the whole thing by 1.175:

  • estimated_clocks_at_4MHz = (20 + ((data & 4) ? 4 : 2) * accesses)*1.175;

Return to Platforms for Playing Robotron

Copyright © 2012. All Rights Reserved.