Hi! Here are the screenshots of various tests tools running on my actual Spectrum +3. I can confirm that my mame implementation (when running the 'specpls3' model) displays exactly the same test results as the actual Spectrum +3, *except* for the "Test: Contended NOP" test. According to my actual Spectrum +3, during the Contended NOP test, TState 14490 takes '5' cycles. This differs from my mame implementation (and the Fuse emulator) which both indicate this as being '4' cycles. Which is quite interesting...
Have been using M1 mainly to listen to Pinball ROMs, my Dad and I are avid pinheads. I also have an interest in retro-emulators mostly using RetroPie on the Pi.
I've wanted to add a few new Pinball machines to M1 that are not in the default list, these are "Williams Pinball CVSD" machines. I tried a few times and thought it just wasn't going to work, however I managed to find the offsets in the MAME source code for the missing machines.
I am a bit confused about entries that include multiple lines for the same rom file eg. here is the XML for "Twilight Zone" which is included in M1.xml by default. Notice that rom tzu14.. has four lines. Is this basically loading the rom four times into a 524288 allocation? Also noting this all correctly adds up to the total 1572864. (3x 512k)
But I'm not sure what to do with the last offset as setting this looks like its overlapping (?).. Maybe I'm not understanding this correctly.. I'm assuming that we're basically concatenating the ROM files into one logical block from 0 to 1572864.. I'm sure I've just stuffed up the HEX.. but each time M1 reports out-of-bounds for ww_u14.l1?
This does work, but seems to have several issues.. any ideas?
Please do not discuss that topic here or I will become very angry. I laid out how people can make everyone happy on that thread and nobody's lifting a finger, including Those Who Claim To Care A Lot, so I now consider it a dead issue.
1.49 UE is out but something is screwed up with fullscreen mode. Experiencing freezes when going FS and the menu not appearing up top. Happens on two different machines with fresh config files. Rolled back to 1.47 and same issue.
Ok fixed!!!! Ive been trying things all day and came back to re-read your guys responses. Haze mentioning it wasn't in my ROM path clued me in. I thought the swpath entry in the ini file was where the software roms were located?? I added "software" to my rom path. I was already in the MAME directory in the terminal but I ran ./mame nes -cart smb2u just to be safe, and IT WORKED!! Tried it again without the ./ and it still works!! It only works either way if Im in the MAME directory though. I have the root folder in my path so I can just run mame64 from the command line and play arcade games, but it ONLY works from the command line.. I fired up the MAME GUI, and no dice. Somehow my favorites keep getting wiped out, but when I found and clicked on the NES, it's doing the thing again now where it doesnt open the software list, and wants me to browse to a rom to open, but it won't/can't open them!!! They're working great in Negatron now that I added 'software' to the ROM locations. I don't remember ever having to do that before but maybe I did in an old install. They were just working a few versions ago though, but that was in QMC2 also.. Still don't remember having to put them in the ROM path though. The software path worked for it.
EDIT: Nevermind, MAME magically works now too! Just reopened it a few minutes ago, and now its showing the lists again, and both Castlevania 2 and Donkey Country opened up in MAMEs own GUI! Simple fix for a stupid oversight I guess. Maybe I just needed to relaunch MAME after I changed the rom path or something?
I still think a timer per character cell is going to be a lot of overhead. All the CPUs and various other things like the POKEY sound chip implement device_execute_interface. If you go this way, you can cause synchronisation when things actually change rather than running a pessimistic timer.
Alternatively you could use a timer that triggers at the end of a scanline, but trigger partial updates when something happens that affects rendering. You can check the time in the current executable device's domain at the point where you get a register change etc. to work out how far through the line you are. This would work well enough if only a single executable device (e.g. CPU) can cause register changes,
Today’s the day for our mid-year MAME release. MAME 0.199 includes support for the incredibly elusive Spanish arcade title El Fin Del Tiempo, and the rare Pac-Man hack Titan. Other rare bootlegs added include Come-Cocos (derived from Ms. Pac-Man) and Gran Rally (a Spanish bootleg of Pole Position II).
There are some pretty big improvements to Tatsumi games (Apache 3, Cycle Warriors, Round Up 5), some NMK mahjong games work substantially better (Urashima Mahjong, Mahjong Daireikai, Mahjong Channel Zoom In), and Big Run looks better than ever. War: The Final Assault no longer crashes thanks to a fix in Voodoo emulation.
Floppy drive emulation has been further improved, and a fairly major issue with Apple IIgs and Mac 3.5" drives has been fixed. Sound Blaster direct DAC mode is now supported. Improved Dreamcast GD-ROM emulation allows Daytona USA 2001 to boot. The HP 9000/300 series can now boot from floppy, and the medium-resolution colour graphics option is supported. Tiger Electronics fans can enjoy Battle Arena Toshinden for R-Zone.
Of course we’ve also added more alternate versions of supported systems, software list updates, bug fixes, and internal improvements. You can get source and Windows binaries from the download page.
MAMETesters Bugs Fixed
06980: [Save/Restore] (spec128.cpp) specpls3: Unable to save state (regression). (AJR)
06983: [Sound] (mtouchxl.cpp) mtchxl6k (possibly others): All sounds play too fast. (Carl)
06984: [Graphics] (esd16.cpp) jumppop, jumppope: Missing graphics in first stage. (AJR)
06988: [Crash/Freeze] (kinst.cpp) kinst: Hangs during Attract Mode, noticeable when a fight loads. (Ivan Vangelista)
Galaxy Wars II (Defender bootleg) [Juan Romero, Recreativas.org, The Dumping Union]
Ghost Pilots (prototype) [Brian Hargrove]
Golden Tee Golf (Joystick, v3.3) [hammy, The Dumping Union]
Gran Rally (Spanish bootleg of Pole Position II) [Jordi Beltran Casany, Recreativas.org, The Dumping Union]
Hat Trick Hero '95 (Ver 2.6Asia 1994/11/17) [Artemio Urbina, The Dumping Union]
Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02) [hammy, The Dumping Union]
Jump Coaster (World) [ShouTime, The Dumping Union]
Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M200XX, 200, 100CN) [300wins, Bill D., The Dumping Union]
Metal Slug 3 (NGM-2560, earlier) [Razoola]
Player's Edge Plus (PP0472) Deuces Wild Poker [Brian Troha]
Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (Stratosphere Players Club) [Kemel Haidar, Brian Troha]
Raiden Fighters (US, newer) [Arzeno Fabrice, The Dumping Union]
Viper Phase 1 (New Version, Germany) [Arzeno Fabrice, The Dumping Union]
Machines promoted to working
War Mission (WM 4/6/87) [Jordi Beltran Casany, Recreativas.org, ArcadeHacker, David Haywood]
Clones promoted to working
Head On (Sidam bootleg, set 2) [Angelo Salese]
Head On 2 (Sidam bootleg) [Angelo Salese]
New machines marked as NOT_WORKING
Hikaru Check ROM Board [coolmod]
Mad Dog II: The Lost Gold (3DO hardware) [incog, The Dumping Union]
Olympia Olytext 20 [Robbbert]
Shootout at Old Tucson (3DO hardware) [incog, The Dumping Union]
Visual 550 [Al Kossow]
New clones marked as NOT_WORKING
Air Hockey (6.12?, encrypted) [unknown]
ALG 3DO Bios [Mr Invader]
Donkey Kong Banana Kingdom (satellite) [Will Richardson, Bill D, The Dumping Union]
Ferrari F355 Challenge (twin/deluxe, prototype) [coolmod]
Power Stone 2 (bootleg) [Arzeno Fabrice, rtw]
Puyo Pop Fever (World) (GDS-0034) [Arzeno Fabrice, rtw]
Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi (early development board) [ResO]
The Bally Game Show (LG-6) Germany [PinMAME]
The Bally Game Show (LU-3) Europe [PinMAME]
The Key Of Avalon - The Wizard Master (client) (Rev C) (GDT-0006C) [rtw, ShouTime]
The Key Of Avalon 2.5 - War of the Key (client) (Rev A) (GDT-0019A) [rtw, ShouTime]
The Key Of Avalon 2.5 - War of the Key (server) (Rev A) (GDT-0018A) [rtw, ShouTime]
New working software list additions
hp9k3xx_flop: 300 series Mainframe Tests, 300 series Terminal Emulator, AMS Utilities for 200/300 series, BASIC 4.0 Compiler, BASIC 5.0 Compiler, CS/80 Exerciser, Digital Filter Design, HP BASIC 4.0, HP BASIC 5.1, HP BASIC 6.4, HP Museum Basic 5 Boot Disc, HP Pascal 3.22, HP-UX 5.1, Interactive Test Generator, Techwriter, Texteditor for 200/300 series, Wordwise 300 [Sven Schnelle]
ibm5150: DR DOS 6.0 (French), DR DOS 6.0 Business Update (French, 3.5"), DR DOS 6.0 Business Update (French, 5.25") [breiztiger] PC Games #3, Spontaneous Assembly (Version 2.0) [Foone Turing]
ibm5170: Excel (Version 2.10) [darksabre76]
neogeo: Ghost Pilots (prototype) [Brian Hargrove] Metal Slug 3 (NGM-2560, earlier) [Razoola]
• atetrisb3: Hooked up microcontroller to get working sound. [AJR]
• i8275 DMA refinements: [AJR] * Exclude FIFO characters from counting towards filling character buffer. * Extend DMA up to one character past an “end of DMA” control code.
• wicat: Reduced video glitches with more sensible interrupt handling. [AJR]
• balsente.cpp: Split NVRAM between two X2212 devices. [AJR]
• jedi: Moderate driver overhaul: [AJR] * Split NVRAM between two 4-bit X2212 devices. * Guarantee an invalid checksum when default NVRAM data is used (so that the manufacturer’s high scores will be installed). * Modernized sound latches. * Use WSQ handler to drive TMS5220.
• vta2000: Added speaker sound. [AJR]
• balsente.cpp: Use ACIA devices for sound communication. [AJR]
• x2212: Removed memory interface and cleaned up code. [AJR]
• tms9928a: Exposed internal palette using device_palette_interface. [AJR]
• dynax.cpp: Encapsulated “Rev. 2” blitter as a device. [AJR]
• cidx628: Made this display something again. [AJR]
• tatsumi.cpp improvements: [Angelo Salese] * Removed an ugly kludge in Round Up 5, fixing soft resets. * Added vertical text scrolling to Round Up 5. * Fixed Apache 3 out-of-bounds colors for sprites (trees and buildings). * Fixed Round Up 5 video priority on map screen after a play. * Added background bitmap layers to Round Up 5. * Improved road clipping for Round Up 5. * Make Cycle Warriors sub CPU not stall on soft reset. * Added row/column scroll register select for Cycle Warriors and Big Fight. * Added shadow sprites to Cycle Warriors and Big Fight. * Inverted Oki status for Cycle Warriors and Big Fight – fixes “we got ’em” sample playback in the former. * Implemented per-tile high priority and opacity enable bits for Cycle Warriors and Big Fight – fixes several glitches. * Fixed color banks for Cycle Warriors and Big Fight – fixes fade in/out effects and CRT test colors. * Applied page wraparound for backgrounds – fixes various glitches in Big Fight and Cycle Warriors. * Invert shadow product when a specific register is enabled (used by Big Fight to simulate disco strobe lights).
• ninjakd2.cpp: Attempted to fix bullets not shot by enemies in Omega Fighter. [Angelo Salese]
• taitosj.cpp: Added input buttons mode to kikstart. [Angelo Salese]
• cischeat.cpp improvements: [Angelo Salese] * Fixed road/sprite priorities and long-standing road colors regression in Big Run. * Hand-tuned sound frequencies to match reference for Big Run. * Hooked up sprite DMA to Wild Pilot – fixes flickering. * Added backup RAM to Captain Flag.
• ms1_tmap.cpp: Initialize VRAM to sane default – fixes ugly back pen showing up in Big Run. [Angelo Salese]
• jalmah.cpp improvements: [Angelo Salese] * Re-wrote video emulation using Mega System 1 tilemap devices. * Fixed Urashima Mahjong video priority during gameplay (score display and calls). * Emulated video scrolling partial updates for Urashima Mahjong – fixes winning animations. * Fixed color protection in Urashima Mahjong (girls and test mode). * Wrote a preliminary snippet for sound banking in Urashima Mahjong/Mahjong Channel Zoom In/Mahjong Daireikai.
• cyclemb.cpp: Bumped sprite size in Cycle Maabou, fixed some missing sprites (for example in how to play screen). [Angelo Salese]
• Added AppVeyor build configuration. [balrog]
• Added support for building on riscv64, and made m68000 makefile respect the VERBOSE build option. [Belegdol]
• senjyo.cpp: Simplified starforc background color swap. [cam900]
• seta.cpp: Simplified tilemaps and banking, and added output finders. [cam900]
• ms32.cpp: Identified CPU types, fixed audio CPU clock. [cam900]
• witch.cpp: Attempted to fix garbage graphics after a bonus stage in Keirin Ou. [David Haywood]
• Made floppy emulation more robust, and improved bitstream handling. [John Keoni Morris, Peter Ferrie, O. Galibert]
• markham.cpp updates: [kazblox] * Improved banbam protection simulation – still imperfect, but all graphics are correct and game doesn’t crash. * Marked microcontroller program as good dump based on observations and Phil Bennett’s comments.
• PlayStation GPU: Added missing primitives. [krom]
• buggychl.cpp: Changed microcontroller clock speed to 3 MHz as shown on schematics, and added notes. [Lord Nightmare]
• TMS5220 updates: [Lord Nightmare] * Removed unused time_to_ready and cycles_to_ready functions. * Fixed race condition with m_buffer_low and m_buffer_empty flags not being updated before setting interrupt state. * Fixed issue where Speak VSM command produces endless silence with no VSM connected. * Suppressed side effects on debugger reads. * Fixed conditions for asserting ready signal, and zero FIFO at appropriate times.
• Apple II: Re-implemented Echo II read/write flags and write latch based on hardware tracing. [Lord Nightmare, Tony Diaz]
• alien.cpp: Added hand-made boot ROMs for Pingu's Ice Block, and documented known games. [MetalliC]
• geneve: Added BIOS options for selecting boot ROM, and made genmod a separate machine. [Michael Zapf]
• upd765: Clear ST1.ND on ID scan failure, implemented head load delay, and improved logging. [Michael Zapf]
• debugger: Added command for go_exception, and made save/load aware of address translation. [Patrick Mackinlay]
• sonydriv: Fixed issues with the 3.5" drive reporting disk switches on Apple IIgs and Mac drivers. [R. Belmont]
• zaurus.cpp: Converted to new PXA255 peripheral device interface. [Robbbert]
• vgmplay: Added playback controls and activity indicators. [Ryan Holtz, Tafoid, Vas Crabb]
• sblaster: Implemented direct DAC mode – successfully tested in Scream Tracker 2.2. [shattered]
• ec1841: Added mouse emulation (Logitech bus mouse protocol). [shattered]
• Dreamcast: Made GD_LEND return bytes transferred by DMA rather than bytes remaining – allows Daytona USA 2001 to boot. [snickerbockers]
• Added HP98543 medium-resolution color graphics card emulation. [Sven Schnelle]
• hp9k_3xx improvements: [Sven Schnelle] * Fixed keyboard microcontroller part number. * Removed BASIC ROM cards from the default configuration as booting from floppy works now. * Hooked up NMI line to keyboard controller. * Split out common machine configuration.
• hornet: Added separate DIP switch settings for gradius4 – allows gun to work with default settings in terabrst and sscope. [Ted Green]
• Updated DCS audio to get sf2049 closer to working. [Ted Green]
• Made ROM BIOS macros more intuitive to use, and added a validity check for unselectable BIOS ROMs. [Vas Crabb]
• Machine configuration improvements: [Vas Crabb] * Reduced code duplication in addrmap.h and added support for object finders in more places in memory maps. * Allowed implicit references to owner device in address maps. * Improved syntax for specifying address maps and screen update functions in machine configuration without macros. * Reduced overloading of member function names – it’s less practical without macro helpers selecting desired overload. * Consider floating point epsilon when validating crystal values.
• Cleaned up bulk refactoring of output code. [Wilbert Pol]
• asteroid.cpp: Documented Asteroid Deluxe Revision 3 changes, and corrected Difficulty DIP switch settings. [Brian Troha]
• naomi.cpp: Added an alternate Ferrari F355 Challenge 2 program ROM dump. [coolmod]
• polepos.cpp: Dumped the missing PROMs for grally and confirmed they match the ones from the other bootlegs. [Jordi Beltran Casany, Recreativas.org, The Dumping Union]
• bking.cpp: Updated ROM labels for bking2. [Kevin Eshbach, The Dumping Union]
• pc98 software list updates: [r09] * Re-tested software with current MAME. * Corrected titles and re-labeled disks with their actual names. * Added usage notes for software that needs DOS. * Removed user disks from games where they aren’t included in the original box, and the user is expected to create them. * Removed floppies for CD games that already exist in the CD software list. * Removed notes stating that the FDD format is not supported, as this is no longer true.
• neogeo.cpp: Added Japan NEO-MVH MV1C BIOS. [Razoola]
• alien.cpp: Re-dumped Pingu's Ice Block CompactFlash card. [ShouTime, Dane Biegert, The Dumping Union]
-verifysoftware [<gamename|wildcard>] Checks for invalid or missing ROM images in your software lists. By default all drivers that have valid ZIP files or directories in the rompath are verified; however, you can limit this list by specifying a specific driver name or wildcard after the -verifysoftware command.
So I'm thinking that it might not be hard to implement, in QMC2. But execution might take a very long time, which is why I suspect that option is not available.
I also think startup time (always a concern) would be significantly impacted, reading in a huge sl state cache. So better to just check the roms in use, between sl updates.
I don't mind hitting f10, if/when I decide to play some new sl. I'll admit, though, once or twice, I have also thought: "Wish I could do them all, at once.".
I'm working on implementing the custom cassette-drive used in the Intellivision Keyboard Component.
I have a question about the way updates() happen - I'm looking for some architectural direction
The tape drive can generate interrupts for every decoded bit, nominally 3000bps. Some other drivers (such as the TRS-80) use a higher speed, periodic update function which examines a section of the tape on every update. For example, I could set up a 24000bps timer which looks at the tape, and if there is cause for an interrupt (like the end of a bit), it would generate it. The worse-case latency then is something like 1/8 of a bit, which is probably ok. Obviously, increasing the rate would lower the worse-case latency.
Another approach I thought of would be to set up a timer to go off when the next tape event is (probably) going to happen. At that time, I could process the event (generate an interrupt), and do a "look ahead" of the tape data to setup the timer for the next event. This seems a bit tricky, and I haven't seen a driver that does this, but it would do exact timing and seems like it would work really well.
Does option 2 make sense to anyone else? Am I missing something? Should I go with the first solution because of an issue I'm not seeing?