IMPORTANT NOTE: As of this release of MAME, several important things
about the system have changed. Please read the following items before
attempting to compile this new version.
1. A new tool chain for Windows, based off of gcc 4.4.3 prerelease,
is now REQUIRED. Go to http://mamedev.org/tools to get the new tools.
The updated included with 0.136u1 WILL NOT BUILD with the old tools.
The new tool chain has support for building 64-bit MAME builds with
gcc, as well as built-in DirectX headers, and C++ support, which was
missing from the old tools.
2. Non-Unicode builds of Windows MAME are no longer supported. The
options to turn this off in the makefile have been removed, and
future changes are likely to solidify this requirement. If you are
still (God forbid) running on Win9x, you will need the unicows.dll
library to run MAME. Download unicows from Microsoft.
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. For the most
part, there is no effect on how drivers are written, except for some
nicer accessors to devices and address spaces. Future improvements to
take advantage of the C++ syntax will evolve slowly, and will be done
internally. We are not interest in outside attempts to do this work
4. The SDL OSD for MAME is now shipped as part of the main source
package. SDL builds for Windows are now regularly built as part of the
validation sequence for a new release. Thanks to R. Belmont,
couriersud, and Olivier Galibert for their work on the SDL port over
MAMETesters Bugs Fixed
: [DIP/Input] zoar: The cabinet UPRIGHT dipswitch is not
: [Multisession] All sets in crystal.c: Multisession Crash
: [Crash/Freeze] gunbird2: crashes during the 4th level boss
fight (North Pole) when using Vampiro. (PsikyoFan)
: [Crash/Freeze] gekisha: Unknown DIP 4-2 toggles Auto Tsumo
after Reach. If it is enabled and declare Reach, MAME crashes.
: [DIP/Input] ckongg: Coinage settings are wrong. (stephh)
: [DIP/Input] ckongg: Coinage settings shown on screen don't
correspond to actual settings (stephh)
: [Graphics] crzrally, crzrallya, crzrallyg: Default high
scores are incorrect (Pierpaolo Prazzoli)
: [Graphics] matmania: Graphical corruption (M.A.S.H.)
: [Speed] quasar: Massive slowdown (Quench)
: [Speed] laserbat, catnmous: Massive slowdown (Quench)
: [Interface] Hitting F6 without -cheat trigger causes crash
: [Graphics] raiders, spacefrt: Background star field is
missing (Fabio Priuli)
: [Core] dino, punisher, wof and clones: NVRAM saves correctly,
but doesn't reload any changes made (Fabio Priuli)
: [Compiling] unidasm fails to link when ldplayer is the
specified target (Aaron Giles)
: [Graphics] mikie, mikiej, mikiehs: Possible priority issue
on game completion (robiza)
: [Graphics] daraku: Graphic Issues at region warning and
during super move. (PsikyoFan)
: [Misc.] s1945iii: At the very last boss, MAME popup a message
: [Crash/Freeze] kinst, kinst2: Game hangs at black screen with
32-bit build (Aaron Giles)
: [Core] Any EEPROM with an 8-bit data bus is not being saved
correctly (Aaron Giles)
: [Graphics] solomon, solomonj: Graphics Bugs
hng64 improvments [Andrew Gardner]
- 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.
RSP DRC changes: [Aaron Giles]
- fixed misaligned 32-bit accesses
- disabled DRC_SQV implementation as it breaks music in mtetrisc
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. [Aaron Giles]
Added more decrypted opcodes to cb2001. [robiza]
Added driver data struct to cave.c. [Fabio Priuli]
Changed inline_config to be allocated separately to avoid alignment
issues. [Aaron Giles]
uPD7801 core changes: [Wilbert Pol]
- 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.
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.
Base tilemap hook-up for cb2001. [Angelo Salese]
Fixed the gfx rom loading for Race Drivin' Panorama [David Haywood]
Vs. Net Soccer improvements:
- Emulated DMA protection for startup-checks [Olivier Galibert]
- Fixed Data ROM loading, game now boots [David Haywood]
- Marked Sprite + Sound ROMs as BAD_DUMP [David Haywood]
Converted the goldstar, liberate, sidearms and sidepckt drivers to use
driver_data [Atari Ace]
Makefile changes: [Aaron Giles]
- 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
- 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')
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.
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. [Aaron Giles]
[PIT8253] Update PIT counter even if there was no elapsed cycles (this
only affects fast drivers like at586 in MESS). [Miodrag Milanovic]
Fixed a bunch of minor quirks, and fixed gfxs in the dwarfd driver.
Changed berlwall, arkanoid, bakubrkr, mgcrystl to use YM2149.
Verified and corrected clocks in halleys and exctsccr.
Add support for Mahjong panel for mjgtaste. Makes this the default
input and alters 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. [PsikyoFan]
Fix zeroize protection simulation in lieu of proper dongle dump.
Adds missing sample rom to Gals Panic 4 (Korea)
[Brian Troha, Dumping Union]
misc Konami wip: [Fabio Priuli]
* 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
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.
Fixed knights rom labels [Dlfrsilver]
Metal Maniax improvements [Phil Bennett/luigi30]
* 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 [Phil Bennett]
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. [Atari Ace]
Added driver data struct to taitoair.c and taito_b.c. [Fabio Priuli]
VIA6522: Refactored interface to use READ/WRITE_LINE. [Curt Coder]
Cyber Tank improvements: [Angelo Salese]
* Fixed bitplane order
* Decoded sprite gfx format
* Hooked up the two bg tilemaps
* Wrote bare-bones video emulation for the Cyber Tank sprite chip /
* Added video boundary checks for the blitter
The starting value for an output port is now 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
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. [Fabio Priuli]
Renamed mamecore.h -> emucore.h. [Aaron Giles]
New C++-aware memory manager: [Aaron Giles]
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
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.
Added driver data struct + save states to darius.c & othunder.c.
Added driver data struct to ninjaw.c, slapshot.c, warriorb.c, wgp.c.
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]
Major header file cleanup: [Aaron Giles]
- 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.
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.
Added nicer functions for finding devices, ports, and regions in
a machine: [Aaron Giles]
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.)
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!) [Aaron Giles]
Added a PCM sample end/loop callback to the RF5C68 core
galaxold update: [stephh]
- Renamed set kkgalax to ckongmc
- Changed descriptions for ckongg and ckongmc
- Fixed dip switches and inputs for ckongg and ckongmc
- Updated ckongmc memory map
Added the mameconfig version to the -listxml output [Oliver Stoneberg]
Implemented inputs and sound in Gunpey [Luca Elia]
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. [Aaron Giles]
Implemented basic blitter support in Gunpey [Tomasz Slanina]
Converted Gunpey to use RGB pens instead of hardcoded palette table
Enforce that numbers are all the same exact width when loading fonts.
Fixed a bogus protection check in Victor 21 [Angelo Salese]
Fix assert for prmrsocr + clones - no whatsnew needed [Fabio Priuli]
Redumped program and sprite roms in Cyber Tank [Antonio Gonzalez Jr.]
Added a mostly-complete SunPlus u'nSP core based on the one in
Segher's "Unununium". [Harmony]
Add 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. [PsikyoFan]
Verified clocks on Poker Ladies and changed Z80 clock of Mahjong
Gakuen from 6Mhz to 8MHz to match the other Mitchell hardware games
i386: Improved accuracy of the various emulated models, makes CPU
detection programs detect the correct CPU (in MESS). [Dirk Best]
- 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
- emulated the undefined flag behavior for the DIV/IDIV instructions on Intel CPUs
SDLMAME: improved OS X and SDL 1.3 SVN support, try to autodetect
SDLMAME targets [Couriersud]
SDLMAME: add BGRA support to -video soft [couriersud]
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.
[Lord Nightmare, Kold666, PlgDavid]
SDLMAME makefile improvements: [couriersud]
- Fix 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
Fixed a number of compiler bugs found by PowerPC MacOS X. [R. Belmont]
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.
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.
YM2612: More accurate LFO implementation and channel clipping
[Eke-Eke, Nemesis, R. Belmont]
New games added or promoted from NOT_WORKING status
Multi Game (Tung Sheng Electronics)
New clones added
Exciting Soccer (Japan set 2) [Corrado Tomaselli]
[Brian Troha, David Haywood, Dumping Union]
Mega Blast (US)
[D. Beneke, hap, Smitdogg, Dumping Union]
New games marked as GAME_NOT_WORKING
Fun Station Spielekoffer 9 Spiele
Quarter Horse [Ruben Panossian, Angelo Salese]
[tormod, Team Europe, Smitdogg, The Dumping Union]
Bega's Battle [Angelo Salese]
Computer Quiz Atama no Taisou [Chack'n, Team Japump]
Track & Field (NZ Bootleg?) [Siftware, Tafoid]