The Emulation Realm


What's New:

- New games: Hot Chilli (95103, v0104) and Mahjong The Mysterious Orient Returns [BET] (Japan, v1.00)
- New Working games: Multi Win (Ver.0091, encrypted) and Skelagon
- New Non-Working games: Dallas Poker, Kajot Card (Version 1.01, Wien Euro), Neo Print - European Version (World) (T4i 2.00), Neo Print - Popeye (Japan) (T4i 3.04), Pong Boo! 2 (Ver. 1.31), Rally Point 2 and 'unknown Poker 'W''
- New clones: Batsugun (bootleg), Batsugun (older, set 2), Dogyuun (oldest set), The House of the Dead (Revision A), Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 102, 102, 100HK), Magic Card Export (v4.01), Magic Card Export 94 (v2.9a), Magic Card Export 94 (v2.11a, set 2), Moon Cresta (Electrogame S.A. Spanish bootleg, set 2), Thunder Dragon (bootleg with Raiden sounds, unencrypted) and unknown 'Space Invaders' gambling game (unencrypted)
- New AGEMAME games: Double Top (JPM) (SRU) (revision 13, £2 Jackpot), Lite A Nudge (JPM) (SRU) (£2 Jackpot), Lite A Nudge (JPM) (SRU) (revision 17F, 5p Stake, £1 Jackpot), Nudge Double Up (JPM) (SRU) (revision 17, 5p Stake, £1 Jackpot) and Nudge Double Up (JPM) (SRU) (revision 17, 5p Stake, £1 Jackpot, lower %)
- New drivers: hotchili.cpp and rallypnt.cpp
- New devices: cps2comm and fruit_samples

. Fujitsu MB884x: Uppercase mnemonics and removed opcode explanations from DASM (mb88xx\mb88dasm.cpp). Mask ram r/w and read_r to 4-bit (mb88xx\mb88xx.cpp).
. H8/5xx: H8/500 disassembler updates. Added some spaces between instruction operands. Render just the first byte of any illegal instruction (cpu\h8500\h8500dasm.cpp).
. NEC V2x/3x Added support for EXT reg,imm4 and INS reg,imm4 (nec\necinstr.hxx)
. NEC V53A: Optionally resynchronize to the implicit clock domain on clock frequency change (emu\device.cpp and emu\diexec.cpp; cpu\nec\v5x.cpp)
. Texas Instruments TMS9995: Byte write to the decrementer fills the other byte with the same value. Note: Tests on a real 9995 show that both bytes have the same value after a byte operation.
. Zilog Z80
. Improved timing within instructions. This allows improved emulation of bus contention in the (MESS) ZX Spectrum family. Also updated Z80 timings for MSX, Amstrad CPC and Sega System 1/2.
. Fixed "floating" int for (MESS) Spectrum 48k. Now border in demos stays steady and not shaking. Removed undesired state var in cpu implementation.
. Bug fix for 16-bit operands
. Zilog Z80180/Z8S180/Z80182 and Hitachi HD64180RP: Added callbacks for tend; decrement bcr1 when DMA channel 1 is active (cpu\z180\z180.cpp).
. MIDI: Fixed Windows MIDI callback signatures (portmidi\pm_win\pmwinmm.c)
. NEC uPD7759: Added support for mode switching (sound\upd7759.cpp)
. 6821 PIA: Removed some unnecessary 6821 readca1_handler, readca2_handler and readcb1_handler hookups (drivers\arachnid.cpp, by17.cpp, by35.cpp, calomega.cpp, s8.cpp, s9.cpp and starrider.cpp)
. 7474 TTL: Fixed use of uninitialised members (machine\7474.cpp)
. ATA: Fixed save state for 8-bit mode (ata\atahle.cpp)
. Discrete Netlist
. Netlist lint, first version of a FAQ and small code changes. Added a first version of a FAQ. Use better error messages in pfunction. Made member functions static where appropriate in nld_solver.
. Reduced the use of macros by converting defines into C++ constants. More minor code clean up.
. Standalone makefile and prototype modifications. Updated netlist makefile to more recent compilers. Prototypes for NETLISTs in macros are now created Apply ctidy recommendations. Python None in
. Use templates to compile with NETLIST_CREATE_CSV=1 (machine\netlist.cpp)
. Fixed standalone nltool building with NVCC (NVIDIA CUDA Compiler). NVCC 11.3 (latest Cuda tools) has an issue with some auto x (some variable) declarations.
. Improved PPMF target support and test coverage. This addresses most of the issues described in #8590. Fixed standalone Visual Studio 2019 builds, including support for Clang toolchain. Added static stub to PMF to support MSVC ABI. Better aligned ppmf syntax with MAME's delegate syntax. Added tests\test_ppmf*.cpp testing examples given in #8590. Also worked around issues some versions of Apple Clang have with 'Standalone makefile and prototype modifications'.
. Pointer to member function code. Fixes to address PR #9752 and issue #8590 / EMSCRIPTEN (#9773). Changed comments in ppmf.h. Added support for function desciptors (IA64). sizeof(size_t) may be different on build targets make plib::hash use uint64 to ensure consistent static solver hashes across platforms (EMSCRIPTEN). Moved constructor and member functions outside the class declaration with the exception of "call" member functions. Updated comment on accessing RDX. Added more test cases. Removed execution bit on certain files. I have separated out the raw processing code into 'ppmf.cpp'. I have also taken first steps to clean the abi identification. The code submitted now supports: a) The unknown virtual inheritance case with specific code for MSVC for simple (i.e. scalar, void, reference, pointer) return types using the optimized code. This is the test case only supported under MSVC and which should return 7. Please have a look at the code. Basically m_vptr_offset is an index into a pointer table. It needs to be multiplied by 'sizeof(void *)'. b) If you enable PPMF_EXPERIMENTAL complex return type member functions for MSVC will also use the optimized code path. This is explained in detail in the code in ppmf, including caveats and possible solutions. c) Enabling PPMF_USE_MAME_DELEGATES will use 'src\lib\util\delegate.h' as a replacement for 'ppmf.h'. This allows to run the same tests ('nltool -c tests' from standalone build) as for the ppmf code. d) The code now also supports 'Clang-CL'. e) sizeof(size_t) may be different on build targets. Make plib::hash use uint64 to ensure consistent static solver hashes across platforms. This fixes loading static solvers (if enabled) on EMSCRIPTEN.
. Fixed detection of Clang versions with noexcept issue and added feature constants for C++ standard library version (netlist\plib\pmatrix2d.h and ptypes.h).
. More C++ and less macros: Significantly reduced the use of unused_var and replaced it with [[maybe_unused]]. Use enum class in ppmf.h. Changes to testing code in ptest.h: Catch exceptions in more places. The verbosity of the output can now be controlled. Display of test stats totals. Added support for cspell. Fixed various typos. Fixed SUBTARGET=nl build. Fixed more file permissions. srcclean and add fix_permissions target to netlist makefile.
. Flash ROM: Fixed address mask for SST 39SF040 (machine\intelfsh.cpp)
. Floppy
. Changed floppy_image_device::identify() to take std::string_view instead of std::string (imagedev\floppy.cpp)
. If waiting for additional command bytes, treat a data register read as an open bus write (tested on real hardware) and always trigger the DRQ line even if in nodma mode (machine\upd765.cpp).
. I2C Memory
. I2C Memory and derived devices: Only acknowledge correct I2C device-id (machine\i2cmem.cpp)
. Added FIXME comments to badly behaved I2C target devices. I2C slaves should only ACK their own device-id and NAK all others. SDA output should only change state while clock is low. Idle state of SDA must be high (machine\pcf8593.cpp, machine\x76f041.cpp, machine\x76f100.cpp, sound\mas3507d.cpp and machine\zs01.cpp).
. MC6850 ACIA: Initialized receive section (machine\6850acia.cpp)
. MOS 6522 VIA: Fixed (MESS) Commodore LCD real time clock reading, it relies on the RTC chip being able to ground PORT A while it is set to an output. Which is documented in the 6522 datasheet as being possible. It's NMOS, so it has weak pull ups and doesn't drive it's output hard. However due to a bug in the prototype ROM code, it currently has the date and month swapped round.
. PowerVR 2: Naomi rendering fixes. Allow rendering non-textured sprites (filled boxes), causes spritetest to render properly. Fixed alpha blending for textures to key off of the right value. Some code cleanup.
. Z80 SCC Channel: Fixed a cast-to-bool that broke detection of changes to one register bit (machine\z80scc.cpp)
- atlantis.cpp, seattle.cpp and vegas.cpp
. Mask logging of sio_r for vegas.cpp
. Use logmacro.h helpers for debug logging (machine\midwayic.cpp)
. Updated CarnEvil 'Unused' dipswitches based on the operator manual and verified via the service menu.
. Fixed reversed dipswitch names (EPROM-based Test and Disk-based Test)
- avalnche.cpp: Changed periodic interrupt to scanline interrupt. Added watchdog timeout.
- beezer.cpp, cheekyms.cpp, dribling.cpp, n8080.cpp, redclash.cpp, seicross.cpp and toratora.cpp: Use raw timing parameters for screen
- bfcobra.cpp: Fixed interface to upd7759 sounds. Interface to upd7759 was using start and reset inputs when should've been using mode and reset.
- exidy.cpp: Got rid of duplicate coin inputs. Partially addresses GitHub #9757. Fixes Coin 1 and 2 are listed twice in the key mapping in Venture and Mouse Trap (ID 01288). Coin 2 doesn't work for Targ and Spectar, but that isn't a regression (it was already broken, not sure if error in schematics, game bug or emulation issue is to blame). Dipswitches and locations are still a bit of a mess, too.
- funworld.cpp: Use the decryption PROM for clone Multi Win (Ver.0091, encrypted). Promoted game to working. Use the decryption PROM in other set where available, too (Mega Card and Power Card).
- iteagle.cpp: Adjust processor clock. Gives proper 1ms ostick now. Added default console terminal serial port settings (machine\iteagle_fpga.cpp).
- ksys573.cpp: Don't create an insane number of textures for fghtmn and pnchman internal artwork (layout\pnchmn.lay). Fixed layout\pnchmn.lay alpha channel values.
- littlerb.cpp and megaphx.cpp: Correct visible dimensions of screen (machine\inder_vid.cpp)
- magicard.cpp: Added technical notes and moved the PCB layouts to the ROM load zone for consistency
- megatech.cpp: Fixed crash in service mode
- nemesis.cpp: Correct dot clock
- neogeo.cpp: Work around rendlay bounds issue (layout\neogeo.lay)
- rbmk.cpp: DIPs are read correctly now
- slapfght.cpp
. Correct sprite placement. Note: Partial hand-made schematics don't show a buffer, but the games most definitely need it. Could be the second half of the ram, which seems otherwise unused, but it would be weird bandwidth-wise. It's not double-buffering through page swapping, sprite updates are incremental.
. Hooked up flip screen output to MCU for Alcon and Slap Fight clones (machine\taito68705interface.cpp).
- redclash.cpp: Added raw parameters for screen and addressable latch devices
- snookr10.cpp: Realigned the ASCII diagrams and cleanups
- system1.cpp: Identified dipswitches for Shooting Master and Ufo Senshi Yohko Chan (ID 08303)
- umipoker.cpp: Removed Coin 2 and Coin 3 inputs (these appear to do nothing) and swap Coin 1 with Key In
- usgames.cpp: Fixed debug assertion in all US Games (ID 08306)
- vigilant.cpp:
. Fixed sound in Bowmen by allowing it to see the area of ROM with music data
. Correct video timings for Vigilante. Note: Video timings were measured using a logic analyzer by atrac17 on an original PCB. The results were reviewed by Jose Tejada.
. Cleanups & modernization. Replaced legacy interrupt generators with vertical blank and scanline timer callbacks. Added presumed raw timing parameters for all games, based on known XTAL values. Correct maincpu XTAL value for Buccaneers.
. mpu5sw.cpp: Tidied another batch of slot machine layouts
. jpmsru.cpp: Fleshed out I/O and added layouts. Added JPM SRU 200-step pattern to machine\steppers.cpp. Added device for simulated fruit machine sounds (audio\fruitsamples.cpp).
- Bad Lands: Added missing PROMs to clone Bad Lands (Modular System)
- Beezer: Replaced bankdev with memory view
- Bubble Trouble - Golly! Ghost! 2 and Golly! Ghost!: Use generic output strings. NOTE: Update external artwork file. Fixes score LEDs not hooked up in Bubble Trouble - Golly! Ghost! 2 (ID 07768).
- Cheeky Mouse: Modernized VBLANK interrupt
- Cherry Bonus III: Decrypted clone Cherry Bonus III (alt, set 2), needs correct address map.
- Cherry Master I: Fixed colors/bitplanes and added bruteforced PLDs to clone Channel Three
- Ghostmuncher Galaxian (bootleg): Fixed colors that have been wrong since MAME 0.124u1 (ID 03729)
- Gladiator: Removed old simulation of Gladiator MCUs (unused for a while now)
- Head On: Added correct control prom to clone Head On N
- Krokha: Fixed "Attempt to register save state entry after state registration is closed"
- Lucky 7 (Impera), Puzzle Me! and unknown Poker 'TE06': Added ASCII PCB layout
- Monkey Magic: Implemented Monkey Magic flip screen & multiplexed controls. The dump is likely from a cocktail board as the screen flipping is the only indication of which player is up.
- Pango Fun: Removed unnecessary screen legacy setup and added QA notes
- Performan: Partially guessed video adjustment
- Salamander: Fixed coin inputs in Salamander and clones (ID 08315)
- SF-X: Added missing first 4k from SF-X maincpu to clone Skelagon (Game now playable)
- Space Force: Modernized interrupt handling and fixed freeze on soft reset (ID 08261)
- Space Invaders: Removed cocktail inputs from clones Space Attack II (bootleg of Super Invaders) and Super Invaders (Zenitone-Microsec)
- Space Pokan: Fixed out-of-bounds access on POST VROM test (ID 08307)
- Super Dead Heat: Demoted to MACHINE_IMPERFECT_SOUND. Analog filters and actual speaker arrangement are not emulated.
- Super Street Fighter II: The New Challengers: Added TOURNAMENT board communication simulation for the 'Super Street Fighter II: The Tournament Battle' clones (machine\cps2comm.cpp). See YouTube:
- Vortex: Added color video output emulation
- Williams Multigame: Fixed black screen or resets when a game is chosen from the menu (ID 08316). Fixed rom loading. Saved 128k of memory. Fixed Defender rom map.
- Yatterman Plus: Dumped I/O board ROM
- Fixed rom names in goldstar.cpp, magicard.cpp, nmk16.cpp, seta.cpp and xain.cpp
- Dipswitch fixes in 8080bw.cpp, jpmsru.cpp, rbmk.cpp, seattle.cpp, system1.cpp and vegas.cpp
- Description changes of Batsugun (older, set 1), Cherry Bonus III (Ivanhoe V46-0799), Dardos, DDRMAX - Dance Dance Revolution 6th Mix (G*B19 VER. JAA), DDRMAX2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA), Each Way Nudger (JPM) (SRU) (\xa32 Jackpot), Each Way Nudger (JPM) (SRU) (revision 20, 5p Stake, \xa31 Jackpot), Each Way Nudger (JPM) (SRU) (revision 26A, \xa32 Jackpot), Each Way Shuffle (Barcrest?, set 1, revision 16), Each Way Shuffle (Barcrest?, set 2, revision 8a), Honey Doll, Lucky 2's, Magic Card Export 94 (v2.11a, set 1), Mahjong Hourouki Part 1 - Seishun Hen (Japan), Moon Cresta (Electrogame S.A. Spanish bootleg, set 1), Wonder Boy - Monster Land (XXX) (ID 06443) (ID 08321), Nudge Double Up Deluxe (JPM) (SRU) (revision 10, 5p Stake, \xa31 Jackpot), Nudge Double Up Deluxe (JPM) (SRU) (\xa32 Jackpot), Reikai Doushi - Chinese Exorcist (Japan), 'unknown 'Space Invaders' gambling game (encrypted, set 1), unknown 'Space Invaders' gambling game (encrypted, set 2), Thunder Dragon (bootleg with Raiden sounds, encrypted), Thunder Dragon (bootleg with reduced sound system) and 'unknown Compumatic ProSPDP based darts machine'
- Renamed (hotd) to (hotdo), (j_ewnd20) to (j_ewn), (j_ewnda) to (j_ewnb), (j_ewnud) to (j_ewna), (j_nuddup) to (j_dud), (j_nuddup2) to (j_duda), (unkdarts) to (dardos) and (vgoalsca) to (vgoalsoca)
. VIDEO RENDERING SYSTEM: BGFX: Honour texture wrap flag (bgfx\chainmanager.cpp and drawbgfx.cpp)
. DEVICE: Optionally resynchronize to the implicit clock domain on clock frequency change (emu\device.cpp and emu\diexec.cpp; cpu\nec\v5x.cpp)
. INPUT: Improved display name scheme for joystick axes and buttons.
. FILE SYSTEM: Use visitors with variants where it makes sense (formats\fsmeta.cpp)
. UI
. Added ability to restrict tiles to integer scale factors. Also encapsulated things a bit more and made the UI manager hold onto the storage rather than keeping it in file statics (ui\viewgfx.cpp).
. Remember orientation, position and scale per tilemap. More encapsulation. Fixed some cases where no tiles would appear with tall or wide aspect ratio windows (ui\viewgfx.cpp).
. Do not lose slot card name when setting slot card BIOS (emu\emuopts.cpp)
. Use unordered map for session data, to tempt fate with toolchain bugs (ui\ui.h).
. Device Network Interface: Added MTU paramter and removed unnecessary floating point calculations (emu\dinetwork.cpp)
. Use finders, templates and other small cleanups (4enraya.cpp, appoooh.cpp, brkthru.cpp, firetrap.cpp, gstriker.cpp, gunsmoke.cpp, pacland.cpp, paradise.cpp and vball.cpp)
. Added hardware infos for acrobatm, atetris, calibr50, commando, ikari, tnzs and xsleena
. Detect joystick reconnection with SDL
. Prefer the X11 SDL video driver on Linux (sdl\sdlmain.cpp)
. Initial GCC 12 support for Fedora 36. Fixed error flagged by GCC 12 (mips\mips3.cpp).
- Compiling
. Init variables for Coverity software (jaguar.cpp, nwk-tr.cpp and taitogn.cpp).
. Updated minimum required SDL version to 2.0.6 for all targets, added note that Python 3 is included with Xcode and updated instructions for downloading stand-alone Python 3 for MacOS (docs\source\initialsetup\compilingmame.rst).
. Fixed SUBTARGET=nl build (Compiles all drivers using netlist code)
. Suppress compile warnings in asmjit with GCC 7 (scripts\src\3rdparty.lua). Sync AsmJit with upstream. Fix for building with clang 14 as asmjit uses | & operators on bools (scripts\genie.lua).
. Improved version detection in str_to_version. Don't treat hypen and dot as the same thing - it will cause issues with pacakge revisions. Cleaned up some LUA code as well. Also show warnings about potentially uninitialised stuff with GCC 12, just don't make them fatal errors (makefile and scripts\genie.lua).
. Removed superfluous semicolons from various source files
- Debugger
. Added time command to MAME debugger. Returns current machine time. Added debugger time command to docs (docs\source\debugger\general.rst).
. Option-related changes: Eliminated -mode option that has done nothing for years. Allow -basepc address and -skip count to be specified in octal (tools\unidasm.cpp).