- New games: Galaxy Games StarPak 4 (prototype), Pirate Ship (ver UAA) and Tekken Card World
- New Non-Working games: Gaelco Championship Tuning Race, GI-Classic EX (satellite terminal), Otomedius (ver GGG:J:A:A:2008041801), Police Trainer 2, Ring Riders (Software version v2.2), MegaTouch XL 6000, Super Derby II (Satellite board), 'Unknown Poker Game' and 'Unknown Sega gambling game (M1 Satellite board)'
- New clones: Knights of Valour / Sangoku Senki (ver. 100, Hong Kong), Martial Masters (ver. 103, 102, 101CN), Prehistoric Isle in 1930 (World, bootleg), Rastan (World, Earlier code base), Sonic Blast Man (US), Street Fighter II': Champion Edition (UPL bootleg), Tokyo Cop (US, dedicated version) and Tokyo Cop (US, kit version)
- New TourVision games (Softwarelist: hash\pce_tourvision.xml): Dragon Egg! (Masaya 1991)
- New PinMAME games: Galaxy Play, Rocky (French speech) and U.S.A. Football (R01u)
- New drivers: clpoker.cpp, giclassic.cpp, mtouchxl.cpp, otomedius.cpp and piratesh.cpp
- New devices: ad7523, cxd1095, i486dx4, k053250ps, s97269pb, s97271p and segakbd_pcb_aburner2
- Dynamic Re-Compiling: Added case for parameter PTYPE_CODE_LABEL in UML instruction disassembly (cpu\uml.cpp)
- I8051 / MCS-51 CPU: Fixed the indirect memory access opcodes dec,inc and xch_a. Indirect access can't touch the SFR and must point to the extra memory above 0x80. This probably fix many machines using this MCU (cpu\mcs51\mcs51ops.hxx).
- I8086 CPU
. Added decrypted opcodes space support
. Fixed jnl flags test
- I386 CPU
. Ignore float exceptions in debugger
. Added a CPUID supporting I486DX4
- Sound Blaster 16: Added save DSP state. Fixed incessant popping before first use.
- YMF262 sound: Added save state support to YMF262 and slot pointer checks.
- CD-ROM: Translate from 2336 to 2048 (Return 2048 bytes of Mode 1 data from a Mode 2 form or XA sector)
- Discrete Netlist
. Turn psring iterator into a real forward iterator that works with standard algorithms. There are a few changes to achieve this: * Renamed to const_iterator since it's immutable. * Typedef iterator to const_iterator for now as there's no mutable iterator. * Added default constrcutor and operator-> required by concept, const-qualify operators. * Removed operator+ and operator+= since it's not a random-access iterator (use std::next and std::advance instead). * Return reference/pointer to a proxy rather than a code_t value from opertator*/operator->. The final change is required to meet the requirement that operator* for two equivalent forward iterators return an equivalent reference. The pstring doesn't actually contain a sequence of code_t, so there's no way to return a reference to code_t directly. Instead, a reference to a proxy object aliased on the string storage is returned. The proxy is implicitly convertible to code_t. The most noticeable side effect is that auto c = *s.begin() or for (auto c : s) won't work. You need to do for (auto &c : s) or for (code_t c : s) instead.
. Changed pstring to use std::string as storage container. This removes all allocation code from pstring. const_iterator is consequently now based on pstring::const_iterator. Removed pstring_buffer. This was class wasn't a good idea. Vas was right: This change did not impact runtime performance. Startup performance (string intensive) increased. Use char32_t were appropriate. Fixed pedantic Clang warnings.
. pstring, pdynlib, pfmtlog refactoring: pstring: Added support for UTF16LE to pstring. Renamed size() to mem_t_size(). Renmaed len() to length(). Added size() == length(). Added empty(). Added simple compare(). pfmtlog: Simplified pfmtlog, added more C++. pdynlib: Added a dynproc type to dynlib to wrap dynamic library calls. Various: Fixed two coverty scan issue. Various Clang warnings fixed.
. Netlist code refactoring: More use of C++ features. Some CRTP in pfmtlog. Demangled code for truthtables. Use more constexpr. Rewrote main loop. Use default constructors and assignment operators were applicable. Optimized 7448 and 9316. All of this has decreased startup time by approx. 25% to 30%. Complex netlists like pong or kidniki are parsed, analyzed and constructed in around 15 ms. Run performance has increased by about 5%. All in all not to bad. A game like pong uses a clock of 7 MHz (after division by 2). Thats 14 MHz clock invocations. Running at over 200%, 28MHz. On a 3.9 GHz Machine about 140 cycles/clock change.
. Refactored 74715 to one device layout. Removed subdevice.
. Parametrized device activation in truthtables and minor optimization (devices\nlid_truthtable.h)
- ISA: Provide proper unitmask for address spaces of any data width (bus\isa\isa.h)
- Konami Custom: Fixed palette-related regressions in Konami GX games (video\k053246_k053247_k055673.cpp)
- Sega Custom
. segajw.cpp: Use 315-5296 for I/O
. segam1.cpp: Added 315-5296 and some placeholder RAM areas
. segas24.cpp and segaybd.cpp: Read inputs through 315-5296
. Sega Rally Championship: Hook up 315-5296 I/O on drive board (does nothing yet)
- Sony Custom: Added CXD1095 CMOS I/O Port Expander
- V9938 video: New device interface for palettes. Created device_palette_interface, which takes over most functionality from palette_device except for the initialization/decoding routines and RAM interface. Updated screen_device and device_gfx_interface to use a device_palette_interface object rather than a palette_device. This necessitates slight alterations to a few drivers and devices. Modified v9938 and v9958 to use the new device_palette_interface rather than a subdevice. This entails breaking a cyclic dependency between device_video_interface and screen_device for this case. A little cleanup V9938.
- alpha68k.cpp: Added missing save_item's because otherwise the sound was missing with autosave enabled (ID 06532)
- astinvad.cpp, boxer.cpp and destroyr.cpp: More timer_alloc changes
- asuka.cpp, flyball.cpp, gaplus.cpp, gcpinbal.cpp and rabbit.cpp: Removed anonymous timers
- atlantis.cpp and midzeus.cpp
. Fixed waveram0 write. Changed conversion to screen coordinates. Added initial blending (video\zeus2.cpp).
. Added texture lookup for RGB555 direct color type (video\zeus2.cpp)
. Added UV scaling (video\zeus2.cpp)
. Increase input FIFO empty interrupt time and start to use address for quad selection
. Let's pretend there is a drive board connected, so OutRun 2 can run with usb enabled and no patches.
. Make 'Chihiro Firmware Update For Compact Flash Box (4.01)' start too (video\xbox_nv2a.cpp)
. Minor driver update
- chihiro.cpp, naomi.cpp and triforce.cpp: Converted avalon20, cleoftp, ghostsqu, gundamos, hotd3, initdv3jb, lupinsho, mj2, mj3d, monkeyba, outr2st, radirgyo, scg06nt, tfupdate, wangmid2 and wangmid2j bad CHD v4 to good v5, track1 and track2 length was restored based on known now data patterns.
- decocass.cpp: Fixed missile colors for Astro Fantasia and Highway Chase
- galgames.cpp and tmaster.cpp
. Improved blit coordinates (video\cesblit.cpp), fixes some missing graphics in e.g. Galaxy Games StarPak 4.
. Fixed OKI6295 CPU1 clock speed in galgames.cpp
- ksys573.cpp: Fixed Guitar Freaks 6th Mix from booting up due to an incorrect flash card memory size. 32MB works for Guitar Freaks 5th Mix as well.
- megaplay.cpp: Use CXD1095 device for BIOS I/O
- megatech.cpp and segaxbd.cpp: Rewrote CXD1095 as a device
- naomi.cpp: Redumped clone 'Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)'
. Documentation updates based on printed IGT materials
. Patriot Poker has multiple Bonus levels
- seibuspi.c and zn.c: When built with MSVC, clear() resets m_buffer size to 0 and m_buffer throws an exception (machine\7200fifo.cpp).
- tatsumi.cpp: Read inputs through CXD1095 device (cyclwarr and bigfight)
- vicdual.cpp: Added 97269-P-B and 97271-P daughterboards for N-Sub. Fixed missing explosion sound.
- vp101.cpp: Improved support for reduced-cost VP050 version
- BeatHead: Removed speedup hack
- Boxer (prototype): Added save state support
- China Gate: Explicitly specify 8-way joysticks for consistency
- Disco Boy: Kill trampoline, removed unneeded prefixes and use bankdev for the first ram bank.
- Janken Man Kattara Ageru: Added DAC type
- Mahjong CLUB 90's: Removed DSW B from the driver as it does not exist on the real PCB (ID 06526)
- Mahjong Sisters: Substitute timer_set with timer_alloc(timer) and timer->adjust()
- Midnight Landing: TMS32025 memory map fix
- New York! New York!: Documented that Taito's T.T. New York New York ROMs match the Sigma set
- PinMAME: Adjust Meg-Aaton clocks to conform with schematics
- Rail Chase 2: Added I/O CPU and expander. There seems to have been an unrelated regression since 0.181 in Rail Chase 2, which now only displays a black screen.
- Sprint 4 and Ultra Tank: Killed anonymous timers, removed unneeded prefixes and added save state support
- Volfied: Removed prefixes and used timer_alloc instead of timer_set
- Wolf Pack: Added save state support, removed unneeded prefixes and moved from timer_set to timer_alloc.
- Input port
. albazc.cpp: Use standard inputs consistent with other hanafuda games. Hanafuda games usually have a mahjong panel for input. Removed hard coded IPT_SERVICE assignments. Assign "Data Clear" to IPT_MEMORY_RESET. Changed "Medal In" & "Pay Out" to standard gamble service buttons (Previously standard service buttons). Changed Lockout "Key" to PORT_TOGGLE type. Payout operation has been clarified and noted at start of driver. Correct "Payout" button to use "IPT_GAMBLE_PAYOUT". Added Hookup hopper to to do list. Added hopper activity addresses to notes. Set IPT_SERVICE & Double up buttons as standard assignments. Set "Ext In 1" & "Ext In 2" as IPT_OTHER.
. aleck64.cpp: Correct Service/Test Button assignments. "Service Mode" which is assigned to IPT_SERVICE is not located in aleck64.cpp - No changes. "Service Button" is assigned to IPT_SERVICE1 (Hard coded keycode removed & default used). "Test Button" is assigned to IPT_SERVICE2 (Test Button is not displayed in Machine input).
. amaticmg.cpp: Removed hard coded key assignment and use default mapping
. ampoker2.cpp: Make various key assignments consistant. Cleanup different assignments for the same buttons across supported games while still keeping true to the Game Notes / Operation instructions. 1. Make "Operator Key" consistant (Use IPT_GAMBLE_SERVICE), 2. Make "Supervisor Key" consistant (Use IPT_SERVICE2), 3. Make "Hopper 1" consistant (Use IPT_OTHER, KEYCODE_Y), 4. Make "Hopper Out" consistant (Use IPT_OTHER, KEYCODE_G), 5. Make "Hopper Low" consistant (Use IPT_OTHER, KEYCODE_H), 6. Make "Return Line" consistant (Use IPT_OTHER, KEYCODE_J), 7. Make "Coin Refill" consistant (Use IPT_OTHER, KEYCODE_R), 8. Make "Payout" consistant (Use IPT_GAMBLE_PAYOUT), 9. Make "TILT" consistant (Use IPT_TILT) and 10. Make "Double" consistant (Use IPT_GAMBLE_D_UP).
. realbrk.cpp: Removed service button hard coded keycode assignment. Removed hard coded key assignment and use default mapping.
- Description changes of Merit Joker Poker (9131-09) and U.S.A. Football (R06u)
- Renamed (sbm) to (sbmj) and (tokyocop) to (tokyocopi).
. 3rdparty: BGFX, BGFX shaders, GENie and BX. Assume LLVM libc++ if __llvm__ is defined but __GLIBC__ is undefined (bx\platform.h). Fixed GENie linking order.
. VIDEO RENDERING SYSTEM: Guard against assert failure on partial updates starting from incomplete first line (emu\screen.cpp)
. Renamed the write-only -printer image instance type to -printout. The former option name conflicts with RS232 printer ports in several drivers (emu\diimage.cpp).
. New device interface for palettes. Created device_palette_interface, which takes over most functionality from palette_device except for the initialization/decoding routines and RAM interface. Updated screen_device and device_gfx_interface to use a device_palette_interface object rather than a palette_device. This necessitates slight alterations to a few drivers and devices. Modified v9938 and v9958 to use the new device_palette_interface rather than a subdevice. This entails breaking a cyclic dependency between device_video_interface and screen_device for this case. Enforce dependencies in various Konami, Sega & Seta GFX devices. Disable palette uniqueness check in divideo.
. Input map fixes: Fixed a longstanding bug that prevented binding several ORed buttons to any input belonging to a non-root device. Fixed a visual glitch when assigning inputs to analog sequences. . Fixed buttons cannot be mapped to more than one key using 'or' logic using internal UI in all drivers with slot-based controllers (ID 06519).
. Fixed selecting a new ROM file through the internal UI for consoles via external path ((MESS) a2600, a7800, coleco, genesis, nes and snes) (ID 06531). Fixed UI 'Switch Item Ordering' corrupts software list (ID 06402).
. MEMORY SYSTEM: Removed direct_update from the core (emu\emumem.cpp)
. Fixed issue that could cause bogus arguments to be reported incorrectly (util\options.cpp). Examples: 'mame -whatever nes' would previously be reported as "Unrecognized argument: nes".
. SOFTWARE LIST
. Fixed a bug that caused "Switch Item Ordering" in the software list menu to dupe entries (ID 6402)
. Changed a lookup within the softlist code to use std::find_if()
. Introduced an 'util::arbitrary_clock' template class, to represent a clock that "knows" when the epoch starts. Converted the NTFS filetime code and Mac datetime code to use util::arbitrary_clock. This is in preparation for a bigger change to Imgtool where I eliminate usage of time_t.
- MAC OS X: Fixed OS X tools build when MAME_DIR includes spaces (src\tools.lua)
. Fixed a pedantic MSVC warning in emu\dipalette.h
. Made a number of methods be const correct and static where appropriate. Also changed a few methods to return 'bool' when appropriate.
. More robust memory access operator parsing (debug\express.cpp)
. Fixed writes to decrypted opcode memory (debug\debugcpu.cpp). Fixes problem in the debugger and the cheat engine as currently the writes to opcode memory are not handled correctly, so separated EXPSPACE_RAMWRITE and EXPSPACE_OPCODE case statements to allow opcode writes to access the correct memory. Example: In flicky this will now disable cat collisions with the main sprite: maincpu.ob@3ac6=c3. This is the simplest way of updating this, EXPSPACE_OPCODE is now a copy of EXPSPACE_RAMWRITE except it uses AS_DECRYPTED_OPCODES instead of AS_PROGRAM. This method means I've got a lot of work updating a lot of cheat file warnings ...but this is the correct way of doing this.
. Make debugger 'dasm' command able to traverse virtual spaces with unmapped holes. Previously, 'dasm' would enter an infinite loop if it hit an unmapped pc, continuing to grow the output file until the program was killed (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."