MAME 0.31


Release Date

MAME 0.31 was released on 25 April 1998.


The known contributors for this version are, in alphabetical order:

Specific Contributions

The known contributions for this version are, in the order specified in the whatsnew:

  • Paul Swan fixed the colors in Roc'n Rope, Circus Charlie, and Hyper Sports
  • Al Kossow fixed the colors in Minefield (apart from the background which is approximate)
  • Mike Balfour consolidated the Exidy drivers. Accurate colors in Venture, Mouse Trap and Pepper 2.
  • Al Kossow fixed the aspect ratio in Major Havoc
  • fixed double size sprites in Galaga when screen is flipped.
  • Nicola Salmoria fixed disappearing background at the end of the tunnel in Super Zaxxon.
  • Brad Oliver support for the complete Swimmer set. No more bad graphics.
  • Mike Coates added a gradient filled background in Rescue and Minefield.
  • Andrew Caldwell added new antialiasing code for the vector games. A bit slower than before, but it looks terrific. You can turn it off with -noantialias. Also two new options:
    • -beam # (a number in the range of 1.00 through 16.00 (# is float))
    • -flicker % (% is optional (% is float), no number sets default flicker)
    • valid range is 0.00 to 100.00 (0=none 100=maximum) -beam sets the width in pixels of the vectors, while -flicker makes them flicker to simulate the behaviour of a real monitor.
  • Aaron Giles added 16 bit color support for games which need it (e.g. Rastan, Gauntlet, Black Tiger, and many others). It is on by default, since it looks much better; of course it's also slower, so you can turn it off and revert to the previous 8 bit downgraded palette using (in the DOS version) the -depth 8 command line option.
  • Nicola Salmoria discovered that Locomotion runs on (almost) the same graphics hardware as Rally X. This fixed the smoke which was using wrong graphics (and had instead to be drawn like the dots in the Rally X radar).
  • John Butler merged the Qix and Zookeeper drivers, they now also support rotation.
  • Tatsuyuki Satoh improved the YM2203 and YM2151 emulator, and DAC interface, with 16 bit samples support. (Use -sb 16 to turn on 16 bit samples).
  • Aaron Giles improved the ADPCM support, plus support for the OKIM6295 ADPCM chip. Several drivers use these.
  • Nicola Salmoria fixed the sound in Exed Exes; it has one 8910 and two 76496, not two 8910.
  • Alex Judd added sound to Zaxxon and Berzerk, through samples.
  • Nicola Salmoria made a first attempt at sound in Donkey Kong 3 / Punch Out. These two Nintendo games use the same sound hardware as the NES console.
  • Jim Hernandez fixed the music tempo and pitch in Locomotion, Time Pilot, Pooyan, Tutankham and Roc'n Rope should be accurate (I believe they all use the same sound board)
  • Improved pitch in many games.
  • Dan Boris added sound in Targ and Spectar (need samples).
  • Nicola Salmoria added sound in Fire Trap and Silkworm (Sound Blaster needed)
  • Howard Cohen added support for missing samples to Donkey Kong Jr.
  • Gerrit Van Goethem added high score support to Sidearms, Breakthru, Mikie, 1943 Kai, Shaolin's Road, pengoa.
  • Nicola Salmoria changed MAMe so the first time you play Q*Bert, Q*Bert Qubes, Krull, Mad PLanets, Three Stooges, the high scores are automatically initialized to the default. Note: your old high scores will be lost, sorry.
  • Nicola Salmoria changed MAME so the first time you play Track'n Field and Hyper Sports the high scores are automatically initialized to the default. Your old high scores will NOT be be lost here ;-)
  • Chris Moore added high score support to Tazz-Mania, Space Firebird.
  • Wiebo de Wit fixed scores over 100000 in Donkey Kong/Donkey Kong Jr.
  • Marco Cassili fixes the dip switches and input ports in several games.
  • Mike Balfour added better collision detection in the Exidy games (most noticeable in Venture upper left room)
  • added a invulnerability DIP switch to Japanese Ghosts'n Goblins.
  • Aaron Giles did a major cleanup of the Williams drivers.
  • Jarek Burczynsk fixed the disappearing guards and other wrong behaviours in Bagman which were caused by copy protection.
  • Nicola Salmoria added a new -norotate option. This is supposed to disable all internal rotations of the image, therefore displaying the video output as it is supposed to be (so you need a vertical monitor to see vertical games). However, many drivers still don't use MAME centralized rotation, but instead rotate the image on their own, so -norotate has no effect on them. In some cases, the image will be upside down. To correct that, use -norotate -flipx -flipy, or use the Flip Screen dip switch if available.
  • Fabrice Frances fixed a bug in the 8086 emulator which caused unexpected deaths in Krull.
  • Brad Oliver added a bugfix: "Dial Joy Inc" can now be properly set (e.g. Tron).
  • Nicola Salmoria added high score load/save is disabled when -record or -playback is used. This prevents undesired side effects.
  • Aaron Giles fixed the 68000 emulator to properly handle interrupt priorities.
  • Nicola Salmoria changed the DOS version so screen snapshots are saved as "gamename.pcx" (the first one) and "nameNNNN.pcx" (the following ones), no longer the too generic "snapNNNN.pcx".
  • Tormod Tjaberg added new commands -verifyroms and -verifysamples. They check an existing ROM set for missing and incorrect ROMs, and for missing samples. You can use "mame -verifyroms *" to check all your romsets.
  • Nicola Salmoria reworked the automatic screen resolution picker. It now selects a resolution appropriate for the game's visible area, not the game's physical screen size (which is larger).
  • Valerio Verrando, Maurizio Zanello, and Bernd Wiebelt improved the mame.cfg and commandline parameter handling:
    • Added a few new config options (look into mame.cfg)
    • In mame.cfg, a [gamename] section can override global config options.
    • In the [directories] section, replaced ROMS and SAMPLES options with "rompath" and "samplepath", these take a standard DOS path as argument. (for example rompath=\callus;\raine;\retrocade;\mame\roms;.) This is option is also available on the commandline and in the <gamename> section.
    • Removed support for -savecfg.
    • Removed support for -width (e.g. -640) to select the resolution. You have to use -widthxheight (e.g. -640x480). Frontend authors are advised to use the new -resolution widthxheight semantics. "resolution" is also a mame.cfg option now.
    • Tweaked resolutions are directly selectable.
    • Wildcard support for the frontend commands in the DOS version:
      • "mame * -verifyroms" will check all your existing romsets
      • "mame a* -listfull" will list all games starting with "a".
    • removed -vesa1, -vesa2b, -vesa2l. -vesa will try VESA 2.0 and fall back automatically.
    • playback data is stored in INP/gamename.inp
    • a boolean option can be specified as -option, -nooption, -autooption.
  • Larry Bank fixed a bug in the 6808 emulation of TSX and TXS.
  • Fabrice Frances cleaned up the I86 emulator, including 286 instructions (but with 8088 timing).
  • Ernesto Corvi added support for HD63701YO extra opcodes to the M6808 emulation.
  • VERY IMPORTANT NOTE FOR PORTERS: now the function osd_new_bitmap() must allocate also a "safety area" 8 pixels wide all around the bitmap. This is required because, for performance reasons, some graphic routines don't clip at boundaries of the bitmap.
  • The DOS version is now compiled with GCC 2.8.0, optimized for Pentium.
  • Aaron Giles added a new timer-based event scheduler. This is a major change which is used throughout the code. See timer.c and cpuintrf.c to get an idea of the many things it does. One of the many benefits this has is that dip switches in Do's Castle now work, but there's an endless list of things affected.
  • Ernesto Corvi added a new vblank_duration field in MachineDriver, which controls how long to delay screen refresh after a vblank interrupt. This is important to get video properly in sync in some games (e.g. sprites and background in Commando).
  • Ernesto Corvi changed the 68000 core to allocate memory automatically. You no longer have to do it yourself. The memory interface reads/writes 16 bits at a time to improve performance. Writing a single byte is a bit tricky, because the 68000 can cause write to either the high or the low byte without affecting the other; thus the second parameter for a 16-bit write is a bit more complicated. The top 16 bits are a mask which is supposed to be ANDed with the 16-bit value already in memory; the bottom 16 bits are the actual data values, to be ORed with the result. To aid in doing these operations, use the macros READ_WORD(), WRITE_WORD(), COMBINE_WORD() and COMBINE_WORD_MEM().
  • Aaron Giles added a new function: cpu_setOPbaseoverride(). This function is called whenever the code jumps into an area of memory that is in a different bank than the current one (i.e., the code jumps from RAM to BANK1). It takes the destination PC as a parameter and returns a new PC which is to be used to determine which bank to switch to by the standard function. The main purpose of adding this is for slapstic coding. Empire Strikes Back and at least one of the System 1 games jumps to code in the slapstic memory region, but since we read the opcodes directly out of ROM, we never call the read handler. Although this won't solve the problem completely, we can at least detect when the code jumps into the slapstic memory region, and based on the registers and the PC, cause the proper bank switching to occur.
  • Marco Cassili completed the migration to the new input port definitions. The obsolete structures have been removed from struct GameDriver.
  • Better handling of sound susbsystems, thanks to new fields in the MachineDriver structure. You can now use several susbystems at the same time, without any problem and without having to write sh_start(), sh_stop() and sh_update() functions. Samples have a better interface too.
  • Phil Stroffolino and Nicola Salmoria added some new graphics code, handling abstracted layers and optimized refresh. It is used only by a few drivers, and is still work in progress - don't use it in new code until further notice.
  • VERY IMPORTANT NOTE FOR PORTERS: now the function osd_new_bitmap() must allocate also a "safety area" 8 pixels wide all around the bitmap. This is required because, for performance reasons, some graphic routines don't clip at boundaries of the bitmap.

Game Support

New Games added or promoted from GAME_NOT_WORKING status