Release Date

MAME 0.128u4 was released on 23 November 2008.


Contributors

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:

  • couriersud provided UPI-41/42 (still I8x41.c) changes:
    • cpu/i8x41 should be renamed to UPI-4x, since UPI-41/42 was an intel chip. Family postponed for now until core moved to pointers.
    • Removed I8041 definition from mcs48.
    • Removed I8x41 cpu definition and config struct.
    • Added I8041, I8741, I8042, I8242 and I8742 cpus to i8x41.c.
    • Added internal memory maps.
    • Internal ram now uses DATA memory space.
    • Updated drivers.
    • Increased interleave to 70 in decocass. This fixes decocass hanging in countdown around 13. No idea when this bug was introduced.
    • Converted i8x41 to use pointers for state access.
    • Separated opcodes into i8x41ops.c.
  • Aaron Giles populated tag and static_config parts of fake CPU device. Removed 'config' parameter from CPU_INIT. Modified CPU cores to pull config from the device static_config.
  • Lord Nightmare updated s14001a.c: added chip pinout and operation notes.
  • Angelo Salese provided clean-ups in the ST-V driver and corrected protection number seeds for elandore.
  • Angelo Salese provided video emulation fixes to the Ghost Eolith HW (not yet working).
  • couriersud switched i960 core to pointer state access.
  • Aaron Giles provided major cpuintrf changes:
    • Added a set of cpu_* calls which accept a CPU device object; these are now the preferred means of manipulating a CPU.
    • Removed the cpunum_* calls; added an array of cpu* [[]] to the running_machine object; converted all existing cpunum_* calls to cpu_* calls, pulling the CPU device object from the new array in the running_machine.
    • Removed the activecpu_* calls; added an activecpu member to the running_machine object; converted all existing activecpu_* calls to cpu_* calls, pulling the active CPU device object from the running_machine.
    • Changed cpuintrf_push_context() to cpu_push_context(), taking a CPU object pointer; changed cpuintrf_pop_context() to cpu_pop_context(); eventually these will go away.
    • Many other similar changes moving toward a model where all CPU references are done by the CPU object and not by index.
    • Added CPU device parameters to all CPU callbacks except for the context ones (which are going away), and the validity check.
  • Aaron Giles converted TMS340x0 cores to be pointer-based.
  • stephh fixed Dip Switches for 'lkage' and clones. Fixed bootlegs visible area to match original sets.
  • stephh fixed Dip Switches for 'magmax'.
  • stephh fixed Dip Switches for all games in mermaid.c driver.
  • couriersud provided peplus.c updates:
    • Changed the 6845 type to R6545_1 (Rockwell as mentioned in the driver).
    • Use transparent addressing.
    • Lightpen code now generates a "lightpen_assert" at the right screen position.
    • Completely hooked up 6545 without wrappers.
  • couriersud made abc_step and abc_reset be now declared as DISCRETE_STEP( abc ) and DISCRETE_RESET( abc ).
  • stephh fixed Dip Switches for 'momoko'.
  • stephh fixed Dip Switches for 'joyfulr' and clone.
  • couriersud fixed state save in discrete sound:
    • sndindex now considered as well in state save.
    • Expose discrete_sound_n_r(void *chip, ...) to enable accessing multiple discrete sound cores.
  • David Haywood and Andreas Naive provided Kaneko changes:
    • Added Simulation of Toybox external data rom decryption.
    • Converted Blood Warrior, Bonk's Adventure, Great 1000 Miles Rally 1+2 to use the new code.
    • Updated suprnova rendering to allow 2 sprite chips.
    • Started work on Jackie Chan & Gals Panic 3
  • Aaron Giles provided a massive API cleanup/change:
    • The primary goal is that all CPU-related APIs now take a device pointer instead of an index. All functions that take a CPU device are prefixed with cpu_*. All functions that are globally related to cpu execution are prefixed with cpuexec_*. Below is a list of some of the mappings:
      • cpu_boost_interleave -> cpuexec_boost_interleave
      • cpunum_suspend -> cpu_suspend
      • cpunum_resume -> cpu_resume
      • cpunum_is_suspended -> cpu_is_suspended
      • cpunum_get_clock -> cpu_get_clock
      • cpunum_set_clock -> cpu_set_clock
      • cpunum_get_clockscale -> cpu_get_clockscale
      • cpunum_set_clockscale -> cpu_set_clockscale
      • cpunum_get_localtime -> cpu_get_local_time
      • cpunum_gettotalcycles -> cpu_get_total_cycles
      • activecpu_eat_cycles -> cpu_eat_cycles
      • activecpu_adjust_icount -> cpu_adjust_icount
      • cpu_trigger -> cpuexec_trigger
      • cpu_triggertime -> cpuexec_triggertime
      • cpunum_set_input_line -> cpu_set_input_line
      • cpunum_set_irq_callback -> cpu_set_irq_callback
    • In addition, a number of functions retain the same name but now require a specific CPU parameter to be passed in:
      • cpu_yield
      • cpu_spin
      • cpu_spinuntil_time
      • cpu_spinuntil_int
      • cpu_spinuntil_trigger
      • cpu_triggerint
    • Merged cpuint.c into cpuexec.c. One side-effect of this change is that driver reset callbacks are called AFTER the CPUs and devices are reset. This means that if you make changes to the CPU state and expect the reset vectors to recognize the changes in your reset routine, you will need to manually reset the CPU after making the change (since it has already been reset).
    • Added a number of inline helper functions to cpuintrf.h for managing addresses.
    • Removed cpu_gettotalcpu(). This information is rarely needed outside of the core and can be obtained by looking at the machine->cpu* [[]] array.
    • Changed CPU interrupt acknowledge callbacks to pass a CPU device instead of machine/cpunum pair.
    • Changed VBLANK and periodic timer callbacks to pass a CPU device instead of machine/cpunum pair.
    • Renamed all information getters from cpu_* to cpu_get_* and from cputype_* to cputype_get_*.
  • Atari Ace defined macros for standard sound core functions and updated all sound cores to use them.
  • Atari Ace and Oliver Stoeneberg replaced the Machine parameter where an running_machine * is available and removes the deprecat.h where unnecessary.
  • stephh fixed Dip Switches and Inputs for 'jchan' and clone.
  • MAMEPlus documented the CPS2 Phoenix sets, and what happens to a dead CPS2 board.
  • couriersud pointer-ified the 6800, 6809 and hd6309 cpu cores:
    • Temporarily named the state var m68_state in the 68xx cores.
    • Reorganized some code for simpler comparison of 68xx cores.
  • Angelo Salese provided a pre-irq rewrite submission in ST-V driver:
    • Better management of hblank/vblank bits;.
    • Makes dynamic resolutions to be called with a timer instead of run-time.
    • Makes dynamic resolutions to not be changed at every frame but only when there's an actual change.
    • Fixed Final Arch broken Test Mode.
    • Demoted Super Major League / Final Arch as GAME_NOT_WORKING, they hang randomly due of SH-2 master/slave communication RAM issues.
    • Removed GAME_NOT_WORKING flag to Fighting Dragoon Legend Elan Doree, because protection affects only in-game graphics and not gameplay.
    • Removed all the read/write handler speed-up hacks, they aren't needed anymore and they were doing more damage than being useful. This fixes Golden Axe: the Duel gameplay speed at the cost of breaking up Groove on Fight coin counter at start-up.
  • Aaron Giles, couriersud, smf and R. Belmont provided a major memory system change:
    • Changed READ/WRITE handlers to accept an address_space * instead of a machine *. The address_space object was enhanced to contain a machine and a pointer to the relevant CPU object.
    • Added new function cpu_get_address_space() to fetch the address space for calling in manually to these functions. In some instances, code which should eventually be converted to a device is hard-coding fetching the program space of CPU #0 in order to have something valid to pass.
  • Angelo Salese converted cultures driver to have separated color tables for each plane.
  • Aaron Giles significantly pared down the 68k core. Merged outer MAME shell into the core proper and removed unused macros. Changed all external interfaces to pass the CPU device. Enabled 64-bit operations by default. Re-derived the interface functions to cascade and share code more aggressively. These changes also seem to have cured the taito_f3 issues as far as I can tell (at least pbobble3 seems right now).
  • Aaron Giles disentangled the 68000 core, converting it to be much simpler and less overly abstracted. Hard-coded it for the options that are relevant and never going to change. Removed old unused CPS2 encryption junk. Changed encryption interfaces to pass the CPU core object.
  • Nicola Salmoria added m6809 config option to control where opcodes 10 and 11 fetch the second byte.
  • Nicola Salmoria changed kram3 to use a partially understood decryption algorithm and removed external tables.
  • stephh fixed Dip Switches for 'scotrsht'.
  • Samuele Zannoli provided Naomi improvements:
    • Implemented a "plug-in board" device for the Naomi. It represents the rom boards for the various games and the dimm board for the gdrom.
    • Now the dimm board part contains only a routine to load the "rom file" from the gdrom chd, but in the future it will be fully implemented with its own sh4 processor, security chip and so on.
    • Extracted .rom files are no longer needed, rom file is extracted in code from the CHD.
  • Aaron Giles added "tag" parameter to state_save_register_item_* calls. Removed state_save_combine_module_and_tag() function in favor of passing the tag when registering. Revisited all save state item registrations and changed them to use the tag where appropriate.
  • Aaron Giles added template support to regrep. Changed output to not color the entire background of each cell. Switched to astrings and core_files internally.
  • Angelo Salese provided a ST-V IRQ rewrite that removes several global hacks/game specific hacks. (SMPC irq bit/introdon irq register hack/pblbeach framebuffer hack plus some more). Note: some games have issues with it, but they'll be hopefully fixed on the next couple of updates.
  • Aaron Giles generalized the concept of opbase access into "direct" access. Removed opbase globals to the address_space structure. Cleaned up names of pointers (decrypted and raw versus rom and ram). Added inline functions to read/write data via any address space. Added macros for existing functions to point them to the new functions. Other related cleanups.
  • David Haywood tweaked gun handling in beast busters a bit. By halving the precision of the guns to 7-bit they can be calibrated more easily, maybe the originals were like this. Also added a default eeprom with them calibrated in a 'reasonable' way for MAME. Sound is pretty awful on this, maybe the sound ROMs should be checked?
  • [[Aaron Giles] cleaned up macro mess in the Z80 core. Switched to using generic memory calls instead of program_* and io_*.]
  • couriersud switched mcs48, mcs51, m68000 to new memory functions.
  • Angelo Salese fixed basic controls in 2 Minutes Drill & added preliminary shutter/defender sensors. Still need proper ball hit/run sensors to get this working however.
  • R. Belmont provided a big H8 update:
    • Added support for 8-bit H8 family MCUs, starting with the H8/3344.
    • Pointer-ified all H8 cores.
    • Some cleanup and renames toward additional future work.
  • R. Belmont provided a System 23 update:
    • Added extremely preliminary support for I/O boards with the H8/3344.
  • Aaron Giles removed the change_pc() macro. Changed memory_set_direct_region() to return a boolean indicating whether the given address was successfully located in a bank. Change raw/decrypted access to look at this result, and if the given address is not in a bank, calls through to the standard read handlers. This should prevent most crashes when accessing opcodes.
  • Aaron Giles fixed address space mapping handlers to invalidate direct access regions if a change is made to the mapping. This is needed to prevent the Sega dynamic memory mapping chips from falling over.
  • Curt Coder refactored the CDP1802 and COP400 CPU cores to use the new memory functions.
  • couriersud switched m6809 and hd6309 to new memory functions:
    • Cleaned up some macros.
    • Aligned code a bit more.
    • Interrupts now checked in cpu_execute instead of set_context.
  • smf pointerified the psx cpu core & switched it to the new memory functions. Changed some MIPS_* to PSXCPU_*.
  • Aaron Giles provided another significant memory system change:
    • Moved memory global state into a struct hanging off of the machine. Updated almost all memory APIs to take an address_space * where appropriate, and updated all callers. Changed memory internals to use address spaces where appropriate. Changed accessors to point to the memory_* functions instead of the address space-specific functions. Improved internal handling of watchpoints.
    • Added cputag_* functions: cputag_reset(), cputag_get_index(), cputag_get_address_space(). These just expand via macros to aninitial fetch of the CPU via cputag_get_cpu() followed by the standard CPU call.
    • Added debugger_interrupt_hook() and debugger_exception_hook() calls which intelligently look at the debugger flags before calling.
    • Memory banking now requires a machine object. This makes the memory system fully global-free.
  • David Haywood replaced parent crkdown image with one containing valid settings data (prevents game booting with 0 seconds and invalid highscore data which it can't restore correctly).
  • R. Belmont converted H8 CPUs to the new memory functions.
  • Aaron Giles provided a Debugger interfaces cleanup. Added callback parameters to the expression engine. Improved CPU parsing so you can use a CPU tag or index in most commands that take one. Switched to passing CPU and address space objects around where appropriate. Symbol tables now have a global ref as well as a per-symbol ref. Debugcpu is now clear of active CPU references and global Machine references. Lots of other minor tweaks.
  • couriersud switched adsp21xx to new memory functions.
  • Angelo Salese fixed several protection issues with Double Wings, improved video and sound.
  • Curt Coder converted ssp1601 to pointers (still works, tested virtua racing genesis).
  • Curt Coder updated the MC6845: Hsync needs to toggle on every scanline.
  • Aaron Giles converted remaining CPU cores over to new memory functions.
  • Aaron Giles aemoved cpu_read_byte/cpu_write_byte. Thesea are replaced with memory_read_byte/memory_write_byte.
  • Aaron Giles removed all direct memory accesses via program_read/write_* from game drivers. All drivers now use the memory_read/write_* and pass in an address space.
  • Aaron Giles removed memory context switch. All memory accesses now specify an address space explicitly. There is no longer any concept of a "current" memory context.
  • Aaron Giles rnhanced the runtest.cmd to use all available processors.
  • Aaron Giles removed cpu_num info from SH2 in favor of just keeping the device object.
  • Aaron Giles removed all vestiges of the old change_pc macro, which is no longer needed with the banking improvements.
  • Phil Bennett added the latest "what we know" to the plygonet driver.
  • Steve Golson more accurately described the aux board behavior for Ms. Pac-Man. There is a thorough description of how the board works. mspacman is a more faithful emulation. In particular you can now enter service mode (F2) at anytime during game play.
  • Luigi30 derived clocks from crystals in in ace.c, asteroid.c, avalnche.c, blockade.c, boxer.c, bzone.c, cosmic.c, firetrk.c, galaga.c, lazercmd.c, meadows.c, missile.c, orbit.c, skydiver.c, sprint2.c, warpwarp.c, williams.c.
  • Luigi30 added diplocations to meadows.c, mugsmash.c, orbit.c.
  • Luigi30 unified sprint2.c memory map.
  • Luigi30 unified galaga.c CPU4 memory maps.
  • Luigi30 changed flyball CPU clock to a #defined crystal. Added dip locations.
  • Tim Lindquist added dates to Tron revisions. Swapped tron/tron2 now that it’s known tron2 is the later version.


Game Support

New games added or promoted from NOT_WORKING status

New clones added


New games marked as GAME_NOT_WORKING