- New games: Poosho Poosho and Tekken Battle Scratch and 'unknown 'Space Invaders' gambling game'
- New Working games: Football Power, Night Gal Summer, TH Strikes Back and Virtua Bowling (Hong Kong, V101HJS)
- New Non-Working games: Konnano Hajimete! (Japan), Magic Reels, Nurete Mitaino... - Net Idol Hen (Japan), Sengoku Mahjong Kurenai Otome-tai (Japan) and Sexy Gal Tropical [BET] (Japan 850805 SXG T-02), Super Game (Sega Master System Multi-game bootleg) (alt games)
- New clones: 1943: Midway Kaisen (Japan), Alligator Hunt (unprotected, set 2), B.Rap Boys Special (World), Carrier Air Wing (USA 901130), Crash Road (bootleg of Space Chaser), Crazy Climber (US set 2), Crime Fighters 2 (Japan, 4 Players, ver. N), Daiku no Gensan (Japan, M82), Dirt Devils (Japan, Revision A), DoDonPachi III (World, 2002.05.15 Master Ver), Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 2), Mega Zone (program code L), Ordyne (World), Popeye (Japan, Sky Skipper hardware, Older), Port Man (Japan), Print Club (World), Street Fighter (World) (protected), Street Fighter II: The World Warrior (Quicken, bootleg), Super Chase - Criminal Termination (1992/01/18 18:29:18 CHASE 3 VER 1.3O, prototype), Trigger Heart Exelica (Japan) (GDL-0036), Vamf x1/2 (Europe, version 1.0.0903), Virtua Fighter 4 Evolution (Version B) (Japan) (GDS-0024C) and WWF Superstars (US revision 6)
- New AGEMAME games: Honey Pot (03J00241, NSW/ACT), Koala Mint (CHG1573, US) and Venice (02J02056, Venezuela)
- New PinMAME games: Goldeneye (4.02) and Star Wars (1.06, Display S1.05)
- Removed games: Koala Mint (CHG1573, US, set 2)
- New drivers: magreel.cpp
- New devices: cd4099, f9334, hc259, hct259, ipt_merge_all_hi, ipt_merge_all_lo, ipt_merge_any_hi, ipt_merge_any_lo, ls259, mb8421_mb8431_16, taitoio_yoke and tmpz84c015
- HD44801 CPU: Workaround related to MT #06638 (Exception when using -debug); this disables a poorly implemented disassembly feature to prevent assertion failures and crashes when debugging drivers using HD44801 CPU (champbas.cpp, equites.cpp and shougi.cpp). Get rid of next_pc tables (cpu\hmcs40\hmcs40d.cpp)
- I386 CPU: Created explicit i386dasm include for x86 DRC
- I8086 CPU: Added support for IF status and segreg address spaces
- M6502 CPU: Updated opcodes list (om6502.lst). Note: Passes now the Lorenz testsuite-2.15's cputiming.prg and does not break laxay.prg. Ref: NMOS 6510 Unintended Opcodes no more secrets (v0.91 - 24/12/16) http://csdb.dk/release/?id=152327
page 14 ($BF) cycles = 3 to read and 4+1 if page boundary.
- MC68340 CPU: Added implementations for VCO clock synthesizer and Timer module Counters, IRQs and one operational mode.
- V25 CPU: Make IDB register state visible to debugger
- Irem M72 Audio: ACCESSING_BITS cleanup (m72_audio_device; m72.cpp, m90.cpp, shisen.cpp and vigilant.cpp)
- MSM5205 and MSM6585 sound: Delay data capture timing (should help with synchronization later)
- Seibu Sound System: Use 8-bit handlers for main CPU accesses (audio\seibu.cpp)
- Sound Interface
. Soundlatch modernization in amspdwy.cpp, brkthru.cpp, btime.cpp, buggychl.cpp, dassault.cpp, dec0.cpp, flstory.cpp, gaelco.cpp, lsasquad.cpp, m107.cpp, madalien.cpp, nycaptor.cpp, progolf.cpp, rpunch.cpp, shangha3.cpp, sidepckt.cpp, splash.cpp, tagteam.cpp, tbowl.cpp, toaplan2.cpp and tubep.cpp
. Synchronize machine\gen_latch.cpp at start to ensure broadcast of initial "not written" state. This fixes sound in Onna Sanshirou and makes the N.Y. Captor hack unnecessary.
- Yamaha YMW-258-F sound: Confirmed Sega/Yamaha 315-5560 MultiPCM as Yamaha YMW-258-F
- YM2151 sound: Added reset line handler
- 8259 PIC: Removed hack used by M92 driver (HACK_get_base_vector(); machine\pic8259.h)
- HuC6260 video: Fixed B&W mode in (MESS) PC Engine 'Son Son II' causes total palette corruption (ID 06641)
. Changed a pointer to a reference and fixed a std::string(nullptr) bug (imgtool\imgtool.cpp)
. Proper cleanup of floppy object after create/open failure (imgtool\iflopimg.cpp)
. Merged normalize_filename() into cannonicalize_path() and C++-ification
. Eliminated Imgtool-specific rand() function. Changed another charconverter access.
. C++-ification of imgtool_forkent structure
- Irem Custom: VCK modernization and removed unnecessary subdevice resets (audio\irem.cpp and sound\msm5205.cpp; m52.cpp, m57.cpp, m58.cpp, m62.cpp and travrusa.cpp)
- MOS6526 CIA: Updated MOS6526. Some new demos and song uses CIA1/CIA2's timer values and serial shift register as code to execute. In order to properly debug what is doing on one needs the debugger to _see_ at least some of those values, hence the "if (machine().side_effect_disabled())" on select registers only.
. New 74LS259/9334/CD4099 devices
. These humble 16-pin logic devices were commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings.
. Added coin counters and/or lockouts to Atari System 1 games, Basketball, Gauntlet, Gyruss, Hana Yayoi, Hole Land, Jr. Pac-Man, Mahjong Sisters, Pooyan, Roc'n Rope, Squash, Thunder Hoop, Time Limit, Time Pilot '84 and many others. This also cleans up coin counter behavior in Sauro and Rally Bike.
. Note: The purpose of committing this change, which has been several months in the making, early in the 0.189GIT cycle will be to allow time for fixing potential regressions; I've fixed a number of drivers that lost sound from this for various reasons (hnayayoi.cpp having missing or garbage ADPCM was particularly painful, since the three games in that driver all work slightly differently), but I can't test all affected drivers exhaustively. @Tafoid, don't bother running automated screen capture comparison tests on this, as many drivers are now expected to have the screen flipped for the first few seconds after reset.
. Make 74LS259 configuration member const, avoid Object and object distinguished only by case in one line, use MAME_ prefix on all include guards to make it easier to deal with them in -dM (dump preprocessor macros) output.
. Added 74LS259 device to ambush.cpp, asteroid.cpp, atarisy1.cpp, bagman.cpp, cclimber.cpp, centiped.cpp, champbas.cpp, changela.cpp, cinemat.cpp, circusc.cpp, cloak.cpp, cloud9.cpp, clshroad.cpp, cortex.cpp, crgolf.cpp, ddenlovr.cpp, dynax.cpp, equites.cpp, fastfred.cpp, firefox.cpp, freekick.cpp, funkybee.cpp, gaelco.cpp, gaelco2.cpp, gaelco3d.cpp, galaga.cpp, gauntlet.cpp, gladiatr.cpp, glass.cpp, gng.cpp, gomoku.cpp, gridlee.cpp, gyruss.cpp, harddriv.cpp, hnayayoi.cpp, holeland.cpp, hyperspt.cpp, jedi.cpp, joctronic.cpp, jp.cpp, jpms80.cpp, jrpacman.cpp, junofrst.cpp, kchamp.cpp, kyugo.cpp, ladybug.cpp, liberatr.cpp, looping.cpp, m63.cpp, mappy.cpp, marineb.cpp, mario.cpp, mastboy.cpp, megazone.cpp, mermaid.cpp, mikie.cpp, mirax.cpp, mjsister.cpp, mouser.cpp, nemesis.cpp, pacman.cpp, pandoras.cpp, pengo.cpp, playch10.cpp, polepos.cpp, pooyan.cpp, punchout.cpp, rallyx.cpp, retofinv.cpp, rocnrope.cpp, rollrace.cpp, sauro.cpp, sbasketb.cpp, shangkid.cpp, shougi.cpp, skyarmy.cpp, slapfght.cpp, sonson.cpp, spcforce.cpp, splash.cpp, stactics.cpp, targeth.cpp, thepit.cpp, thoop2.cpp, timelimt.cpp, timeplt.cpp, toaplan1.cpp, tomcat.cpp, tp84.cpp, trackfld.cpp, tsamurai.cpp, tubep.cpp, turbo.cpp, tutankhm.cpp, vastar.cpp, warpwarp.cpp, wiping.cpp, wrally.cpp, xorworld.cpp, zaccaria.cpp and zaxxon.cpp
. Added 74HC259 device to de_3.cpp (video\decodmd1.cpp) and neogeo.cpp
. Added F9334 device to avalnche.cpp, bsktball.cpp, canyon.cpp, copsnrob.cpp, destroyr.cpp, dragrace.cpp, flyball.cpp, orbit.cpp, sbrkout.cpp, skydiver.cpp, sprint2.cpp, sprint4.cpp, sprint8.cpp, starshp1.cpp, starwars.cpp, subs.cpp, triplhnt.cpp and ultratnk.cpp
. Added CD4099 device to tankbatt.cpp
. Driver and audio cleanups for asteroid.cpp, avalnche.cpp, copsnrob.cpp and playch10.cpp
. dynax.cpp: Fixed blitter IRQ acknowledgment in most games. Use bankdev for gekisha and tenkai.
. jp.cpp: Added ADPCM sound system used by some game
. mappy.cpp: Clean up I/O handlers. Don't pulse the reset line when it's already being asserted. This allows Mappy and Pac & Pal to boot again (machine\namcoio.cpp).
. mario.cpp: Added coin counters
. spcforce.cpp: Added coin counters, start lamps and addressable latch device.
. starwars.cpp: Put 'esb' bank2 in memory map so DEVCB can find it
. tankbatt.cpp: Improved handling of sample triggers (fire sound is no longer doubled)
- uPD4701 counter: Added read-triggered X reset & Y reset routines to device
- V-System C7-01 GGA: Document some pins and clocks
- Voodoo GFX: Updated comments for PCI config registers (video\voodoo_pci.cpp)
- aerofgt.cpp, f1gp.cpp, pipedrm.cpp, rpunch.cpp, tail2nos.cpp and welltris.cpp: Clock all Video System GGAs
. Driver update. Fixes some sets.
. Redumped Koala Mint
- atlantis.cpp: Use standard way of handling keypad inputs
- bublbobl.cpp and missb2.cpp
. Reimplemented sound cpu semaphores and sound NMI according to schematics.
. Implemented sound semaphores into Tokio / Scramble Formation as well, fixing SOUND ERROR in test mode. Added notes about sound cpu addressing.
. Reimplemented /SRESET as a separate function called on sound cpu reset according to schematics.
. Added correct watchdog to Bubble Bobble and Tokio and disabled it on clone Bubble Bobble (prototype on Tokio hardware).
. Added proper 'wired-or' sound cpu IRQs to Bubble Bobble. Renamed 'slave' cpu to 'subcpu' to match schematics.
. Added NMI back to Miss Bubble II. Fixed some potential reset issues and made 'soundnmi' a required device.
- bwing.cpp: PSG and DAC correction
- csplayh5.cpp: Added dipswitches
- dec8.cpp: Sound IRQ timing from schematics; eliminate timer_set.
. Rewritten interrupt handling. Input repetition removal and labels.
. Locked 'n Loaded: Improved X axis gun input. Added raw_params and fixed second OKI frequency, matching other games in the driver. Improved lightgun support. Note: It's now possible to actually play the game to some extent assuming you recalibrate the guns by holding both service buttons. Game randomly crashes tho so not yet markable as working.
. Major improvements to colors and graphics layer priorities
. Implement the PRI2 pen modification effect. This makes the tunnels and headlight in Highway Chase look much more accurate, and makes some color changes work in Astro Fantasia.
. Shadow color in Skater is now properly black (not a pen modification effect)
. Correct background fill color, making high score screen in Super Doubles Tennis properly blue.
. Reduced log spam in Mahjong Gekisha. Added alternate flyer title note: Mahjoung Exposé.
. Changed CPU type to TMPZ84C015 in mjelctrn, mjembase, majxtal7 and neruton and improved interrupt handling
. Use address map bank device for most games in this driver. Many of these games will now successfully retrieve the local time at the start through an RTC device previously treated as read-only.
. Added blitter IRQ ack to Mahjong Tenkaigen; doesn't fix interrupt problems.
. Fixed CPU communication issue that sometimes caused sound to disappear entirely
. Eliminated NMI trampolines
- fromance.cpp: Use gen_latch and added GGA clocks
. Added some workarounds to Play 2000 so that it actually boots. Fixed gfx rom loading.
. Bang! supposed to have not PORT_IMPULSE
. Increased TMS ROM region, makes Football Power players models visible.
. Added analog inputs. Better Football Power ball mechanic simulation (Game now playable).
. Fixed EEPROM access (MCFG_EEPROM_SERIAL_ENABLE_STREAMING)
- gaiden.cpp: Acknowledge main IRQ
- galaxia.cpp: Restored original refresh rates to Galaxia/Astro Wars, fixes wrong sound for time being. Speed issues still need to be figured out, perhaps something relating to S2650 interrupts?.
- galpanic.cpp and kaneko16.cpp: Disentangle dependencies
. Decrypted clone Virtua Bowling (Hong Kong, V101HJS) and added its own bitswaps for IGS003 and IGS011
. Found dipswitches to perform a protection test in Virtua Bowling. Changed IGS012 mode toggling to pass the test.
. Changed IGS003 command 48 in Long Hu Bang II and Virtua Bowling to potentially work in more cases (based on Long Hu Bang II tables)
- jangou.cpp and nightgal.cpp
. Rewritten blitter setters (video\jangou_blitter.cpp)
. Fixed Night Gal Summer GFX ROM out of bounds accesses. Fixed rom loading. Added preliminary protection emulation (Game now playable).
. Fixed gfxs for Sexy Gal and clone Sweet Gal
. Further organizational cleanups
. Removed shadowing RAM with ROM in sound CPU.
- m107.cpp: Removed IRQ hacks
- midvunit.cpp: Better documentation for Midway V-Unit wheel board. Added part numbers.
- mlanding.cpp and taitoair.cpp
. Written a new device for Taito Yoke based inputs, i.e. ones found in Midnight Landing and Top Landing.
. Added screen raw parameters to Taito Air System, fixes pilot acknowledge sound sample timing. Mark missing Mecha rom as undumped.
. Added coin counters and Yoke device to Midnight Landing, fixed throttle counter (it's 12 bits).
- naomi.cpp: Atomiswave security notes (machine\awboard.cpp)
. Changed CPU type to TMPZ84C015 in Janputer '96 and Janputer Special (Japan). Changed drive interrupts through internal CTC.
. Completed dipswitches for Mahjong If (ID 05608)
. HOLD_LINE cleanup
. Buffer multiple writes for PCI stall. Fixes triangles flicker in California Speed (ID 06636).
. Set proper NFL Blitz '99 dipsettings
. Added gearshift to California Speed (ID 00975)
. Fixed Hyperdrive brake button doesn't function in calibration (ID 00470)
- seibuspi.cpp: Provide full chip name and standard oscillator frequency (machine\ds2404.cpp)
. Redo interrupt handling based on Chinese Hero schematics. This fixed sounds get really screwy in the later levels of Shanghai Kid (ID 01005).
. Added coin counters
- spinb.cpp: Correct ADPCM type for jolypark and vrnwrld
- supbtime.cpp: IRQ modernization
. Added HD647180X MCU dumps to Ghox and Pipi & Bibis / Whoopee!! (Teki Paki hardware), allowing for sound emulation in both of them. This also fixes the high score table background in Ghox, which was also MCU related (ID 04024).
. Corrected the decryption of some V25 opcodes used in the EEPROM service routine. Removed the ugly FixEight EEPROM routine that hardcoded a region for each set. Added and document a secret input that rewrites the EEPROM for any region.
. Re-added blitz00_nov30_1999.u27 rom. Mark as BAD_DUMP and added patch to fix.
. Correct DIPs for Gauntlet Dark Legacy and Road Burners
. Added 16550 UART subdevice (machine\vrc5074.cpp)
- zaccaria.cpp: Improved documentation. Note: The protection device at 1A on the ROM board (1B11147) is unidentified on the schematics but appears to be a PAL16L8 or PAL16R4. It sits on bits 4-7 of the data bus, and is read from locations where only bits 0-3 are connected to regular devices (6400-6407 has 4-bit RAM, while 6c00-6c07 has a 4-bit input port).
- Beraboh Man: Fixed joystick dropping inputs bug for crouching/running actions
- Buggy Challenge: Corrected clocks and added sound semaphores. Replaced AY-3-8910A sound with YM2149.
- Chanbara: Identified sprite flip X (player sword thrusts)
- Change Lanes: Changed default DIP setting to keep coin counters separate. Workaround for mistaken activation of test switch due to LS259 changes.
- Combat School
. Fixed wrong priority in the drill instructor screen (ID 06259)
. Improved interrupt handling in clone Combat School (bootleg)
- Deco Cassette System Multigame
. Replaced gross hack for banking "dongle" with something likelier
. Fixed Treasure Island sprites and removed stray Unicode character
- Desert Gun: Replaced bad rom in clone Road Runner (Midway) and added notes
- Dragonball Z: Fixed some dipswitches (ID 05788)
- Funny Strip: Separate driver state class
- Gyruss: Added missing DIP location for DSW3. Fixed dipswitches for clone Gyruss (Centuri). Added correct labels and locations to clone Gyruss (Centuri). Fixed labels for clone Gyruss (bootleg?). Updated diagnostic ROM info. Adjust some memory region sizes. Removed unused DRIVER_INIT.
- Hanafuda Hana Tengoku: Use address map bank device
- Hebereke no Popoon: Better documentation
- Karate Champ and King of Boxer: Identified DAC type
- King of Boxer: NMI modernization
- Legend of Silkroad: Base OKI clocks on OSC values. Note: PCB pic reveals no resonators so the clock is based off of either 32MHz or 3.579545MHz. Old guessed values where 1.056MHz and 2.112MHz so new values are 32MHz/32 & 32MHz/16 for 1 & 2 MHz respectively.
- Midnight Landing: Added coin counters
- Mirax: Changed PSG type to AY-3-8912A and use device finders
- Ninja-Kid II: Fixed missing sound in Ninja-Kid II and clones (ID 06645)
- Ordyne: Clean ROM labels as per PCB photos. Documented sprite zoom table rom.
- Pengo: Added partial dipswitches for clone Pengo (bootleg on Pac-Man hardware, set 1) (ID 05945)
- Penguin Adventure: Partially fixed game resets itself in stage 4 (see MT #04528)
- Poker Ladies: Added PALs and EEPROM dumps to clone Poker Ladies (Leprechaun ver. 401), also corrected rom labels.
- Return of Lady Frog: Added NMI ack
- Salamander: Improved VLM5030 control
- Shadow Warriors: Implemented dual OPN + dual MSM5205 ADPCM sound system for clone Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden) as in Automat
- Shock Troopers: Swapped Shock Troopers sets since what was known as set 2 is actually a newer revision than set 1, as per MAME parent-clone policies parent must be the newer revision.
- Street Fighter II': Champion Edition: Correct dipswitches for clone (Accelerator Pt.II, bootleg) (ID 05277)
- Teki Paki: MCU soundlatch modernization and cleanup
- Tetris (Japan, System E): Fixed 2-Player mode in Tetris (Japan, System E) (ID 06644)
- TH Strikes Back
. Added new DS5002FP SRAM dump (Game now playable). Note: Dumped from 3 boards, reconstructed with 2/3 wins rule, all bytes verified by hand as correct. There is a priority bug on the title screen (Gaelco logo is hidden by black borders). It seems sprite priority is hacked around on most of the older Gaelco drivers.
. Added PCB layout
- Thunder Zone
. Created MB8421/MB8431 16-bit expanded variant and added it to Thunder Zone/Desert Assault
. Acknowledge IRQs
- Trick Trap: Fixed tile-sprite priorities, mostly visible when exiting an area in most stages (ID 04872).
- Virtua Striker 4 Ver.2006 (Japan): Redumped GDROM
- Input port
. Fixed up input_merger - it needs to save, and it's passive so no reset (machine\input_merger.cpp; drivers\aristmk5.cpp, beezer.cpp, buggychl.cpp, rpunch.cpp, includes\btime.h, bublbobl.h, flstory.h, kingobox.h, lsasquad.h, nycaptor.h and audio\efo_zsu.h (cedar_magnet.cpp and play_3.cpp)).
. Use input merger device for btime.cpp
. Syncronise on the way in, extend to 32 inputs, make some more variants and get rid of virtual call.
. Return explicit "file not found" error if inp file isn't found on playback, added error code number to any other error found (emu\ioport.cpp).
- Save state: Fixed new load/save state menu does not respect -statename (ID 06621)
- Dipswitch fixes in changela.cpp, cps1.cpp, csplayh5.cpp, dbz.cpp, dynax.cpp, gyruss.cpp, m90.cpp, namcos2.cpp, pacman.cpp, royalmah.cpp, seattle.cpp and vegas.cpp
- Fixed rom names in gyruss.cpp, kaneko16.cpp, mitchell.cpp, pacman.cpp, pastelg.cpp, segae.cpp, shangha3.cpp and snk6502.cpp
- Description changes of 1943: Midway Kaisen (Japan, no protection hack), Ai-mode - Pet Shiiku (Japan), Alligator Hunt (unprotected, set 1), Brave Firefighters, Cosplay Tengoku 7 - Super Kogal Ranking (Japan), Crazy Climber (US set 1), DoDonPachi Dai-Ou-Jou V101 (Japan, 2002.04.05.Master Ver), DoDonPachi Dai-Ou-Jou V100 (Japan, 2002.04.05.Master Ver), DoDonPachi Dai-Ou-Jou (Japan, 2002.04.05 Master Ver), DoDonPachi Dai-Ou-Jou (Japan, 2002.10.07.Black Ver), DoDonPachi Dai-Ou-Jou (Japan, 2002.10.07 Black Ver), DoDonPachi Dai-Ou-Jou (Japan, 2002.10.07 Black Ver., bootleg Knights of Valour Super Heroes conversion), Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 1), Donkey Kong Junior (Japan set F-1), Goldeneye (4.04), Koala Mint (CHG1573, US), Mahjong Mogitate (Japan), Mario Bros. (Japan, Revision C), Mega Zone (program code I), Mega Zone (unknown program code 2), Mega Zone (program code J), Mega Zone (program code H), Mega Zone (unknown program code 1), Neo Geo CTHD Protection (bootleg) (ID 06649), Nibbler (Pioneer Balloon conversion - rev 6), Nibbler (rev 9, alternate set), Night Gal Summer [BET] (Japan 850702 NGS 0-01), Star Wars: Racer Arcade, Star Wars Trilogy Arcade (Revision A), Star Wars Trilogy Arcade (ID 06659), Vamf x1/2 (Europe, version 1.1.0908), Vamp x1/2 (Korea, version 1.1.0908), WWF Superstars (US revision 4) and WWF Superstars (US revision 7)
- Renamed (1943ja) to (1943jah), (brapboysj) to (brapboyspj), (brapboysu) to (brapboyspu), (cawingu) to (cawingur1), (ordyne) to (ordyneje), (podrace) to (swracer), (grtesoro) to (play2000a), (grtesoro4) to (play2000), (megazonec) to (megazoneh), (megazoneb) to (megazonej), (megazonea) to (megazoneb), (megazonei) to (megazonea), (megazone) to (megazonei), (shocktro) to (shocktroa), (shocktroa) to (shocktro), (vendetta2p) to (vendetta2pw), (vendettaj) to (vendetta2pp), (vf4evo) to (vf4evob), (wwfsstaru) to (wwfsstaru7) and (wwfsstarua) to (wwfsstaru4).
. VIDEO RENDERING SYSTEM
. Reduced weight of render.h by moving component specialisation declarations into emu\rendlay.cpp
. Added support for layout item groups, replaced simple_list with more appropriate containers, removed misleading const qualifiers and reduced repeated XML walking (build\complay.py, emu\render.cpp/h and rendlay.cpp). Groups aren't parameterised, so they aren't as useful as they could be. However, it's already useful for putting a common set of elements in multiple views, potentially at different locations/scales. See intlc44.lay and intlc440.lay for examples of the level of copypasta this can eliminate. Be aware that groups with explicit bounds don't clip thair content, it's only used for calucating the transform matrix. Get rid of string hashes when fetching output values in layout rendering.
. More const and get rid of forced sleep (emu\video.cpp)
. Added minimal support for reading Adam7 interlaced PNG (emu\rendutil.cpp and util\png.cpp). Note: Decompression and unfiltering is fully supported, at least for all the pixel formats that previously worked. Expanding 1/2/4bpp to 8bpp should work properly, too. Bitmap mapping for Adam7 is only implemented in rendutil.cpp which is whate everything in MAME uses. The function in png.cpp (used by pngcmp) has not been updated. At some point I'll unify at least one of the functions in rendutil.cpp with the one in png.cpp and we can go from three functions that need to do the mapping down to two at the most.
. Unified code for copying PNG data into bitmap for MAME and pngcmp. Fixed upsampling of monochrome PNGs (need to splat across byte). Added support for greyscale+alpha. Detect more unsupported conditions rather than just behaving badly. Support 16-bit samples.
. Support greyscale with transparent pen, encode/decode text chunks as UTF. Fixed indexed transparency.
. Fixed -slot card, bios=rev (selected BIOS was being applied to slot itself, not card)
. Added address-shifted versions of AM_DEVREAD/_DEVWRITE/_DEVREADWRITE. These new macros make it easy to map devices addressed using higher address lines (which on actual HW helps to reduce loads on the lowest address lines) without needing to set up custom handlers and associated device finders. The implementation should not impact the efficiency of the core memory system since the semantic details are contained within C++11 lambdas. Improved way to transform offsets for AM_DEVREAD/_DEVWRITE. Replaced AM_DEVREADWRITE_RSHIFT with a similar but more functional-looking interface (now known as AM_DEVREADWRITE_MOD), which also now supports address line inversion as well as shifting (drivers\equites.cpp, gaelco.cpp, gaelco3d.cpp, goodejan.cpp, gridlee.cpp, legionna.cpp, r2dx_v33.cpp, raiden2.cpp, splash.cpp, taito_l.cpp, thoop2.cpp, timeplt.cpp and wrally.cpp).
. Don't use hairline spaces for alingment in the info box (ui\selgame.cpp, selmenu.cpp and ui\text.cpp)
. Use aggregate emulation status in UI menus, expose more flags in info box. Use aggregate flags for -ui simple as well.
. Show presence of analog controls and/or keyboard in info box - it's potentially useful when considering whether a system iwll be usable, or will put you in full keyboard mode. Removed checks that never did anything useful and have now broken (ui\selgame.cpp).
. Greatly reduce copy/paste code for drawing menu header/footer boxes. Display full name of selected slot device below slots menu. Fixed up spacing on dircetory configuration menu. Fixed min/max for UI font rows per screen setting.
. Make filter names localisable, fixed keyboard navigation of software filter box, encapsulate a couple more things in selmenu and friends, get rid of hacks in selector tying it to implementation details of other menus. Note: This turns the filters into polymorphic objects that will be more manageable and not require so much copy/pasting when updating APIs.
. Polymorphic machine/software list filters: Localisable filter names. Uniform interface for most filters without far less special-casing. Stacking year/manufacturer/etc. does OR rather than useless AND. Prevent stacking contradictory filters (e.g. parents and clones). Fixed alignment of filter list. Removed most of the lambdas added the other day. There's no longer an implicit "not BIOS" filter. Can't add (un)available to custom machine filter (will address).
. Improved layout of art/info box, support mousewheel scroll in info text, allow home/end to jump to beginning/end of filter list, consolidate logic. A number of vestigial constants have been removed. Some hacky input types that were just used as a trick to pass information between menu functions are gone. MACHINE_NO_STANDALONE is a relic from when drivers were used as arbitrary ROM containers, and in a world of first-class devices this is no longer necessary.
. Don't process every character individually when searching, this reduces lag if you keep typing while a big list is searched.
. Make category filter work like all the other filters: Category filter is now saved/restored if it's last used. Category filter can be used in composite custom filters. Less confusing when no categories found. De-duplicated code for drawing category list.
. Fixed drawing software art/info when keyboard focus leaves list, consolidate more logic, more code deduplication, fixed gutters on dats view and fallthrough from dats to save. There's some weirdness with shortcust for dats/export/favourite toggle if they result in a character being typed.
. Save/restore images/info selection in right panel
. Fixed selecting a slot to fill for "EXP" causes Fatal Error (ui\slotopt.cpp) (ID 06657). Note: The source of the issue is that the logic for rotating slot options was broken. It would count selectable options and skip over options that were not selectable, except for the specific scenario where the index was zero. I ended up largely replacing the logic to be more C++-ish.
. Added a not BIOS machine filter (useful in composite filters), support RGB PNG with transparent pen because why not.
. Clean up some of the UI filter stuff, show list descriptions rather than names when choosing list to filter on. Fixed a localisation issue and a loop bounds issue.
. Make (Un)Available a polymorphic filter (works in custom filter again). Fixed bugs and improved performance when detecting systems without ROMs. Show progress while auditing ROMs. Use actual INI file format for mame_avail.ini.
. Fixed crash on invalid/empty/outdated ui.ini
. LUA engine: Debugger manager support
. Catch errors in cheat scripts and preliminary break/watch support (cheat\init.lua)
. Added GDB stub plugin
. Use 2 column format and clean up some parse errors (plugins\data\data_story.lua and load_dat.lua)
. Added MARP scores plugin
. Updated hiscore.dat
. Moved unemulated/imperfect flags from machines into devices. Right now, flags for unemulated/imperfect features apply at system level. This falls over quickly with systems that have slot devices. For example you can plug in a broken sound card or keyboard on a PC or Amiga driver and get no warnings. There's also no way to propagate these flags from a device to all systems using it. This changeset addresses these issues. It's now possible to report unemulated/imperfect features on a device level with static unemulated_feeatures() and imperfect_features() member functions. So far the only thing using this is the votrax device. To support front-ends, this is exposed in -listxml output as a new "feature" element that can appear in system/device descriptions. It has a "type" attribute indicating which feature it is, potentially a "status" attribute if the device itself declares that the feature is unemulated/imperfect, and potentially an "overall" attribute if the device inherits a more severe indication from a subdevice. The embedded DTD describes possible values. Example: device/machine declares imperfect sound:
. Example: device/machine declares unemulated keyboard:
. Example: device declares imperfect controls but inherits unemulated controls from a subdevice:
. Example: device doesn't declare imperfect LAN but inherits it from a subdevice:
. It's still possible to add these flags to machines in the GAME/COMP/CONS macro. If the state class declares them with static member functions, the two sources will be combined. If you subclass a device, you inherit its flags if you don't redefine the relevant static member functions (no override qualifier is necessary since they're static). The UI has been updated to display appropriate warnings for the overall machine configuration, including selected slot devices, at launch time. The menus don't display overall status, only status for the machine itself. We can make it scan subdevices if we decide that's desirable, it just needs caching to enure we don't take a huge performance hit. Trade MACHINE_IMPERFECT_KEYBOARD, MACHINE_NODEVICE_CAMERA and MACHINE_NODEVICE_WAN for MACHINE_IMPERFECT_CONTROLS: MACHINE_IMPERFECT_KEYBOARD is more applicable on keyboard devices - most of them should be devicified eventually. MACHINE_NODEVICE_CAMERA tends to apply across a family of machines, so it's easy to apply at state class level. MACHINE_NODEVICE_WAN isn't even used. MACHINE_IMPERFECT_CONTROLS is widely applicable, knock yourselves out adding it to GAME macros. Updated machines that were using MACHINE_IMPERFECT_KEYBOARD or MACHINE_NODEVICE_CAMERA to apply it at device or state class level. Added flag for imperfect timing.
. Update localisation .po files. Our localisations are rotting badly, so please update what you can for recent UI changes. Note that to run make translation you need to patch GNU gettext to support C++14 digit grouping. See the attached patch here: https://savannah.gnu.org/bugs/?50117
. Fixed info box navigation when system selection menu doesn't have focus and fix up some translations for recent changes
. Updated Chinese (simplified/traditional), Italian, Japanese, German, Greek, Portuguese (Brazil), Russian, Serbian, Serbian (Cyrillic), Spanish and Swedish translations.
. Added "minimaws" sample script demonstrating how to do some tasks with output from -listxml verb. Compatible with Python 2.7 or Python 3. Requires at least SQLite 3.6.19 for foreign key support. This serves a few purposes: * Demonstrating some things that can be done with -listxml output. * Providing a reference implementation for useful queries. * Helping ensure our XML output isn't completely useless. * Providing additional queries over MAME's auxiliary verbs. * Proper glob support unlike the broken implementation in MAME right now. Right now, it's a bit ugly to use. You can only load into a completely clean database, and you need to manually create the schema. I'll address this later. The default database filename is minimaws.sqlite3 (you can override this with --database before the verb on the command line). Loading isn't particularly fast, but query performance is very good. Create a database first: rm -f minimaws.sqlite3 and sqlite3 minimaws.sqlite3 < scripts/minimaws/schema.sql. Now you can load it using a MAME binary or XML output (use one of these options, not both): python scripts/minimaws/minimaws.py load --executable ./mame and python scripts/minimaws/minimaws.py load --file mame0188.xml. Once that's done you can do queries: python scripts/minimaws/minimaws.py listfull, python scripts/minimaws/minimaws.py listclones "*cmast*", python scripts/minimaws/minimaws.py listsource "*mous*" and python scripts/minimaws/minimaws.py listbrothers "intl*". These work much like the equivalent MAME verbs, but without the overhead of loading MAME's static data. But there's one already query that you can't easily do with MAME: python scripts/minimaws/minimaws.py listaffected "src/devices/cpu/m6805/*" src/devices/sound/qsound.cpp. This will list all runnable systems that use a device defined in any file under devices/cpu/m6805 or in devices/sound/qsound.cpp (you can specify and arbitrary number of files or glob patterns). This may be useful for planning regression tests. Another thing this does (that gives rise to the name) is serving information over HTTP. It's implemented as a WSGI, and it mainly uses GET requests. This means it can run hosted in Apache mod_wsgi, or cached by Apache mod_proxy, Squid, nginx, or something else. It can also run out-of-the-box using wsgiref.simple_server components. The default port is 8080 but this can be changed with the --port option. Start the web server with the serve verb (stop it with keyboard interrupt ^C or similar): python scripts/minimaws/minimaws.py serve. Right now it's rather crude, and doesn't list devices for you. This means you have to know the shortname of a machine to get a useful URL. For example, you can look at a driver and see its parent set and the devices it references: http://localhost:8080/machine/kof2000n.
Or you can look at a device, and see the devices it refereces, as well as the devices/systems that reference it: http://localhost:8080/machine/zac1b11142,
The links between devices/systems are clickable. They might 404 on you if you used a single-driver build with broken parent/clone relationships, but they should all work in a full build that passes validation. There's still a lot to do. In particular I want to demonstrate how to do live DIP switch preview and dynamic slot discovery. But I've already discovered stuff in the -listxml output that's less than ideal with this, so it's helping.
. Added web mode enhancements: Support serving static assets, use for stylesheet, script and images. Better error pages, reject unsupported HTTP methods. Replaced lists with sortable tables with more detail (click headings to sort). Added pages for exploring source files, link from machine pages. Can start from full source file list at http://localhost:8080/sourcefile/.
. Load slot info in minimaws (not exposed yet), fix up some problems with slots uncovered. It seems at some point someone didn't realise that choosing the same option from a SLOT_INTERFACE in multiple slots creates multiple instances of the same device type, and this got copy/pasted everywhere.
. Added machine feature status flags and slot card selection with live update
. Added support for INI options preview and explicit defaults
. Fixed -sleep option (emu\emuopts.cpp)
. Fixed description check (emu\validity.cpp)
. Validate BIOS names and fix most errors found: Error on characters other than [a-z0-9.-_] in name. Error on duplicate name or description and Error on non-existent default BIOS.
- MAC OS X
. Use proper font metrics on OSX rather than trying to guess advance from glyph box.
. Handle fonts where space glyphs return a null bounding box (e.g. Hiragino family) restore ability to localise info box headings (font\font_osx.cpp).
- Android: Modification for Android build (NDK r14b, build-tools 21.1.2 and gradle 2.2.1)
. Work around GCC ambiguous template error (emu\output.h)
. Removed a whole lot of I64 from format strings. There are a couple of issues here: Firstly, the determining factor for whether I64 or ll is needed as the size qualifier doesn't depend entirely on whether you're using MSVC or not, it depends on the the C runtime library. The msys64 C runtime apes the Microsoft runtime and requires I64 as well, so a lot of files where LLFORMAT had been copy/pasted wouldn't work right if you depeneded on it anyway. Secondly, one of the major benefits of util::string_format, util::stream_format and logerror in their current forms is that you don't need size specifiers for integers at all (unless you're using them to truncate a value, but in that case you're better off casting the argument for clarity). If you do use them, logerror and friends will accept both Microsoft- and SUS-style independently of the C runtime.
. Moved some content for release archive out of build repo into main repo (artwork\apertureXXXXX.png, artwork\scanlines.png, ctrlr\hotrod.cfg, hotrodse.cfg, scorpionxg.cfg, slikstik.cfg, ctrlr\xarcade.cfg and dist.mak).
- Debugger: In the windows debugger log window added a Log/Clear menu to removed all logged messages