MAME 0.128u7 was released on 21 December 2008.
The known contributors for this version are, in alphabetical order:
The most major change was the final retirement of the global Machine pointer, which had been part of MAME for many years. As a result of this change, it should be possible in the next year to finally write a driver that runs two full machines simultaneously.
The second big change was that the CPUs were now full-fledged devices, and participated like all other devices in the system configuration. This was mainly an internal structural change, but in the end removed some redundant code and behaviour.
The known contributions for this version are, in the order specified in the whatsnew:
- Aaron Giles removed old cherrym driver (meant to be removed last time).
- Roberto Fresca provided Funworld.c improvements:
- Added new set: Jolly Card (italian, encrypted bootleg).
- No coins. Only remote credits. After nvram init, set the Payout DIP to 'manual' to allow the remote credits mode to work.
- Created inputs from the scratch for jolycdib.
- Updated technical notes.
- Aaron Giles made CPUs into proper devices. CPUs are now added in the machine configuration just as any other device, and the standard CPU configuration is performed via the inline configuration macros.
- Aaron Giles and Atari Ace changed cpu_type from an enumeration into a pointer to the CPU's get_info function, very similar to device behavior. Updated all drivers to #include the necessary header files for the CPU's they reference.
- Aaron Giles added function cpu_get_type() to return the CPU type.
- Aaron Giles changed several cpu_* functions over to the device_* equivalents, specifically for get/set info and for reset.
- Aaron Giles made The device system maintain a parallel list of devices based on type and class, for faster iteration through all devices of a given type or class.
- Aaron Giles cleaned up code that looped over CPUs via the machine->cpu array to now loop using the type-based device list.
- Aaron Giles removed start/stop/reset/nvram functions from the device_config in favor of grabbing them as needed.
- Aaron Giles cleaned up the generic interrupt_enable code to work with CPU devices instead of numbers.
- Aaron Giles mapped the devtag_* functions to device_* functions via macros instead of parallel implementations.
- Aaron Giles removed cpuintrf_init() which is no longer necessary.
- Atari Ace and Aaron Giles changed a number of APIs in the system to accept running_machine, address_space, or device_config types, in order to remove the use of the global Machine variable. Removed the global Machine variable now that it is no longer directly references.
- Aaron Giles added the concept of device "owner", for devices owned by other devices.
- Aaron Giles modified laserdisc players to walk back to their global device state via the owner, rather than brute-force searching for the first instance and hoping that is the right one.
- poUzVdb90 provided a Finalizer update:
- Converted to tilemap.
- Added flipscreen.
- Changed sound chip name from SN76496 to SN76489A.
- Aaron Giles made the concept of a "clock" native to devices. The clock is now specified when the device is added, and the clock is available in the device_config directly via device->clock. Updated all devices that have a clock to specify it when adding the device, rather than as part of their configuration. As part of this work, also created device-specific _ADD and _REMOVE macros to simplify configuration.
- Aaron Giles defined a generic device execute function callback, though it is not used yet. The long term plan is that any device with an execute callback will be scheduled along with the CPUs. Now that CPUs are devices, their scheduling will be moved over to this logic eventually.
- Aaron Giles changed various NVRAM devices to fetch their default memory region from the device->region rather than specifying it in the configuration.
- Aaron Giles moved device startup to *before* the DRIVER_INIT is called. This is to allow the DRIVER_INIT to configure devices that have been properly allocated.
- Aaron Giles rewrote the device iteration logic to make use of the typenext field and the newly-introduced classnext field for iterating more efficiently through devices of a given type or class.
- Atari Ace modified the parameters of the stream_update_func callback. As part of this work, macro-ized all the callbacks to STREAM_UPDATE, and added the sound device as a parameter.
- Aaron Giles cleaned up i86/i286/i386/nec/v30mz headers:
- Renamed i86.h -> i86priv.h
- Renamed i86intrf.h -> i86.h
- Consolidated i88intrf.h, i186intf.h, i188intf.h, etc into i86.h.
- Aaron Giles cleaned up many other CPU headers to move memory read/write macros out of them, since they are inappropriate and should be prive to the CPU core.
- Aaron Giles removed index and clock parameters from CPU_INIT function.
- Wilbert Pol provided some PIC8259 updates:
- Fixed operation of edge-triggered interrupts.
- INT output line is now cleared when an IRQ is acknowledged.
- Implemented basic OCW3 features.
- robiza fixed proms in boobhack.
- Andrew Gardner decoded some graphics and setup some RAM in the Virtual Combat driver.
- Aaron Giles cleaned up device and sound interfaces to match the CPU interfaces when handling strings. Namely, the generic get_info functions allocate a temporary string and the device in question copies its string to the target, instead of assigning a const char *. Updated all device and sound cores to operate this way.
- Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the ADSP21xx, TMS340x0, i86, Z80, Z180 and 8085 cores to use this.
- Aaron Giles removed the old debugger register list, which was never used. Replaced it with using ordering from the cpu_state_table.
- Aaron Giles renamed REG_PC -> REG_GENPC, REG_SP -> REG_GENSP, and REG_PREVIOUSPC -> REG_GENPCBASE. Updated a few spots that were using these directly. Moved these definitions into the end of the register area rather than leaving them outside which put them in a weird range.
- Aaron Giles did more cleanup. Added address-space-specific constants for the various bus width and shift CPU interface constants. Changed all the cores to use them.
- Aaron Giles changed ADSP21xx cores to accept a configuration struct instead of using set_info to specify serial port callbacks. Simplified the ADSP21xx get/set info significantly. Removed support for only including certain variants of the chips; they are now either all supported or all unsupported.
- Aaron Giles provided memory view fixes:
- Fixed bug that computed the wrong total size if the address space was a full 32 bits.
- Improved display to show unmapped memory with *s.
- Disabled enumeration of disk and 0-length regions.
- David Haywood and Angelo Salese added Country Girl to the Jangou driver,working with sound:
- Fixed transparency pens in the Jangou driver (so removed the GAME_IMPERFECT_GRAPHICS flag).
- Added a kludge for Jangou Lady RNG, will be worked on in the future.
- Nathan Woods added running_machine callbacks for the Amiga code.
- robiza updated sscope2 to use newly-dumped roms.
- Wilbert Pol added running_machine parameters to the f3853 callbacks.
- Wilbert Pol added running_machine parameter to the callback in the sid interface.
- Aaron Giles removed MDRV_INTERLEAVE(x), which specified the minimum scheduling quantum in terms of "frames" (a dubious concept now with multiple screens and changing refresh rates). Replaced it with a new MDRV_QUANTUM_TIME(x) which specifies the minimum scheduling quantum as a time value. Time can be specified as HZ(x), NSEC(x), USEC(x), etc. Updated all drivers to use this, assuming 60 was the frame rate (this is not perfect but should work for almost all cases).
- Aaron Giles changed MDRV_WATCHDOG_INIT_TIME(x) to automatically prepend UINT64_ATTOTIME_IN_ to the parameter, ensuring there is no improper use of this macro and bringing it in line with the MDRV_QUANTUM_TIME() macro. Updated all callers.
- Aaron Giles added new MDRV_QUANTUM_PERFECT_CPU(x) to specify that the minimum quantum should be enough to ensure that the specified CPU tag only ever executes a single instruction at a time. This can be used to explicitly require "perfect" synchronization for drivers that have multiple CPUs with shared memory. Turned this on for the arknoid2 driver for now as a test (the interleave on that driver was already very close to perfect anyway).
- Mamesick improvements to ddragon3/shadfrce/wwfsstar/wwfwfest:
- Converted driver to be fully scanlines based using timers.
- Updated driver to new video screen raw parameters.
- Hooked up interrupts (ddragon3, wwfwfest).
- Mike Green provided improvements to the dmndrby.c driver.
- Andrew Gardner continued rewrite of the Motorola DSP56k CPU core:
- Fixed flag calculation and sign extension for numerous ops.
- Added rnd, mpysuuu, and dmac ops.
- Fixed do loop behavior to skip empty loops.
- Added stack underflow exception handling.
- Roberto Fresca and David Haywood provided improvements to the skylncr.c driver:
- Complete reel support from the scratch.
- Full inputs, outputs & DIP switches from the scratch.
- Added new games.
- Updated technical and game notes.
- Aaron Giles rewrote 8080/8085 interrupt handling so that it makes sense. Changed callbacks to be specified in a config structure. Converted core to cpu_state_table. Changed to a single HAS_808X define for both cores. Fixed several drivers that used 8080/8085 interrupts in odd ways.
- Aaron Giles converted warpwarp driver to raw video parameters.
- Andrew Gardner fixed 'run to cursor' and 'toggle breakpoint' operations in the debugger when dealing with CPUs that have shifted address spaces.
- Roberto Fresca provided improvements to goldstar.c driver:
- Hooked the 3x PPI 8255 devices to chryigld and ncb3.
- Reworked the chryigld and ncb3 inputs based on PPI 8255 connections.
- Added the unmapped PSG sound to chryigld and ncb3.
- Some works on their machine driver.
- Some cleanups.
New games added or promoted from NOT_WORKING status
New clones added
New games marked as GAME_NOT_WORKING