Source Changes
--------------
bbusters: Fixed sprite wrapping -- this is used on the gun calibration
screen, at least. The game still hangs on a black screen after service
mode is turned off. Even exiting MAME and restarting doesn't fix it,
so it's probably a EEPROM issue. [Zsolt Vasvari]

Added Noise Output to the MSM5232 emulation. [Nicola Salmoria]

Added placeholder effects for cymbal and hihat to equites.c. These
will need further work to properly emulate the discrete circuitry.
[Nicola Salmoria]

Centralized definitions of _WIN32_WINNT. Removed malloc/calloc/
realloc/free link-time overrides; we now rely exclusively on compile-
time overrides. Made a few tweaks toward getting mingw-w64 working,
but there are still linker issues. [Aaron Giles]

Fixed assertions in skullxbo and exerion. [Aaron Giles]

De-deprecat-ed ui.c. [Aaron Giles]

Changed xmlfile.c to pass in memory handlers to expat so that
our memory overrides are properly managed. [Aaron Giles]

Fixed wbbc97 regression. [Zsolt Vasvari]

Fixed crospang.c regression. Not sure why this needed to be RGB15,
works fine with INDEXED16. [Zsolt Vasvari]

Source Changes
--------------
Added a new device type for timers. Where applicable, added a parallel
set of timer functions that take a device_config instead of an
emu_timer. Added MDRV_TIMER_* macros to define the timers in the
machine driver. Implemented both periodic and scanline-based timer
variants. Modified Space Encounters and Centipede to make use of this
feature. Going forward, this is the preferred way of creating periodic
timers. [Zsolt Vasvari]

Changed exidy440_sound_command back to "UINT8." Since it's used by
both 8-bit and 16-bit systems, the automatic allocation is not worth
it if you need an ugly UINT16 ** cast. Removed deprecat.h from some of
the exidy files. [Zsolt Vasvari]

Fixed Air Buster bootleg from reseting because of the watchdog.
[Zsolt Vasvari]

- Added DEVINFO_INT_TOKEN_BYTES, which is queried before device
startup. It should return the size of the structure that will
be hung off of device->token. It must not return 0.

- Changed the core device interface to allocate and zero a block
of memory the size of DEVINFO_INT_TOKEN_BYTES before calling
device_start. The pointer to this memory is already attached
to device->token at the time device_start is called.

- The primary motivation for this is to allow the device_start
function to make internal calls and pass the device_config *
around as if the object were fully constructed. Since the token
is used to indicate whether or not a device is live, this makes
the device "live" at the time device_start is called rather
than after it completes.

Moved per-screen initialization into DEVICE_START and per-screen
cleanup into DEVICE_STOP in the core video implementation.
[Aaron Giles]

Fixed render_target_get_minimum_size() to return nominal values
if no screens are found. [Aaron Giles]

Conerted the MPU4 driver to use an HD6845, as the Hitachi part was on the
PCB, while also using it to generate the VBLANK, rather than hardcoding
a value. Added the pulldown resistor to the network, and added all the
conditional inputs. Please note that on the later Cabinet Types (Ready
Steady Go-1 onwards), the 10p slot is locked out (location of the true
register for this is unknown), but the input setting is correct - you
have to use Coin 2 or higher to get money in. [James Wallace]

Removed machine from the parameters of some of the device_get_info
and device_set_info calls because that information is stored
with the device now. [Aaron Giles]

Changed device interfaces to pass the device_config * rather
than tokens and individual bits to the device callbacks. Updated
all existing devices accordingly. [Aaron Giles]

A number of changes to remove references to screens by index and
make the video system based strictly upon the screen devices:
[Zsolt Vasvari]

* changed vblank_state_changed_func to now have a device_config
argument
* removed runnning_machine as the first parameter of a VBLANK
callback
* removed video_data from running_machine
* private state screen information now hangs off the public one,
instead of the other way around
* combined video_global and video_private into a single structure
* moved populating screen_state from mame.c to video.c
* removed defstate; the default screen parameters live in
screen_config directly
* moved 'refresh' from public to internal video state and renamed
it to 'frame_period'
* changed all drivers that previously accessed 'refresh' to use
video_screen_get_frame_period()
* changed VIDEO_UPDATE signature to pass the screen device
* added const device_config *primary_screen to running_machine
* changed first argument of video_screen_* functions to take a
device_config; all callers that used 0 for the screen number now
use machine->primary_screen
* changed game info screen and overlay UI to display the screen tag
instead of screen number
* added video_screen_get_visible_area()
* changed render.c to use screen devices
* removed direct driver access to machine->screen[] array
* added video_screen_auto_bitmap_alloc(screen)
* the Dynax/Don Den Lover games now do their updating in VIDEO_UPDATE
instead of VIDEO_EOF. Seems to have fixed the palette problems
* hooked up swapped videoram in Karnov properly -- same idea as
Burger Time
* removed the public screen_state object -- all access is via
functions
* removed screen[] object from running_machine
* removed MAX_SCREENS constant -- there is no longer a hardcoded
upper bound

Changed the MC6845 to take and pass device_config's only. The
following shook out from this that are applicable to other devices
as well: [Zsolt Vasvari]
- running_machine is no longer taken, passed or stored
- mc6845_t is now private
- since passing device_config's is not device type safe, I added a
get_safe_token() to mc6845.c to check the device passed in for
the valid type.

Removed video_data from running_machine. Private state screen
information now hangs off the public one, instead of the other way
around. Combined video_global and video_private into a single
structure. [Zsolt Vasvari]

Converted address maps to tokens. Changed the address_map structure
to house global map-wide information and hung a list of entries off
of it corresponding to each address range. Introduced new functions
address_map_alloc() and address_map_free() to build/destroy these
structures. Updated all code as necessary. [Aaron Giles]

Fixed several instances of porttagtohandler*() in the address maps.
Drivers should use AM_READ_PORT() macros instead. [Aaron Giles]

ADDRESS_MAP_EXTERN() now is required to specify the number of
databits, just like ADDRESS_MAP_START. [Aaron Giles]

Removed ADDRESS_MAP_FLAGS() grossness. There are now three new macros
which replace its former usage. ADDRESS_MAP_GLOBAL_MASK(mask)
specifies a global address-space-wide mask on all addresses. Useful
for cases where one or more address lines simply are not used at
all. And ADDRESS_MAP_UNMAP_LOW/HIGH specifies the behavior of
unmapped reads (do they come back as 0 or ~0). [Aaron Giles]

Changed internal memory mapping behavior to keep only a single
address map and store the byte-adjusted values next in the address
map entries rather than maintaining two separate maps. Many other
small internal changes/cleanups. [Aaron Giles]

Changed MC6845 to take a screen tag instead of a screen number.
[Zsolt Vasvari]

Voodoo now takes a device_config for the screen. [Zsolt Vasvari]

Changed TMS34010 to take a screen tag instead of screen number.
[Zsolt Vasvari]

Removed cpu_scalebyfcount(). Changed input ports to register a frame
callback, which is called immediately after throttling and updating.
This is the proper "sync point" between emulated time and real time.
Moved all analog and digital port processing into a central place
here. Added tracking of time since the previous frame update and use
that as an estimate for the time of the current frame. This is used
to scale analog ports without the use of cpu_scalebyfcount(). This
is not perfect in the case where frame rates are dynamic (vector
games), but works well for other cases. [Aaron Giles]

Fixed VBLANK end time computation and video_screen_get_vblank() --
they weren't taking into account games that use
MDRV_SCREEN_VBLANK_TIME. [Zsolt Vasvari]

Changed slapstic management to always install an opbase handler to
more aggressively catch code executing in the slapstic region.
Updated all drivers to separate the slapstic region of ROM into a
different ROM section from the fixed ROM. [Aaron Giles]

Added some clock frequency changes which were documented in u4 but
which did not apply due to operator error. [Corrado Tomaselli]

Added layout to crop corners in Electric Yo-Yo. [Mr. Do!]

Added support for Sega Virtua Processor, to run Genesis/MegaDrive
version of Virtua Racing, intended to be used by MESS. It consists
of a CPU core SSP1601, and updates in megadriv.c: [notaz]
* SSP1601 replaces SSP1610, as it has been confirmed that SVP
actually contains SSP1601. The current SSP1610 is only a
placeholder (nearly completely unimplemented) anyway.
* Changed megadriv.c add a new driver for Genesis/MegaDrive+SVP
combination, also add SVP memory controller logic and memory map.

Phase 2 of the Deal 'Em input changes (these work well with the
default cabinet type, I need to do some conditional input work
to fix them fully), and also a conversion to the resnet code.
Unfortunately, this still doesn't fix the apparently needed
transparency. [James Wallace]

In asuka.c, created MACHINE_START( asuka ) to configure cpu2 banks
with memory_configure_bank(). All drivers support save states, with
the exception of cadash and clones, the background does not load
properly. [Mike Haaland]

Fixed M68000 build logic to only include it if enabled. [Fabio Priuli]

Source Changes
--------------
MC6845 updates: [Zsolt Vasvari]
* now signalling both 0->1 and 1->0 transitions of synching pins
* added mc6845_assert_light_pen_input; uses a timer for latching
the light pen address
* added reset device function
* implemented VSYNC height computation difference between the
Motorola and the Rockwell devices
* since the Commodore 40xx computers program an HSYNC width that
extends past the end of the scanline, I am clamping it in lack
of anything better to do
* added support for the Commodore 6545-1 device type
* added support for the status register
* better variable names
* more asserts

Changed the way VBLANK_INTs are handled:
- Defined a new MDRV_CPU_VBLANK_INT_HACK() (in deprecat.h) which is
a copy of the current MDRV_CPU_VBLANK_INT()
- Found all the places where VBLANK_INT is used with something other
than 1 interrupt per frame and changed it to the new macro
- Removed the "# per frame" parameter from MDRV_SCREEN_VBLANK_INT()
and added a screen tag in its place; updated all callers
appropriately.
- Added some validation of the interrupt setup to validate.c

Added the concept of device classes. Devices specify their class
in their get_info function. Classes can be used to walk through
devices at a more general level than their type. Functions have
been added to iterate through devices by class just as you can
by type. [Aaron Giles]

Removed some unused fields from device_config. [Aaron Giles]

Moved all video timing logic from cpuexec.c to video.c. Added a
video_screen_register_vbl_cb() function for registering VBLANK
callbanks. Changed inptport.c and debugcpu.c to make use the VBLANK
callbacks. Added video_screen_get_time_until_vblank_start(). I did
some fairly extensive testing, but this is a very signficant internal
change, so some things may have broke. [Zsolt Vasvari]

Changed z80dma to new device interface, updated mario.c and dkong.c
to use new interface. Illustrates how to keep existing memory
read/write handlers. This is slower than caching the device interface,
but does not have an impact on devices accessed at a low frequency
like in this case. [couriersud]

Fixed CCPU and QB3 to no longer rely on cpu_scalebyfcount(). Fixed
busted timing in the CCPU core. Changed watchdog to count internally
rather than using external watchdog support. Altered CCPU to accept
interrupt signals from the driver. Updated clocks in the cinemat
driver to be derived from the clock crystal. [Aaron Giles]

Normalized function pointer typedefs: they are now all
suffixed with _func. Did this throughout the core and
drivers I was familiar with. [Aaron Giles]

Added PORT_CHANGED macro which calls a callback if the given port
changes. Usage is very similar to PORT_CUSTOM. See the Astro Invader
driver for an example. [Zsolt Vasvari]

Removed input_port_set_changed_callback and converted all users to
PORT_CHANGED. The only difference between the old callback and the
ones supplied by PORT_CHANGED is that values passed by PORT_CHANGED
are normalized to start at bit 0, just like PORT_CUSTOM.
[Zsolt Vasvari]

Defined new set of memory handler functions which are similar but
which pass a const device_config * in place of the running_machine *.
These are called read8_device_func, etc. Added macros
READ8_DEVICE_HANDLER() for specifying functions of this type.
[Aaron Giles]

Added running_machine * to the device_config, live while the device
is live, and NULL otherwise, just like the token. [Aaron Giles]

Added new macros AM_DEVREAD, AM_DEVWRITE, and AM_DEVREADWRITE,
which specify device read/write handlers in address maps, along
with the type/tag of the device they reference. [Aaron Giles]

Converted MC6845 read/write handlers to READ/WRITE8_DEVICE_HANDLERs.
Updated all MC6845-using drivers to use the new macros and call
the updated functions. Removed the many little helper functions
that used to do this work. [Aaron Giles]

Makefile & build system update: [couriersud]
* verinfo: New syntax. verinfo now uses the following syntax:
verinfo.exe -b windows|winui|mess.
Does not depend on compile time defines any longer.
* makefile will include src/osd/$(CROSS_BUILD_OSD)/build.mak if it
exists. This was necessary to enable cross builds for winui.

Cloak & Dagger video code cleanup: [Zsolt Vasvari]
- resnet conversion - colors are now signficantly less saturated
because of the 1K pull-ups. This is noticable in the agent's coat
and the sky color, for example.
- Added bitmap palette selection based on the 128H line. Not sure
where this is actually used in the game.

Removed unnecessary machine->pens[] lookups in a large number of
drivers. [Zsolt Vasvari]

drawgfx.c improvments: [Zsolt Vasvari]
- Added some asserts to drawgfx and drawgfxzoom
- Moved some variable declarations so that they are only visible
where they are actually used

Removed 8bpp bitmap support from drawgfx. [Zsolt Vasvari]

Removed MDRV_PALETTE_LENGTH from vector games, which would trigger
an assert in emupal.c (debug build) [couriersud]

Added new module: tokenize.h. This centralizes the behavior of
tokenizing data structures, as currently used by the input port
system. Redid the input port tokenization to be more compact and make
use of the new macros. Added support for designated initializers in
C99 and GCC builds to enforce type safety. [Aaron Giles]

Converted MACHINE_DRIVER definitions from function constructors to
tokenized lists. For the most part this is a non-invasive change,
except for those drivers using MDRV_WATCHDOG_TIME_INIT. In order to
allow for tokenization of attotimes, a set of new macros is provided
called UINT64_ATTOTIME_IN_x() which follows the same pattern as
ATTOTIME_IN_x() but packs the attotime down into a single 64-bit
value for easier tokenization. Fixed several errors in the machine
drivers which were caught by the additional checks now done in the
machine config detokenization code. [Aaron Giles]

Converted speakers into devices. Machine->config no longer houses
an array of speakers; instead they are iterated through using the
new macros (defined in sound.h) speaker_output_first() and
speaker_output_next(). Updated all relevant code to do this.
[Aaron Giles]

Added typedefs for all the machine config callback functions at the
top of driver.h. [Aaron Giles]

One-line fix for the z80pio. At the moment when the interrupt control
word is sent (with interrupts enabled), an interrupt occurs. In
reality, interrupts are disabled until the interrupt mask byte is
sent. [Robert]

Source Changes
--------------
csk.c driver improvements: [Mirko Buffoni]
* Added DIPLOCATION macros to all Dip Switches. All DSW are verified
through test mode.
* Fixed custom_io_r which is used for protection but also for
keyboard input.

Converted SNES (except debug code) to RGB32 as it was a serious
abuser of the palette system. [Zsolt Vasvari]

Added colortable_palette_get_size() to emupal. Added some more
asserts to catch errors. [Zsolt Vasvari]

Fixed Dip Switches (especially coinage) and inputs for 'mpatrol' and
'troangl' (and their clones). Tried to "unify" the two drivers (I
still think that some things can be merged). Added iremipt.h source
file (same purpose as taitoipt.h). Fixed Dip Switches and inputs for
'alpha1v'. The game is now more playable to me but I left the
GAME_NOT_WORKING flag as I think there are still some things to look
at). [stephh]

Changed IREM cpu decryption to be 'real-time' (it's a feature of the
CPU). Moved decryption table setup to 'config' struct for the CPU.
Added latest tables from robiza, making Risky Challenge playable,
promoted it to working. Told CPU core to not decrypt code after
brkn instruction, enabling it again on iret, allowing me to remove
several 'don't decrypt range' hacks in the code. Updated all drivers
accordingly. Currently the disassembly is a bit weird now, this will
need looking at. [David Haywood, robiza]

Added and hooked up AICA (Naomi sound chip). Naomi boot sounds now
play. Since it's an SCSPx2 with ADPCM instead of FM it's already
feature-complete except filter envelopes. A bug in the ARM7 core
causes incorrect pan/level values to be computed in e.g. the Naomi
SOUND TEST menu. This is not a defect in the AICA.
[ElSemi, Deunan Knute, kingshriek, R. Belmont]

Fixed Dip Switches (especially coinage) and inputs for '10yard' (and
its clones). Tried to "unify" the driver with m52 and m57 drivers
(I still think that some things can be merged). [stephh]

Minor code cleanups. Added static/const where appropriate, plus some
include fixes. Reverted some of the changes to build.mak from u1
which made some MSVC builds fail, and adjusted/optimized an m10.c
gfx_layout. Added some missing cores to cpuintrf.c, sndintrf.c and
added some missing #if's to 5220intf.c. [Atari Ace]

Fixed one or two dips in the mirage.c driver and found the "service"
switch and likely start of inputs. [Brian Troha]

Removed expand_machine_driver(). Replaced with machine_config_alloc()
and machine_config_free(). Updated all call sites. Normalized info.c
style and simplified some of the code. [Aaron Giles]

Renamed machine->drv to machine->config to reduce overloading of the
term "driver". [Aaron Giles]

Simplified collision detection in taitosj and tank8. [Zsolt Vasvari]

New module: devintrf.c/.h. Implements a generic device interface
similar to the sound and CPU interfaces. [Aaron Giles]

New module: mconfig.c/.h. Moved all machine_config and MDRV_* macros
here, out of driver.c/.h. Added MDRV macros for adding/removing/
configuring devices. [Aaron Giles]

Deprecated the following constants because global constants that
pretend to document things but which are only guesses are dumb:
- DEFAULT_60HZ_VBLANK_DURATION
- DEFAULT_30HZ_VBLANK_DURATION
- DEFAULT_REAL_60HZ_VBLANK_DURATION
- DEFAULT_REAL_30HZ_VBLANK_DURATION
- DEFAULT_60HZ_3S_VBLANK_WATCHDOG
- DEFAULT_30HZ_3S_VBLANK_WATCHDOG
Updated all drivers to explicitly specify the equivalent bogus
times. Added comments for the "REAL" VBLANK durations to indicate
that they are not accurate. [Aaron Giles]

Verified clocks on Rainbow Islands and Rambo 3 and Raiden 2. Reverted
sound OSC of Truxton 2 to 27mhz/8 since the original OST runs at this
speed. The pcb I measured the previous clock was 28mhz/8 and it's a
different pcb version from the common one. Since mame doesn't support
multiple OSC I prefer to use the 27mhz one. [Corrado Tomaselli]

Fixed some incorrect rom dumps for Double Dragon 3 (Some of the dumps
were based of the bootleg and not the original.) and updated the name
and location to actually match that of a real board. [Kevin Eshbach]

Added DIP locations to Combatribes and Battletoads. [Kevin Eshbach]

Added video_screen_update_now(int scrnum) to force a screen update up
to the current beam position. [Zsolt Vasvari]

Pulled remaining vestiges of old-style colortables: [Aaron Giles]
* PALETTE_INIT no longer has a colortable parameter
* removed game_colortable and remapped_colortable from machine_config
* updated a few stragglers that still referenced these fields
* removed tile_draw_colortable from tilemap.c

Changed the input port tokens to use a union instead of casting
everything to FPTR. In the future, C99-enabled compilers will be able
to achieve type safety with designated initializers. [Aaron Giles]

Removed the per-screen palette_base. This was an idea that never
really worked out, nor have we really needed it. [Aaron Giles]

Defined a new device type VIDEO_SCREEN. Currently this has no
live functionality, but merely serves as a placeholder/identifier
for video screens. Eventually some of the screen management code
may move into the start/stop/reset functions. [Aaron Giles]

Changed MDRV_SCREEN_ADD to specify a screen type (RASTER, VECTOR,
LCD for the moment). Removed the older VIDEO_TYPE_RASTER and
VIDEO_TYPE_VECTOR; this information is now determined by walking
the screen list. [Aaron Giles]

Changed MDRV_SCREEN_* macros to build up VIDEO_SCREEN devices
rather than storing values in the screen[] array. Removed the
screen[] array from machine_config. Modified all code referencing
Machine->config->screen[] and changed it to iterate over the devices
using the new video_screen_first() and video_screen_next()
functions. [Aaron Giles]

Removed implicit screen #0. This means that ALL DRIVERS MUST
EXPLICITLY DECLARE THEIR SCREENS. Updated all drivers to do
so. While there, grouped all MDRV_SCREEN_* parameters together.
Also removed unnecessary VIDEO_TYPE_RASTER and VIDEO_TYPE_VECTOR.
Also removed VBLANK and bitmap format information from vector
games. This was painful and very tedious. [Aaron Giles]

Changed game information to display info about all screens.
[Aaron Giles]

Fixed some arkanoid clones INPUT_PORTS definitions that were curiously
using PORT_START_TAG("DSW") instead of PORT_MODIFY("DSW"). [stephh]

Fixed DIP switches and inputs for all games in cvs.c. [stephh]

Added HOTD2-specific BIOSes. [Arzeno Fabrice]

Added more accurate emulation of the priority system and the beam
logic in stactics. Removed color table. Centered crosshair. Used
proper game orientation. Unified memory maps. Switched game to use the
artwork system. Set GAME_IMPERFECT_GRAPHICS until artwork is created.
[Zsolt Vasvari]

Used PORT_SERVICE and PORT_SERVICE_NO_TOGGLE macros when it was
possible. [stephh]

In the cps2 driver, Changed the GAME definitions to reflect how many
players and how many buttons there are for each game. Rewrote the
INPUT_PORTS definitions to use PORT_INCLUDE, PORT_MODIFY and
PORT_CUSTOM macros. Added a few notes about the inputs when I thought
they were needed to avoid wrong bug reports. Started to clean the
driver. [stephh]

Fixed kangaroo colors by assuming an inversion not present in the
schematics. [Nicola Salmoria]

Added the ability to pass absolute paths to mame_schedule_save() and
mame_schedule_load(). [Nathan Woods]

Naomi/DC updates: [Samuele Zannoli]
- Add SH4 I/O ports
- Connected the 93C46 of the naomi and the x76f100 of the rom board
and filled them with dummy data to satisfy the BIOS
- Implemented some of the JVS transfers that will be needed to use
the controls
- Implemented ROM board DMA
- Set proper NAOMI RAM sizes (32 MB main, 8 MB for AICA)
- Improved PVR-TA graphics emulation