0.88 2004/10/24 [#209 - David Haywood] -------------------------------------- New Games supported or promoted from GAME_NOT_WORKING status: ------------------------------------------------------------- BMC Bowling [Tomasz Slanina] (missing music, some wrong gfx) F1 Grand Prix Star II [Brian Troha] (roms redumped) Field Combat [Tomasz Slanina] (bad sprite colours) Gallop Racer 3 [smf] (sound problems) Greyhound Selection [Pierpaolo Prazzoli] Mighty Warriors [Pierpaolo Prazzoli] (some sprite problems) Sonic Boom [Charles MacDonald, Nicola Salmoria] Tank 8 [Stefan Jokisch] Twins [David Haywood] (missing EEPROM) New Clones supported or promoted from GAME_NOT_WORKING status: -------------------------------------------------------------- Astro Blaster (version 2a) [MASH] Greyhound trivia (alt questions) [Pierpaolo Prazzoli] Tetris (Sega) (2 encrypted sets) [Charles MacDonald, Nicola Salmoria] Wonderboy 3 (2 encrypted sets) [Charles MacDonald, Nicola Salmoria] New Non-Working games / clones supported ---------------------------------------- BC Story (set 2) [David Haywood] (more protection issues?) D.D. Crew [Charles MacDonald, Nicola Salmoria] (some issues with system18 emulation) Dynamite Dux (original) [Charles MacDonald, Nicola Salmoria] (some issues with system16 emulation) Skelagon [Mash] (Bad rom) Super GX [Mash] (Bad rom) Virtua Formula (same issues as VR) Source changes: --------------- - Added runtime option to disable validity checks: Added run time option [Derrick Renaud]. - Emulation of 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 http://cgfm2.emuviews.com/ 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.) [Charles MacDonald - extracting data from CPUs, Nicola Salmoria - decryption code]. - Fixed OKI banking in Fixeight bootleg [Quench]. - Fixed some c99 related compiler issues [Jeff Mitchell, Lawrence Gold]. - Fixed some problems in 'Steel Force' [Pierpaolo Prazzoli]. - Update to ppmast93 driver, still not playable [David Haywood]. - Misc fixes from Mame32Plus: * 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. - I960 and Model 2 update [R.Belmont, ElSemi]: * 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. - Discrete sound changes [Derrick Renaud]: * Continued cleanup of code to make it more readable. * 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. * polaris: Complete sound rewrite to use new component value code. Hooked upwatchdog timer. - New watchdog functionality [Derrick Renaud]: * 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 propertime using new MDRV_WATCHDOG_VBLANK_INIT function. * galpania, galpanib: Changed to MDRV_WATCHDOG_VBLANK_INIT because these games need watchdog init at game start. * 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 usedonly. * MDRV_WATCHDOG_VBLANK_INIT(watch_count)- Initializes the watchdog in MACHINE_DRIVER watch_count is the # of vertical blanking intervals before aforced reset. If the time is unkown then you can use these defaults: DEFAULT_60HZ_3S_VBLANK_WATCHDOG or DEFAULT_30HZ_3S_VBLANK_WATCHDO * 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. -[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. - Fixed voodoo code broken by cleanup in u3 [Aaron Giles]. - Fixed qdrmfgp broken by cleanup in u3 [Olivier Galibert]. - Fixed cut and paste error in chdman [René Single]. - Fixed mayday inputs [Stefan Jokisch]. - Fixed Puzzle Club dips [Brian Troha]. - Input Port System update [Aaron Giles]: * 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 themwith new stuff. I also added a few new functions: * readinputportbytag_safe() takes a tag and a default value. If the tag is notfound, 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) and 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. - Memory system changes/fixes [Aaron Giles]: * 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 me. - More changes [Derrick Renaud]: * firetrk, montecar - added proper CPU clock frequency change when going in/out of service mode. * 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. Thenreading the clock speed will give 1MHz, because clock scaling is transparent to the driver. * Returns the current CPU's actual unscaled running clock speed int cpunum_get_clock(int cpunum). * Sets the current CPU's clock speed and then adjusts for scaling void cpunum_set_clock(int cpunum, int clock).