Release Date

MAME 0.88 was released on 25 October 2004.


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:

  • Charles MacDonald and Nicola Salmoria added emulation of the Sega FD1094 encrypted 68k CPUs, this will allow for significant progress in the emulation of the remaining encrypted Sega games. Note that we require working CPUs to extract encryption data from in order to emulate the encrypted titles, see for more details. As a result of this code several of the encrypted games will now boot (astorm, ddcrew, wb3a, wb3b, tetris, ddux, sonicbom etc.)
  • MAME32Plus contributed misc fixes:
    • ay.diff: add save state support for AY8910 and friends
    • crbaloon.diff: add music support
    • darius.diff: adjust FM/ADPCM balance
    • f3.diff: fix landmakr sound loading
    • harddriv.diff: fix undersized array causing memory trashing
    • mario.diff: added save state support
    • qsound.diff: added save state support
    • renegade.diff: fixed missing break; in MCU simulation
    • s16.diff: adjust FM/ADPCM balance
    • scsp.diff: fixed undersized array causing stack trashing
    • ssv.diff: fixed hypreac2 sound loading
  • R. Belmont and ElSemi updated the i960 core and model 2 driver:
    • i960:
      • Fixed bug in movl (ElSemi)
    • model2:
      • Removed hotd and lastbrnx hacks, the i960 fix obsoletes them
      • Added port 0 switching, player 2 start works in several games now (ElSemi)
      • Added working timer support, including timer IRQs
      • Updated game status listing
  • Derrick Renaud contributed discrete sound changes:
    • Discrete Sound Changes
      • Continued cleanup of code to make it more readable
    • New Discrete Modules Added
      • DISCRETE_NOTE - counter circuit used to create tones/music.
      • DISCRETE_INTEGRATE - various op amp integration (ramp) circuits.
      • DISCRETE_OP_AMP_TRIG_VCA - Did not know what to call this. :-) Basically it is a programable voltage controlled amp. But uses only an on/off trigger. It has resistors to select the rise/fall times. Also it is not a true VCA. It actually adjusts amplitude by clipping more/less off the bottom of the input signal. But it is a common circuit.
    • Game Driver Changes
      • polaris - complete sound rewrite to use new component value code. Hooked up the watchdog timer.
    • New watchdog functionality
    • Game Driver Changes
      • dominos, sprint1, sprint2, dragrace, canyon, nitedrvr - added watchdog and set to proper time using new MDRV_WATCHDOG_VBLANK_INIT function.
      • firetrk, montecar, superbug, pacman, polaris - changed watchdog to proper time using new MDRV_WATCHDOG_VBLANK_INIT function.
      • galpania, galpanib - changed to MDRV_WATCHDOG_VBLANK_INIT because these games need watchdog init at game start.
    • Core Changes
      • Changed watchdog to allow it to start at machine run start. If not used, the previous watchdog functionality is retained. Only define 1 of the 2 watchdogs per game. If both are defined then MDRV_WATCHDOG_VBLANK_INIT will be used only.
      • MDRV_WATCHDOG_VBLANK_INIT(watch_count)- Initializes the watchdog in MACHINE_DRIVER_. watch_count is the # of vertical blanking intervals before a forced reset. If the time is unkown then you can use these defaults: DEFAULT_60HZ_3S_VBLANK_WATCHDOG or DEFAULT_30HZ_3S_VBLANK_WATCHDOG
      • MDRV_WATCHDOG_TIME_INIT(time)- Initializes the watchdog in MACHINE_DRIVER_. time is the time in seconds before a forced reset.
      • New function to enable/disable the watchdog in game. watchdog_enable(0 or 1) - used to 0=disable or !0=enable.
      • Made a macro that calculates the pulse time of a 74LS122 or LS123. TIME_OF_74LS123(r,c) r is in Ohms. c is in Farads. c must be greater then 1000pF to use this function
  • Derrick Renaud added runtime option to disable validity checks
    • Added run time option:
      • -[no]skip_validitychecks: Forces MAME to skip doing the code validity checks. The default is OFF (-noskip_validitychecks).
    • This new option will default to doing the test and force you to confirm you do not want to use it. This way users can test their submissions easily and then speed things up when confirmed ok.
    • NOTE: DO NOT disable the checks when submitting code
  • Aaron Giles fixed the Voodoo code broken by cleanup in u3
  • Aaron Giles updated the input port system:
    • PORT_INCLUDE() works the same as before.
    • PORT_MODIFY("tag") allows you to modify any given input port by specifying its tag.
    • Any PORT_BIT() entries that you put after a PORT_MODIFY will nuke any matching entries in the previous definition, allowing you to overwrite them with new stuff.
    • I also added a few new functions:
      • readinputportbytag_safe() takes a tag and a default value. If the tag is not found, the default value is returned.
      • port_tag_to_handler8()
      • port_tag_to_handler16()
      • port_tag_to_handler32() -- these 3 new functions take a tag string, find the input port, and return the appropriate handler. They can be used in AM_READ, so instead of:
        • AM_RANGE(0x00, 0x00) AM_READ(input_port_1_r)
      • You can use
        • AM_RANGE(0x00, 0x00) AM_READ(port_tag_to_handler8("MyPortName"))
      • I've modified exidy.c to use these features as a testbed. Let me know if you see any problems.
  • Aaron Giles made some memory system changes / fixes
    • added explicit casting to the memory handler width when computing the shifted data/mask values for read/write handlers -- this should in theory fix R. Belmont's 64-bit issues
    • added memory_install_read/write8/16/32/64_matchmask_handler functions to allow dynamic installation of match/mask (AM_SPACE-style) memory ranges -- this should satisfy Frank P's request for the astrocade driver
    • changed masking behavior for match/mask pairs so that an AM_SPACE with an AM_MASK does not expand the explicitly-specified mask value -- this should fix dwidel's problem getting Pac-Man accurate
    • changed dynamic bank assignment to always assign a bank if you have explicitly specified a mask value via AM_MASK -- this should allow mirroring via AM_MASK if you want to, though AM_MIRROR is still preferred
  • Quench fixed the OKI banking in Fixeight bootleg
  • Derrick Renaud contributed more changes to various drivers:
    • Game Driver Changes
      • firetrk, montecar - added proper CPU clock frequency change when going in/out of service mode.
    • Core Changes
    • Fixed some last remaining issues with the new watchdog. The watchdog would not remain disabled after a watchdog_enable(0) in some conditions.
    • Added a new function to change CPU clock speed in game. The current scaling factor will still apply. eg. If you force the CPU to change clock to 1MHz while the scaling is at 50%, the effective CPU speed will be 500kHz. Then reading the clock speed will give 1MHz, because clock scaling is transparent to the driver.
    • int cpunum_get_clock(int cpunum); returns the current CPU's actual unscaled running clock speed */
    • void cpunum_set_clock(int cpunum, int clock); sets the current CPU's clock speed and then adjusts for scaling

Game Support

New Games supported or promoted from GAME_NOT_WORKING status

New clones added

New games marked as GAME_NOT_WORKING