- New games: Janken Game Acchi Muite Hoi! (Japan 1.3) and Super Bubble Bobble (Sun Mixing, Megadrive clone hardware)
- New Working games: 'Cadillacs and Dinosaurs (bootleg with PIC16C57, set 2)', Quick Pick 5 and Tetris (bartop, prototype)
- New Non-Working games: Bare Knuckle III / Sunset Riders (bootleg of Megadrive versions), Lucky Player, Matrix, Mexico Lindo, Mini Super Fruits, New Pro Bowl, Pac-Carnival, Photo Play 1998 (Spanish), Photo Play 2001 (Italian), Star Horse 2002 (live), Star Horse 2002 (main screens), Star Horse 2002 (sound and backup, Rev A), 'unknown Hobby Play slot machine', 'unknown Konami slot medal game (set 1)', 'unknown Konami slot medal game (set 2)', 'unknown MGA or Costa Net slot machine', UNO the Medal, Wai Wai Jockey and Wild Guns (SNES bootleg)
- New clones: Air Duel (World, M72 hardware), Asterion, Battle Garegga (location test) (Wed Jan 17 1996), Bubble Bobble (bootleg of Japan Ver 0.0 with 8749), Cruis'n USA (v4.5), CTA Invader, Gals Panic II (English, 2 PCB ver.), Gundam Wing: Endless Duel (SNES bootleg, set 2), The History of Martial Arts (set 2), JoJo's Bizarre Adventure (Euro 990913), JoJo's Bizarre Adventure (Euro 990927), Le Bagnard (Itisa, Spain), The Legend of Kage (bootleg set 4), Master Bond (bootleg of Secret Agent), Meteor (bootleg of Asteroids), Midnight Run: Road Fighter 2 (AAA, Asia v1.10, newer sound program), Olivmandingo (Spanish bootleg of Mandinga on Galaxian hardware, set 2), P.O.W. - Prisoners of War (bootleg of US version 1), Pac-Man (Calfesa, Spanish bootleg on Galaxian hardware), Pacom Invader (set 2), Panic Park (Japan, PNP1 Ver. B, set 2), Photo Play 2000 (Spanish), Polaris (latest version), Route X (bootleg, set 2), Speed Up (Version 2.20), Street Fighter II': Champion Edition (bootleg, set 1), Street Fighter II': Champion Edition (bootleg, set 2), Street Fighter II': Champion Edition (Playmark bootleg, set 2), Super Space Invaders '91 (World, earlier?), Tecnodarts (Recreativos G.R. license) and Traverse USA (bootleg, set 2)
- New PinMAME games: Sahara Love (France)
- New drivers: hobbyplay.cpp and matrix.cpp
- New devices: alpha_8921, cat28f020, hd6435368, kp63_3channel, kp63a, mm5837_stream, omti_disk_image, omti8621ap, omti8621isa and z86e02
. DEC T11: Disassembly updates: Corrected mnemonics for CLC, CLV, CLZ and CLN. Added MFPT mnemonic. Renamed JSR/RTS short forms to CALL and RETURN. Eliminated alternate PUSH and POP mnemonics. Added notes on instructions not implemented on T-11.
. Kawasaki Steel KL5C80A12/16: Added emulation of KP63(A) Timer/Counter unit. This improves timings in sigmab98.cpp games Animal Catch, Hae Hae Ka Ka Ka, Pye-nage Taikai and Taihou de Doboon.
. MCS-48: Fixed problem with strt_cnt if counter was already enabled (mcs48\mcs48.cpp)
. Zilog Z8681: Added interface notes. Added optional logging for SIO. Fixed reads from Ports 0 & 1 (z8\z8.cpp).
. Zilog Z86E02: Added Z86E02 type
. Acclaim RAX: Modernized RAM allocation and object lookups
. AY-3-8910A PSG: Reduced performance when expanded mode is enable and fixed noise rate regression
. CEM3394 Synthesizer Voice: Major rework. Updated to new stream callback. All calculations are now doing in floating point. External input is now done via an input stream. First attempt at implementing a proper filter -- needs some major work; checking in current state to get some assistance.
. Ensoniq ES5505: Correct Taito ES5505 Bankswitching behavior. Sample bank per ES5505 voice is actually taito_en.cpp specific. Moved external bank behavior into taito_en.cpp. Added getter for voice index. Added precalculated ES5505 bank table for reduce performance issue. Added getter for CPU.
. MM5837: Unify implementations: Create base mm5837_source device to provide raw output. mm5837_device is based on it. mm5837_stream_device generates a sound stream from it. Frequency calculation now computed instead of table-based.
. OKI MSM9810 ADPCM: Make address space big-endian
. SN76496: Removed u8106 alias. Note: Sound chips have custom label "U8106". Or "8106" or unlabeled with the original label scratched off. They are presumedly SN76489. Note that Lady Bug's PCB S/N is also 8106 and has the same sound chips.
. Sound Interface
. Drive updates more sensibly from the sound manager, fixing some asserts (emu\sound.cpp). Fixed edge case where pending sample rate matches output and some crackling when upsampling (emu\sound.cpp).
. Some optimizations for common cases. Reuse resamplers if routing the same output to multiple targets at the same rate. Avoid copying when there's only one stream going through a mixer (emu\disound.cpp and emu\sound.cpp). Fixed asserts due to sample-rate ping-pong in (MESS) esq5505 driver (emu\sound.cpp).
. Added a few new helpers to write_stream_view: put_clamp - clamps the input value before writing, put_int - takes an integer and coverts it to float, put_int_clamp - converts and clamps an integer and add_int - converts an int and adds to the current sample (emu\sound.h). Fixed assertion when loading save state from command line (emu\sound.cpp).
. Changed some sound devices back to using std::unique_ptr for things that don't need to change size (sound\k005289.cpp, k054539.cpp and mos6560.cpp). Using a std::vector has additional overhead for keeping the size and allocated size, and it means you can inadvertently resize it. Also, if you register one for save state then cause it to reallocate, very bad things happen.
. Disable SOUND_DEBUG for non-debug builds (emu\sound.h)
. Sound streams
. Significant internal changes to sound streams: Abstracted buffers of sound data into an internal stream_buffer class, with helper classes read_stream_view and write_stream_view which offer readable/writable "views" into the buffers. Internal sound calculations are all done using stream_buffer::sample_t, which is a 32-bit float; existing callbacks are supported through an adapter that converts to/from signed 32-bit integers. Improved behavior of dynamic stream sample rate changes to resample a short runway of data to preserve continuity across transitions. Created a new stream update callback which passes a std::vector of read_stream_views for inputs, and a std::vector of write_stream_views for outputs. Updated core mixer and speaker devices to the new stream update callback. Changed existing stream update callback to make inputs explicitly const and the output pointers const as well, since they are re-used across calls; fixed several engines that violated this rule. Sound_manager::stream_alloc can no longer automatically connect to a device's sound_stream_update callback; instead, the stream_alloc() on the sound_device_interface should be called; updated many violators of this rule. Streams can be created with SAMPLE_RATE_OUTPUT_ADAPTIVE, which dynamically tracks the sample rate of its first downstream output, or with SAMPLE_RATE_INPUT_ADAPTIVE, which tracks the sample rate of its first input. Changed resampling to be a separate sound_stream that is invoked as needed, opening the path for selectable resampling implementations. Added a flags parameter to the new stream allocation method that allows you to specify a that input streams should not be resampled. Exposed stream_input and stream_output classes directly, simplifying access to user gains and stream names. Added a simple dynamic compressor to sound_manager to provide nicer results when overdriven sound happens; compression does not affect speaker_report results. Improved verbose speaker_report to print a graph of peaks over time. More aggressive debugging enabled for now even in release builds (should be disabled prior to next release) via SOUND_DEBUG define in sound.h; report any assertions for fixing.
. Updated the following sound cores to the new stream update callback: aica, asc, astrocde, awacs, ay8910, beep, bsmt2000, c140, c352, c6280, cdda, cdp1863, cdp1864, cdp1869, cem3394, dac, dac76, digitalk, discrete, dmadac, es1373, es5503, es5506, esqpump, rf5c400, rf5c68, flt_rc, flt_vol, gaelco, hc55516, i5000, ics2115, iremga20, k005289, k007232, k051649, k053260, k054539, ks0164, mas3507d, mea8000, mos6560, msm5205, msm5232, multipcm, namco, nes_apu, netlist, nile, okim6295, okim6376, okim9810, pokey, qs1000, qsound, s_dsp, saa1099, samples, scsp, segapcm, sn76477, sn76496, snkwave, sp0250, sp0256, spkrdev, spu, st0016, t6w28, tc8830f, tia, tms36xx, tms5110, tms5220, tms57002, upd7752, upd7759, upd934g, vgm_visualizer, vlm5030, volt_reg, votrax.vrender0, x1_010, ym2203, ym2608, ym2610, ym2612, ymf262, ym3526, ym3812, y8950, ym2413, ymf271, ymf278b, ymz280b, ymz770 and zsg2.
. Taito Ensoniq Sound System: Fixed overdriving that caused distortion and pops in previous versions (audio\taito_en.cpp)
. Votrax SC-01: Fixed pitch and closure. Note that the dynamic clock changes will sound bad until Aaron's sound stream fixes are in. Fixed Votrax SC-01 hookup for Gorf and Wizard of Wor. Updated to new stream callback.
. Yamaha YMF271 OPX: Modernized save state registration and allow disabling of side effects for reading
. 6522 VIA: Added support for CB2 pulse mode. Port B special modes are only on write, not read.
. BACTA Datalogger: Attempt at a fix for missed character transmissions. Turn off log pollution.
. Discrete Netlist
. Use macro DIP definitons for 8277, 9314, 9334, AM2847, MM5837 and TMS4800.
. Templatize 74107 and code maintenance. Removed some dead friend declarations. Optimized template times_ns2.
. Fixed visibility in some devices (private rules)
. References to subdevices should be symbolic: Exposing sub-device members is not best practice. The need for sub-devices is a clear indication that a netlist language implementation would be a better solution.
. In devices folder all DIP devices were removed. NE555 and MC1455P were the last devices with DIP definitions in devices.
. Build system improvements. Medium term this will significantly ease adding devices to netlist. Clang tidy include order fixes.
. Added 7417, 7438, 74290 and 74293 devices. Fixed PROM DIPs.
. More standalone makefile changes: On windows a simple make is now enough to build. Devices, macro and tests folders now included with wildcard. No more makefile changes if a device is added. Moved nld_devinc.h to generated folder. Added to python scripts to create nld_devinc.h and lib_entries.hxx. TEST MODE: these two files are created automatically but are not used currently. Once I get feedback that the python scripts work in different environments I will remove header files from devices and macro and start using these files in production.
. Fixed various issues around include directories: Removed include directory src\lib\netlist from various genie files to avoid potential issues. Code using netlist should use #include "netlist/*". Updated includes. Fixed standalone makefile depend target to properly deal with relative paths.
. Various minor adjustments based on PR comments
. Standalone makefile support for OSX
. Truth tables are now standalone objects. Added TRUTHTABLE_ENTRY to netlist language. Please see nlm_ttl74xx for reference implementation.
. Fixed processing of TRUTHTABLES for generated files. Also made nld_devinc.h srcclean friendly. nld_devinc.h and lib_entries.hxx are currently not used. You can try the automated build by changing NL_AUTO_DEVICES in setup.h to 1.
. Code maintenance and performance optimizations. Renamed some misleading type names. Removed callback_t and replace by better scalable approach. Hide implementations details. Noved sources classes from putil.h to psources.h. Reduced code complexity. Improved parsing performance, parsing netlists now is twice as fast. Fixed issues around multi-byte string support. Moved psplit into pstrutil.h. Fixed multi byte string issues.
. Implemented voltage dependent timing for CD4006. Added listmodels command to nltool.
. Moved netlist to generated header and link support files files. Removed device and macro header files. All of those can be generated automatically so going forward there is no need for these any longer. Introduced the modules concept. Modules are netlists for which automatic lib entries are generated. Going forward you just store them in macro/modules and they will be automatically registered as device elements. You need to do a "make generated" is src/lib/netlist/build. Some_device.cpp still needs to be added to netlist.lua. Added documentation on how to add devices to netlist. Please refer to adding_devices.md for more information. Moved selected NET_MODELS into the core.
. Moved ICL8038_DIP and NE556_DIP to core. Removed code duplication.
. Optimized headers. Where possible rely on forward declarations to optimize compile time. Emscripten can not use specialization efficiently. Consequently prefer to save on compile time and size.
. Added netlist devices for MCM14524, CD4029, CD4030, CD4042, CD4049 and CD4076.
. Code refactoring. Optimization to the gmres solver. Simplifcation of vector operation code.
. Significant performance increase. Uses all 4 Sonar oscillators. Uses randomized resistor values (5% range). Uses frontiers to separate oscillators. Improves performance to 340% locally (netlist\generated\static_solvers.cpp and audio\nl_astrob.cpp).
. Use default move and copy constructors. Various minor edits like adding noexcept. Removed a lot of inline keywords. Improved queue handling documentation in code. Documented that for performance reasons pushes to queue are allowed even if they may not change state and are filtered out during process. Provide alternative code path. This is currently not used. Fixed 128 bit integer support. Clear identify void * casts.
. Make pstring length/size use consistent. Length reports the number of character codes in the string. Size reports the size in memory units. Reminder: Set PSTRING_USE_STD_STRING to 1 in pstring.h and get native std::string. pstrings are compatible to std::string but only support a limited subset of functionality. By default (always like this) utf8 is supported and thus length reports the number of multi-byte characters.
. Added a number of minor fixes leading to an increase of 570% to 588% on pongf. Admittedly micro optimization. Includes some comments why certain decisions have been taken.
. Ensoniq ES5503: Modernized device. Use put_int for sample scaling and fill_n for faster clear. Fixed some corner cases with swap mode on even vs. odd oscillators. Use std::vector as intermediate buffer and resize on sample rate changes.
. Corrected register commit delay for WD177x according to datasheet (machine\wd_fdc.cpp)
. Fixed bug when changing IMD image. Some arrays weren't zeroed when changing a IMD disk for saving (formats\imd_dsk.cpp).
. Hitachi HD6845S CRTC: Fixed off-by-one error in calculating bottom of DE window
. Imgtool: Fixing an Imgtool build issue with LLVM on MSVC
. K001006 Texel Unit: Removed alternate texture layout
. Namco 51xx: Reimplement outputs that were accidentally disabled when device switched to using low-level emulation. This restores start LEDs and coin lockouts for various games in galaga.cpp (ID 07733) and polepos.cpp.
. SCSI Hard Disk: Have bad hard disk reads actually fail instead of just returning zeroes (bus\nscsi\hd.cpp).
. Serial interface: Use logmacro for optional logging and make the messages more useful (emu\diserial.cpp)
. Western Digital WD33C9x SCSI Controller: Handle 'polled DMA' in vme_hcpu30 (machine\wd33c9x.cpp)
- 39in1.cpp: Some improvements to the decryption of the newer games, still missing something.
- astrocde.cpp: Fixed Votrax SC-01 hookup for Gorf and Wizard of Wor
- bingor.cpp: Mark all PIC dumps as bad in bingor1, bingor2, bingor3, bingor4 and bingor5.
- cham24.cpp, famibox.cpp, multigam.cpp, playch10.cpp and vsnes.cpp: Made use of the code that was already partially present in the NES PPU code to handle emphasis modes, used to highlight tally bars etc. in (MESS) 'nes rampart', apply a red tint to (MESS) 'fds bublbobl' and dim the screen in a number of other games (video\ppu2c0x.cpp).
- chihiro.cpp: Set values for various configuration space PCI registers
- cinemat.cpp: Small cleanup/safety improvement (audio\cinemat.cpp)
- cps1bl_5205.cpp, cps1bl_pic.cpp and midyunit.cpp: Added PALs to clones Cadillacs and Dinosaurs (bootleg with PIC16C57, set 2), Captain Commando (bootleg with 2xMSM5205), Jurassic 99 (Cadillacs and Dinosaurs bootleg with EM78P447AP), Knights of the Round (bootleg with 2xMSM5205, set 2), Mortal Kombat (Yawdim bootleg, set 2) and Saturday Night Slam Masters (bootleg with PIC16C57, set 1). Redumped clone Cadillacs and Dinosaurs (bootleg with PIC16C57, set 2) bad gfx rom.
- cv1k.cpp: Slightly more accurate frame rate
- ddenlovr.cpp: Separated state class a little
- deco_mlc.cpp: Fixed invisible pixel issue in vertical zooming algorithm. Reduced unnecessary line check. Fixed GFX loading and decoding. Only Stadium Hero '96 has the DECO146 on cart, so updated the maching configs to reflect this. Also removed some unused variables.
- gottlieb.cpp: Tweaked Votrax speech frequency settings to better match samples/recording for Q*bert (audio\gottlieb.cpp)
- magicard.cpp: Decapped and dumped PIC16C54/56 devices for Magic Card Export 94, Magic Card - Wien (Sicherheitsversion 1.2), Puzzle Me! and unknown 'TE06'
- neogeo.cpp: Device-fied PRO-CT0 for protection for Fatal Fury 2, aka ALPHA-8921 or SNK-9201. Note: This chip is sprite ROM data serializer or optional security device. Used in some later 80s Alpha Denshi hardware (ex: Gang Wars). Some early Neogeo MVS motherboards and AES cartridges. Also integrated in NEO-ZMC2 and NEO-CMC. Reference: https://wiki.neogeodev.org/index.php?title=PRO-CT0.
. PGM2 lores refresh rate was approximated from video recording, hsync/vtotal are not verified. Measured common resolution refresh rate.
. Changed 'The King of Fighters '98: Ultimate Match HERO' refresh rate to match PCB video
- segas32.cpp: Eliminated auto_alloc and a bizarre comparison between bitmap pointers
- seibuspi.cpp: Allow recovery if MAME is exited during the initial flash process
- seta2.cpp: Fixed invisible pixel issue in horizontal zoom algorithm. Added notes for background color.
. Pile kludge upon kludge for Animal Catch poorly understood video timing register. Increased frequency of one timer interrupt for Go Go Cowboy and Itazura Monkey and hopper timing in Go Go Cowboy.
. Modernized state_add syntax for KC82 and KP69
. Added emulation of KP63(A) Timer/Counter unit for KL5C80A12 CPU. This improves timings in Animal Catch, Hae Hae Ka Ka Ka, Pye-nage Taikai and Taihou de Doboon.
- toaplan2.cpp: Fixed YM2151/OKI level balancing for Armed Police Batrider and Battle Garegga
- zr107.cpp: Correct texture roms loading in all ganes. They now pass the texture mask ROM check. Partially fixes MT07731. The tile mask ROM test still fails.
- AGEMAME: Added preliminary layout and inputs for Double Take (BWB). Added an experimental LUA script to the Double Take layout. This takes individual lamp lines that are used for LED selects and recombines them. To see the effect, plugin -layout is needed.
- Astro Blaster: Significant performance increase. Uses all 4 Sonar oscillators. Uses randomized resistor values (5% range). Uses frontiers to separate oscillators. Improves performance to 340% locally (netlist\generated\static_solvers.cpp and audio\nl_astrob.cpp).
- Bingo Roll / Turbo Bingo?: Decapped and dumped PIC16C54 device
- Columns III (Mega Play): Make the existing dipswitch definitions actually used
- Cyberball: Fixed SAC communications between 6502 and MC68000 CPUs (ID 07749)
- Dardomania: Added missing rom. Now the dump is complete. Added ASCII PCB layout.
- Double Dealer: Use tilemap_t for splittable foreground tilemap. Fixed MCU input with side effects. Fixed masking. Reduced runtime tag lookup and duplicates. Use shorter type values.
- EuroPlay 2001: Added two new BIOS dumps
- Funny Strip: Added address_map and input ports to clone Ring Ball
- Ginga NinkyouDen: Removed trivial ROM patch, use nopw() instead.
- Hola Don Pepito: Decapped and dumped PIC16C56 device
- Karnov: Dumped and hook up MCU for Karnov (US, rev 6) and clone Karnov (US, rev 5). Use a handcrafted MCU dump based on the US version for clone Karnov (Japan).
- Kyros: Improved clone Kyros no Yakata (Japan) PCB documentation
- Mortal Kombat 4: Added security PIC dump
- Mr. Do!: Replaced the 2x U8106 sound with 2x SN76489
- NBA Jam Extreme: Fixed region width in clone NBA Jam Extreme (ver. 1.04)
- PinMAME: Cleaned up Williams System 11 pinball layouts (layout\s11.lay, s11a.lay, s11b.lay and s11c.lay)
- Prehistoric Isle in 1930: Fixed priority
- Puzzlet: Replaced coin MCU simulation with low-level Zilog Z86E02 CPU emulation
- Q*bert: Better approximation of Votrax frequencies, pending deeper analysis (audio\gottlieb.cpp).
- Quick Pick 5: Added serial IO device and input ports (Game now playable)
- Sega Golf Club Network Pro Tour 2005: Brute forced key
- Super Space Invaders '91: Added PLDs
- Tetris: Added support for clone Tetris (bartop, prototype) bank switching (Game now playable). Moved bartop proto handler into new subclass of atetris_state.
- Tetris: The Grand Master: Added config port for Tetris: The Grand Master debug buttons
- Thunder Dragon 2: Dumped mask roms for clone Thunder Dragon 3 (bootleg of Thunder Dragon 2)
- Treasure Island: Fixed artwork labeld for buttons
- Video Poker: Clean up layouts and make layouts clickable for poker and slots games
- 'unknown Recreativos Franco slot machine': Added ASCII PCB layout
- Input port
. Moved axis movement checking code down into input devices. Transfer crosshair polling loop to render_crosshair.
. Overhaul the default keys list (docs\source\usingmame\defaultkeys.rst)
. Cleaned up inputs a little. Removed the IPT_POKER_BET, replacing it with IPT_GAMBLE_BET. Re-organised the order of input types in the source and the documentation to better reflect how they're logically grouped or organised on a mahjong or gambling control panel. Made the blackjack, poker and slots documentation headings subheadings under the gambling heading. Cleaned up inputs for a number of gambling games. Added mahjong panel diagram.
- Fixed rom names in 8080bw.cpp, aristmk4.cpp, m92.cpp, midxunit.cpp, photoply.cpp, startouch.cpp and williams.cpp
- Dipswitch fixes in gaelcof3.cpp, megaplay.cpp and vegas.cpp
- Description changes of 19 in 1 MAME bootleg (BAR-V000), 48 in 1 MAME bootleg (set 1, ver 3.09, HPH-V000), 48 in 1 MAME bootleg (set 2, ver 3.09, HPH-V000, alt flash), 48 in 1 MAME bootleg (set 3, ver 3.02, HPH-V000), 60 in 1 MAME bootleg (ver 3.00, ICD-V000), Cruis'n USA (v2.1), Cruis'n USA (v4.0), Cruis'n USA (v4.1), Cruis'n USA (v4.4), Cruis'n World (v1.3), Cruis'n World (v1.7), Cruis'n World (v1.9), Cruis'n World (v2.0), Cruis'n World (v2.3), Cruis'n World (v2.4), Cruis'n World (v2.5), Gals Panic II (Italy, 2 PCB ver.), Gals Panic II (Taiwan, 2 PCB ver.), Genshitou 1930's, The History of Martial Arts (set 1), Gundam Wing: Endless Duel (SNES bootleg, set 1), Joust (Green label), Joust (Red label), Joust (Yellow label), Le Bagnard (Itisa, Spain, older), Meteor (Hoei bootleg of Asteroids), Midnight Run: Road Fighter 2 (AAA, Asia v1.10, older sound program), 'NBA Showtime NBA on NBC (ver 2.0, Apr 25 1999)', Olivmandingo (Spanish bootleg of Mandinga on Galaxian hardware, set 1), Pacom Invader (set 1), Polaris (first revision), Polaris (original version), Polaris (second revision), Panic Park (Japan, PNP1 Ver. B, set 1), Route X (bootleg, set 1), 'SportStation: NBA Showtime NBA on NBC (ver 2.1, Sep 22 1999) / NFL Blitz 2000 Gold Edition (ver 1.5, Sep 22 1999)', 'SportStation: NBA Showtime NBA on NBC Gold Edition (ver 3.0, Feb 18 2000) / NFL Blitz 2000 Gold Edition', Street Fighter II': Champion Edition (Playmark bootleg, set 1), Traverse USA (bootleg, set 1) and Wonsido 1930's (Korea).
- Renamed (airduelm72) to (airdueljm72), (bagnardi) to (bagnardio), (crusnusa) to (crusnusa44), (dbreedm72j) to (dbreedjm72), (galpani2e2) to (galpani2i2), (jojoba) to (jojobaj), (jojobar1) to (jojobajr1), (joustwr) to (jousty), (photoply) to (photoply2k), (polarisa) to (polarisb), (polaris) to (polarisa) and (speedup) to (speedup12)
. VIDEO RENDERING SYSTEM
. May need to recompute selected view when loading visibility toggle configuration
. Apply target orientation when mapping points to layout elements, fixes rotating view in clickable artworks does not rotate clickable part (ID 07375). Also increase efficiency when layouts contain large numbers of non-interactive elements (e.g. thousands of matrix display dots). Also includes work in progress for future improvements (emu\render.cpp).
. Don't restrict borderless full-screen windows to monitor work area (osd\windows\window.cpp). Fixed MAME gameplay position is offset when Windows taskbar is moved to top of screen (ID 07745).
. PWM Display: Removed now-obsolete savestate workaround (video\pwm.cpp)
. Added parameter animation and state masks. Components may have multiple bounds and/or color child elements with state attributes, allowing for piecewise linear position/size/colour animation. Components may have a statemask attribute, allowing for things like using external images to draw a multi-segment LED/VFD display without requiring dozens of outputs for the individual lines or thousands of images for all possible states (Texture caching still never releases anything, so MAME can still exceed the maximum number of textures, but that's a separate issue). Image components with alpha now blend over previously drawn components. Layouts have been changed to use yes/no for inputraw to match what's used for flipx/flipy. External layouts with 1/0 will still work, but complay.py will complain (emu\rendlay.cpp).
. Small optimisation for opaque pixels in image component (emu\rendlay.cpp)
. Correct output alpha for rect and disk components. This corrects alpha for cases when both the rect/disk and whatever it's drawing over are translucent, and also optimises for fully opaque and fully transparent pixels (emu\rendlay.cpp and layout\cgang.lay).
. Use std::fill_n to get better code for modern CPUs (lib\util\bitmap.cpp)
. Catch missing required I/O ports in systems (excluding slot cards). Move explicit template instantiations below all member bodies to make Clang behave (emu\devfind.cpp).
. Device State Interface overhaul
. device_state_entry::value and device_state_entry::set_value now do everything except the register lookup, allowing them to be made public. The debugger expression engine now uses these.
. device_state_entry::dvalue and device_state_entry::set_dvalue have also been made public, theoretically permitting outside code layers to inspect and modify floating-point registers.
. The double specialization of device_pseudo_state_register (now renamed device_functional_state_register) has been added to the core.
. state_add now has an additional specialization that takes both a reference and a write function, using the former for reads only.
. state_max_length has been eliminated in favor of obtaining the relevant info through device_state_entry::max_length.
. he debugger state view no longer adds "flags" as "???" if none have been registered.
. set_state_string has been removed. It was never properly implemented, and it is difficult to see how it could have been done in a useful and consistent way.
. state_find_entry and its typical callers state_int and set_state_int have been inlined for some hopeful efficiency gains.
. Added option to skip repeated imperfect emulation warnings. The option is called skip_warnings, and it must be set in ui.ini (it can be set using the internal UI). Red warnings cannot be skipped; yellow warning can be skipped under certain circumstances. For a yellow warning to be skipped, the system must have been launched in a way that allows warnings to be displayed, in a configuration with the same set of devices flagged with unemulated/imperfect features, within the last seven days, and the warning must have been displayed within the past 14 days. Also fixed a bug with display of the MACHINE_NO_COCKTAIL flag in the internal UI, and increased the size of XML integer attributes to 64 bits.
. Make unimplemented graphics and sound severe warnings. This means you'll get an unskippable red warning for systems that have unimplemented sound or graphics that are otherwise marked working. This also applies to subdevices, so for example plugging a non-working video card or sound card into a computer driver will now cause a red warning. This should make it clearer when a game is playable but missing sound, or when a video or sound card doesn't work. The downside is that this could cause annoyance in a couple of situations. Workstations/servers with unemulated video that have working serial terminals and networking will now cause a red warning, and terminals/keyboards/etc. with missing beepers, key click, etc. will now cause a red warning even if they're otherwise usable. It may be worth making unimplemented controls and keyboard a severe error as well, since plugging in a non-working emulated keyboard is likely to make a system unusable.
. XML: Escape attribute and element content. The previous behaviour was unintuitive - parsing an XML file and writing it out immediately would produce invalid XML if the file contained any ncharacters that needed escaping. It makes far more sense to escape on writing rather than expecting the user to escape input. Added preliminary support for visibility toggles to artwork system. This allows the user to show/hide related elements in a view, with nesting. The view can specify whether elements are shown or hidden by ndefault. Settings are saved per host window/screen per view. There is nno way to set the initial visibility state on the command line. Legacy n"Space Invaders cabinet model" layers are mapped onto visibility toggles. This is not stable yet. In particular, the XML element/attribute names have not been finalised. The new features have not been added to complay.py to prevent them from being used before they're finalised (util\xmlfile.cpp).
. LUA engine: Added load_software, time_until_pos and ioport():type_seq.
. Don't ignore config elements with attributes but no child nodes (emu\config.cpp and util\xmlfile.cpp)
. Get rid of a bunch of _Names - any name starting with an underscore followed by an uppercase letter is reserved
. Fixed STRUCT_MEMBER in audio\segausb.cpp and sound\sp0250.cpp
. Validity: Limit characters allowed in I/O port tags and check ROMs and I/O ports for devices individually (emu\validity.cpp). Catch missing required I/O ports in systems (excluding slot cards) (emu\validity.cpp).
. Use appropriate standard exceptions for reporting errors, allowing libemu to be removed from imgtool and floptool (formats\flopimg.cpp).
. Adding new mechanism for allowing parts of views to be hidden. Changed name of element to "collection" and initial visibility attribute to "visible", and added them to documentation. Also added them to complay.py. Fixed issue with collection inside group, and improved initial view selection behaviour. Updated some internal layouts to demonstrate new features, including et3400, irrmaze, ltcasino, mekd3/mekd4, seawolf and vgmplay. Removed all uses of cpanel, marquee and overlay from internal layouts and removed them from complay.py to actively discourage use. Also cleaned up view names in layouts that were using them in place of spaces, and removed some superfluous name attributes on elements that won't do anything useful with an output value anyway.
. Bulk-updated layouts using bezels without backgrounds or screen. These layouts had bezel elements only. It makes no sense to allow turning off all elements in a layout leaving the user with a blank window (It's possible some of them are suited to breaking up using collections, but that's a bigger job).
. Bulk-updated layouts using backdrops without bezels or screens. These are mostly automatically generated/converted fruit machine layouts. They were fortuitously triggering the "alternate" layout mode by having multiple background elements without overlays, so alpha blending mode was used for all elements.
. Fixed issue that automatically generated unnecessary internal views. Updated a few more internal layouts, mostly bezel-only ones. brkball wasn't using the DMD dots at all (it has a screen). The Aristocrat layouts could use collections to allow buttons and tower lamps to be enabled/disabled independently.
. Updated another batch of layouts. The majority of these were using for control panels. Cleaned up the stactics layout, made laser LEDs use additive blending, and made it possible to hide just the control panel. Added several view options to the Jockey Club family of games. Added ability to show/hide parts of several other layouts.
. Fixed bug calculating group bounds with repeats. Bounds were being miscalculated when the first element inside the group was inside a repeat or a collection. Most visible in md6802. A lot of these were using a black backdrop element to force bounds when either explicit view bounds or an empty element is a better way to achieve the same thing. Bally by17/by35 pinball layouts have had a bit of an overhaul with the three sections of the display now abled to be toggled independently. Ensoniq VFD layouts refactored to reduce a very large number of lines down to a few nested repeats.
. Updated efootb4, einvader and einvaderc layouts to zoom view when hiding score display. Added some optional verbose logging for debugging group bounds calculation.
. Eliminated remaining elements from internal layouts. These layouts have changes to element stacking order that can't be avoided without changing the group structure in the layout files. I think it's harmless, but it's possible it could have had a detrimental effect on (MESS) risc2500 (I tested it and didn't see any changes, but I might not have known what to look for). complay.py: Added basic checks for dupicate collection names. As with other checks of this kind, it doesn't actually instantiate the layout so it doesn't check things when variable substitution is involved.
. Converted video\bfm_dm01.cpp back to using outputs and update layouts. Outputs no longer require string formatting and hash lookups, and only changes to output values result in notifications. Performance is better than before. We never had any kind of post-processing to make the "alternate pixels" screen bitmap look like a DMD, and the bilinear scaling looked awful.
. Print warning messages on encountering deprecated elements
. Cleaned up de_2.cpp layouts using loops and made bounds fit the content. Made caveman (gts80a.cpp) screen match the height of the backglass, fixed bounds and added backglass-only view.
. Fixed some layouts that were depending on emergent behaviour rather than specifying state="0" on components explicitly
. Added support for saving arrays of attotimes and renamed macros to make purpose more obvious (emu\save.h)
. Added emu.plugin table to contain plugin exported interfaces (plugins\boot.lua, plugins\cheat\init.lua). Copy the cheat table to not expose internal state (plugins\cheat\init.lua).
. hiscore.dat: Removed Gauntlet. The high scores are in the NVRAM, these cause more problems then they are worth. Fixed set names.
. Fixed MT07756 (ROM sets incorrectly reported as not found) by partially reverting MAME 0.224: Fixed audit finding sets.
- Android: Auto-discover Clang version. Fixed android builds after mame-0.224 (makefile).
- SDLMAME: Drop MASK from osd\sdl\taputil.sh
- VGM player: Adding new mechanism for allowing parts of views to be hidden. Fixed issue with collection inside group and improved initial view selection behaviour. Updated some internal layouts to demonstrate new features, including vgmplay. Made vgmplay cycle visualiser modes when visualiser screen is clicked.
. Added naming conventions for certain things. This isn't supposed to be too prescriptive. The C++ stuff just codifies some things we've managed to mostly agree on for public interfaces. The stuff for titles/descriptions is also just codifying existing rules so there's something to point people towards. This will need to be refined as we go forward (docs\source\techspecs\naming.rst).
. Fixed Clang version detection under Emscripten
. Netlist and OpenGL improvements: Most OpenGL link issues fixed. Two remain from drawogl.cpp. This isn't working anyhow. "-video accel" now uses WebGL. This allows GL based scaling and provides a performance improvement. Fixed pong and other games by adding another function to the exception whitelist. Target now is mame.html. This allows emrun to be used for testing. mame.js is created as well and thus the current behaviour unchanged (scripts\genie.lua and scripts\src\main.lua).
. Deal with loops when there are parent directory references in #include directives. As an aside, it would be nice if the loops weren't there in the first place (scripts\build\makedep.py).
. Get rid of more inappropriate use of emu_fatalerror
. Removed memarray.h from emu.h
. Removed embed files unintentionally added to Emscripten build (scripts\src\main.lua)
. Replaced simple_list with std::list in parsing. Report too few or too many function parameters in debug expressions as expression errors instead of exiting MAME with a fatal error (debug\express.cpp).
. Added abs, bit, s8, s16 and s32 functions to debugger (debug\debugcmd.cpp)
"Theory is when you know everthing but nothing works. Practice is when everything works but no one knows why.
In our lab, theory and practice are combined: nothing works and no one knows why."