Release Date

MAME 0.136u1 was released on 15 January 2010.

Major Announcement

This release introduces the following major changes:

1. A new tool chain for Windows, based off of gcc 4.4.3 prerelease, is now REQUIRED.

2. Non-Unicode builds of Windows MAME are no longer supported.

3. All code in MAME is now compiled as C++, plus there have been a few small changes that take advantage of the C++ language.

4. The SDL OSD for MAME is now shipped as part of the main source package.


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:

  • Andrew Gardner provided hng64 improvements:
    • bbust2 now has 3d geometry.
    • Fixed improperly loaded ROMs in sams64* games.
    • Hacked 3d acknowledge in a slightly different manner. Sams64 games now show 3d.
    • Found the 'explicit palette' word in bbust2. Colors are now correct. Implemented what looks like a 'dynamic palette' bit. Fixes the colors in sams64 games, but not roadedge or buriki.
  • Aaron Giles provided RSP DRC changes:
    • Fixed misaligned 32-bit accesses.
    • Disabled DRC_SQV implementation as it breaks music in mtetrisc.
  • Aaron Giles converted RSP callbacks into device callbacks. Removed a ton of tag-based queries in favor of using the device passed.
  • Aaron Giles added profiler_mark() calls around rdp_process_list() so that the RDP time is separated from the RSP time.
  • robiza added more decrypted opcodes to cb2001.
  • Aaron Giles changed inline_config to be allocated separately to avoid alignment issues.
  • Wilbert Pol provided uPD7801 core changes:
    • Fixed incorrect disassembly of some instructions.
    • Updated the handling of interrupts to match the documentation.
    • Implemented uPD7801 timers.
    • Configured port A on the uPD7801 to an output port.
  • Aaron Giles removed the various HAS_xxxx for sound cores. To select sound cores, just choose them in the make system. Further granularity is not necessary. This also means that the samples core is always required.
  • David Haywood fixed the gfx rom loading for Race Drivin' Panorama.
  • Olivier Galibert and David Haywood provided Vs. Net Soccer improvements:
    • Emulated DMA protection for startup-checks.
    • Fixed Data ROM loading, game now boots.
    • Marked Sprite + Sound ROMs as BAD_DUMP.
  • Atari Ace converted the goldstar, liberate, sidearms and sidepckt drivers to use driver_data.
  • Aaron Giles added makefile changes:
    • Removed CPP_COMPILE flag; all code is now compiled as C++ except for zlib and expat.
    • Mapped INLINE to "static inline" since C++ has real inlining.
    • Added new 'default' make target which just builds the emulator. Use 'make tools' to build the tools, or 'make all' to build the whole thing.
    • 64-bit builds now get a '64' suffix on them.
    • Removed UNICODE flag from Windows; UNICODE is always enabled now.
    • If OSD is not defined, we look for the built-in Windows environment variable 'OS' and if it is set to 'Windows_NT', we assume OSD=windows; otherwise we assume OSD=sdl.
    • If TARGETOS is not defined, we look for the same variable and set TARGETOS=win32 if it is set to 'Windows_NT'.
    • Windows SDL builds have an 'sdl' prefix on the executable so they can live side-by-side.
    • Added cheesy auto-detection of 64-bit Windows builds (based on the PATH including 'mingw64-w64').
  • Aaron Giles removed hacks surrounding unicode handling in main(). They are no longer necessary with the new tools.
  • Aaron Giles fixed typo in 8-bit eeprom case that broke operation in some games.
  • Aaron Giles fixed x86 DRC backend codegen bug that broke kinst.
  • Aaron Giles got rid of setjmp/longjmp for error handling in favor of exceptions. Fatalerror now maps to throwing an exception.
  • Miodrag Milanovic made the PIT8253 update the PIT counter even if there was no elapsed cycles (this only affects fast drivers like at586 in MESS).
  • Angelo Salese fixed a bunch of minor quirks, and fixed gfxs in the dwarfd driver.
  • PsikyoFan added support for Mahjong panel for mjgtaste. Made this the default input and altered the default eeprom accordingly to match factory default. Note that you need to change both the game and the controller setting from the driver configuration when switching input sources since the two are mutually exclusive.
  • Bryan McPhail fixed zeroize protection simulation in lieu of proper dongle dump.
  • Fabio Priuli provided misc Konami updates:
    • Moved a few routines (used for sorting graphics layers) to konicdev.c since they are shared by several drivers.
    • Added driver data struct to ajax.c and aliens.c.
    • Added driver data struct + save states to: asterix.c, bishi.c, blockhl.c, bottom9.c, chqflag.c, crimfght.c, dbz.c, gbusters.c, gijoe.c, lethal.c, mainevt.c, moo.c, overdriv.c, parodius.c, rollerg.c, rungun.c, simpsons.c, spy.c, surpratk.c, tail2nos.c, thunderx.c, tmnt.c, ultraman.c, vendetta.c, xexex.c and xmen.c
    • Updated some Konami drivers above to separately allocate palette/extra/work RAM instead of appending them to maincpu ROM; also, reduced maincpu rom regions where appropriate.
    • Replaced memory_set_bankptr with memory_set_bank where necessary.
    • Added driver data struct & save states to gradius3.c.
  • Fabio Priuli converted taitosnd (aka tc0140syt) to be a device and updated the related drivers to use the new code.
  • Fabio Priuli replaced all occurrences of cputag_get_cpu with devtag_get_device: the former function was just an alias and now cpus are no different from other devices. Also removed cputag_get_cpu and cputag_reset (another alias, not even used in the source) from cpuexec.h.
  • Phil Bennett and luigi30 provided Metal Maniax improvements:
    • Fixed frame buffer display.
    • Started to add the other CPUs.
    • Added PCB layouts for layers 1 and 2.
    • Hooked up TMS34020.
    • Started to implement the ADSP-2105 network CPU and the CAGE audio system.
  • Atari Ace added some missing header declarations and static qualifiers. Added validity.h to the core for consistency as well as an explicit foo.h in each foo.c.
  • Fabio Priuli added driver data struct to taitoair.c and taito_b.c.
  • Curt Coder refactored VIA6522 interface to use READ/WRITE_LINE.
  • Angelo Salese provided Cyber Tank improvements:
    • Fixed bitplane order.
    • Decoded sprite gfx format.
    • Hooked up the two bg tilemaps.
    • Wrote bare-bones video emulation for the Cyber Tank sprite chip / blitter.
    • Added video boundary checks for the blitter.
  • smf made the starting value for an output port the default value, which is based on whether it is active high or low. So the device will be called the first time the line becomes active. Changed the eeprom device to assume that the reset and clock are cleared until it's told otherwise.
  • Fabio Priuli added driver data struct to taito_l.c & opwolf.c.
  • Fabio Priuli added driver data struct + save states to asuka.c (cadash was not supporting saves), rainbow.c, rastan.c, taito_f2.c, taito_h.c, taito_o.c, taito_z.c, topspeed.c & volfied.c.
  • Aaron Giles provided a new C++-aware memory manager:
    • This is a simple manager that allows you to add any type of object to a resource pool. Most commonly, allocated objects are added, and so a set of allocation macros is provided to allow you to manage objects in a particular pool:
      • pool_alloc(p, t) = allocate object of type 't' and add to pool 'p'
      • pool_alloc_clear(p, t) = same as above, but clear the memory first
      • pool_alloc_array(p, t, c) = allocate an array of 'c' objects of type 't' and add to pool 'p'
      • pool_alloc_array_clear(p, t, c) = same, but with clearing
      • pool_free(p, v) = free object 'v' and remove it from the pool
    • Note that pool_alloc[_clear] is roughly equivalent to "new t" and pool_alloc_array[_clear] is roughly equivalent to "new t[c]". Also note that pool_free works for single objects and arrays.
    • There is a single global_resource_pool defined which should be used for any global allocations. It has equivalent macros to the pool_* macros above that automatically target the global pool.
    • In addition, the memory module defines global new/delete overrides that access file and line number parameters so that allocations can be tracked. Currently this tracking is only done if MAME_DEBUG is enabled. In debug builds, any unfreed memory will be printed at the end of the session.
    • emualloc.h also has #defines to disable malloc/free/realloc/calloc. Since emualloc.h is included by emucore.h, this means pretty much all code within the emulator is forced to use the new allocators. Although straight new/delete do work, their use is discouraged, as any allocations made with them will not be tracked.
    • Changed the familar auto_alloc_* macros to map to the resource pool model described above. The running_machine is now a class and contains a resource pool which is automatically destructed upon deletion. If you are a driver writer, all your allocations should be done with auto_alloc_*.
    • Changed all drivers and files in the core using malloc/realloc or the old alloc_*_or_die macros to use (preferably) the auto_alloc_* macros instead, or the global_alloc_* macros if necessary.
    • Added simple C++ wrappers for astring and bitmap_t, as these need proper constructors/destructors to be used for auto_alloc_astring and auto_alloc_bitmap.
    • Removed references to the winalloc prefix file. Most of its functionality has moved into the core, save for the guard page allocations, which are now implemented in osd_alloc and osd_free.
  • Fabio Priuli added driver data struct + save states to darius.c & othunder.c.
  • Fabio Priuli added driver data struct to ninjaw.c, slapshot.c, warriorb.c, wgp.c.
  • Aaron Giles extended the astring class wrapper into something useful, and useable as a stack object. Also designed the interfaces to allow for chaining operations. And added a casting operator to const char * for seamless use in most functions that take plain old C strings.
  • Aaron Giles changed all uses of astring to use the object directly on the stack or embedded in objects instead of explicitly allocating and deallocating it. Removed a lot of annoying memory management code as a result.
  • Aaron Giles changed interfaces that accepted/returned an astring * to use an astring & instead.
  • Aaron Giles removed auto_alloc_astring(machine). Use auto_alloc(machine, astring) instead.
  • Aaron Giles provided a major header file cleanup:
    • Created new central header "emu.h"; this should be included by pretty much any driver or device as the first include. This file in turn includes pretty much everything a driver or device will need, minus any other devices it references. Note that emu.h should *never* be included by another header file.
    • Updated all files in the core (src/emu) to use emu.h.
    • Removed a ton of redundant and poorly-tracked header includes from within other header files.
    • Temporarily changed driver.h to map to emu.h until we update files outside of the core.
  • Aaron Giles added class wrapper around tagmap so it can be directly included and accessed within objects that need it. Updated all users to embed tagmap objects and changed them to call through the class.
  • Aaron Giles added nicer functions for finding devices, ports, and regions in a machine:
    • machine->device("tag") -- return the named device, or NULL
    • machine->port("tag") -- return the named port, or NULL
    • machine->region("tag") -- return the named region
    • (Note that machine->region() returns a pointer to a region_info class which describes a region, not a pointer to the region's memory.)
  • Aaron Giles made the device tag an astring. This required touching a lot of code that printed the device to explicitly fetch the C-string from it. (Thank you gcc for flagging that issue!)
  • Barry Rodewald added a PCM sample end/loop callback to the RF5C68 core.
  • stephh provided a galaxold update:
    • Renamed set kkgalax to ckongmc.
    • Changed descriptions for ckongg and ckongmc.
    • Fixed dip switches and inputs for ckongg and ckongmc.
    • Updated ckongmc memory map.
  • Luca Elia implemented inputs and sound in Gunpey.
  • Aaron Giles added new member function space() to the device_config, along with shorter constants to be used (AS_PROGRAM, AS_DATA, AS_IO). With no parameters, space() returns the first address space, which is commonly the only space present. Updated a few devices that referenced the old space[] array to call the new function instead.
  • Angelo Salese converted Gunpey to use RGB pens instead of hardcoded palette table.
  • Aaron Giles enforced that numbers are all the same exact width when loading fonts.
  • Harmony added a mostly-complete SunPlus u'nSP core based on the one in Segher's "Unununium".
  • PsikyoFan added lots of comments relating to 56-pin Mahjong interface and Psikyo SK-G001 interface pcb based on discussion with alien_mame and documents from other Mahjong PCBs.
  • Corrado Tomaselli verified clocks on Poker Ladies and changed Z80 clock of Mahjong Gakuen from 6Mhz to 8MHz to match the other Mitchell hardware games.
  • Dirk Best improved accuracy of the various emulated models in the i386 core, makes CPU detection programs detect the correct CPU (in MESS):
    • eflags mask added.
    • Initial values for the EAX and EDX registers fixed.
    • cpuid values improved.
    • Feature flags improved.
    • Initial value for the cr0 register improved.
    • Changed 486 to not support the cpuid instruction by default.
    • Take a trap on invalid instructions instead of throwing a fatalerror.
    • Emulated the undefined flag behavior for the DIV/IDIV instructions on Intel CPUs.
  • couriersud improved OS X and SDL 1.3 SVN support, try to autodetect SDLMAME targets.
  • couriersud added BGRA support to -video soft for SDLMAME.
  • Lord Nightmare, Corrado Tomaselli and PlgDavid fixed period for both sn76489 and sn76489A periodic noise; fixes pitch in 'smooth criminal' demo for colecovision and fixes pitch (but not the waveform, which will require more work) of music in dorunrun; More work is required before the code will be bit accurate due to the way the real LFSR and periodic generator work.
  • couriersud provided SDLMAME makefile improvements:
    • Fixed TARGETOS detection on OS X.
    • Do not try to check TARGETOS when cross-compiling.
    • For non-windows targets, try to auto-detect PTR64.
    • Testkeys now builds again.
    • For unix targets, added a depend rule to sdl.mak which builds a .depend file.
  • R. Belmont fixed a number of compiler bugs found by PowerPC MacOS X.
  • Aaron Giles added casting operators to the region_info class so you can assign a region to a generic type pointer and have it automatically convert. Also added a bytes() method which is safe if the region is NULL (useful for saying machine->region("foo")->bytes() and not crashing if foo doesn't exist).
  • Aaron Giles changed the region field in the device_config to be a region_info *, and removed the regionbytes field. Updated all users of these fields to use the new casting operators and bytes() methods instead.
  • Aaron Giles added subdevice and subregion methods to the device_config class, so you can easily query for devices and regions that are device-specific. The device prefix ("devicename:") is automatically prepended.

Game Support

New games added or promoted from NOT_WORKING status

New clones added

New games marked as GAME_NOT_WORKING