=============================================================================
N E W S  -  F E A T U R E S  -  F A C T S  -  S U P P O R T  -  C H A N G E S
=============================================================================



UPCOMING OR DUMPED GAMES FOR MAME 0.286

Akai Katana
0.240: Removed Akai Katana (2010/ 8/13 MASTER VER.) following a request by exA-Arcadia, current rightholders [O. Galibert].
0.192: Bicycle Repairman added 'Akai Katana (2010/ 8/13 MASTER VER.)' (Cave (AMI license) 2010).
Other Emulators: * Demul

Baby Dream
1st December 2015: Smitdogg - Caius got Baby Dream, a Korean Mr. Driller game.

Baseball Heroes
25th January 2018: Smitdogg - SpinalFeyd dumped Baseball Heroes 2010 Winner, System Disc and Application Disc 1 and Disc 2.
23rd August 2012: Smitdogg - We got a box of Baseball Heroes system and application discs. Included are discs for: Baseball Heroes 2, Baseball Heroes 3, Baseball Heroes 2008, Baseball Heroes 2009 and Baseball Heroes 2010 Winner.

Basket LC
29th January 2010: Smitdogg - We threw in money with TeamEurope to help pay for some boards (like Basket LC/Bootleg). Thanks to a donation from Rene Single.

Battalion
1st February 2014: UnMAMED - Simplistic version of the earlier Namco game Tank Battalion. This is an example of a "test board" that is sold in empty Japanese universal arcade cabinets, ready to have separately purchased games inserted into them. However, by Japanese law, an arcade cabinet must be sold with a game, thus stripped-down games such as this are included. Some more examples are at Beep Game Center blog (https://beepgamecenter.wordpress.com/2016/08/11/arcade-test-pcbs-english-version/). More information from Guru: Namco Battalion is a small test board. I have one here. it contains only a single chip, it's a microcontroller with internal ROM. its similar (but not the same as) the type of chip that I trojan dumped from Namco NA1/NB1//System11 etc. aka C70/C75/C76. The number on it is C73.
1st August 2009: Smitdogg - As some of you probably already know, there used to be a law in Japan where cabinets had to be sold with a game in them. To deal with this, companies had 1 or more PCBs they could produce super cheaply that they would include in the cab. For Namco this game was Battalion (1993). While it looks like it's from the early 80's, it actually uses a rom that isn't so simple to dump, so that part is on hold, but we do have a picture and a high quality video of it (https://youtu.be/HzMeT5Lm1VE) thanks to Stefan Lindberg.
20th July 2009: Stefan Lindberg - Battalion (1993) from the Namco "Video Mini PCB". I don't have all facts about this game but i have heard that at that time in Japan so was all arcade cabinets needed to be sold with an game and therefor they made simple games like this to go with the cabs.

Beavis and Butt-Head
9th April 2016: Smitdogg - I heard the disc of it was dumped on the floor of California Extreme years ago, I'm not sure if the arcade system used a different bios than the original 3DO but I think it's more an issue of 3DO not being emulated in mame.
8th April 2016: Eurogamer.net - The Beavis and Butt-Head arcade game prototype restored: http://www.eurogamer.net/articles/2016-04-08-the-beavis-and-butth-head-arcade-game-prototype-restored. There was a Beavis and Butt-Head arcade game prototype that never turned into a finished product. That arcade game has not only been uncovered, it's been restored. Galloping Ghost Arcade in Chicago managed to get its hands one of the ultra rare Beavis and Butt-Head prototypes built by Atari in 1996 to cash in on the superstardom of the show. Only 12 were made. Galloping Ghost Arcade found the prototype wouldn't work, so set about restoring it to working order. The work done was explained in a Facebook post (via Arcade Heroes): When we received the cabinet, its proprietary CD drive was not working and the game was completely dead. The drive had an odd ribbon cable we'd not seen before. The jamma based PCB looked to be in very nice shape as did the entire cabinet. The CDs would not recognize in a PC so we were unsure of their functionality. The cabinet was very clean and contained the original sales documentation stating it was sold at an MTV auction in 1999 and was one of only 12 made. I'm certain not all 12 are still in existence any more. Our is Prototype #9. While the game would not start, when the reset button in the cabinet was pressed, a 3DO logo would display. That sparked the idea to go do a little research on the 3DO. It quickly looked like the drive in the old Panasonic 3DO used the same cable. We went out the next day and found a used 3DO and opened it up. Taking the drive out and just connecting it to the PCB did not start the drive properly. So we put the drive back in the 3DO and let the Power go from the 3DO to the drive and the data cable go to the Beavis and Butthead PCB. Moments later Seth Young and I heard the incredibly recognizable music of the Beavis and Butthead theme song. Now it is available for all to play! The game had beat 'em up elements with mini-game bonus rounds. Sounds good, right? Wrong. Feedback tests suggested the game wasn't up to much and it was cancelled. This week the restored prototype was added to the Galloping Ghost Arcade floor, if you find yourself in Chicago and fancy a punt. The 2011 video shows the prototype in action: https://www.youtube.com/embed/ZD5JuRc7fN4.

Bishi Bashi Championship Online
5th May 2012: Smitdogg - We picked up the discs for Bishibashi Champ Online.

Bowler Strike Zone
17th December 2004: Dumping Project - Randy bid for what is supposed to be a Williams board called "Bowler Strike Zone" or some such thing (haven't found out what it actually is yet).

Chaoji Da Man Guan 2 Plus
18th March 2024: Guru - Here are a couple of early work-in-progress pics from Chaoji Da Man Guan 2 Plus (IGS 2000) thanks to quick work by Osso.

Chara Medal Island Pocket Monsters Sonansu ga Koronda
23rd February 2012: Guru - Some nice items arrived from Japan this week: Chara Medal Island Pocket Monsters Sonansu ga Koronda (ROMs only).

Chara Medal Island Dragon Ball Z Bucchigiri no Tyoukessen
23rd February 2012: Guru - Some nice items arrived from Japan this week: Chara Medal Island Dragon Ball Z Bucchigiri no Tyoukessen (ROMs only)

Cowboy
12th January 2012: Smitdogg - Andrew Welburn found and dumped what appears to be an extremely rare early Taito game labeled "Cowboy" running on modified Space Invaders hardware.

Cowboy Up
5th July 2018: Smitdogg - Thanks to donations we picked up an inexpensive medal game called Cowboy Up.

CPS1 14-in-1
15th August 2009: Guru - From Smitdogg/The Dumping Union we got 14-in-1 CPS1 bootleg.
2nd August 2009: Smitdogg - We got a CPS1 14-in-1 PCB set. This has 14 Capcom games and some are hacks. One of them is a hack of Final Fight that lets you play as enemies. It uses an original main board. The DIP switches have been replaced with cables that go to the top board. The C-board is original too, with no battery and the mod applied described on Tim's page about CPS1 revival (one pin cut and tied to +5V). There's an extra JAMMA adapter with an MCU on it (probably contains the menu, the manual says 'hold start for 5 seconds to bring up the menu', and this intercepts it). There are 4 unknown scratched chips on the top board. The rom on the top board nearest the DIPs is a common 4M SOP44. The 2 MX chips are 16M SOP44. The other 3 are 512M SSOP70. We can't dump SOP70s quite yet though, unfortunately.

Crazy Kong II
1st June 2012: Smitdogg - Got an impossibly rare version of Crazy Kong II upgraded by Linear Electronics. It has an added daughter card with an extra rom, dip switches, and some other chip which is sanded down. Maybe a PAL or just RAM. What does the card do? Most likely it speeds Mario/Jumpman up, possibly similar to the speed of a chicken with his head cut off.

Crazy Otto
0.148: Crazy Otto history writeup and documentation [Steve Golson].
0.145u7: GCC sold Crazy Otto to Midway, who then made minor modifications and turned it into Ms. Pac-Man [hap].
10th December 2009: Andrew - The board and ROMs are from October 12, 1981. The board is the same one from their first visit to Midway on October 9, 1981 but the ROMs from that version have yet to be located.
9th December 2009: Andrew - I'm happy to report that I received word from Steve Golson this morning that Crazy Otto is alive and well. The Ms. Pac-Man/Crazy Otto story along with screen shots (courtesy of MAME) will appear in the January issue of GameInformer which should be out next week. Gameplay video will follow at their site or posted soonish on YouTube. The Crazy Otto prototypes (yes there's more than one) will be submitted to MAME early next year. For me, this ends a journey I started over seven years ago when I first contacted Steve about the existence of Crazy Otto and it's possible preservation in MAME. He endured almost monthly e-mails from me and still managed to find some time to make this happen. I am still not over the shock that Crazy Otto will once again "scuttle about maze, eating dots." Thanks Steve!

Cyber Sterra
13th October 2012: Smitdogg - ShouTime somehow got the impossibly rare Cybersterra boardset from the peak of Taito's arcade hardware awesomeness, 1993. According to rumors on the web, only 50 units were made and some were later converted. I've never seen it for sale ever. Unfortunately he is out of town and I lack the patience to wait on announcing it until getting pics from him so I'm just using pics from the web but, we got it.

Daemon Bride
3rd November 2012: Dullaron - Good thing no ROM's and no MAME require to run this. Run on Windows at full speed.
1st November 2012: CTOJAH - As title says (Daemon Bride), exact dump from the exboard is floating on internet since this Monday (29-10-2012). So I think this game belongs to MAME set (it's not changed/hacked in any way).

Dai Ban City
14th April 2005: Guru - As part of our never ending shopraids, another package arrived from Hong Kong containing a couple of cheap skill-based gambling games: A-Plan and Dai Ban City (Dynax).

Dinomax
17th May 2018: Smitdogg - Thanks to Ralph Gutierrez we got a dump of Dinomax.

DoDonPachi SaiDaiOuJou
0.240: XIONGTEAM added 'DoDonPachi SaiDaiOuJou (2012/ 4/20)' (Cave 2012). Use rom u2 clean dump, with no bad blocks and empty settings sector [MetalliC].

Dynamite Baseball '98
8th February 2012: Smitdogg - I redumped some of the mask roms for the original Dynamite Baseball '98 and Layne got the roms loading in the source.

Fighting Jam Magic Gate
12th March 2009: Guru - Capcom Fighting Jam Magic Gate security dongle arrived from Japan.

Flash Poker
29th January 2010: Smitdogg - We threw in money with TeamEurope to help pay for some boards (like Flash Poker/Bootleg). Thanks to a donation from Rene Single.

Fortress
2nd November 2023: OBS GAME RESEARCH - Sega Fortress (1979) (https://youtu.be/U6pu17lvabw). This is a document video of the actual arcade machine. This information is published as a supplement to the content distributed by Substrate Lover, etc.

Four Play
7th July 2016: Smitdogg - Blair Quinney dumped Four Play by Merit.

Franco 10
14th February 2009: f205v and Mirko Buffoni dumped Franco 10 (High Video 2000).

Galaxian Fever, Happy Planet and Shooting Paradise
25th July 2023: Guru - A few years ago I picked up some unknown non-JAMMA Namco boards that use a Hitachi SH2 CPU. About 1 year ago I contacted one of the (now mostly retired) MAME devs and asked if he was interested in looking at these games. He replied he was interested so I dumped them and sent the ROMs over. He replied that the code for the SH2 was missing but was able to extract the graphics and identify all three PCBs as Galaxian Fever (PCB code Z030), Shooting Paradise (PCB code Z029) and Happy Planet (PCB code Z037). This suggests there are more games on this system. In fact I think one of the other games is Pac'N Party. He also reminded me of a game I dumped a few years ago called 'Hide and Seek' in the MAME source file misc/hideseek.cpp which is similar SETA-based hardware. That also means part of the dev work is already done and adding these to MAME might not be that difficult. Missing code meant it was hiding inside one of the chips. I checked the SH2 CPUs and it turned out these are a special type SH2 microcontroller with on-board peripherals and on-board 256kB flash ROM and of course the main program is inside. Research was done over several weeks and it looked like it would be possible to dump the SH2 CPUs but it would not be trivial. It required a special and very complex adapter that would have been available as a development kit directly from Hitachi back around ~2000. Fortunately there are some hints in the SH2 hardware manual so I got to work and created a custom adapter in order to make an attempt at dumping them. Due to also having many other PCB projects as work-in-progress it took another 8-9 months to actually place the fairly large PCB order (250 PCBs) and the PCBs arrived about 2 months ago. Now all the pieces were ready to build it... Over the next month several attempts were made but the data read out only garbage. More research was done and I discovered a few tricks are required to get the SH2 to cooperate, as well as requiring some additional hardware. Today I finally succeeded in dumping the first HD64F7045F28 microcontroller which is for Happy Planet. These games are all kind of similar to Point Blank but the gun shoots actual medals at a mirrored screen, possibly with optical or touch or magnetic sensors to detect the medal hits. The games look pretty fun and hopefully now with the full dump available something can be done to properly emulate these games to a playable state. I can now also dump the SH2 CPU used on Hide and Seek too which should get us another working game. We will have to wait and see if there's anyone left who's still alive, hasn't dropped off the side of the planet, interested and capable of getting the job done. Here's some links to videos of the games: Happy Planet - https://www.nicovideo.jp/watch/sm37479855, Galaxian Fever - https://www.nicovideo.jp/watch/sm37479855 (same vid as above but jump to 7:40 to see Galaxian Fever) and Shooting Paradise - https://youtu.be/vsD_8x76iIU. Note: I am the only person tooled up and with the required skills and knowledge and proven methods to dump these PCBs. If you have access to any of these Namco SH2 HD64F7045F28-based redemption / medal shooting PCBs and you want to see them added to MAME do not attempt to mess with them because you'll just break it beyond repair and that would be bad. A better idea is to contact me, send the boards over and they will be dumped properly.

Galaxy Force
25th October 2014: Smitdogg - ShouTime got the impossibly rare original Galaxy Force (not part II). Almost every PCB was upgraded because some of the changes were bug fixes. We have tried to get it for years. Several of us have bought untested boards in the past that had the Galaxy Force (not part II) sticker on the board thinking it might be part I but they always ended up being part II. It has a pain in the ass harness setup so most sellers could not boot to the title screen to check. Anyway I had given up on finding it because of the problems I have listed. It's amazing that he got this. It was really expensive so if anyone can help then send what you can to ShouTime. Send me a message if you need his paypal address and I'll see if I can get donators credited on the dump.
19th July 2010: Smitdogg - We won the Galaxy Force PCB.
17th July 2010: Smitdogg - There is a Galaxy Force PCB for sale. There's maybe a 25% chance it's Galaxy Force I (most wanted) and 75% chance it's an undumped revision of part II (still quite wanted). Galaxy Force I and II are highly sought after by collectors and usually sell for a few hundred bucks. We can try to get it if enough donations come in and if we lose, there's tons of stuff available for decapping. So if you'll help us out, we'll give it a shot.

Gals Panic (Extended version)
24th February 2005: Guru - Gals Panic (Extended version) arrived, purchased by Randy on eBay. Thanks to all that chipped-in for donations.

Gigas Mark 3
15th May 2002: Guru - Gigas Mark 3 received and a lot of other things over the last few weeks but i have been very busy. Thanks to Theo for donations.

Golden Tee Fore Series
8th July 2013: Smitdogg - I picked up 7 Golden Tee Fore hard drives / revisions with recycle funds: Golf Fore! v1.00 USA (2000), Golf Fore! v1.00.25 USA (2000), Golf Fore! 2002 v2.00.00 (2001), Golf Fore! 2002 v2.01.04 (2001), Golf Fore! 2002 v2.01.06 (2001), Golf Fore! 2003 v3.00.04 (2002) and Golf Fore! v5.01.02 (2004).
10th May 2009: Smitdogg - The remaining AT90S2313 chips have also been processed from Golden Tee Fore (#179, 181, 182, 183 and 184).

Hairstyles Illusions
31st May 2012: Smitdogg - We haven't been able to read out the hard drive from Hairstyles Illusions
23rd May 2012: Smitdogg - We got a computer setup for Hairstyles Illusions. It's an arcade machine that took your picture and then let you make hairstyle alterations. It used a typical arcade game control panel with a joystick. Pretty cool. The hard drive is giving me trouble so I'm going to hand it off to Lord Nightmare to work on.

Hopping Road
29th April 2017: Smitdogg - Ordyne dumped Hopping Road.

Horse Racing
29th January 2010: Smitdogg - We threw in money with TeamEurope to help pay for some boards (like Horse Racing). Thanks to a donation from Rene Single.

Hot Gimmick 5
20th March 2018: Smitdogg - AeroCityMayor dumped Hot Gimmick 5 (Ver 2.04 JPN).

Jantei
20th July 2008: Guru - Jantei (mahjong) arrived. Thanks to dyq.

Kenju
29th July 2016: Smitdogg - Thanks to ShouTime and previous money donators! Kenju is going to soon be dumped with our custom cart system.
28th July 2016: ShouTime - KENJU (AC): Uncovered due to a generous benefactor, Dream Factory's lost arcade fighter, Kenju, has now been rescued from the lost mists of time!

Let's Go Island
13th June 2012: Smitdogg - This system is way too new to emulate but the disc was too cheap to turn down and I'm curious what type of beast we are dealing with, or rather will deal with in a few years. Anyway, got a minty Let's Go Island disc.

Live Action Ping Pong
22nd July 2012: Smitdogg - Andrew Welburn got the prototype Live Action Ping Pong game from the 2002 ATEI London trade show.

Look Over There!
10th November 2019: Smitdogg - Thanks to recent donations from ANY, Scott Moore, anonymous donor from Italy, Russell Howard, Evan Korzon, Henrique Areias Pontes, Sean Sutton, Evan Korzon, Mr Goodwraith, Christopher Brownlee, gamerfan and verybigkintama we got a rare Data East MLC cart called Look Over There!

Mad Rider
12th May 2006: Guru - An original (and undumped) Data East Mad Rider PCB arrived today. Thanks to Andrew S.

Magic Touch 2
29th January 2011: Smitdogg - We got a touchscreen multigame gambler called Magic Touch 2. It looks like it might have been an upgrade kit for Megatouch XL era machines. This is an old one, apparently they have made Magic Touch 12 already, maybe even more. Siftware dumped the original Magic Touch last year.

Mahjong
27th September 2023: Guru - Received a bunch of mahjong PCBs from China thanks to dyq and little0: Long Hu Zheng Ba Te Bie Ban (IGS, 199? / 200?).
21st February 2006: Guru - 6 Mahjong PCBs arrived, thanks to BNathan.
13th July 2005: Guru - A unknown Mahjong (Dynax 199?) received in a box with a pile of Dynax Mahjong games. Big thanks to BNathan for these.

Mahjong Summer Story
30th March 2007: Guru - 'Mahjong Summer Story' just arrived, the next haul from Japan.

Mahjong Tycoon
11th October 2009: Luca Elia - The new batch of dumped IGS games made me look again at emulating the IGS031 custom ASIC. It's the graphics processor used by several titles from the late nineties (currently scattered in the igs_m68.c, igs_m027.c and tarzan.c drivers, as non-working). I started with Mahjong Tycoon, decrypting the program rom, and noting a striking similarity with an igs017.c game I emulated before. Then everything fell into place. Thanks to Guru, dyq, Bnathan, Pierpaolo Prazzoli and The Dumping Union.
15th August 2009: Guru - From Smitdogg/The Dumping Union we got Mahjong Tycoon.
24th May 2009: Smitdogg - Thanks to D. Alves we got Mahjong Tycoon LE.

Maneater
13th November 2008: Brian Deuel - The graphics PROMs for Maneater have been dumped.

Megatouch Force
4th September 2016: Guru - A few months ago I was given a Merit Megatouch Force 2006.5 unit by a local friend. It was told it wasn't working so it sat outside in my garage for several months. I decided to have a look at it yesterday. The unit would not boot up. The first issue was a dead motherboard battery. After changing it for a new one and resetting the BIOS defaults and tweaking them, it booted up but gave some error about the motherboard model not being correct. I went back into the BIOS and set the factory defaults and then it got past that error and booted into the game. The touchscreen didn't work. I went to the calibration setting screen and tried to recalibrate it but the screen did not register presses. Inside there was a rats nest of hacky wiring and several wires were chopped off and tied up. Other wires were dangling everywhere. A small AMP board was just sitting on the frame and had some insulation tape wrapped around it to stop it arcing to the metal. Looks like some rough operator really went to town on this unit and made a real mess of it. I wouldn't trust that guy to pull out weeds correctly! I pulled it apart completely and then I could see what was supposed to be connected to what and while I had it apart I documented the hardware. The touchscreen issue was caused by some dangling wires that had caught on something and pulled out a connector on the touchscreen controller breaking a solder connection on it. After re-soldering it, cleaning it out, tidying up the wires and re-joining the chopped ones (basically putting everything back to normal as it should be) I went back into the calibration setting screen, did the screen calibration and then it kind of worked but only on some parts of the screen and it only registered presses occasionally. That problem was solved by re-doing the calibration again, but this time when pressing the opposite corners as instructed, I held my finger there for 2 seconds. That is actually documented in the manual. After that it all worked properly. Having this all working now, I decided to do some research about these units as this was the first time I had seen a Megatouch. The info out there says this has a security module on the I/O board. The I/O board is there but there's no security module!! I have a couple of pics below showing a comparison of the I/O boards. Looking closer, it turns out this box is *nothing* like a genuine Megatouch Force unit. The whole thing appears to be a copy. I have some suspicions about 'who' did this, but I won't mention the company here. Let's just say they are located on the East side of Australia in Melbourne and they were fined about $500K a few years ago for pirating some other stuff (by ICE, if I recall correctly), so no doubt it's the same guy up to his old tricks again. Anyway, the security has been hacked out so it works as-is without the special security dongle. That's a bonus for us because that means it should make it easier to add to MAME because essentially it's just a PC running Linux. The extra PLCC chip on the I/O board may be a problem but maybe not. I suppose we will find out when it's added to MAME. Here's some pics of the unit...

Megatouch MAXX, MAXX-2K, MAXX-2K Plus Upgrade Kit...
7th May 2019: Smitdogg - C. Ward and an anonymous contributor sent us some Megatouch MAXX and XL drive dumps.
22nd September 2010: Smitdogg - gamerfan got us box of arcade discs, including some Need For Speed Underground discs, Golden Tee Complete, Megatouch Maxx Jade 2 and also some mystery game (not pictured). These probably won't be emulated for a long time but we'll go ahead and back them up.
12th April 2010: Smitdogg - We got a set of Megatouch MAXX Jade CDs today thanks to Kevin Eshbach. Apparently these are from 2004. I thought they were a little older than that. Oh well. I'm guessing it will be a while before a driver is started for these as we don't even have their BIOS dumped yet.
23rd February 2010: Smitdogg - Thanks to B. Sparks we got a bunch of touchscreen game discs including: Midway Infinity 2.0 (Ver. 2.03), Megatouch MAXX (PG0014), Megatouch MAXX-2K (PG0011 RO1) (Upgrade to V4.0), Megatouch MAXX-2K Plus Upgrade Kit (V4.0 to V5.0) and Megatouch MAXX-2K Plus Upgrade Kit (PA0014-02 R-B) (not complete, missing 1 disc). Side note: Dave France dumped MAXX V3.02, MAXX-2K Plus v5.01, and a decrypted bootleg hard drive of JADE v14.22A a few weeks ago.
18th October 2009: Smitdogg - Dave France dumped some Megatouch MAXX drives.

Merit Boardwalk
22nd May 2012: Smitdogg - Mark F. sent me a hard drive for Merit Boardwalk. It's too new to emulate and we don't have the BIOS but we have a hard drive secured.

Merit Trivia
21st November 2009: Guru - I did get some stuff from Smitdogg. Some of it was dumped several weeks ago... Merit Trivia security brick.
7th August 2009: Smitdogg - Thanks to D. Beneke we got a box of PCBs from a dealer in NY for pretty cheap. I've dumped all but one, which looks like a newer version of Merit Trivia than anything dumped. I'm calling it the Han Solo Trivia Game as some chips are frozen in carbonite except really it's not carbonite. But it is.

Mind Mania
22nd April 2018: Smitdogg - Asure dumped Mind Mania.

Mr. Gun-Man
20th June 2019: Smitdogg - Darran got a Mr. Gun-Man PCB! It uses 2708 rom chips so it will have to be dumped a bit later and because of age we'd be extremely lucky to get a good dump but we'll see!

Mobile Suit Gundam SEED
8th April 2011: Smitdogg - We picked up another Gundam game, this time a kit for Mobile Suit Gundam SEED: Federation Vs. Z.A.F.T. II.

Mogu Rapper
7th May 2019: Smitdogg - CoolMod bought ST-V Mogu Rapper to dump but the roms need an adapter he doesn't have yet so it probably won't be dumped soon.

Moolight
1st August 2018: Smitdogg - Foxhack sent us a Chinese multigame PCB labeled "Moolight" and also on the plastic shell it has a sticker labeled "Family Fighting Games". It appears to have been manufactured this year.

Moon Raker
2nd November 2023: OBS GAME RESEARCH - Nichibutsu Moon Raker (1980) (https://youtu.be/4kA_Ib7ZYgY). This is a document video of the actual arcade machine. This information is published as a supplement to the content distributed by Substrate Lover, etc.

Multigame
10th June 2019: Smitdogg - SpinalFeyd and Hammy dumped hard drives from some unknown multigame betting terminals from the 2007 era.

Multigame 161 in 1
26th April 2013: Smitdogg - I got a 161-in-1 MVS cart to make my Neogeo motherboard worth owning. It uses a million surface mount roms that my programmers don't support yet so maybe (hopefully) someone else will beat me to it and dump theirs and save me the trouble. If not I'll dump it...some time.

My First Dance Dance Revolution
22nd October 2018: Smitdogg - ClawGrip got DDR Disney Mix and My First DDR.

Nakshi Mania 3
10th October 2005: Guru - Nakshi Mania 3 arrived. Thanks to our new Korean contact.
30th September 2005: Dumping Project - Our Korean contact has bought Nakshi Mania 3 at a Korean shop.

Nichibutsu Laserdisc
21st August 2012: Smitdogg - We picked up a Nichibutsu laserdisc upgrade kit that was too cheap to pass up. Maybe Aaron will read out the disc and get the laserdisc stuff rolling again?

Orient Dragon
20th July 2008: Guru - Orient Dragon arrived from China. This is a mahjong game, thanks to bnathan and dyq.

Pac & Paint
10th September 2004: Guru - Finally got Pac & Paint from Japan. Thanks to MAMEWorld donations and several anonymous (private/direct) donations.

Palla Volo
29th June 2009: Smitdogg - Thanks to MrGoodwraith we were able to throw in $ with TeamEurope so they could pick up some really old and strange PCBs from Austria: World Cup '85 and Palla Volo.

PGA Tour Golf Team Challenge
13th November 2012: Smitdogg - We got PGA Tour Golf Team Challenge.

Photoplay 2002/2003/2005/2006/2007/2008
30th March 2018: Smitdogg - Asure dumped the hard drive for Photoplay 2003 (NL) and with some help from rtw and Klaus picked up 4 Photoplay disks including one with Star Trek - The Quiz Game.
24th March 2018: Smitdogg - More updates from Asure: Photoplay 2008 ES IGO8 hard drive dumped. Figured out some information on how the touch screen works (can run on 3M Microtouch touchscreen emulator in Python). Photoplay 2005 (AT) hard drive dumped. Photoplay 2003 (AT) hard drive dumped.
9th March 2018: Smitdogg - Asure dumped hard drives of Photoplay 2006 DE IGO6 "The touch of sports" and Photoplay 2002 BE IGO2 "Fun Energy 2" and Photoplay 2007 AT IGO7 "The touch of sports" and did some work on getting other Photoplay dumps ready for MAME.

Poker game
27th August 2012: Smitdogg - William Smith sent an old poker game that is an undumped set of...Hi Lo Joker Poker or similar, I'm not really sure yet. Looks like norautp.c hardware.

Poko
10th July 2017: Smitdogg - Arcade Hacker dumped a poker game called Poko.

Power Putt Golf
21st February 2019: Smitdogg - Jon H & Hammy got Incredible Technologies Power Putt Golf (original 3 course version) and a newer Power Putt version that runs in higher resolution and with more courses and better gameplay.

Predators
30th July 2017: TrevEB - It is being worked on but its not functional yet in MAME. To quote Andrew, "its tricky stuff". One CPU running 4 video boards independently. The game behaved brilliantly yesterday. One of the four audio channels had never worked and Andrew was never able to chase down why. When the game was plugged in at the show, it just started working and never went down. The game had one freak out Friday night. Andrew pulled all the boards and reseated them. Got an NVram failure alert but the game played. Saturday: not a single glitch. Worked like a champ all day. The game is a lot of fun. Think Space Wars with 4 ships and more breathing room. Shooting and antimatter mines that you shoot,place, and detonate. Tough to use without blowing yourself up. Clouds to camp in, invisibility and shield power ups, 4 space jumps to desired corners of the screen, The sun, and flaming meteors and mines to avoid. Space is full of insects and other things that attach to the ship and leech your energy. One thing that is sort of odd is that the ship only moves when the button is pushed along with the joystick shoved in the direction you want to go. No inertia. Sometimes you just forget how to move. maybe 2 joysticks instead of one joystick and 2 buttons would have prevented that. A great game for sure and an excellent choice for network mame. I also spoke with Steve Ritchie about the game as I thought he was a co-creator. Turns out he is not, but he did put in "millions of hours" play testing it back in the day. Very impressed to see it again.
29th July 2017: TrevEB - Williams Predators flies again at California Extreme 2017: Team Oakland CA. This machine is based around the only orignal parts Andrew Welburn had from this game - the original game PCB set and power supplies which belong to Domonic Escott in the UK. He entrusted me with this in order that i figure out the big technical challenge that it had. This PCB has been around for a long time, but was it missing the crucial control interface pcb that was inside each cabinet. These interface pcbs link each players' special 49-way joystick and action buttons, along with switches and cabinet buttons to the main pcb. With all of them missing, it was only possible to play at the Red - Hawk position. No paperwork is known to exist for this game so everything had to be worked out by hand. With help from members of the MAME team, a reverse look at code interfacing the UART to the main cpu, it was determined that there was a 7-byte packet expected from each interface pcb. The exact order of the bytes (and the bits within them) and what they represented in the packet was not immediately obvious, but was worked out eventually. The added complication was the 7th byte was a'check' packet which was a calculated sum based on the contents of the other six bytes. If it was not calculated correctly, the entire packet is ignored. After some considerable trial and error, I was able to write code for a small microcontroller (a PIC) that reads the Joystick positions, and the 4 minimum buttons needed per player for the game to function, and translates them into the 7-byte packet that the game pcb expects. This output is then converted to RS-485 and send to the respective connection on the game pcb. The game was intended to occupy 4 FULL SIZE arcade cabinet which made the game very expensive labor intensive for the game owner requiring a large amount of space and upkeep. It was a hard sell when compared to the money generated by 4 individual games. 30 years later with the advent of flat panel monitors, it is now possible to have a single cabinet and superior player interaction. This cabinet has been hand-made to fit four players in the most space efficient footprint that i could make for my small home-arcade. The cabinet design has developed organically over a number of years, being made from scrap wood, an old metal filing cabinet, more reclaimed parts, old LCD monitors and lots of wiring and connectors. This went from a bunch of monitors sitting on some wood balanced on top of a metal cabinet into an exhibition-ready machine largely in the last three weeks, working all day every day to work out how it was going to look, work and be durable for CAX. Vector artwork was created from online photos by Lindy Groening, and NightVoice from the MameWorld Art Project in Adobe Illustrator and Coral Draw. Final artwork layout and control panel design was created by Trevor Brown in an exceptionally short period of time using ArchiCAD. All other technical engineering and cabinet creation work by Andrew Welburn of andys-arcade.com.

Print Club
7th May 2019: Smitdogg - Thanks to ShouTime and recent donations we got several Print Club carts: Casper Print Club 2, Disney Character Print Club Ver. 2 and Oraga Land Print Club.
2nd May 2018: Smitdogg - Thanks to recent donations, we were able to combine forces with ShouTime and get 3 undumped Print Club carts.
15th August 2009: Guru - From Smitdogg/The Dumping Union we got Print Club Sabnrio USA Vol.3.
27th May 2009: Smitdogg - Thanks to Gatinho we got Print Club Sanrio USA Vol.3.

Quiz Do Re Mi Fa Grand Prix 3
24th August 2019: Smitdogg - ShouTime got KONAMI Quiz Do Re Mi Fa Grand Prix 3 (Japan).

R-TUNED and INITIAL D ARCADE STAGE 5 EXP
30th November 2018: Smitdogg - Darksoft decapped and sent us the PIC dumps of R-TUNED and INITIAL D ARCADE STAGE 5 EXP.

Re-Volt
20th May 2017: Smitdogg - ShouTime dumped Re-Volt. Additional info from CTOJAH: It ran on Microsoft Windows 98. ASUS P4S800-MX SE Motherboard, GIGABYTE GO-C5200B 52X IDE CD-ROM, MSI MX4000-T64R Video Card, Standard IDE Hard Drive, Socket 478 Intel Processor, 256MB DDR Memory, ATX Power Supply and Custom Case with Sock Mounts.

Real Pignapoke
11th January 2011: Smitdogg - I bought a box of random gambling games. With a game something called "Real Pignapoke".

Sakura Love
29th December 2008: Luca Elia - Among the recently surfaced games is a gambling by Taiwanese Subsino, that uses Mahjong tiles instead of cards. Its name roughly translates to Sakura Love (actual title?). I've written three drivers for games by Subsino. This game, as figured out by Angelo, runs on the tilemap based hardware emulated in bishjan.c, but with an AMD AM188EM CPU (basically an 80188 + peripherals). This game uncovered some previously unemulated features of the video chip, such as row and column scroll. And, unlike other Subsino games, this one has emulated sound since it uses an M6295 and an YM3812. Thanks to Guru, dyq & bnathan.
23rd December 2008: Guru - I've dumped Sakura Love.

Santana
24th August 2019: Smitdogg - jordigahan and ClawGrip dumped Santana (from MACSA).

Sea Wolf
2nd November 2010: Smitdogg - Donated was a dongle for Sea Wolf (2008). Again, won't be dumped for a long time.

Sega Rally Pro Drivin'
5th October 2003: Guru - Received and dumped Sega Rally Pro Drivin' from to B. Simpson.

Sichuan 1
4th March 2005: Guru - Sichuan 1 PCB arrived. Purchased by Randy on eBay.

Silent Hill The Arcade
16th February 2011: Smitdogg - ShouTime got Silent Hill The Arcade.

Slingo
22nd September 2018: Smitdogg - Spank sent us a dump of Coastal's Slingo 2001 and 2002

Street Fighter Vs. Knights of Valour
19th December 2012: Smitdogg - We got Street Fighter Vs. Knights of Valour until someone translates the sticker (PGM cart). It's a version of KOV with Street Fighter characters. Yes it rules that hard. It's one of the most interesting bootlegs I've seen, and really I should put quotes around the word "bootleg". The hardware has IGS etchings, reflective IGS stickers, roms with Sammy stickers(?), a dremeled down PLCC chip and a Lattice PLD surface mount chip that I'm guessing handles what the IGS027A used to? All in all it's probably the best made bootleg I've ever seen, to the point where I start to wonder if IGS set up a separate factory in mainland China to take advantage of the lack of copyright laws. Not that I'm familiar with Taiwanese copyright laws, but the quality and trouble they went to make it look official even after it's taken apart is baffling, if it really has no direct ties to IGS in Taiwan.

Swords
18th January 2018: ranger_lennier - Andy Modla has added Swords to his emulator of the RCA Studio II and related hardware (https://github.com/ajavamind/rca-studio2 and https://youtu.be/xbSNnIyc1K4). Swords was developed by RCA for their Fredotronic arcade hardware in 1975. It was based on the RCA 1801 CPU, a predecessor to the better known RCA 1802. It was location tested, but never put into mass production. However, RCA did release the RCA Studio II home console in 1976 using similar hardware. To put the time frame into perspective, Midway released Gun Fight, the first mass produced arcade game to use a CPU, in November 1975. The program data was found on an audio cassette at the Hagley Museum And Library in Wilmington, Deleware, which holds a number of records from an RCA research laboratory. Thanks also to Ubersaurus, who arranged for the tape to be digitized (http://findingaids.hagley.org/xtf/view?docId=ead/2464_09.xml). Based on the labels of other tapes in their collection, they appear to have data for other games on the hardware. The other known titles are Mines, Chase II and Bowling. Some of these tapes have been recorded as WAV files, but have not been processed further as far as I'm aware. Some Atari Age users have posted documents, photos and instructions from their visit to the archives (http://atariage.com/forums/topic/209519-rca-studio-ii-gold-mine-an-interview-with-the-studio-2-production-manager/page-47#entry3872336, #entry3906140, #entry3906144 and #entry3906146)

Taiko no Tatsujin 14
Other Emulators: * Play!

Target Terror Gold
12th July 2012: Smitdogg - MrSinister sent us hard drive dumps for Target Terror Gold (2 revisions).

Tekken 6
25th December 2017: Smitdogg - Rod_Wod & Hammy dumped the hard drive for Tekken 6 Bloodline Rebellion.
6th June 2011: Guru - Some items arrived: Tekken 6 (PS3-based with 80GB HDD). Or maybe Tekken 6 Bloodline Rebellion, I won't know until it's repaired.

Tekken Tag Tournament 2 Unlimited
14th May 2016: Guru - I decided to clean out the Tekken Tag Tournament 2 Unlimited box today so here's a few pics of the inside of Namco System 369 and a few pics of the game screens. Basically System 369 is the same as System 357 but is using a slim PS3 mainboard and 2.5" HDD. The cooling method has been re-designed but unfortunately they are still unreliable because it's still just a PS3. The game should have been called 'Limited', not 'Unlimited'. The system is hobbled and plays only 1000 games if not connected to the Namco network then requires payment to Namco to keep it working. Worse, that service is no longer available so when you get to your credit limit you'll have to get one of the cracked HDD's with that limit removed if you want to keep using it. Fortunately I have one of those too.
19th August 2015: Guru - Tekken Tag Tournament 2 Unlimited on Namco System 369 arrived. Thanks to Darksoft

Tetris Extra
29th January 2010: Smitdogg - We threw in money with TeamEurope to help pay for some boards like Tetris Extra/Bootleg. Thanks to a donation from Rene Single.

Tetris The Grand Master 3
9th May 2017: Smitdogg - Cereth sent us a dump of his Tetris The Grand Master 3 (Ver.2.01J).

The Act
15th February 2015: Smitdogg - The hard drive is dumped. I don't remember the details of the hardware but there was some IO board that I think I was told provided protection. The controls seem rather awful.

The iDOLM@STER/(Tower)
Other Emulators: * Play!

Treasure of the Caribeans
RAINE 0.63.5

TV Phone Doraemo
29th March 2019: Smitdogg - Thanks to recent donators including the fundraising for Rainbow Islands Extra which Kevin Eshbach ended up covering, we got a previously unknown Seibu board which we just found out is TV Phone Doraemo. Thanks Phil Bennett and Dane Biegert.

TX-1 V8
11th March 2020: Smitdogg - We got the now rare as hen's teeth TX-1 V8 to redump the bad roms and now the dump is correct and game works correctly. It's a miracle the roms from 1984 are still perfect. Thanks to donors verybigkintama, Henrique Areias Pontes, ekorz, David Stevens, Jan Stuhler, Lorenzo Gatti, Paul Thacker, Fabien MARSAUD, Dane Biegert, Stefan Dawid, Russell Howard, Renato Mucciarelli, anonymous, ANY, Scott Moor, Sean Sutton, Mr Goodwraith and Christopher Brownlee.
27th February 2020: Phil Bennett - TX-1 V8: The 2nd edition of TX-1, featuring new tracks and gameplay elements. Released only in Japan as an entirely new cabinet with 26" monitors (versus the 19" used by TX-1). Incredibly rare!
23rd February 2020: Phil Bennett - This PCB was $150 shipped and 'untested'. It had a note attached saying it was resetting continuously and was missing a crystal. It might work now that I've replaced the crystal, as it generates all the CPU clocks.
22nd February 2020: Phil Bennett - TX-1 about to go back into storage until I can be bothered to wire it and Buggy Boy up for testing.

Ultracade
21st June 2012: Smitdogg - We got an installation disc for Ultracade.

Umimonogatari Lucky Marine Theater / Sea Story
11th May 2024: Guru - This is Umimonogatari Lucky Marine Theater / Sea Story. These are just FYI, no further emulation progress will be attempted beyond this as it's a mechanical coin pusher...
Other Emulators: * Play!

Under Night IN-BIRTH
25th October 2018: Smitdogg - SpinalFeyd dumped Under Night IN-BIRTH (RingEdge 2 DVD DVR-0058).

Unknown
31st August 2005: Dumping Project - Randy have won an unknown 1982 Status PCB.

Unknown (28-way mahjong pinout)
15th April 2015: Guru - Recently I got hold of a bunch of random PCBs: Unknown (28-way mahjong pinout, with black epoxy all over it. Looks like someone plugged it into JAMMA and blew it up). Some of them could be undumped versions. At the very least they will be used to make Guru-Readme's and added to MAME source.

Unknown (Gambling game with M6809 CPU)
27th September 2010: Roberto Fresca - Here a strange unknown game running in a M6809 CPU hardware. Graphics are blitter-based. Far from working, still needs a lot of work. Will see what can I do about...

Unknown (Irem)
16th November 2008: Guru - I recently picked up a pile of junk for spares and repairs from a local friend. It turned out there was quite a bit of interesting stuff in this lot. As far as I can make out, I got an unknown Irem game with 8751 MCU.

Unknown 8080
16th April 2005: Guru - An unknown 8080-based PCB (same as Midway's L-Board type) arrived. Thanks to the good boys at the Italian MAME Forum.

Unknown gambling games (Burg Automaten 1995)
21st November 2009: Smitdogg - TeamEurope got an AMIGA500 board that runs gambling games. Included are 4 floppy disks (SERVICE-DISK, SYSTEMDISK, and two unknown) and a manual. Looks like there are two games included, HOLLYDAY POKER and ROYAL CARDS.

Unknown gambling games
25th August 2010: Smitdogg - ChrisQC sent a huge box of random gambling games.

Unknown Mirco game
15th April 2010: Smitdogg - We got a mid 1970's PCB which I thought was one of the remaining undumped Mirco games. It turns out it is something from a company called Micro Amusements, Inc. I don't know what game it is yet.

Unknown Sega
11th April 2017: Smitdogg - Hammy dumped an unknown double Sega board from the 80s. I think it's a gambler. Hammy - The Date stamped on the board is 1984 and the chip date codes are all '84.

Unknown Sega
25th December 2017: Smitdogg - He also just dumped an unknown Sega board that fits in the Bingo driver.

Unknown Seta
3rd October 2009: Smitdogg - TeamEurope dumped an unknown Seta game (pic attached).

Unknown - Videopoker
15th January 2009: f205v dumped an unknown Videopoker game.

Variant Schwanzer
8th January 2016: ShouTime - Attract demo for the unreleased vertical shooter Variant Schwanzer running on N64 hardware.

Wartran Troopers
27th February 2019: Smitdogg - SpinalFeyd dumped the Wartran Troopers install discs.

Wheel 'm In
4th August 2009: Smitdogg - I got a Wheel 'm In PCB from Mike Green, it's redemption/non video but we're dumping it anyway.

Winning Eleven Arcade Championship 2008
11th December 2017: Smitdogg - Rod_Wod dumped the 5 backup CDs for Winning Eleven Arcade Championship 2008.

Won Shi Do
8th September 2008: Guru - Won Shi Do (1989 Victor) arrived from Korea. Thanks to gp-lee.

World Cup '85
29th June 2009: Smitdogg - Thanks to MrGoodwraith we were able to throw in $ with TeamEurope so they could pick up some really old and strange PCBs from Austria: World Cup '85 and Palla Volo.

World Station Poker
23rd February 2012: Guru - Some nice items arrived from Japan this week: World Station Poker series (x2).

Yakyuken Super
3rd November 2010: Smitdogg - We got a CD-i version of Yakyuken Super I thanks to ANY. Well, that's the disc name that comes up when you put it in a computer, it might not be correct/full. It's essentially an old CD-i version of the Japanese porno laserdisc game we lost a few weeks ago.




DRIVERS:

3DO
30th December 2018: Smitdogg - A 3DO collector sent us dumps of the 3DO arcade versions of Crime Patrol, Mad Dog McCree 2, Orbatak (prototype version), Orbatak (release version), Shootout at Old Tucson, Bladeforce (beta version) and Need For Speed (beta version).

IGS
25th April 2019: Smitdogg - gc8tech sent us several hacked IGS carts labeled as follows: prog_hack_aoshisangu0_h3_2_noenc, prog_hack_aoshisangu0_h3_enc, prog_hack_lsqh_h4_noenc, prog_hack_sango_h4_noenc and prog_hack_wdf_gsyx_h2_enc.

Konami Konatech
12th February 2014: Smitdogg - Kevin Eshbach started unearthing the Konami Konatech MPU system out of its epoxy hell.

Midway Athens
21st November 2009: Guru - I did get some stuff from Smitdogg. Some of it was dumped several weeks ago... Midway Athens main board for decapping. This has been stripped of all chips including the PIC16C57 so it's not all that useful.

Namco System 10
1st January 2018: Smitdogg - coolmod dumped an unknown System 10 game, most likely a medal game.

Namco Systems 147
0.192: Added Sony Playstation 2 (placeholder only) [Robbbert].

Namco System 148
Animal Kaiser Evolution --> Other Emulators: * Play!

Namco System 246
0.192: Added Sony Playstation 2 (placeholder only) [Robbbert].
22nd December 2014: Guru - One more Namco System 246 game arrived and has been dumped. Mobile Suit Gundam SEED: Destiny Federation Vs. Z.A.F.T. II (DVD and dongle GSD1 Ver.A). The Namco System 246 / 256 status page has also been updated. Thanks again to Darksoft. One interesting thing to note, the NM number on the back of the dongle matches the NM number on the Tekken 5 Dark Resurrection dongle. Both dongles are original and untouched so it looks like Namco re-used the dongle of Gundam Seed Z.A.F.T. II and converted it to Tekken 5 Dark Resurrection. I guess they may have re-used other dongles too so the NM number alone can't be used to identify a dongle cart/game.
7th December 2014: Guru - Some more Namco System 246 games arrived and have been dumped. These include: Battle Gear 3 with dongle, Battle Gear 3 Tuned with dongle, Ridge Racer V RRV2 Ver.A dongle, Pride GP 2003 with dongle PR21 Ver.A, Quiz Gundam with dongle QG1 Ver.A, Gundam Vs Gundam with dongle GVS1 Ver.A and Tekken 5 Dark Resurrection with dongle TED1 Ver.A. The Namco System 246 / 256 status page has also been updated. You'll notice a lot more green there but also the titles remaining are either difficult to get hold of, expensive or not released. That means there will probably not be many more System 246 games dumped unless someone out there provides them. Thanks again to Darksoft!

Namco System 256
0.192: Added Sony Playstation 2 (placeholder only) [Robbbert].
1st September 2010: Guru - Smitdogg sent some stuff a while ago too and I chipped in some funds towards some of them: Gundam Seed vs Zeon System 256 disc and dongle.
1st September 2010: Guru - A few things arrived from Japan including Druaga Online: The Story Of Aon - PC-based (Windows XP version 2002 Embedded) server for linking with the System 256 unit. Has a CDROM drive and an 80GB HDD (approx 68GB of it is not partitioned and not used) running Druaga Online version 1.6 software. Other CD versions secured: V1.10 (blue disc), V1.20 (green disc) and V1.40 (light blue). Druaga Online: The Story Of Aon (Namco System 256 DVD and dongle). Some other Druaga Online DVDs have also been secured: V1.10 (purple disc), V1.20 (pink disc), V1.40 (orange disc), V1.50 (yellow disc) and V1.6 (brown disc X2). Promotional DVD (approx. 1 hour of video showing game demos and info).
18th March 2006: Guru - A Magic Gate security dongle (Capcom/Banpresto 2003 - Namco System 256 hardware) arrived late yesterday from Japan.

NAOMI / Atomiswave System
20th April 2008: Guru - 'Sangoku Senki (Knights of Valour) Shichisei Tensei' Atomis cart arrived from Japan a couple of days ago.
20th July 2003: Guru - Received Rival Schools 2 (Capcom 2000). Big thanks to Leonid81, Bob Schultz, jmurjr, Smitdogg, f205v, Kevin Eshbach and many MAMEWorld contributors.

Sammy Prize Avenue
1st October 2017: Smitdogg - We got some Sammy Prize Avenue hardware.

Slosseum
3rd May 2017: Smitdogg - The T-Shirts are supposed to arrive Friday. With the profits we got, along with donations from Mooglyguy and brizzo, 16 weird carts for an Aleck64/Nintendo64 based arcade system called Slosseum. I don't know what the games are like, but it's some sort of medal system.

Taito Type X
17th December 2012: CTOJAH - Battle Gear 4 - Taito Type X+ Dumped: HD dump is exactly 5,936,083,555 bytes. http://www.system16.com/hardware.php?id=678

Taito Type X3
19th January 2018: Smitdogg - ArcadeModBios sent us a BIOS dump of a Taito Type X3 setup.

Virtual Reality
12th May 2017: Smitdogg - ShouTime dumped a couple of Global VR Multigames which have the following games: Beach Head 2000, Beach Head 2002, Beach Head 2003, Incoming, Invasion Earth and Operation Blockade.
12th August 2011: Smitdogg - We got a pile of Beach Head (2000, 2001 etc.) discs and some other Global VR bits from that era.
4th May 2010: Smitdogg - Fronzel dumped another version of Total Recoil which appears to be revision 2.07 and he dumped a rare version of Pac-Man VR which supposedly is a beta version with 1-Player mode that was made for Motorolla.
15th April 2010: Smitdogg - Fronzel scanned a Virtuality 1000CS Service Manual and got a manual for Total Recoil which will be scanned soon, and he ordered a bunch of more VR hardware.
6th April 2010: Smitdogg - Fronzel dumped Virtuality Boxing, Ghost Train (alt. version that works on an SD2000), and he redumped Total Recoil to include the audio tracks.
22nd March 2010: Smitdogg - Dumped Missile Command VR and Dactyl Nightmare SP.
10th February 2010: Smitdogg - Rotate is dumping a bunch of his Virtual Reality stuff for us including a hard drive image, bioses and the games Virtual Boxing and Ghost Train. So far a hard drive has been imaged.
3rd January 2010: Smitdogg - Fronzel dumped Zone Hunter (Virtuality 1994).
6th October 2009: Smitdogg - Thanks to our new friends fronzel and Alpha1, we have dumps of 9 Virtual Reality game discs! From fronzel we got: Quickshot Carnival, Trap Master, Skeet Master, Clay Master, Pac-Man VR, Zeneca Pharmaceuticals Medical Demo and Zero Hour. From Alpha1 we got: BuggyBall and Missile Command 3D. And more on the way!




No CPU Games:
=============

Alley Rally
12th May 2017: Tornadoboy - I have an untested Alley Rally PCB, although it doesn't look like there's any EPROMs to dump, looks totally TTL. I also have super rare Cobra Gunship and TV Pinball PCBs that are TTL.

Block Buster
20th June 2003: Guru - An unknown very old PCB by Mirco Inc. (no CPU, no ROMs) arrived from Taucher (probably Block Buster).

Crossfire
28th August 2023: PinballNovice - Schematics for 1977 Cross Fire by (Taito). This is another classic bronze-age schematic from John at Flippers.com. Download all of these PDFs at Internet Archive.
10th July 2017: Smitdogg - Arcade Vintage, Recreativas.org sent us a dump of a Model Racing PCB from the 1970s which may be for a game called Cross Fire.
16th February 2014: AdamB - DICE 0.8 has been released! Added four new games: Crossfire, Clean Sweep, Wipe Out and Pin Pong. Crossfire (Atari, 1975): Similar to (and based on?) the board game of the same name, two players compete to move a large ball into their opponent's goal by shooting it with smaller bullets. The game also features some unique sound effects which are fully emulated! Major thanks to gregf who managed to locate the schematics for this incredibly rare game! Also new in this release: Added a -window command-line option to allow starting DICE without automatically switching to fullscreen mode. Preliminary Mac OS X support: DICE can be compiled and run on OS X, but since there are still a few bugs left to work out no official binary is being released yet. Run "make osx" to compile and build the application bundle.

Gotcha
30th October 2013: AdamB - DICE 0.7 has been released! New discrete sound engine! Improves sound in Gotcha and Breakout.
1st May 2013: AdamB - DICE 0.6 has been released: Improved sound in Gotcha. Improved simulator core algorithm that increases performance in several games.
20th July 2012: AdamB - After more than 4 years since the last release of DICE (has it really been that long?), a new version emerges (DICE 0.3)! Many new features in this version, including: * A complete rewrite of the simulation core, now both significantly faster and more accurate than before. * New GUI, allowing configurable controls including multiple mouse and joystick support.* Improved sound.* Gotcha bug fixes. * Space Race support. * And probably more.
10th February 2008: AdamB - DICE 0.2 has been released. Now supports 3 games, sound and more. What's New: 2 new games are supported: Atari Rebound and Atari Gotcha (driver written by Dan Boris). Preliminary Sound support. Optimization: Pong runs about 30% faster than previous versions. Fullscreen Mode: Add the command line option -fullscreen to run in full screen mode. Mouse Support: Add the command line option -mouse to use the mouse for Player 1.

Hi-Way
24th April 2014: AdamB - DICE 0.9 has been released! Three new games in this version: Hi-Way, Indy 4 and Steeplechase. Hi-Way (Atari, 1975): Single-player driving game that to this day maintains a small (but loyal) fan base. Features quite complex graphics for a discrete logic game due to the use of a 1024-bit shift register to store the location of the road, shifting in new values periodically to give the effect of motion. Unfortunately causing simulator performance to vary wildly based on how curvy the road currently is! Also new in this release: Configurable video options (anti-aliasing, vsync, status bar visibility). Fixed crash on exit.

Interceptor
22nd August 2023: PinballNovice - Schematics for 1976 Interceptor by (Taito). Another bronze-age scan from John at Flippers.com, and this time it's the 1976 game Interceptor by Taito. Download all of these PDFs at Internet Archive.

Pin Pong
16th February 2014: AdamB - DICE 0.8 has been released! Added four new games: Crossfire, Clean Sweep, Wipe Out and Pin Pong. Pin Pong (Atari, 1974): First video pinball game by Atari, with fairly complex graphics for a discrete logic game. Features 8 knock-down targets, 4 bumpers, and a "spinner" that randomizes the direction of the ball. Beware that due to the difficulty of optimizing the background graphics this game requires about 900 MB of RAM to function, although this should allow it to run at full speed on a reasonably fast machine. Also, sound is not emulated yet unfortunately. Also new in this release: Added a -window command-line option to allow starting DICE without automatically switching to fullscreen mode. Preliminary Mac OS X support: DICE can be compiled and run on OS X, but since there are still a few bugs left to work out no official binary is being released yet. Run "make osx" to compile and build the application bundle.

Quadrapong
30th October 2013: AdamB - DICE 0.7 has been released! Added FOUR new games: Atari Crash 'N Score, Atari Jet Fighter, Atari Quadrapong and Shark Jaws (by "Horror Games" aka Atari). New discrete sound engine! Adds sound to Space Race, and improves sound in Gotcha and Breakout. Support for "Absolute" joystick mode which allows for the use of paddle controllers. Added control descriptions to the New Game menu. Improved performance in most games. Numerous bug fixes.

Qwakers
0.229: Andy Welburn added infos about Qwakers (Not Produced/Released) (1975) (Kee Games clone of Qwak!?). A bare PCB has been found marked QWAKERS A000950 ATARI (c)75.

Ramtek Knockout
0.162: Added Knock Out [TTL] notes [Andy, Stiletto].
14th April 2015: Smitdogg - Andrew Welburn got Ramtek Knockout. It's pre-CPU era but has some proms.
2nd April 2015: Andrew Welburn - I've had an unknown Ramtek PCB for a number of years that I could not fire up because of a missing crystal module. Well, i saw another one on ebay and thought i should get it as it was complete. When i fire it up, i get this screenshot... Now, I believe this game is Knockout, but the flyer is not on TAFA and i cannot find any more information about this lost game from 1974. If you have any more info, let me know!

Space Race
30th October 2013: AdamB - DICE 0.7 has been released! New discrete sound engine! Adds sound to Space Race.
20th July 2012: AdamB - After more than 4 years since the last release of DICE, a new version emerges (v0.3 with Pong, Rebound, Gotcha and Spacerace).
7th July 2012: AdamB - After a long hiatus, I've finally managed to find the time to put some more work into DICE. Space Race is now emulated, and working perfectly. Stay tuned, new emulator release coming soon. It will have been worth the wait!
9th February 2010: Juergen Buchmueller - I started over from scratch with a circuit editor, this time avoiding a couple of obstacles I put in the first try. Most of all sedit2 doesn't have a bitmap oriented part library, but is all vectorized, including the font. This means you can zoom to any level you like and don't need to stay sober for a week before you can place connections. Now what I've got to do is to define a whole lot of electronic parts and add a method and function key to place a part from the library - this time it's a directory with separate files per part - inside a sheet. The look and feel intentionally resembles the Windows tool ExpressSCH very much.
16th January 2010: Juergen Buchmueller - I just wanted to report (almost) no progress with Space Race in my TTL emulation. It looks like I'm missing something serious with the 9602 monoflop emulation, or perhaps in the rest of the circuit that is supposed to create a "star field". The output just doesn't look right, even if I didn't see a screenshot of the original yet. I captured most of the schematics in an ExpressPCB *.sch file now and it looks like the circuit should be all right so far. The only progress is that I found why the rockets were missing some pixels (it was due to the 9311 timing). I wish I could understand how the star field part of the circuit is supposed to work, though. It is really complex compared to anything I've seen.
4th January 2010: Juergen Buchmueller - Good catch! I already had found Pin 13 of F4 using the unconnected pins list, but L4.13 escaped me. Now there's something like a star field. I'll take a look. The coin/reset and start section is somewhat awkward, because it's mixed with analog parts...
4th January 2010: AdamB - I took a few minutes to compare your net-list to the one I was using and noticed a few differences: - Pin 13 of L4 and pin 13 of F4 should presumably be connected to VCC, these connections weren't shown on the schematics. Depending on how your simulator works leaving these unconnected might cause those chips to be held in reset. - I have pin 1 of D6 connected to /VRESET instead of VRESET. Don't remember how I came to this conclusion, but I specifically commented it as being an error in the schematics, so you might want to look into it.
3rd January 2010: Juergen Buchmueller - Well, it looks like it's causing trouble for me, too. Currently I don't get any video signal, not even the score display. The 9602 emulation also seems to be very broken, because neither stars nor the vertical line at 256H appear.
3rd January 2010: AdamB - Interesting choice of Space Race, that was one game I tried to add to DICE back in the day but was never able to get it working fully. If I recall, I think I got everything except the stars circuit working properly. I wasn't sure if it was due to all the errors in the schematics (I found most of the same ones), or if it was due to inaccuracies with the simulation - I was using unit gate delay, so every single chip had the exact same delay, which was accurate enough for Pong, but probably not accurate enough for the more complex games. What kind of method are you using for the gate delays? I always planned on starting over from scratch with a more accurate and faster simulator, but never got around to it. So I'll be interested to see if you're actually able to get this working.

Super High-Way
16th August 2023: PinballNovice - Schematics for 1977 Super High-Way by (Taito). John from Flippers.com has provided another incredible set of scans for a bronze-era classic. This time it's Super High-Way by Taito from 1977. Download the full set of schematics at Archive.org.

Western Gun
7th August 2023: PinballNovice - John over at Flippers.com has graced us with another batch of extremely rare scans. He has provided ample documentation to the classic arcade videogame Western Gun by Taito in 1975. Download all of these PDFs at Internet Archive. Western Gun gameplay here beginning at 5:10 min: https://youtu.be/8h_elbOPa_I

Trapshoot
14th March 2004: Shane Monroe - Finally gotten enough information (thanks to Bob Carroll at http://www.wallgames.com/ and Andrew Jones) to build a reasonable PC simulator of the 1975 Gremlin game at http://www.monroeworld.com/trapshoot/multimedia.php

TV Basketball
21st January 2013: AdamB - DICE 0.5 has been released! Several new changes in this version, including support for two new games: Atari Breakout (Driver courtesy of Mike Ellery) and Midway TV Basketball (First non-Atari game in DICE). Additional changes: Configurable DIP Switches. Configurable User-Interface controls (Pause, Quit, etc.). Improved Linux support. Fixed ROM loading when starting DICE from the command line, and other bug-fixes. Enjoy!




UNMAMEd WIP (http://unmamed.mameworld.info/):

-  18th January   2023: UnMAMED - REMOVED FROM UNMAMED: TH Strikes Back, World Rally 2, Target Hits, Top Blade V, Carket Ball, Aaargh!, Happy 6-in-1 (Huanle Liuhe Yi), X2222, Mongolfier New, Soccer New, Jubilee Double-Up Poker, Wyvern F-0, Pong, Pong Doubles, Music Ball pinball, Raiden II, Raiden DX, Gundam Wing Engless Duel, Solar War (Atari video pin proto), Cute Fighter, NBA Jam Extreme, Final Fight Revenge, Table Tennis Champions, Breakout, Mini-Boy 7, Race Drivin' Panorama, Golden Tee Fore 2002-5, Gaia, Dealer, Monkey Magic, Waku Waku Sonic Patrol Car, Glass, Captain Flag, Snow Board Championship, Carnival King, Magical Touch, Touch and Go, Kyuukouka Bakugekitai, Go By RC, Space Lords, Eeekk!, Hangzo, Dodge Man, Flash Boy, Sega Sonic Cosmo Fighter, Jockey Club II, Revenger 84, Laser 2001 (oops it was a computer), Great Guns, Mazer Blazer, Beatmania IIDX 2nd - 8th, Substream, Beatmania III, Keyboardmanias, ParaPara games, San Francisco Rush: The Rock, Cyberstorm, Road Burners, Hammer Boy, Megaphoenix, Gunpey, Virtua Fighter 2, War: Final Assault, Rail Chase 2, El Fin Del Tiempo, Air Combat 22, Tokyo Wars, Alpha One, Magic Purple, Evil Night, Tobe Polystars, Total Vice, San Francisco Rush 2049, Rebound, Akka Arrh, Joker Card, Multi Win, Power Card, Super Dead Heat, Star Wars Arcade, Wing War, Gulun Pa, Blox, Adders and Ladders, Crystal Maze, Mating Game, Strike it Lucky, Vegas Poker, NBA Showtime, Photo Y2K 2, Get A Way, Ms PacMan Twin, Warp-1, Cal Omega Games, Mrs. Dynamite, Runaway (Sun), Operation Tiger, Danger Express, Monster Zero, Mahjong Block Jongbou 2, Mega Double Poker, Fruit Star Bonus, Hologram Time Traveler, The Tower, Space Battle (Hoei), Super Tarzan, Shuang Long Qiang Zhu 2, Megumi Rescue, Poly-Net Warriors, Polygonet Commanders, Alpine Surfer, Team Hat Trick, Top Landing, Golly Ghost 2 Bubble Trouble, Nebula and Pro Golf. Removed special rom versions Air Assault, Booby Kids, Crazy Cross, Donkey Kong Jr E Kit, Last Apostle Puppetshow, Orius, Power Drift link version, Route 16 and Yukiwo. ADDED TO UNMAMED: Space Storms, Freddy Flames, Grabber Goose, Arena, Vertexer, City Diver, Cave Speeder, Time Bomb, Star Attack, Mothership, Stomp It, Aerocross, Willie Lump Lump, Tank Maze, Spitfire, Jet Pack, Joust 3D, Stock Carnage, Hydro Thunder 2, Mindescort, Clockwork Aquario, Dragon Princess, Charge, Hadrian's Wall, Cybertag, Scramble Training, Choujuuki Spriggan Powerd, Virtuality games, Paddle Battle, Rally, Sport Center, Knights in Armor. ADDED TO MAME NOT WORKING: Taiko no Tatsujin 6-8, Tetris Giant, ROLLing eX.tre.me, Badlands, Star Rider, Fantasy Zone medal game, Air Walkers, Death Race, Destruction Derby TTL, Sonic Blast Man's Janken Battle, Monaco GP, Tank, Tank II, Trivia, Ckidzo, Meadows 4 in 1, Death Race, Bazooka, Desert Patrol, Game Tree, Dance 86.4, DDR Karaoke Mix 1 and 2, SuperNova, SuperNova 2, Dancing Stage SuperNova, DrumMania V, V2, V2, Guitar Freaks V, V2, V3, Thrill Drive 2 and 3, Toy's March 1 and 2, Fonz. OTHER UPDATES: Moved Boon-Ga Boon-Ga to and added Ultimate Domain to alternate names section. Moved Hammer Away, Crossed Swords 2, DECO Kid, King of Fighters 98 Ultimate Match, Car Hunt, Marble Madness 2 to special games section. Moved Salter to "Game doesn't exist" section. Updated Blood Lust I.K.3, Spectre Files, Captain Seahawk, Cutey Fatty, Dark Chamber, Star Trap, Counter Force, Cyber Sterra, RC Squared, Western Shooting, Spellsinger, Battalion, Ms. Gorf, Mazer, Bust a Move 2, Urban Champion. Moved to DICE: Clean Sweep, Crossfire, Indy 4, Hi-Way, Pin Pong, Steeplechase, Wipeout.
-  1st February   2014: UnMAMED - Updating based on feedback. REMOVED: Midnight Landing, Punch-Out!! (Japan), Western Gun Part II, Sparkman, Double Wings, Tap-a-Tune, Vs. Skate Kids, Donkey King, Ace Driver: Victory Lap, Columns 3, The Couples, Amatic Unknown Slots, Jan Yu Ki, Super Ranger, Kizuna Encounter Special, Night Raid, Mahjong Nenrikishu SP, Ultra Toukon Densetsu, Pye-nage Taikai, Taihou de Doboon, Hae Hae Ka Ka Ka, Dragon World II, Jingle Bell, The Killing Blade, Gunbarl, (Quiz & Variety) Sukusuku Inufuku, War of the Bugs, Springboard, Cyber Commando, Wink, Dream Fruit (Fruit Dream), (Touchstar) Bonanza, Rabbit Poker, Soul Edge Ver II (which in turn removes the Zinc section), Video Stars (it was added as a non-working MAME driver, and is no longer in MAME, ended up being a Crazy Kong clone). ADDED TO NOT WORKING: Moved Virtual Combat to not working and also added Shadow Fighters (same hardware). OTHER UPDATES: Updated EM game Crossfire and added Zap, Home Run/Country Club/Trap Shoot Classic, Mann Oh-Mann, Popeye JPM, 18 Wheeler, Ice Cold Beer, Zeke's Peak. Updated discrete games Wipe Out, Leader, Clean Sweep, Pin Pong. Updated Data East cassette listing, BMX Heat, Vega, Super Real Mahjong Vs, Bonpa, Jongbou Sono 2, Tokyo Wars, Crazy Jr, New Bosconian, Crazy Cross 2, Gun Baron, Thunder Storm, POD, Armada, Magic Purple, Captain Zapp, Top Gear, Red Wyvern, Black Widow. Added Supermodel emulator section. Added Roberto Fresca WIP page.In addition to the cassette version, removed individual "Angler Dangler" entry - the flyer is for cassette, and the video on the Starcade page shows the cabinet with "instructions on marquee" like with other DECO cassette games. Seems like this one was cassette only. Same goes for Manhattan, but not sure about Terranean (found a marquee without instructions, but it's Japanese - not sure what the Japanese version of this cabinet is like). Moved Ball Park II to "dipswitch name change". Changed Peno Cup to Table Tennis Champions. Added pictures for Nichibutsu gambling games Extra Card, Hana Royal, Liberty 7, Liberty Bell, fixed year of Hana Puter and Super GX. Moved Speed King / Speed Champ, Doom II, and Toasters and Chainsaws to "don't exist". Added "Video Mini" Namco game Battalion. Updated Pac Attack, Carket Ball, Thunder Hoop III, and Nexzr. Added Sports Match, Black Beetles, Megumi Rescue. Moved Nice On and Pro Billiard to alternate names section. Updated URLs and fixed typos.
-  2nd January    2014: UnMAMED - Updating for MAME 0.152. REMOVED: Cool Riders, PoPo Bear, Stadium Hero '96, Brixian, Armadillo Racing, Rise of the Robots, Manhattan (cassette), Planet Probe, Harem, 3 on 3 Dunk Madness, Star Fighter, F1 SuperLap, Little Robin, Brick Zone, Dodge City, Magicball Fighting, Thrill Drive, GTI Club, Solar Assault, Hang Pilot, Sky Destroyer, Cycle Maabou, Space Invaders / Qix Anniversary, Last Survivor, Cyber Tank, Last Bank, Royale, Videotron Poker, Turret Tower, WWIII, X-Day 2, Off-Road Challenge, Fighter's Impact Ace, Densya de Go (and variants), Banbam (Pettan Pyuu), Virtua Formula, Penguin Adventure, Panic Road, Ace Attacker, The Gladiator, Blastaball, Jet Wave. ADDED TO NOT WORKING: Shakatto Tambourine, Crackin' DJ Part 2, Mars TV, Sega Bass Fishing Challenge, Sega Clay Challenge, Royal Ascot, Pop'n Music 4, 6, 8, Animelo 2, Beatmania III Append 7th and Final, ParaParaParadise 1st Mix Plus, Dragon's Lair 2, Cops, LD Mahjong #4, Raizin Ping Pong, Chaos Breaker, Spica Adventure, Chase HQ 2, Fearless Pinocchio, Game Magic, 99 Bottles of Beer, Winning Streak, Blankity Bank, Bank Raid, Lucky Arrows, Solid Gold, Music Ball, Super Pinball Action (prototype), Pop Shot, Mega Lines, Super Card, Fruit Star, Fruit Fresh, Bingo Mania, Power Card, VLC Nevada, Pring Club 2 '97, Fuit Star Bonus, The Big Game, Special Effects, Reel Good Time, Treasure Hunt, Hot Slots, Golden Tee Fore! 2002, 2004, 2005, Carnival King, Kono Tako, Giga Wing Generations, Homura, Raiden III, Shikigami no Shiro III, Raiden IV, The King of Fighters '98 Ultimate Match, Samurai Spirite Sen, Trouble Witches AC, Goketsuji Ichizoku, The Drink, Bowling Try, Stone Age, Carket Ball, Hide & Seek, Fate: Unlimited Codes, Beatmanias, Super Six Plus II English Mark Darts. OTHER UPDATES: Added Rip Squad, Catch 40, Changed Shimdrive to Simdrive, Added YouTube video link for Bouncer and Waku Waku Sonic Patrol Car. Added pictures for Accelerator, Akka Arrh, "Unknown Atari", Beavis and Butt-Head, Bloodlust, BMX Heat, Chase 1929, Devastator, Flash Boy, Gamshara, Gremlins, Hare Scare, Hot Rod Rebels, Jammin, Mean Streak, Missile Command Deluxe, Mrs. Dynamite, Race Drivin Panoramic, Survival Battle Dynamic Trial, Tenth Degree, The Tower, Astro Zone, Outer Zone, Dodge Man, Friday, Tierras Salvajes, The Shogun, Tangram, Pyramid, The X, Computer R-3, Captain Stuntman, The Southern Cross, Express Delivery, Mr. Gun Man, Hana Puter, Tokeijikake no Aquario, El Fin Del Tiempo, Vampire, Rainbow Block, Titan, TT Spacian Pt 2, Waku Waku Sonic Patrol Car, Sonic Cosmo Fighter. Also marquees for the unreleased Ant Raid, Ptooie Louie, RC Squared, and Toasters and Chainsaws. Updated Area 51 Site 4, Gals Panic 2, Gals Panic 3, Poly-Net Warriors / Polygonet Commanders, Vega, Heated Barrel, Raiden II, Air Inferno, Dangerous Curves, Kokoroji 2, Bust a Move 2, Super Hang-On Limited Edition. Added DICE games Stunt Cycle, Pong Doubles, Breakout, TV Basketball, Attack, Anti-Aircraft, Quadrapong, Shark JAWS, Crash n' Score, Jet Fighter. Removed "pinball" page and "most wanted" icons since it's not really relevant anymore. Added "EM" page since these are showing up more in MAME. Cleaned up links. Slight update to Data East Cassette listing reflecting listing in MAME driver source. Updated Red Tank to mention flyer confirming game existence. A few updates to the SemiCom page. Added "Counter Attack", hard to explain this one. Grouped Survivor with Ten Spot, and listed Ten Spot's games. Removed Dark Invader (Ramtek) and Treasure Cove (Wico) as they are non-video mechanical games. Updated another EM game Submarine as it's in MAME. Updated Donkey Kong Jr kits (P kit is now in MAME). Added Touch de Uno to the Sega NAOMI list. Grouped Conquest with Journey as they appear to be the same game.
- 22nd July       2012: UnMAMED - Updating for MAME 0.146u3. REMOVED: Super Stars, Street Games II, Quizard, Enchanted Forest, Chance Kun, Galaxia, Astro Wars, Forte Card, Birdiy, Winning Run, Winning Run Suzuka Grand Prix, Winning Run '91, Super Wing, Dodonpachi II, Kung-Fu Roushi, Itazura Tenshi, Dirt Dash, Landing Gear, (Mahjong) Long Hu Zheng Ba 2, Demon Front, DS Telejan, Oozumou, Dragon World 2001, Racing Beat, Removed DECO casettes Treasure Island, Fishing, Super Doubles Tennis. Removed Fax 2 as it's now the official title in MAME (not "alt questions"). Removed Yellow Cab, DECO Pro Sports, Super Draw (poker), Vs Soccer (Japan), Space Bomber ver A. Also removed special clone versions Dynablaster, Sagaia, and GunHard. Removed "unknown" unnamed games as it is too difficult to keep track of what they end up being. Removed (Sonic Blast Man) Real Puncher, it is emulated though not playable since there is no punching-pad support. ADDED: Toaplan proto Genkai Chousen Distopia. Added the LD game Marbella Vice. Added the prototype LD game Battlestar Galactica. Added Go Go Coaster (proto of Mr Do's Wild Ride). Added a bunch of Semicom games with pictures: Carket Ball, Cute Fighter, Gaia, Goal Goal Goal, Jumping Pams, Lode Quest, Macheollu, Magic Ball Fighting, Rety and Bluemi, Red Wyvern, Twinkle II, Wonder Dunk. Added DECO casette games Bumpoline, DS Telejan 4 player, Bobitto, Tume-Go Kaisyou Added to NOT WORKING: Pong, Brixian, Quiz Show, Namco Stars, Gunbalina, Mazan, NFL Classic Football, Ninja Assault, Panicuru Panekuru, Shin Nihon Pro Wrestling, Wangan Midnight Maximum, Power Shovel Simulator, Fighting Bujutsu, Racing Jam DX, World Soccer Winning 11 Arcade 2002 and 2003, IGS games Chess Challenge 2, EZ Touch, Gone Fishing 2, Knights of Valour Aoshi Sanguo, Speed Driver, Hyper Viper, New Hi-Lo Poker, Quiz Punch, Video Poker, more NAOMI games, Nichubutsu pervy games Bikinikko, Jyunai, Jyunai 2, Mahjohng Hanafuda Cosplay, Nanpa, Cosplay Tengoku 7, PC Engine bootleg games, Super Famicom Box, Virtuality system, Shooting Zone, Sega Golden Poker, Donggul Donggul Haerong (Hero Hero Kun), Metal Man, 7 Smash, Tap-a-Tune, S-Plus, Cherry Master, Country Club Classic, Home Run Classic, Trap Shoot Classic, Mahjong Mania, Popo Bear, Star Trek Voyager, Special Forces Elite Training, Mahjong Momotarou, Animal Basket, Alien Arcade Medal Edition, Arcana Heart Full, Shooting Love 2007, Illvelo, Melty Blood Acress Again, Akatsuki Blitzkampf Ausf Achse, Man, oh-Mann, Orbatak, Popeye, Frank 'n' Stein, Ichi Ban Jyan, Pot O' Gold, Touryuumon, Revolution, Exciting Black Jack, Beatmania IIDX 2nd Style, Mario Kart Arcade GP, Wangan Midnight, Skins Game, Wild Poker, Super Dragon Ball Z, Bloody Roar 3, Fate: Unlimited Codes, Gundam vs Gundam, Battle of Yu Yu Hakusho, Beach Head 2000/2002/2003/ Hyper V2, Need For Speed Underground. OTHER UPDATES: Screenshots of Ms. Gorf! (Thanks Brian) Also some screenshots of some of the Atari protos from CA Extreme. Updated Skater Gaiter as "Skater" is in MAME. Took some snapshots of Journey (Stern) from the Starcade page. Added some snapshots of Road Runner LD from YouTube videos. Updated Fast Draw and Boon-Ga Boon-Ga. Updated Big Paw's Cave to Berenstain Bears in Big Paw's Cave. Added some Clean Sweep pictures. Added "Underground King" to mistranslations. As the removal of Super Wing leaves only "Friday" on the UPL page, merged UPL page with 80s games. Added Space Race to DICE. Added link to Dumping Union page and MAME Artwork.
-  6th March      2011: UnMAMED - Updating for MAME 0.141u3: Added Deadly Spode, Can Kick Kid, PT Nyankoro, Vs Great Tennis, Tilt Invaders, Super Hang-On Prototype, Man TT, Fly Train, Red Battleen, Air Assault, Brave Fire Fighters, NASCAR Racing, Metal Slug 6, Oinori-daimyoujin Matsuri, Initial D Arcade Stage ver 2 and 3, Lucky Lady, Point Blank 3, Uchuu Daisakusen, Tetris Fighters, ATV Track, Funky Ball, Reno Reels, BwB Tetris, Red Hot Poker, Samurai Spirits Tenkaichi Kenkakuden, Pye-nage Taikai, Hae Hae Ka Ka Ka, Taihou de Doboon, Rumble Fish 2, Dream Fruit NeopriSP Retro Collection, Last Bank, GunMania, Punch Mania 1 and 2, DrumMania 4-10, Guitar Freaks 7-10, Martial Beat. Moved to NOT WORKING: Two Minute Drill, Skeet Shot. Added pictures for Marble Man, Moonquake, Nightmare, Aka Zukin, Dracula Hunter. Updated Soreike Kokorogy 2, Parasol Stars, Quiz Show, Ms Pac-Man Twin, Spacian, Space Cyclone, Bubble Trouble. Removed American Soccer, Space Walk, Salary Man Champ, Super World Stadium '99, Onna Sanrisou, Raccoon World, Hanajingi, Cross Bingo (Poker Carnival), Wolf Fang, Pro Soccer, Lady Master, Fantastic Journey, Final Lap 3, Touchmaster 2000 Plus, Kick Boy, Super Real Mahjong Part 5, Trivia (SMS), Almond Pinky, American Poker II, Rapid Fire, Dakkochan Jansou, Pinball Champ '95, Jansou, Mr. Kicker, Magic Train. Updated Zero Target, Gunpey, Frog & Spiders (bootleg?). Random driver snapshots for gambling/mahjong games 86 Lions, Cherry Bonus 2001, Croupier, Funny Strip, Jackpot Pool, and Jan Oh. Changed GP 500 to 500 GP and Roulette (Playmark) to Croupier. Moved Zorton Brothers and Platoon to laserdisc page. Added link to undumped Wiki, Game Not Working List and updated other links.
- 13th January    2011: UnMAMED - Updating for MAME 0.141. REMOVED Heavy Unit, Poizone, Jack Potten's Poker. ADDED to NOT WORKING: Race On!, Crisis Zone, Hydro Thunder, Offroad Thunder, Derby Owner's Club World Edition, Virtual On Oratorio Tangram M.S.B.S., Ringout 4x4, Inu no Osanpo, King of Route 66, Barroom Baseball, Samba de Amigo ver. 2000, Derby Owner's Club 2000, Shootout Pool Medal, Dream Crown, X Tom 3D, NeoPrint V1, World Kicks, Shakatto Tambourine Cho Powerup Chu, Dirty Pigskin Football, Outrun 2 Special Tours, Crazy Taxi High Roller, Ridge Racer V Arcade Battle, Smash Court Pro Tournament, Funny Fruit, Dragon World II, Odeon Twister 2, The King of Fighters XI, Shooting Star, Zero Gunner 2, Magical Touch, Faster Than Speed, Wave Runner GP, 5-Aces Poker, NSM Poker, Dual Games, Symbols, Arrow Bingo, NFL, Puyo Puyo Da!, Mobile Suit Gundam: Federation vs. Zeon, Jubilee Double-Up Poker, Soul Calibur 2, White Tiger, Swiss Poker, Movie Card, Maximum Speed, Olympic Hot Stuff, Savage Quest, Mini Boy 7, Mega Double Poker, Magic Train, Gundam Seed: Federation vs. Z.A.F.T., Southern Systems Joker Poker, Gundam Battle Operating Simulator, Sega Club Golf 2006 Next Tours, Ollie King, Quizard, Quizard Rainbow, Out Run 2, Battle Gear, Battle Gear 2, Pop n' Music 5, Unknown Meyco Game, Ron Jan, Win Win Bingo, Zoo, X Five Jokers, Magic Number, Magic Class, Abacus, Euro Pass, Book Theatre, Taiko no Tatsujin 10, Dragon World 3 EX, Dragon World 2001, Chance Kun, Photo Y2K 2, War of the Bugs or Monsterous Manouvers in a Mushroom Maze, Fighting Mania, Frog & Spiders, House of the Dead 2, Time Crisis 3, Print Club Pokemon B, Adders and Ladders, Strike it Lucky, Ten Quid Grid, Eyes Down, Blox, Prize Space Invaders, Sega Strike Fighter, Kick '4' Cash, Downhill Bikers, Multi Win, Joker Master, Gunmen Wars, L.A. Machineguns, The Ocean Hunter, Royal Gum, Mr. Kicker, Crackin' DJ, Joker's Wild, King Tut, Money In the Bank, Penguin Adventure, Quarter Horse Classic, Pinkiri 8, Gundam Wing: Endless Duel, Fun Station Spielekoffer 9 Spiele, Vega, Monza GP, Quarter Horse, Bega's Battle, Computer Quiz Atama no Taisou, Cycle Mahbou, Race Drivin' Panorama, Metal Maniax, Happy 6-in-1, Magic Mask, Geisha, Kimble Double HI-LO, Fast Draw, Draw Poker HI-LO, Video Stars, The King of Fighters Neowave, Final Furlong, Dragon Chronicles, Netchuu Pro Yakyuu 2002, Soul Calibur II, Tekken 4, Mobile Suit Z-Gundam: A.E.U.G. vs Titans, Capcom Fighting Jam, Quiz and Veriety Suku Suku Inufuku 2, Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX, Soul Calibur III, Kinnikuman Muscle Grand Prix, Taiko No Tatsujin 9, Tekken 5.1, Airline Pilots, Sega Tetris, Poker / Black Jack, DRHL Poker, Magic Card Jackpot, Magic Lotto Export, Super Tarzan, Mahjong Nenrikishu SP, Print Club 2, Tournament Solitaire, Airline Pilots DX, Criss Cross, Hi-Lo Double Up Joker Poker, Ten Spot, Crazy Taxi, 18 Wheeler, Jambo! Safari, Ferrari F355 Challenge (Twin), Ferrari F355 Challenge 2 (Twin), Go! Go! Connie chan Jaka Jaka Janken, Bingo Roll / Bell Star, PMA Poker, Turbo Poker 2, 48-in-1 MAME bootleg, Seta/Visco Roulette?, Net Select Keiba Victory Furlong, Salary Man Kintarou, Amatic Unknown Slots Game, Multi Game I, Multi Game III, Super Major League '99, Gun Survivor 2: Bio Hazard Code Veronica, Club Kart: European Session, The King of Fighters Neowave, Neo Geo Battle Coliseum, Colorama, Rabbit Poker, Coinmaster Keno, Extreme Hunting 2, Dirt Dash, Extreme Hunting, PhotoPlay, Capcom vs. SNK Millenium Fight 2000, Videotronics Poker, Space Walk, Neo Print - '98 NeoPri Best 44, Top Gear, K.G. Bird, Black Rhino, Phantom Pays, Sweet Hearts II, Golden Canaries, Coral Riches II, Shootout Pool, Multipede, Road Blaster, Time Traveler, Pirati, Johnny Nero Action Hero, Poly-Net Warriors, The House of the Dead III, Jockey Club II, Quake Arcade Tournament, Turret Tower, Skeet Shot, Magical Truck Adventure, Hit Poker, Sports Shooting USA, Ranger Mission, beatmania IIDX, Enchanted Forest, Dolphin Treasure, Bank Robbery, Deuces Wild 2, Maxi Double Poker, Mega Double Poker Jackpot, Poker 52, The Hermit, Mambo A Go-Go, Unknown French poker, Unknown entrypted poker.
- 28th December   2010: UnMAMED - Updating for MAME 0.140u3. REMOVED Fire Trap (Japan), Alien Challenge, Lucky Girl (1991), Night Gal, Night Bunny, Royal Night, International Team Laser, Sexy Boom, Pachi Fever, F-15 Strike Eagle, Battle of the Solar System, Tank Battle (was listed under Super Tank Attack), Versus Net Soccer, Soccer Superstars, Shark Party, Victor 5, Victor 21, Top Shooter Mahjong Super Da Man Guan II, Skimaxx, Rushing Heroes, Run & Gun 2, Oh! Paipee, Tougenkyou, Shogun Warriors, B.Rap Boys, Sky Love, Panther, 39 in 1, Cliff Hanger, Cobra Command, Back Fire (Tecmo), Tokimeki Mahjong Paradise - Dear My Love, Tokimeki Mahjong Paradise - Doki Doki Hen, Laser Quiz, Laser Strixx 2, Laser Quiz 2, Magic Premium, Candy Puzzle, Harem Challenge, Steel Worker, Mirax, Super Crowns Golf, Bullet, Rumba Lumber, Denjin Makai, Balloon & Balloon, Dain San Wakusei. Updated Boggy '83.
-  8th June       2009: UnMAMED - Updated for MAME 0.131u4. Removed Sega Mega Play games, Status Blackjack, Tekken Tag Tournament, Hidden Catch 3, Mahjong Vegas, Knights of Valour Superheroes, Buggy Boy/Speed Buggy (cockpit), Squash (Itisa), Go 2000, Dakkochan House, Casino Five, Big Apple Games, Give us a Break, Ten Up, Cherry Master '91, Mahjong Tenkaigen, Noboranka (original), (Happy) Jackie, Tetris bootleg, Shooting Master, Aqua Jet. Added to NOT WORKING: A bunch of Sega NAOMI, Triforce and Chihiro HW games, Tripple Draw, Pachi Fever, Lucky Girl, Jansou, 86 Lions, Spiel Bude, Buster, Magical Tonic, Dancing Stage Featuring Disney's Rave, Kung-Fu Roushi, Panic Park, Heavy Unit, Go By RC, Space Invaders Anniversary, Tokyo Cop, Casino Strip XI, Poker Roulette, IQ Pipe, Street Games, Street Games II, Bonanza, Skimaxx, Samurai Shodown 64, Xtreme Rally / Off Beat Racer!, Beast Busters 2nd Nightmare, Tokimeki Mahjong Paradise Doki Doki Hen, Gran Tesoro / Play 2000, Dengen Tenshi Taisen Janshi Shangri-la, California Chase, 3 Super 8, Night Raid, Thunderbirds, Sweet Hearts II, Diamond Touch, Adonis, Margarita Magic, Triple Star 2000, Super Star, Super Jolly, Tokyo Wars, Microman Battle Charge, Technical Bowling, Enchanted Forest, Golden Pyramids, Queen of the Nile, Super Cherry Master. Merged Alien Challenge and Huang Fei Hong, added picture for Ms. Gorf, moved ZX-2000 and added Sagaia and Fantastic Journey to "other name" section. Added TX-1 V8, Vic Viper, Fokker, Monster Olympics. Added pictures for Last Apostle Puppet show, Nightmare. More information about Parasol Stars.
- 10th January    2009: UnMAMED - Updated for MAME 0.129. Removed Mirage Youjuu Mahjongden, Grudge Match (Yankee), Double Dealer, Yumefuda, Good, Mahjong Daireikai, Otogizoushi Urashima Mahjong, Megatouch 5, Astropal, Pit Boss, TX-1, Chanbara, Super Football Champ, Magical Date, Fighters' Impact, Judge Dredd, Cube Quest, Da Ban Cheng, Kyuukyoku no Othello, Galactic Storm, Survival, Wonder League 96, Deroon DeroDero, Sigma Poker 2000, Touki Denshou Angel Eyes, Chase Bombers, World Rally, Pinbot PC-10, Snooker 10, Side By Side, Touchmaster 3000-7000, Filetto, Jackie Chan Kung Fu Master/Fists of Fire, Firefox, Super Free Kick, (4 nin-uchi Mahjong) Jantotsu, Sky Lancer, Mad Zoo, (New) Lucky 8 Lines, Turbo Sub, Soul Calibur, Megatouch 3, Space Battleship Gomorrah. Added to NOT WORKING: Astro Wars, Joker's Wild, P's Attack, Magic the Gathering Armageddon, Royale, Cal Omega games, Mystery Number, Shark Party, Victor 5, Victor 21, Euro Jolly X5, Grand Prix, Squash, Captain Uncino, Capitani Coraggiosi, La Perla Nera, La Perla Nera Gold, Europa 2002, Top Blade V, Office Yeo ln Cheon Ha, Carta Magica, Laser 2001, Magic Drink, Millennium Sun, NtCash, Super Space 2001, Wizard, Elvis, Beauty Block, Nandemo Seal Iinkai, Rapid River, Funny Land de Luxe, Mad Zoo, Hot Slot, Magic Colors, IPM Invader, Quiz Punch 2, Jingle Bell, Bust a Move 2, Rail Chase 2, Daytona USA Deluxe '93, Air Trix, Planet Harriers, Star Wars Pod Racer, Wave Runner, King of Football, Hell Night, Motocross Go, Parent Jack, Destiny Horoscope, Galaxian3, Il Pagliaccio, Cherry Bonus 2001, Four Roses, Queen?, Cherry Master 91, Jackie, Grand Prix 98, Leader, Janshi, Night Bunny, Royal Night, Night Gal, Night Gal Summer, Sexy Gal, Sweet Gal, AV Hanafuda Hana no Christmas Eve, AV Hanafuda Hana no Ageman, Bingo Circus, Landing High Japan, Operation Tiger, Dancing Stage Euro Mix, Status Black Jack, Merit Poker, Slot Carnival, Mahjong Senka, Mahjong Yarou, Cherry Chance, Mahjong Cafe Break, Lucky Girl, X Se Dae Quiz, Magic Card, Cross Bingo. Added/updated pictures of Angler Dangler, Manhattan, Sengoku Ninja Tai, Nebula. Moved Tecmo Stackers to alternate names section. Removed "Poker? (IGS)". Added dedicated version of Treasure Island. Added Meadows discrete games 4 in 1 and Ckidzo. Added prototype games Ant Raid, Ptooie Louie, Midway's Pro Tour, Spectre Files, Ugly Stick, RC^2, Wild Pitch, E.T., Road Runner (LD), Bloodlust IK3, Shooting World, Hot Rod Rebels, Ms Gorf, Clone, Barzoids, Destructon Derby, Masters of the Universe, Star Trek, Accelerator. Random updates to Zero Team, Pro Monaco GP, Earth Friend, Bullet, International Team Laser, Clean Sweep. Moved Cycle shooting to alternate name section (clone Bronx is in MAME). Added Touchmaster 2000 Plus.
- 14th April      2008: UnMAMED - Updated for MAME 124u2. Removed 1 on 1 Government. Added to NOT WORKING Touchmaster 5000, 7000, Give Us a Break, Ten Up, Beeline, Chase Bombers. More blurry magazine pictures for everyone to wonder about... Updated Aaargh, Front Row, International Team Laser, Go Coo, Rockford, ZX-2000, Happy Hunter, Techno X, Huddle Up, Back Fire, Quiz Omaeni Pipon Cho, American Soccer, Burning Street, Shooting Zone, War Ball, Variant Schwanzer, Chanbara, Hang-Zo, Dead or Alive proto, Mayjinsen 3, Ashita Tenkini Naare, Super Golf, Devil Shock, Computer Othello, Quiz Kanojyo, Mad Dancing, Jong Yu Ki, Wonder Hole, AIM, X222, Bash, Jigsaw Paradise, Hammer Away, Wiz special version, Jong II, Jan-Shin, Hana Jingi, Oo-zumou, Front Row, Hello Gateball, Nyankoro, Dangle, Power Drift link ver, Sky Destroyer, Adventure, Block Buster, Kozoutai Gatcyo, Monkey Magic, YukiButaP, Kyuukouka Bakugekitai, Mole Hunter, Manhattan, Nebula, Looney Tunes, F1 Super Lap, ACW, Air Combat 22, Air Walkers, Alien Challenge, Astro Wars, Ball Park 2, Battle Star, Birdiy, Burble, Car Hunt, Chase Bombers, Constella, Cool Riders, Cosmopolis, Crystal Maze, Crystal Maze Team Challenge, Cycle Warriors, Dangerous Curves, Deep Scan, Deron Derodo, Diamond Derby, Dirt Dash, Explorer, F-15 Strike Eagle, Fighter's Impact, Final Ranger, Frogs and Spiders, Futuer Flash, Galactic Storm, Galaxia, Get-A-Way, Space Battleship Gomorah, GP World, Great Guns, Janputer, Jantotsu, Kaiun Quiz, KO Punch, Limbo, Magical Date, Manhattan, Mayjinsen, Mini Boy 7, Mirax, Moon Alpha, Moon Quake, Moonraker, Moon Tracker, Moon Trek, Nebula, Nice On, Sengoku Ninja Tai, Panic Road, Racing Beat, Round Up 5, Scramble, Skeet Shot, Sky Love, Space Battle, Star Rider, Star Rub, Star Wars Arcade, Steel Worker, Super Dead Heat, Super Football champ, Super Speed Race GP5, Super Stron Warriors, Surfer, Tatakae Big Fighter, Tic-Tac-Quiz, Tokyo Mie Clinic, Top Bowler, Trampoline, Tri-Attacker, Ultra Quiz, Vertigo, Warp 1, Western Gun, Wing War, Winning Run, Winning Run Suzuka GP, Witch Way, Wyvern, Yakyuen, Yosaku, Zero Team, Dai San Wakusei. Removed Lock-On, moved Pinball 421 to non-games, GP World to laserdisc games, and updated Gals Panic 2.
- 27th March      2008: UnMAMED - Updated for MAME 0.124a. Removed Gekisou, Super Bowl, Pit Boss II, Super Pit Boss, Pit Boss Megastar, Megatouch 6, Risky Challenge/Gussun Oyoyo, Tang Tang, Side By Side 2, Moon Base. Added to NOT WORKING: Cal Omega Games, Toy Fighter, World PK Soccer V2. Updated Ramtek Trivia, 0077, Monster Zero, and Bouncer. Added Over Kuhn to mistranslations. Added pictures for Back Fire and Battle Bird. Added links and info about DICE emulator. Nice to see work done on these pre-CPU games! Updated Special Games section with alternate names of games in MAME. These are differently named clones of games in MAME (such as Boomerang, in MAME as Ikki). Also added Dipswitch Name Changes section for games (such as Block Carnival/Thunder & Lightning 2 or Smokey Joe which is in the MAME Fire Truck driver). I left out MAME names with a title that starts with the same word, and myriad Neo-Geo games since most people know them I think. Anyhow, let me know if I missed any.
- 11th February   2008: UnMAMED - Updated for MAME 0.123. Removed Gappolin, Wild Arrow, Mahjong G-Taste, Match-It II, Street Fighter III, Jojo's Venture, Warzard, Change Lanes, DJ Boy, Taisen Hot Gimmick 4, Sliver, Cross Blades, Last Fighting, Super Eagle Shot, Super Real Mahjong P6, Joryuu Syougi Kyoushitsu, Hayaoshi Quiz Grand Champion Taikai, Hayaoshi Quiz Nettou Namahousou, Super Real Mahjong, Vs Janshi Brand New Stars, Mahjong Tian Jiang Shen Bing, Maze Invaders, Jumbo Ozaki Super Masters Golf, The Block Kuzushi, Mahjong Hot Gimmick Integral, Midway Road Runner, Mortal Kombat 4, Invasion, Buggy Boy/Speed Buggy upright, Task Force Harrier, Spectrum 2000, Big Fight, Ripper Ribbit, Chicken Farm, Crazzy Clownz, Space Fighter Mark II. Added to NOT WORKING: Dangerous Curves, Kaiun Quiz, Super World Stadium 2000, Stress Busters, Magical Zunou Power, Draw 80 Poker, 1 on 1 Government, Vegas Poker, Sigma Poker 2000, Inquizitor, Time Machine, Jet Wave, GameCristal, GTI Poker, Poker?, Hanajingi, GP World, Jan Oh, Mahjong Vegas, Esh's Aurunmilla, Mirage youjuu Mahjongden, Laser Grand Prix, Saloon, Mahjong Cafe Doll, Astropal, Come On Baby, Dance Dance Revolution Extreme, Interstellar Laser Fantasy, Big Apple Games, Thayer's Quest, Almond Pinky, Jack Potten's Poker, Astron Belt, Cobra Command, Galaxy Ranger, Star Blazer, Balloon & Balloon, 39 in 1 MAME Bootleg, Super Pool, Guitar Freaks 6th Mix, Guitar Freaks 11th Mix, Missile Combat, Aladdin, Mini Boy 7, Paranoia, International Toote, Dodge City, Puzzlet. Updated THX-DR1122 and moved it to "special games" section. Updated WIP and donation links.
- 23rd May        2007: UnMAMED - Updated for MAME 0.115u2. Removed Dwarf's Den, Dream World, Magical Tetris Challenge, Connect 4, Martial Masters, Sidewinder, Knights of Valour 2, Teeter Torture, Destroyer, Altair, Draco, Choko, Jyangokushi, Opa Opa, Fantasy Zone II, Master Boy, Astra Superstars, Virtua Racing, Combat Hawk, Midnight Run, Winding Heat, Excite League, Super League, Road Riot 4WD, Magic Fly, 7 e Mezzo. Added to NOT WORKING: Backgammon, Skat TV, Fashion Gambler, Pitboss II, Super Pitboss, Pitboss Megastar, Megatouch 3/5/6, Touchmaster 3000/4000, Mahjong Shiyou, Cobra Command, Gals Panic II Quiz Version, Gals Panic II SE, Monster Zero, Cliffhanger, Goal to Go, Quick Jack, Strip Teaser, Pango Fun, Stelle e Cubi, Space Ace, Two Minute Drill, Super Don Quix-ote, Super Real Mahjong VS, Tower & Shaft, Alpha One, Candy Puzzle, Harem Challenge, Laser Quiz, Laser Quiz 2, Magic Premium, Laser Striss, Ski Champ, multiple dancing/kbrd/guitar/drum games, Salary Man Champ, Tokimeki Memorial Oshiete Your Heart, Snooker 10, Man Guan Fu Xing, Long Hu Zheng Ba 3/4, Good, Big D2, Mahjong Tian Jiang Shen Bing, Mahjong Super Da Man Guan, Mahjong Shuang Long Qiang Zhu 2, Mahjong Man Guan Cai Shen, Mahjong Long Hu Zheng Ba 2, Dou Di Zhu, Da Ban Cheng, Super Dou Di Zhu, Sheng Dan Wu Xian, Wonder League ' 96, Filetto, Kokoroji 2, Ten Pin Deluxe, Chameleon 24. Split IGS games to their own page. Updated Fax 2 and Midway Top Gun.
- 30th December   2006: UnMAMED - Updated for MAME 0.111u1. Removed Legend of Heroes, Super Bubble 2003, Dambusters, Trivia Quest, Space Bugger, Swinging Singles, Quizmaster, Pocket Racer, Shooting Gallery, Rock Duck, Fishing Frenzy, Freeze, Mahjong If, Mahjong Reach. Left Shooting Master since its graphics are still pretty rough. Added to NOT WORKING: Destroyer, Altair, Draco, Connect 4, Casino 5, Tetris (unk), M075 Poker, Super Bowl, Trivia (sms), ParaParaParadise, Keyboardmania 3rd Mix, Mad Dog McCree, Who Shot Johnny Rock, Mad Dog II, Space Pirates, Gallagher's Gallery, Crime Patrol, Crime Patrol 2, The Last Bounty Hunter, Fast Draw Showdown, Platooon, Zorton Brothers, Joker Card, BanBam, Double Dealer, Sky Lancer, Mahjong Tensinhai, Mahjong Raijinjai DX, Majhong Tenkaigen Part 2, Mahjong Tenkaigen, Cow Race, Mongolfier New, Soccer New. Big Boy was listed as an addition but it's not in MAME as far as I could see. Added "Rhinoceros Bar Command", "Rhinoceros Berth Lead-Lead", and "Don Bear Near" to alternate romsets section. They're actually mistranslations, but I thought I'd keep the names there to explain. Updated the entry for the Williams proto Predators.
-  7th August     2006: UnMAMED - Updated for MAME 0.107u2. Removed Card Line, Highway Chase, Critter Crusher, Yu-Ka, Yu-Jan, Puzzle Star, Marine Date, Speed Up, Daikaiju no Gyakushu. Added to NOT WORKING: Ripper Ribbit, Chicken Farm, Crazzy Clownz, Super Bubble 2003, Legend of Heroes, Hidden Catch 3, Pro Golf, Midnight Landing, Magic Fly, 7 e Mezzo, Red Corsair, Sexy Boom, Super Free Kick, High Seas Havoc, Bombs Away, Trivia Madness, Master Boy, Intersecti, The Gladiator.
- 25th April      2006: UnMAMED - Updates pointed out at the MAME board: Removed (Shanghai) The Great Wall, BMC Bowling, Mahjong (The) Daichuukaken, Real Battle Mahjong King, Ghoul Panic, Little Casino, Radiant Silvergun, V-Liner. Moved to NOT WORKING: Match It II, Fighter's Impact. Also updated the Firefox LD page.
- 22nd April      2006: UnMAMED - Updated for MAME 0.105u2. Removed Dragon World, Backfire!, Skull Fang, Thunder Hoop, X-Files, Meijinsen, Lazarian, Cat and Mouse, Crowns Golf in Hawaii, Hidden Catch, Fortress 2 Blue Arcade, Lord of Gun, Lost Castle in Darkmist, Fred Flintstone's Memory Match, Golgo 13, Trivial Pursuit Spanish, Canvas Croquis, Parallel Turn, Champion Baseball II, Shougi, Shougi 2, Talbot, Ninja Kazan, Joshi Volleyball, Fighter's History, Suzuka 8 Hours, Steep Slope Sliders, Zeroize, Mahjong Lucky Mangan, Pro Bowling Championship. Added to NOT WORKING: Poizone, Galaxia, Huang Fei Hong, Hang Pilot, Search for the Magical Error, Final Furlong 2, Gekitoride-Jong Space, Mr. Driller G, Kotoba no Puzzle Mojipittan, Star Trigon, Mahjong G-Taste, Taisen Hot Gimmick Integral, Taisen Hot Gimmick 4 Ever, Gamshara, Solar Assault, Stepping Stage, Tobe! Polystars, Battle Tryst, Heat of Eleven '98, Evil Night, Sega Rally 2 DX, Total Vice, Sega Ski Super G, Over Rev, Sliver, Puck People. Updated/changed Bouncer, Super League, Atomic Punk 2, Gunbarl, Double Wings, F1 Super Battle, Treasure Island, Fantasy Zone II, Opa Opa, Senryaku Bopeep, Altair, Western Gun 2, Lock-On, Buggy Boy, TX-1. Added Alien Challenge, The Untouchable, Cross Fire, Survivor, Escort, Gappolin, Purple Magic, Donkey King. Updated Dumping Project donation information. Removed Phil Bennett's page, updated Andrew Gardner's page.
- 16th January    2006: UnMAMED - Updated for MAME 0.103u2. Removed Laser Battle, Alpine Racer 2, Dark Edge, Jockey Grand Prix, Gradius 4, See See Find Out, D-Day, NBA Play By Play, Flame Gunner, Paca Paca Passion, Quiz, Crouching Tiger Hidden Dragon 2003, Vs Hot Smash, Noah's Ark, Top Roller, Squash, Night Slashers, Heavy Smash, Avengers in Galactic Storm, Shuttle Invader, Thunder Strike, Hoops/Dunk Dream, Rock'n Tread 1-4 and Megasession, Arm Champs II, Virtua Bowling. Added to NOT WORKING: NFL Football, Cat'N Mouse, Magic's 10 2, Get Bass, Scud Race Plus, Alpine Surfer, Area 51 Site 4, Psychic Force 2012, Drawfs Den, Trivia Quest, Wheels & Fire, Daytona USA 2, Fred Flinstone's Memory Match, Fighting Vipers 2, Tang Tang, Spectrum 2000, Spikeout, Spikeout Final Edition, Fortress 2 Blue Arcade, Emergency Call Ambulance, Knights of Valour 2, Ghoul Panic, Little Robin, Real Battle Mahjong King, Martial Masters, Demon Front, Canvas Croquis, Go 2000, Gekisou, Critter Crusher, Card Line, Mirax, Last Fighting, Crystal Maze, Turnover, Skill Trek, Mating Game, Lazarian. Added a picture of Nightmare. Ping Pong Car was listed as a non-working game in the whatsnew file of 0.101u5, but it seems to have disappeared?
- 26th September  2005: UnMAMED - Updated for MAME 0.100u2. Removed Champion Skill, Pontoon, Golden Star, Zeroize, Tetris (Sys E), Taisen Tanto-R, First Funky Fighter, Jolly Jogger, Indian Battle, Long Hu Bang, Chuugokuryuu, Champion List II, Xing Yen Man Guan, Maru-Chan de Goo, Sando-R, Soukyugurentai / Terra Diver, Suikoenbu, World Trophy Soccer, Funky Head Boxers (broken?), Pebble Beach, Air Rescue, Monsters World, Quiz Syukudai, Rough Racer, Final Lap R, Speed Racer, Dragonball Z VRVS, Twin Squash, Cool Minigame, Golden Axe the Duel, Super Major League. Added to NOT WORKING: Roulette, Bubble Trouble, American Poker II, Cherry Master II, Lucky 8 Lines, Starspinner, 906II Video Poker, Jackpot Pool, Forte Card, Rebus, Top Shooter, NBA Play By Play, Super Nudger II, Trail Blazer, Quizmaster, Thunder Hurricane.
- 12th August     2005: UnMAMED - Updated for MAME 0.99u1. Removed Born to Fight, Lethal Enforcers, Slipstream, Eagle Shot Golf, Mobile Suit Gundam Final Shooting, Trivia Whiz, Tic Tac Trivia, Phrase Craze, Top Gunner, Joe & Mac Returns, Party Time, Ganbare Gonta 2, Double Cheese, Chain Reaction, Magical Drop, Osman, Cannon Dancer, Charlie Ninja. Removed some other games I had missed - Super Strike Bowling, Great Ragtime Show, Great Gurianos. Added to NOT WORKING: Lemans 24, Wink. Added SMF's Blog to the links. Moved Anno Domini 2084 to Alternate ROMsets section.
- 20th June       2005: UnMAMED - Updated for MAME 0.97u1. Removed Cool Pool, 9 Ball Shootout, Hyper Crash, Atomic Punk, Cosmic Monsters 2, AmeriDarts, N-Sub, Hana Kanzashi. Added to NOT WORKING: Revenger, Mobile Suit Gundam Final Shooting, Cyber Tank, Lost Castle in Darkmist, Malzak 2, Driver's Eyes, Winning Run. Updated Lock-On, Lazarian. Added Big Fight, UMK3 Wavenet and Rush The Rock Wavenet. Updated URLs: Mamedev.com and Luca Elia's page.
-  8th May        2005: UnMAMED - Updated for MAME 0.96u1. Removed Crackdown, Idol Janshi Su-Chi-Pie, Mahjong Channel Zoom In, Mahjong Kakumei 1/2, Photo Y2K, Demons and Dungeons, Ghost Hunter, Tut's Tomb, Pachinko Gindama Shoubu / DX, Shrike Avenger, GP Rider, Line of Fire, Buccaneer, Calorie Kun vs Moguranian, Gain Ground, Tecmo World Cup Millenium, Pocket Gal Deluxe, Batman Forever, Flying Tiger, Hacha Mecha Fighter, Diet Go Go, X The Ball, Boogie Wings, Rohga Armor Force, Schmeiser Robo, Pro Mahjong Kiwame S, Mahjong Block Jongbou, Space Position, Gardia, Megaplay: Sonic 2, Biohazard Battle. Added to NOT WORKING: TX-1, Buggy Boy, Panic Road, Hoops 96, Dunk Dream 95, N-Sub, Rough Racer, Lock-On, Comad World Beach Ball Championship 1997, Monster World, Peno Cup, Dream World.[08 May '05] Update part two! Removed Comad World Beach Championship 1997, Mission Craft, Plasma Sword, Hana Oriduru, Dyno Bop, Alpha Mission, (XESS) 3 in 1, 4 in 1, Winter Heat, Guardian Force, (Karaoke Quiz) Intro Don Don, Raccoon World. Updated Yukiwo, Atomic Punk, Astra Superstars, Steep Slope Sliders, Elan Doree, Hidden Catch, X-Files, Ultra Dome, Heavy Unit, Master Boy, Buggy Boy. Also updated the URLs to Dox's WIP and Arcade Flyer Archive and added Atari's Quiz Show and Sega's Tic Tac Quiz.
-  6th March      2005: UnMAMED - Updated for MAME 0.94. Removed Galaxy Force 2, Power Drift, Strike Fighter, Rail Chase, G-Loc, Puzz Loop 2, Raiden Fighters, Raiden Fighters 2, Raiden Fighters Jet, Viper Phase 1, Rage of the Dragons, KOF2002, Land Breaker, Point Blank 2, Space Guerilla, UFO Senshi Yohko Chan, Senkyu / Battle Balls, E-Jan High School, Tenth Degree, Snow Bros 3, Super Lup Lup Puzzle, Space Ranger, Sporttime Table Hockey, Sukeban Janshi Ryuuko, Super Monaco GP, AB Cop. Added to NOT WORKING: Eleven Beat, Cart Fury, Monza GP, Magical Tetris Challenge, NBA Showtime, Road Burners, San Francisco Rush 2049, War Final Assault, Tarzan, See See Find Out, Kick Boy, Dacholer, Time Crisis 2, Moonquake, Turbo Sub, V-Liner, Jockey Grand Prix, The Couples, Tut's Tomb, Ghost Hunter, Wild Arrow, Ping Pong King, Gunpey, Dambusters, Trivia Challenge, Laser Base/Future Flash, Kyuukyoku no Othello. Added Nicola's Blog and removed System 16/32 WIP links. Removed the Final Burn emulator as it has been MAMEizized. Updated the "most wanted" links a bit, but newer entries still haven't been added. Updated Parasol Stars, Eeek, and Daytona USA. Added Cutey Fatty and Tap a Tune. And added Boon-Ga Boon-Ga, because people seem to keep bringing it up all the time!
-  9th January    2005: UnMAMED - Updated for MAME 0.90u1. Removed MVP, Where's Wally, Ryu Kyu, Bloxeed, Laser Ghost, Desert Breaker, Flying Ball, SportTime Bowling, Leaderboard Golf, Ninja Mission, Road Wars, Turbo Out Run, Racing Hero, Thunder Blade, Progear no Arashi, World Darts, Xenon, Sea Bass Fishing, Dunk Shot, Action Fighter, Kabuki Z. Removed Marlbobo version of Super Monaco GP, Rougien. Added to NOT WORKING: GP Rider, Bullet, Super Monaco GP, AB Cop, Super Real Mahjong Part 6, SportTime Table Hockey, Sidewinder, Space Ranger, Hyper Crash, Buccaneers, Jackie Chan Fists of Fire, Dead Eye, Harley Davidson, Lost World, Scud Race, Sega Rally 2, Star Wars Trilogy, Virtua Fighter 3, Virtua Striker 2/98/99, Virtual On 2, Sega Bass Fishing, Daytona USA 2, Dirt Devils. Updated Congorilla, Super Masters Golf, Line of Fire.
- 12 November     2004: UnMAMED - Updated for MAME 0.88u4. Removed F1 Grand Prix Star II, Sonic Boom, Field Combat, Gallop Racer 3, Tank 8, QB3, Fix Eight, Title Fight, Raiders, Whiz Quiz, Vamp 1/2, Bonk's Adventure / BC Kid, Professor Pac-Man, BC Story, Clutch Hitter, DD Crew, Yachtsman, Woodpecker, Cotton, Astro Chase, Bristles, Flip and Flop, Boulder Dash. Also removed SF High Splitter and Twin Cobra 2 because I missed 'em. Added to NOT WORKING: Super GX, Skelagon, Virtua Formula, Funny Strip, Ping Pong Masters '93, Twin Brats, Oriental Legend Super, Beat the Champ, Dynamite Deka 2, Apache 3, Round Up 5, Cycle Warriors, Behind Enemy Lines, Daytona USA, Desert Tank, Dead or Alive, Dynamite Baseball '97, Dynamite Cop, Fighting Vipers, Gunblade NY, House of the Dead, Indianapolis 500, Last Bronx, Manx TT Superbike, Pilot Kids, Sonic Championship, Super GT 24h, Sky Target, Sega Rally Championship, Sega Touring Car Championship, Top Skater, Virtua Cop, Virtua Cop 2, Virtua Fighter 2, Virtual On Cybertroopers, Virtua Striker, Zero Gunner, Alien Command, Schmeiser Robo, Paint & Puzzle, Twin Squash, Super Lup Lup Puzzle, Raiden Fighters Jet, Born to Fight, Strike Fighter, Rail Chase, Power Drift, G-LOC Air Battle, Galaxy Force 2. Cleaned up some old links.
-  4th September  2004: UnMAMED - Updated for MAME 0.86u3. Removed Namco Classics Collection 2. Added Road's Edge / Round Trip, Samurai Showdown Warrior's Rage, Fatal Fury Wild Ambition.
- 28th August     2004: UnMAMED - Updated for MAME 0.86u1. Removed Drakton, Alpine Racer, Cyber Cycles, Rave Racer, Ridge Racer, Ridge Racer 2. Removed VivaNonno section. Added Super Crown Golf and Diamond Derby to NON-WORKING games.
- 25th August     2004: UnMAMED - Updated for MAME 0.86. Removed Knightmare, Return of Lady Frog, Virtua Fighter, Rabbit, Mayjinsen 2, Zupapa, Sengoku 3, Vasara 2, Gunbarich, Hangman, Psychic Force EX, Counter Run, Dunk Mania, Portraits, Hyperdrive, Field Goal, Robo Wres, Simpsons Bowling. Added to NON-WORKING GAMES: Party Time Gonta the Diver 2 / Ganbare Gonta 2, Phrase Craze, Tic Tac Trivia, Trivia Whiz, Trivia Whix II, Harem, Virtual Bowling, Champion List II, Long Hu Bang, Xing Yen Man Guan, Chuugokuryuu, Puzzle Star, Mortal Kombat 4, Invasion, Crusin Exotica, The Grid, Conquer, Idol Jahshi Su-Chi-Pi Special, The Killing Blade, Squash, Thunder Hoop, Pocket Gal Deluxe, Diet Go Go, Double Wings, Boogie Wings, Osman, Chain Reaction / Magical Drop / Magical Drop Plus, Charlie Ninja, Joe & Mac Returns, Heavy Smash, World Cup Volley 95, Backfire, BMC Bowling, Meijinsen, Mahjong Block Jongbou, Gals Panic 3, Tatakae Big Fighter, Cool Mini, Cool Riders, Gradius 4, GTI Club, Midnight Run, Pit Boss, Racing Jam, Racing Jam Chapter 2, Silent Scope, Silent Scope 2, Thrill Drive, Winding Heat. Updated Crazy Otto, NBA Jam Extreme, BC Story, Gallop Racer 3, Schmeiser Robo.
- 26th June       2004: UnMAMED - Updated for MAME 0.83. Removed Shanghai The Great Wall, Victorious Nine, San Francisco Rush, Vapor TRX, Tondemo Crisis, Tetris the Grand Master, Battle Area Toshinden 2, Sonic Wings Limited, Street Fighter EX+, Street Fighter EX 2+, Dead or Alive++, Kikaioh / Tech Romancer, Star Gladiator 2, Magical Date EX, Psychic Force, G Darius, G Darius ver2. Added to NOT WORKING - Pachinko Gindama Shoubu / DX, Pinball Champ '95, GP500. Updated Holey Moley, Speed Racer, Max-a-Flex games (Exidy page), Charlie Ninja, Judge Dredd, NBA Jam Extreme. Removed "Knightmare" and "Antarctic Adventure" as they appear to simply be MSX games by Konami. Removed "Missionary" as it sounded a lot like Congo Bongo and there's no mention of it anywhere else on the web. Added Knightmare (Gottlieb prototype) and Party Time.
- 12th May        2004: UnMAMED - Updated for MAME 0.82. Removed Star Gladiator, Street Fighter EX, Street Fighter EX 2, Dyna Gears, Super World Stadium, Time Crisis, Strider 2, Twin Eagle II, Megaplay Sonic / Tecmo World Cup, Golden Axe 2, Neratte Chu, Renju Kizoku, Brave Blade, Ray Storm, Pirate Treasure, Ghostlop, Super Rider, Groove on Fight, Othello Shiyouyo, Danchi de Hanafuda. Added to NON-WORKING section: Landing Gear, Side By Side 1/2, Densha de Go 1/1ex/2/2ex, Lord of Gun, Vapor TRX, San Francisco Rush: The Rock, Super Real Mahjong P5, Super Eagle Shot, Mayjinsen 1/2, Kisekae Hanafuda, Kisekae Mahjong, Hyperdrive, Seimei Kentei Meimei Ki Cult Name, Yu-Jan, Yu-Ka, Speed Racer, Final Lap R, Mission Craft, Racing Beat.
-  4th April      2004: UnMAMED - Updated for MAME 0.81u3. Removed Cool Boarders Arcade Jam, Rival Schools, MTV Rock n Roll Trivia, Gallop Racer, Beastorizer. Added Swinging Singles, Taiwan Chess Legend, Parallel Turn, Change Lanes, Dragon World 3, Zero Target, Counter Steer, Senkyu / Battle Balls, Viper Phase 1, E-Jan High School, Raiden Fighters, Raiden Fighters 2, D-Day, Where's Wally?, Simpsons Bowling, Red Earth / Warzard, Street Fighter 3, Virtua Fighter, Virtua Racing, Star Wars Arcade, Wing War, Raiden DX, (New) Zero Team to NOT WORKING section.
- 12th March      2004: UnMAMED - Updated for MAME 0.80u1. Added Air Rescue, Buriki One, Lethal Enforcers to NOT WORKING. Removed Radikal Bikers, Surf Planet, and Zintrick. Added Mahjong Daichuukaken, Mahjong Reach, Mahjong Lucky Mangan, and Mahjong Dragon Challenge Tiger II.
-  2nd March      2004: UnMAMED - Updated for MAME 0.79u4. Removed Quasar, Botanic, Bongo, Pro Yakyuu Tryout, Mad Alien, Quiz 365. Added to Non-Working section: Radikal Bikers, Speed Up, Surf Planet, Battle of the Solar System, F-15 Strike Eagle, Super Tank Attack. Added Ms. Pac-Man Twin. Updated Bouncer pictures. Removed System 24 WIP page, added Model 3 WIP and Norbert's pages.
- 18th February   2004: UnMAMED - Updated for MAME 0.79u1. Removed Driver's Edge, Varia Metal, Mahjong Electron Base, Space Launcher, and moved Double Cheese and Talbot to the NOT WORKING section.
-  1st February   2004: UnMAMED - Updated for MAME 0.79. Removed Competition Golf, Space Thunderbird, Hard Head 2, Scramble Spirits, Winning Spike, Whizz, More More Plus, Vs Tennis Japan, Digger, Video Moon Tracker, Video Moon Raker. Added to NON-WORKING section: Varia Metal, Denjin Makai, Super Hang On Limited Edition, Plasma Sword. Moved DoDonPachi II, Knights of Valour 2 Plus, and Progear no Arashi from NOT WORKING to REMOVED section. Updated Winning Run '91, Super Tank Attack, Line of Fire. Added "helpful donation reminder" to the front page so that we all remember to support purchases of new games and hardware to dump the ROMs.
-  4th January    2004: UnMAMED - Updated for MAME 0.78u1. Removed Princess Clara Daisakusen, Wild Pilot, Target Balls, International Cup '94. Added Stadium Hero '96 and Skull Fang to NOT WORKING section.
- 27th December   2003: UnMAMED - Updated for MAME 0.78. Removed Bonanza Bros, Quiz Rouka, Dynamic Country Club, BioFreaks, California Speed, Tekken 3, Ehrgeiz, Fighting Layer, Mr Driller, Aquarush, Ashita no Joe, Borderline. Added to Non-Working section: Scramble Spirits, Super Masters Golf, Quiz Syukudai, Gain Ground, Crackdown, Mr Driller 2, Star Gladiator, Primal Rage 2, NBA Jam Extreme, Judge Dredd, Target Ball.
- 14th December   2003: UnMAMED - Updated for MAME 0.77u3. Removed Hot Rod and Monkey Mole Panic. Added Malzak and Ashita no Joe to Non-Working section. Also removed Dump Matsumoto, Dynamite Dux, E-Swat, Flash Point, Passing Shot, Quartet, Quartet 2, Shinobi, Time Scanner, Toryumon, Tough Turf, Wonder Boy 3, and Wrestle War because at least one version of each generally works. Updated Speed Racer. Moved Badlands to Daphne section. Removed Thunder Ceptor II link and updated Mach 3 link, which now includes work on Firefox.
-  2nd December   2003: UnMAMED - Updated for MAME 0.77u2. Removed NFL Blitz, Thunder Ceptor, Hatch Catch, Cookie and Bibi 2, Quiz Panicuru Fantasy, Rock'n Tread, Mahjong Angel Kiss. Added Rabbit, Tokimeki Mahjong Paradise, BioFreaks, Jackie Chan, and BC Story to Not Working, and arranged the MegaTech Games. Renamed Schmeiser Robo. Updated Bongo, Drakton, Cross Blades, and Borderline. Moved Submarine to no-CPU page.
- 24th November   2003: UnMAMED - Updated for MAME 0.77. Removed Wayne Gretzky 3D Hockey, Dangerous Dungeons, T-Mek, Guardians of the Hood. Added/moved to non-working games in MAME - Godzilla, Bonk's Adventure, Seibu Cup Soccer, SF Rush, California Speed, Sport Fishing 2, Tekken 3, Soul Calibur, Ehrgeiz, Derby Quiz My Dream Horse, Fighting Layer, Paca Paca Passion, Super World Stadium 99, Tekken Tag Tournament, Mr Driller, Aqua Rush, and Golgo 13. On a side note, this is the first update from my new computer. I finally got it working!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------





 M A M E  W O R K - I N - P R O G R E S S
 ========================================

 1.   MAME CORE

 2.1  MAMEUI
 2.2  MAME 64-bit
 2.3  MAMEUI32
 2.4  Windows XP/Vista/7/8/10
 2.5  DOS
 2.6  LINUX
 2.7  SDLMAME
 2.8  MAC OS X
 2.9  UNIX
 2.A  NetBSD/OpenBSD
 2.B  ANDROID/ARM
 2.C  Raspberry Pi
 2.D  SOLARIS
 2.E  UME
 2.F  MESS

 3.   COMPILING / SOURCE
 3.1  VISUAL C/OTHER COMPILER/OSD DEVELOPERS
 3.2  DEBUGGER/DISASSEMBLER
 3.3  3RDPARTY, PYTHON, LUA AND PLUGINS

 4.   VIDEO RENDERING SYSTEM
 4.1  TILEMAP SYSTEM, SPRITES & TEXTURES
 4.2  COLOR PALETTE
 4.3  SCANLINES/BLITTERS

 5.   VECTOR

 6.   MEMORY SYSTEM
 6.1  ROMLOAD/ROMREGION
 6.2  DEVICES
 6.3  SOFTWARE LIST

 7.   INPUT/OUTPUT
 7.1  DIPSWITCHES
 7.2  INIT/RESET/RUNNING/PAUSE/EXIT ROUTINES
 7.3  TIMER SYSTEM
 7.4  NETWORK

 8.   USER INTERFACE (UI) - ON SCREEN DISPLAY (OSD) - CONFIGURATION
 8.1  FILE SYSTEM
 8.2  STATE / HIGH SCORE SAVING
 8.3  CHEAT ENGINE
 8.4  CHEAT PLUGIN (LUA)
 8.5  SCREENSHOT / MNG / INP / WAV / AVI
 8.6  ARTWORK / LAYOUT
 8.7  MULTI-LANGUAGE
 8.8  VALIDITY CHECKS
 8.9  AUDIT
 8.A  LISTXML/INFO

 9.   OTHER DRIVERS/TOOLS






 1.   MAME CORE

 - 0.285              : You're supposed to specify MEM_RESERVE when requesting additional address space. This has been buggy since the very first VCS revision of the MAME 0.121 source, but Windows tolerates it (lib\osdlib_win32.cpp). Set global C++ locale when the standard library isn't broken. GNU libstdc++ only provides a useless stub locale implementation when using anything other than the glibc standard C library. However, llvm libc++ provides a locale implementation that works fine with UCRT. Suppress digit grouping. Too many things don't take it into consideration (osd\windows\winmain.cpp) [Vas Crabb].
 - 0.278              : Added muldiv64 and muldivu64 functions (osd\eminline.h) [O. Galibert]. Made multiply/divide helper names a bit more consistent with other functions (osd\eminline.h). Ensure size isn't passed to ::operator delete when destructing directory entries. osd_stat allocates additional space following the directory entry to store the name. A regular delete may pass sizeof(entry) to ::operator delete, which won't match the allocated size. This causes a problem if the runtime library checks it (may suppress the warning in MT09137) (osd\osdfile.h) [Vas Crabb].
 - 0.274              : Added helper for getting CPU cache line size (lib\osdlib_win32.cpp and osd\osdcore.h) [Vas Crabb].
 - 0.273              : Allow sub-mcfg to unset perfect quantum (emu\mconfig.cpp) [hap].
 - 0.272              : Mark one path as EXPECTED (emu\schedule.cpp) [AJR].
 - 0.267              : Fixed undefined behavior in find_approximate_matches. If 'it' points to the last element of 'penalty', the 'resize' call invalidates it and the subsequent call to 'emplace' is undefined. This causes a crash in MSVC debug mode. Fixed it by resizing _after_ emplacing (emu\drivenum.cpp) [Roman Donchenko].
 - 0.264              : Eliminated core_crc32 wrapper function in favor of util::crc32_creator (util\coreutil.cpp, debug\debugcpu.cpp, emu\rendfont.cpp, emu\save.cpp) [AJR].
 - 0.258              : Catch exceptions by const reference (emu\machine.cpp) [Vas Crabb].
 - 0.254              : Recognize reset phase in describe_context (emu\machine.cpp) [AJR]. Choose correct emu_fatalerror constructor when format string is an rvalue (emu\emucore.h). Added deduction guides for common delegate creation patterns (only used in sega\segas16a.cpp so far) (emu\devdelegate.h and util\delegate.h) [Vas Crabb].
 - 0.253              : Retired the over-stretched "system type" flags. Functionally, the only difference between the system definitions is that GAMEL lets you specify an additional internal layout and SYST lets you specify a compatible system. COMP and CONS are just aliases for SYST - the aliases can be phased out. Removed arcade.flt and mess.flt altogether [Vas Crabb].
 - 0.252              : Sorted mame.lst by project - location of all new additions has to make sense now (mame\mame.lst). Better way to get module handle. This was leftover support for Windows 2000 and earlier that hadn't been cleaned up (windows\winutil.cpp) [Vas Crabb].
 - 0.250              : Added utility function for sign-extending values of arbitrary width (util\coretmpl.h) [AJR]. Added optimised rotate helpers to osd\eigccx86.h. These perform better than the constexpr function when the value is not known at compile time. If the value is known at compile time, you probably shouldn't be using these utilities anyway. Updated instructions for adding MAME package repository in MSYS2 (docs\source\initialsetup\compilingmame.rst) [Vas Crabb]. Ensure queue->thread will have at least 1 work_thread_info in it. For platforms which do not support threads (i.e. emuscripten), queue->thread might not have any work_thread_info's added to it. This is bad as osd_work_item_queue_multiple will access queue->thread[0] when queue->threads == 0, and subsequently crash as the queue has no items in it (osd\osdsync.cpp) [CasualPokePlayer].
 - 0.249              : Modernized core_strwildcmp() and core_iswildstr(). Changed parameters from 'const char *' to 'std::string_view'. Removed 16-character limit in core_strwildcmp() [Nathan Woods].
 - 0.248              : Renamed add_scheduling_quantum to add_quantum and added perfect_quatum and use that for most cases of boost_interleave (emu\schedule.cpp) [hap]. Changed core_stricmp to take std::string_view parameters (util\corestr.cpp). Note that the implementation is still not UTF-8 aware [Nathan Woods].
 - 0.247              : Driver device API cleanups: Remove the confusing driver_init virtual override. The function has been de-virtualized in most drivers that were calling it explicitly, and replaced by alternate overrides in others. Remove MCFG_VIDEO_RESET_OVERRIDE (not used anymore). Provide MCFG_MACHINE_START_REMOVE and MCFG_VIDEO_START_REMOVE for consistency [AJR].
 - 0.245              : Changed osd_subst_env to accept a std::string_view and return a std::string (osd\osdcore.h) [Nathan Woods]. Optimised the scheduler's handling of unscheduled timers - gives a 50% performance improvement in some timer-heavy drivers (emu\schedule.cpp). Fixed regressions with some temporary timers (emu\schedule.cpp). Added better endianness swizzling helpers. Added some more operations on endian-swizzlers. Changed a few more drivers to use the (util\endianness.h). Fixed a few more pessimising assumptions. Gains a few percent in Ketsui and SNES SuperFX (emu\schedule.cpp). Fixed some issues with Visual Studio project generation after the changes to Windows resource creation [Vas Crabb]. Silence compiler warning in non-debug build (emu\schedule.h) [hap]. The bookkeeping assert was checking the wrong entity (nice find) (emu\machine.h) [Andrew Green].
 - 0.241              : Attempt to appease GCC's stricter handling of incomplete types (emu\machine.cpp) [AJR].
 - 0.238              : Fixed buffer overflow with osd_output stack (osd\osdcore.cpp) [hap].
 - 0.237              : Added lib\util\abi, lib\util\dynamicclass.cpp/h and lib\util\dynamicclass.ipp. Notes from experiments with Clang (util\delegate.cpp). Detect Clang x86-64 thunk for first vtable entry (util\delegate.cpp). Further API cleanups: Turned 'core_file' into an implementation of 'random_read_write'. Turned PNG errors into a standard error category. Added a helper for generating what look like derived classes on-the-fly [Vas Crabb].
 - 0.236              : Added util\endianness.h. Moved endianness type into lib\util header (lib\util\endianness.h; scripts\src\lib.lua, cpu\mips\mips1.cpp, emu\debug\dvmemory.cpp, emu\emucore.cpp/h, emumem.h, emumem_mud.cpp/h, memarray.cpp, mame\luaengine_mem.cpp and tools\unidasm.cpp) [AJR]. One less level of indirection for functoid delegates (util\delegate.cpp). If a delegate is set to a functoid (e.g. a lambda) with a signature that is an exact match for the delegate's signature, it will be bound directly. If arguments or the return value need conversion, a static adaptor will be generated. This removes unnecessary indirection through std::function::operator() (util\delegate.cpp and emu\devdelegate.h). More cleanup and future-proofing (util\strformat.h, util\delegate.h). Found a SFINAE trick to detect absence of stream-out operators. Fixes building with C++20 standard library (util\strformat.h). Fixed a commend and removed an unused declaration from MSVC member function pointer wrapper. Added support for discarding functoid return values for delegates returning void. Added support for using std::ref to bind non-copyable functoids (util\delegate.h). Fixed multiple issues (util\delegate.cpp): Fixed this_pointer displacement being reapplied after delegates are copied - caused issues with classes with multiple inheritance. Made null member function pointer test conformant with Itanium C++ ABI specification. Correct size of this pointer displacement - fixes issues on big Endian targets. Fixed function addresses for virtual member functions on targets that use function descriptors (e.g. PPC64). Applied shift to this pointer displacement for targets that use the ARM variant of the Itanium ABI. Fixed this pointer displacement not being applied for virtual member functions on targets using ARM variant of the Itanium ABI. Fixed this pointer displacement being incorrectly applied to vptr on targets using ARM variant of the Itanium ABI. Made less code conditionally compiled to make it easier to catch errors (util\delegate.cpp). Try to catch issues earlier and some cleanup (util\delegate.cpp). Optimised generation of late bind helper functions. The late bind helper function doesn't depend on the delegate signature - only on the late bind base class and function target class. Having it inside the delegate base class means it needs to be instantiated for every combination of late bind base class, function target class and delegate signature. In a typical driver file, there is only one late bind base class (delegate_late_bind), and there will be delegates with multiple signatures bound to function members of the same class (e.g. read and write handlers, possibly of different widths, bound to members of the driver state class). By moving the late bind helper out of the delegate base class, the number of required instantiations can be reduced. By moving the body out of the enclosing class declaration, the compiler can be encouraged to coalese instantiations across translation units. While this won't give a further reduction in compile time, it should at least reduce the output binary size by reducing duplication for devices that frequently have handlers installed in memory maps. Added an additional template parameter to delegates allowing the late bind base class to be changed if desired. Moved the MSVC implementation "this" pointer optimisation out-of-line and added logging. Also cleaned up the Itanium "this" pointer adjustment and code pointer resolution implementation to reduce duplication and conditional compilation. Made binding_type_exception give a more meaningful what() message than "std::exception". Added extensive validity tests for delegate functionality. Pointers to member functions are tested, including multiple inheritance, virtual and non-virtual member functions, and checking for generational loss across copying/assigning delegates. This should properly exercise "this" pointer adjustment for the Itanium and MSVC implementations, and vtable lookup for the Itanium implementation. So-called late binding functionality is tested, including exceptions on failure. Functoids are tested, although given the encapsulation it's not possible to check that an apator isn't generated when it shouldn't be. Fixed calculation of this_pointer when casting member function pointers across virtual inheritance relationships using MSVC with /vmg (util\delegate.cpp). Fixed structure return with MSVC C++ ABI. Automatically use delegate_mfp_compatible to generate an adaptor for member functions that return non-scalar, non-reference types (partially addresses GitHub #8597). Enabled the MSVC delegate implemenation for MSVC on AArch64. Switched back to neater delegate types for layout item bounds and colour (util\delegate.h). Made MSVC delegates capable of walking past all the thunks MSVC puts in the way of actually calling a member function. I'm not accounting for the "this" pointer being passed in RDX when the return value is an oversize scalar. This is harmless because it won't see anything that looks like a virtual call thunk using RCX when RCX points to uninitialised space for the return value. It just means virtual member function calls won't be bypassed if the return value is an oversize scalar, but that doesn't happen frequently anyway (util\delegate.cpp). Make comparison operators more technically correct. For Itanium ABI, two null member function pointers should compare equal even if the undefined bits differ. For MSVC ABI, there's all sorts of complexity around what happens when you compare pointers to member functions for different inheritance types. You'll still occasionally get weird results comparing pointers to members of different classes (util\delegate.h). Recognise a couple more MSVC thunks. The MSVC C++ ABI doesn't reserve the first vtable entry for classes without a virtual destructor, so the instruction to load the virtual member function address may not need an immediate displacement. Also recognise virtual member function call thunks for AArch64. Added a couple of comments about assumptions (util\delegate.cpp). PowerPC-64 Little Endian drops function descriptors. At some point I'll make a proper header ABI detection. There's too much stuff to keep in the delegate sources, and it will be useful for other stuff like recompilers (util\delegate.cpp). Use "compatible" delegates for MinGW GCC i686. The Itanium delegate has questionable value on on MinGW i686 as it injects a conditional branch in the hot path for delegates anyway to deal with the different __thiscall convention. It's somehow breaking and causing memory corruption in full builds, but I don't have the time to work out exactly which delegate type is the problematic one, especially not with a release coming soon. This will probably cause 32-bit MinGW builds to become substantially larger (util\delegate.h) [Vas Crabb].
 - 0.234              : Changed osd_ticks to use QueryPerformanceCounter on Windows since the mingw std::chrono::high_resolution_clock is anything but (osd\osdcore.cpp) [Aaron Giles].
 - 0.233              : Eliminated remaining uses of auto_alloc and friends (emu\machine.h) [Aaron Giles].
 - 0.229              : Added util\lrucache.h. Moved lru_cache_map to separate header (util\coretmpl.h -> util\lrucache.h) [AJR].
 - 0.228              : Added osd\osdfile.h. Splitted out file, directory and path classes and methods to a new header (osdfile.h), Doxygenizing the documentation comments (osd\osdcore.h) [AJR].
 - 0.227              : Deprecate machine resource pool (emu\machine.h). This has outlived its usefulness. Use smart pointers (std::unique_ptr, std::shared_ptr, etc. from <memory>) to manage object lifecycles [Vas Crabb].
 - 0.222              : First attempt at auto-sort of mame.lst [Robbbert]. Don't save 0byte file (machine\nvram.h, emu\dinvram.h and emu\machine.cpp) [hap].
 - 0.221              : Get rid of a temporary that Clang 10 doens't like (emu\mconfig.h) [Vas Crabb].
 - 0.220              : Cleanup: Added doxygen comments for bit manipulation functions. Added an overload of BIT that works like the AArch64 UBFX instruction. Kill off some of the silly concatenating overloads for emu_file::open. Make searchpath acually useful for devices [Vas Crabb]. Roll back no longer needed /ZI workaround (scripts\src\tools.lua). It has been fixed as of Visual Studio 2019 16.5 [Julian Sikorski].
 - 0.217              : Start experimenting with auto-template driver form, this file can be considered deprecated and its contents to be moved on a specific Python tool folder (etc\template_driver.cpp) [Angelo Salese]. Allow saving members of structures in n-dimensional arrays, even if the members themselves are n-dimensional arrays - see qsoundhle.cpp for an example of loops disappearing. This can greatly reduce the number of save state registrations in some cases (emu\save.cpp and mame\luaengine.cpp). Different approach to member initialisation - hopefully work around issue with move constructor; also stop using names that start with underscore followed by capital letter as they're reserved (util\coretmpl.h) [Vas Crabb]. Try the new save state possibilities (cpu\dspp\dspp.cpp, cpu\i386\i386.cpp and cpu\i8089\i8089_channel.cpp) [Osso].
 - 0.216              : Make devdelegate more like DEVCB for configuration. This is fundamental change to show device delegates are configured. Device delegates are now aware of the current device during configuration and will resolve string tags relative to it. This means that device delegates need a device to be supplied on construction so they can find the machine configuration object. There's a one-dimensional array helper to make it easier to construct arrays of device delegates with the same owner (I didn't make an n-dimensional one because I didn't hit a use case, but it would be a simple addition). There's no more bind_relative_to member - just call resolve() like you would for a DEVCB. There's also no need to cast nullptr when creating a late bind device delegate. The flip side is that for an overloaded or non-capturing lambda you'll need to cast to the desired type. There is one less conditional branch in the hot path for calls for delegates bound to a function pointer of member function pointer. This comes at the cost of one additional unconditional branch in the hot path for calls to delegates bound to functoids (lambdas, functions that don't take an object reference, other callable objects). This applies to all delegates, not just device delegates. Address spaces will now print an error message if a late bind error is encountered while installing a handler. This will give the range and address range, hopefully making it easier to guess which memory map is faulty. For the simple case of allowing a device_delegate member to be configured, use a member like this: template <typename... T> void set_foo(T &&...args) { m_foo_cb.set(std::forward<T>(args)...); }. For a case where different delegates need to be used depending on the function signature, see src\emu\screen.h (the screen update function setters). Device delegates now take a target specification and function pointer. The target may be: * Target omitted, implying the current device being configured. This can only be used during configuration. It will work as long as the current device is not removed/replaced. * A tag string relative to the current device being configured. This can only be used during configuration. It will not be callable until .resolve() is called. It will work as long as the current device is not removed/replaced. * A device finder (required_device/optional_device). The delegate will late bind to the current target of the device finder. It will not be callable until .resolve() is called. It will work properly if the target device is replaced, as long as the device finder's base object isn't removed/replaced. * A reference to an object. It will be callable immediately. It will work as long as the target object is not removed/replaced. The target types and restrictions are pretty similar to what you already have on object finders and DEVCB, so it shouldn't cause any surprises. Note that dereferencing a device finder will changes the effect. The order of the target and name has been reversed for functoids (lambdas and other callable objects). This allows the NAME macro to be used on lambdas and functoids. For example: foo.set_something(NAME([this] (u8 data) { m_something = data; }));. I realise the diagnostic messages get ugly if you use NAME on a large lambda. You can still give a literal name, you just have to place it after the lambda rather than before. This is uglier, but it's intentional. I'm trying to drive developers away from a certain style. While it's nice that you can put half the driver code in the memory map, it detracts from readability. It's hard to visualise the memory range mappings if the memory map functions are punctuated by large lambdas. There's also slightly higher overhead for calling a delegate bound to a functoid. If the code is prettier for trivial lambdas but uglier for non-trivial lambdas in address maps, it will hopefully steer people away from putting non-trivial lambdas in memory maps. There were some devices that were converted from using plain delegates without adding bind_relative_to calls. I fixed some of them (e.g. LaserDisc) but I probably missed some. These will likely crash on unresolved delegate calls. There are some devices that reset delegates at configuration complete or start time, preventing them from being set up during configuration (e.g. devices\video\ppu2c0x.cpp and devices\machine\68307.cpp). This bgoes against the design principles of how device delegates should be used, but I didn't change them because I don't trust myself to find all the places they're used. Changed emu_fatalerror to use util::string_format semantics. Assert aborts on failure - abort is not an exception. Conditional noexcept is an antipattern, get rid of it (emu\device.cpp, diexec.cpp, emucore.h, machine.h and schedule.cpp). Updated emu\schedule.cpp [Vas Crabb].
 - 0.215              : Get rid of sound start/reset overrides in machine configuration (emu\driver.cpp) Note: The various start/reset overrides are bugs waiting to happen. It's not immediately obvious that the ones run earlier can end up being called multiple times if subsequent ones throw missing dependencies exceptions. They're a relic of when everything from the old C-style drivers was thrown into classes all jumbled together [Vas Crabb].
 - 0.213              : Removed single-use (and savestate unsafe) rand_memory function (util\coreutil.cpp and cpu\cosmac\cosmac.cpp) [hap]. Removed Machine configuration macros and functions from emu\mconfig.h [Vas Crabb].
 - 0.211              : Eliminated legacy callback syntax (template <class Object> devcb_base &set_?_callback/handler(?) { return...}; emu\devcb.h, screen.h, cpu\nec\v25.h, s2650\s2650.h, machine\74175.h, ataintf.h, cr511b.h, eepromser.h, i8212.h, i8251.h, namcos21_dsp_c67.h, pci-ide.h, sound\2203intf.h, 2608intf.h, 2610intf.h, 2612intf.h, 3526intf.h, 3812intf.h, es5503.h, ics2115.h, mos6560.h, msm5205.h, nes_apu.h, s14001a.h, spu.h, video\psx.h, v9938.h, audio\dsbz80.h) [AJR]. Defaulting to empty search path if null (emu\machine.cpp) [Nathan Woods].
 - 0.203              : Trying to avoid confusion with the length of the container, or with the number of empty slots (util::fifo.queue_length(); util\coretmpl.h) [Patrick Mackinlay].
 - 0.198              : Get rid of the assert replacement (emu\emucore.h). It prevents you from using assert in a destructor for a literal type due to the implicit nothrow. It's just not worth the trouble it's causing [Vas Crabb]. Removed DRIVER_INIT-related macros in favor of explicitly-named member functions. Made init_ prefix on driver initializers explicit. Fixed up GAME/COMP/CONS macro spacing [Ryan Holtz]. Removed some machine().device usage from the core (emu\addrmap.cpp and diexec.cpp) [AJR].
 - 0.197              : Removed emucore from external tools (scripts\src\tools.lua) [Vas Crabb]. Moved some not-directly-emulation-related helpers to lib\util\coretmpl.h and disasmintf.h, further extricate emu.h from tools [AJR].
 - 0.196              : Deprecated and removed all uses of running_machine::first_screen - there's been plenty of warning (emu\machine.h). Removed all uses of first_screen from core files (emu\crsshair.cpp, emu\debug\debugcpu.cpp, emu\debug\dvstate.cpp, emu\inpttype.h, emu\ioport.h, emu\mconfig.cpp, emu\screen.cpp, emu\video.cpp, ui\cheatopt.cpp, ui\ui.cpp, ui\viewgfx.cpp and osd\modules\input\input_windows.cpp) [Ryan Holtz]. Fixed count_leading_zeroes(0) C fallback (osd\eminline.h) [Vas Crabb]. Eliminated vestigial member that was behind machine().first_screen() (emu\machine.cpp) [AJR].
 - 0.195              : Internal maps must now be constructed last to have priority (emu\addrmap.cpp). Fixed memorymap ordering/regression in aeroboto, alibaba, armedf, buster.cpp, calchase.cpp, cave.cpp, cdi.cpp, csplayh5.cpp, cubo.cpp, diamond, exterm.cpp, fastfred.cpp, formatz, gammagic.cpp, jangou.cpp, jpmimpct.cpp, liberate.cpp, ltcasino.cpp, megaplay.cpp, metalmx.cpp, metlfrzr, mlanding.cpp, mpatrol, namcos11.cpp, namcos21.cpp, nbmj8688.cpp, nmk16.cpp, psikyo4.cpp, renju, skyraid, scobra.cpp, scramble.cpp, seabattl.cpp, srmp5.cpp, ssv.cpp, system16.cpp, taito.cpp, tankbatt, tazmania, toratora, tnzs.cpp, voyager.cpp and williams.cpp [AJR, Dirk Best, hap, smf, O. Galibert, Osso].
 - 0.193              : Get rid of legacy BITSWAP* (BITSWAP8(_) -> bitswap<8>(_)) (emu\emucore.h) [Vas Crabb]. Stop save and load logging timers unless VERBOSE is set (emu\schedule.cpp) [smf].
 - 0.192              : Removed irqN_line_pulse interrupt generators. Vestigial commented-out uses remain in cdi.cpp. This does not affect nmi_line_pulse (emu\driver.cpp/h). Replaced driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line + CPU minimum quantum. This "Pulse" an input line by asserting it and then clearing it later (emu\diexec.cpp, driver.cpp, audio\dcs.cpp, rax.cpp, drivers\cball.cpp, changela.cpp, cvs.cpp, dotrikun.cpp, equites.cpp, firetrk.cpp, fitfight.cpp, gaelco3d.cpp, homedata.cpp, igs_m027.cpp, m90.cpp, mgolf.cpp, namcond1.cpp, namcos22.cpp, pntnpuzl.cpp, ssfindo.cpp, starshp1.cpp, zac_2.cpp, machine\3do.cpp, archimds.cpp, galaxold.cpp, namcos2.cpp and pgmprot_igs027a_type3.cpp) [AJR]. Get rid of branches in cout_leading_zeros and ount_leading_ones (osd\eigccppc.h and eigccx86.h) [Vas Crabb].
 - 0.190              : Returning a reference from various corestr.cpp calls to avoid unnecessary string copies (util\corestr.cpp) [Nathan Woods].
 - 0.189              : Moved unimplemented/imperfect flags from machines into devices. Allows dynamic warning flags depending on slot configuration. Unclutters GAME/CONS/COMP/etc. definitions where a family of machines or a device have the same flags. Allows more combinations of flags. 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: <feature type="sound" status="imperfect"/>. Example: device/machine declares unemulated keyboard: <feature type="keyboard" status="unemulated"/>. Example: device declares imperfect controls but inherits unemulated controls from a subdevice: <feature type="controls" status="imperfect" overall="unemulated"/>. Example: device doesn't declare imperfect LAN but inherits it from a subdevice: <feature type="lan" overall="imperfect"/>. 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 [Vas Crabb].
 - 0.188              : Made parent/clone loops raise a fatal error rather than hanging in a loop appending to a string (emu\driver.cpp) [Vas Crabb]. c_str() is no longer needed with emu_file::open since it now takes a std::string (emu\machine.cpp) [AJR].
 - 0.187              : Added line hold capability. Note: Whoever feels like saying that "HOLD does not exist in hardware", I invite to admire the beautiful TTL circuit to the left of the 68000s in the Over Drive schematics (emu\devcb.cpp) [O. Galibert].
 - 0.186              : Added emu\emufwd.h. rand() corrections in src\devices\* and src\mame\* [hap]. NPOT subunit compromise: Handlers with a non-power-of-2 number of subunits are allowed once again. However, the offset multiplier will be rounded up to the nearest power of 2 (emu\addrmap.cpp). Mechanism for devices to generate clocks for other devices. Have set_unscaled_clock and set_clock_scale not call notify_clock_changed unless the device has been started. Owner-derived clocks are now updated whenever the owner's clock is changed, including at configuration time. This simplifies the configuration of various (MESS) NES clones. Added clock_update_delegate type to represent device-generated clock outputs that may be dynamically modified. The model implementation of this is the CLK output in I8085A. Removed timer_pulse (emu\schedule.cpp). Removed MACHINE_CONFIG_FRAGMENT. This is a pretty minimal change. The point where the root device is added has been moved from the MACHINE_CONFIG_START macro to the constructor of the machine configuration class (made possible by giving drivers their own device types). This isn't the final change in this area. The root device is still being handled specially in that its configuration comes from the game driver structure. This needs to be harmonised with regular devices [AJR]. Fixed issue with the Emscripten port where the emulation would continue to run while paused (emu\machine.cpp) [Steven Hugg]. Check for callback name being a null pointer before sending it to %s (emu\schedule.cpp) [Ted Green]. Changed 'int ignore_warnings' parameter on core_options::parse_ini_file() to be 'bool ignore_unknown_options'. DERIVED_CLOCK now updates in response to clock changes and changed (MESS) CoCo to use this mechanism [Nathan Woods]. Added device-specific machine configuration (emu\device.cpp, driver.cpp, gamedrv.h and mconfig.cpp). Use Zaccaria driver as a demo for machine config in members. Get rid of mconfig trampoline in a few devices, make handlers protected. Changed some device_mconfig_additions to device_add_mconfig. General cleanup: Moved rarely-used output and pty interfaces out of emu.h. Consolidate and de-duplicate forward declarations, also remove some obsolete ones. Clean up more #include guard macros. Scope down a few more things [Vas Crabb].
 - 0.184              : Uncovered what might be a core bug: AM_SELECT does not work properly with masked handlers [AJR].
 - 0.183              : Make DEVCB objects more consistently available for further configuration [AJR]. Make emu\emucore.h a bit more readable [Vas Crabb].
 - 0.181              : Removed emu\dispatch.cpp/h. Overhaul of emu\devcb.cpp: * Allow stringing multiple callbacks together recursively. Chained callbacks will be read or written in sequence, and each can be configured with its own type and mask/shift/XOR parameters. * Chained input callbacks cannot have overlapping masks (there's no such thing as a free multiplex). Chained output callbacks have no such restriction. * Removed the constant parameter for the LOGGER callback type: It makes no sense for output, was always zero in existing usage, and is now unnecessary with callback chaining. * Changed LOGGER behavior for writes to log the user-defined message only if the output as masked is nonzero. With callback chaining, this can be used to monitor when individual bits become active. * Constant read callbacks can no longer have MCFG_DEVCB_XOR or MCFG_DEVCB_INVERT specified (makes no sense in this context). * Added a MEMBANK callback type to allow output bits to be used for bank-switching. * Added ASSERTLINE and CLEARLINE callback types that raise or lower an interrupt line if the selected bit of the written value is active. These are intended for where periodic or ready-pulse signals from devices are used to trigger IRQs that the CPU program will independently acknowledge. * Added MCFG_DEVCB_BIT as shorthand for masking and shifting out an individual bit for a callback. * Removed DEVCB_LINE_DISPATCH_<n>. Where we're going, we don't need line dispatcher devices. * Note: The incompatibility of compilers with regard to post-C90 printf string formats is shockingly bad. There seems to be no easy way to format a 64-bit value and please both GCC and Clang, let alone MSVC [AJR].
 - 0.180              : Added ability to use ASIO in all core MAME parts (scripts\src\devices.lua, emu.lua, frontend.lua). Simplified memory allocation for osd_module. No need for osd_malloc, osd_malloc_array and osd_free. MALLOC_DEBUG not applicable anymore since we use new to allocate in 99.9% of cases. Let osd_process_kill just kill, rest is on osd users, watchdog only in this case [Miodrag Milanovic]. Don't do the periodic_check before every timeslice (emu\machine.cpp) [Carl]. Removed generic_ptr in emu\emucore.h [Olivier Galibert].
 - 0.179              : Increased number of OSD modules (modules\osdmodule.h). Register window messages before creating window (output\win32_output.cpp) [Brad Hughes]. Proposal for new system flags: MACHINE_NODEVICE_MICROPHONE For unemulated microphone, MACHINE_NODEVICE_CAMERA For unemulated camera, MACHINE_NODEVICE_PRINTER For unemulated printer, MACHINE_NODEVICE_LAN For unemulated linking multi-cabinet capabilities and MACHINE_NODEVICE_WAN For unemulated networking capabilities. Restructured MACHINE_FLAGS into FATAL / WARNING / BTANB main categories, in order to make them easier to expose [Angelo Salese].
 - 0.177              : Use emumem.h defines whenever possible (mem_mask & xxxxxxxx -> ACCESSING_BITS_xx_xx) [Giuseppe Gorgoglione]. Make output_manager::find_item much more efficient (emu\output.cpp) [AJR].
 - 0.175              : Fixed a mismatched new[]/delete error in util\corealloc.h. Added template/macro for delaring array with equivalent dimensions (osd\osdcomm.h) [Vas Crabb]. Fixed debugging code in font_dwrite.cpp [Giuseppe Gorgoglione]. More efficient device error logging (emu\device.cpp) [AJR].
 - 0.174              : Move system name lookup into frontend [AJR]. Avoid to directly access device variable from inside the driver, when possible (drivers\macs.cpp, simple_st0016.cpp, speglsht.cpp, srmp5.cpp and machine\st0016.cpp) [Fabio Priuli].
 - 0.173              : Added emu\main.h. Moved emu\mame.cpp/h to frontend\mame\. Moved man files, emscripten/windows resources, clipboard handling and common struct to proper location (osd\sdl\man\LICENSE -> docs\man\LICENSE ...). Updated windows to use platform independent watchdog implementation. Renamed class to osd_watchdog [Miodrag Milanovic]. Machine management cleanups: Boolean parameter to running_machine::run is no longer firstrun (which is now a member variable of mame_machine_manager) but quiet, which disables logging and audio recording without explicitly checking the system name. Sound recording is now turned on and off by explicit calls. The potential uses of this have not been explored. Dependencies reduced on drivenum.h, where the declaration for GAME_NAME(___empty) has been moved to [AJR].
 - 0.172              : Added mame\arcade.flt, mess.flt and font\font_dwrite.cpp. Removed mame\arcade.lst and mess.lst. Added mame.lst as main list, it is now generated and should be updated manually. Filtering for subtargets are done by flt files now (arcade.flt and mess.flt). Made sources build use info from mame.lst. Use chrono calls for time handling in core. Added LICENSE file and updated README.md and docs\mame.txt. Added license to files that were not part of build or are containing data to build sources for cpu emulation. Added README and LICENSE files (CC0) to folders containing meta-data or documentation. Added license for translations, plugins, benchmarks, regtests and tests. Support for filtering exceptions (build\makelist.py). Removed disclaimer since it was not shown anyway and it is known fact [Miodrag Milanovic]. Added DirectWrite font support module (font\font_dwrite.cpp). Added module probe support for directwrite so we can fall back cleanly. DirectWrite font enumeration support [Brad Hughes]. Begin documenting machine config macros (emu\mconfig.h) [Balrog].
 - 0.170              : Added realloc implementation as required by the C standard (util\corealloc.cpp) [Balrog]. Clear device driver member variables on creation (emu\device.h). Make output be part of driver_device. Changed UI input initialization order and use templates to clear (emu\machine.cpp) [Miodrag Milanovic]. Print messages for BTANBs (MACHINE_IS_INCOMPLETE and MACHINE_NO_SOUND_HW)(ui\ui.cpp) [Angelo Salese].
 - 0.169              : Force delete of copy constructor and operator = (emu\emucore.h). Fixed narrowing (render\draw13.cpp). Placed cache back in new form, fixes listxml and similar (emu\drivenum.cpp). Removed usage of deprecated register keyword (cpu\alto2\a2ether.cpp, a2mem.cpp, alto2cpu.cpp, lr35902\opc_cb.inc, opc_main.inc, sound\sidvoice.cpp and x1_010.cpp). Updated some of remaining licenses [Miodrag Milanovic]. Modernized 'simple_list': Added 'noexcept'. Use public '=delete' instead of private ctor/assignment. Removed unused 'virtual' from dtor and mark class as 'final' (util\coretmpl.h) [Vittorio Romeo]. arcade.lst fixes MT06111 and MT06112 [D Go Go Fan].
 - 0.168              : Fixed memory leak (emu\mame.c) [Miodrag Milanovic].
 - 0.166              : Prevent main menu from overwriting error.log and wavelog (emu\machine.c and sound.c) [Valley Bell]. Simplified coreutil.c gregorian_days_in_month [William Krick].
 - 0.165              : Changed flags from GAME_ to MACHINE_ (e.g. GAME_NOT_WORKING to MACHINE_NOT_WORKING). This better fits the drivers from MESS (which have always illogically used the GAME_ flags despite not being games) and also fits fine with arcade machines [David Haywood]. Reduced tagmap lookups in emu\machine.c [Wilbert Pol]. Declare as HighDPI aware - application natively scales and doesn't require special support, except for OSD dialogs/debugger windows (windows\mame\mame.man). The default debugger _is_ highdpi aware already. This fixed MAME in Fullscreen crashes on Windows 7 with Display set to 150% [Paul Priest].
 - 0.163              : Added etc\doxy_driver.h. Doxygen template for drivers [Angelo Salese]. Addition of commands and details to docs\config.txt as well as some reordering to match -showusage output. Updated documents to reflect new commands added and made some additions and fixes (docs\config.txt) [Tafoid].
 - 0.162              : Added mame.doxygen and mame\arcade.lst. Moved src\osd\windows\mame.ico, mame.man and mame.rc to src\mame\osd\windows\mame. Updated license tags (all files now do have owner) [Miodrag Milanovic, David Haywood, Andrew Gardner, R. Belmont, Barry Rodewald, Sandro Ronco]. Added Doxygen documentation definition file (www.doxygen.org) and make target for it [Miodrag Milanovic].
 - 0.161              : Removed util\astring.c/h. Changed sdl\strconv.c to osd\strconv.c [Vas Crabb].
 - 0.159              : Converted build\verinfo.c to build\verinfo.py. Show correct version number in file properties/details. Adjusted verinfo code for new version.c format / also added more errorhandling and removed some unnecessary code (build\verinfo.c) [Oliver Stoeneberg]. Removed sstream include (emu\emucore.h) [Couriersud]. Converted verinfo to Python [Miodrag Milanovic].
 - 0.158              : Added emu\parameters.c/h and osd\modules\sound\sound_module.h. Removed js_sound.h and none.h, windows\winos.c/h. Removed inlining of non-performance relevant exceptions and fatalerror (emu\emucore.c). Converted sound modules to be osd_modules. Simplified code [Couriersud]. Link state entries to parent state interface. In device state, link a single device_state_entry to its parent device_state_interface and expose a parent_state() getter (emu\distate.c) [Luca Bruno]. Description changes for assorted devices to improve readability/uniformity [MASH]. Added per-game parameters: Per-game parameters are (tag, value) pairs that follow the same tag structure than everything else. They're added within a ROM section with ROM_PARAMETER(tag, value). You look them up through the device method parameter(tag) which returns the string, or "" if not present. A *lot* of drivers can benefit from that stuff. It should kill most game-name keyed tables, and the alternative approach of bazillon-of-driver-inits. Possible evolutions, if someone wants to do it: Output them in -listxml. Push the softlist parameters present in the XML through that. Maybe allow to change/set them through the command line [O. Galibert].
 - 0.156              : Update windows\winos.c and MSVC2010 compilation fix (windows\winos.c) [David Viens].
 - 0.155              : Added windows\winsync.h and windows\winos.c/h. Assorted device name description fixes [MASH]. Cache a pointer directly to the machine scheduler at startup, to eliminate device().machine().scheduler() chains all over the place. This change has been sitting in my local tree for months, from when I was (mostly unsuccessfully) working on c64 performance. It gives a small speedup to drivers with many tightly-interleaved executing devices (i.e. Commodore drivers) I didn't think it was worth making everyone do a clean build for such tiny gains but I didn't have the heart to chuck it (emu\diexec.c) [Alex Jackson]. Fixed -verbose option MT04850 [???].
 - 0.154              : Moved emu\eminline.h to src\osd\. Removed emu\emutempl.h, delegate.c/h, devcb.c/h, devlegcy.h and mcfglgcy.h. Changed emu\devcb2.c/h to emu\devcb.c/h. Small core_strwildcmp() optimization when empty strings are involved (util\corestr.c). Removed unused legacy_callback_func (emu\driver.c). Small optimization to device_execute_interface::local_time(). Corealloc adjustments (util\corealloc.c): Re-enabled default memory initialization in DEBUG builds (should make random crashes less random). Moved defines from header to source since they are only used locally and not globally. Converted some global_alloc_array() usage to dynamic_buffer/dynamic_array. Disabled allocation logging (util\corealloc.c). Removed unnecessary assert from emu\schedule.c. Small optimization to device_scheduler::timer_list_insert () [Oliver Stoeneberg]. Some changes/corrections to device descriptions [MASH, Tafoid]. Small core cleanup. Moved eminline and related files into src\osd since it's system related. Moved delegates into src\lib\util to enable usage of delegates in other project parts. Moved mame_printf_* calls into osd\osdcore.c and renamed them to osd_printf_*. Removed mcfglgcy.h and NVRAM legacy support in machine and mconfig. Some more core cleanup (emu\driver.h, machine.h and includes\mpu4.h). Removed patch in emu\devfind.h, this is not needed anymore. Replaced set_irq_acknowledge_callback with proper MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER/DEVICE. Removed usage of legacy IRQ callback. Changed devcv2 -> devcb in all drivers [Miodrag Milanovic]. Make yield() actually yield again, rather than be a synonym for spin() (emu\schedule.c). Added ATTR_COLD to DECLARE_(foo)_START and DECLARE_DRIVER_INIT (emu\driver.h and gamedrv.h). Minor logging improvements (emu\schedule.c) [Alex Jackson].
 - 0.153              : Removed emu\drivlgcy.h. Added lib\util\corealloc.c/h, cstrpool.c/h and emu\dispatch.c. Fixed MAME.lst issues [D Go Go Fan]. Removed few legacy calls (machine\generic.c/h, audio\dcs.c and video\ygv608.c). Let running_machine handle nvram save/load (emu\machine.c and emu\machine\generic.c). Added ability to add optional or required device/ioport/memory_region/... and similar device finders to any device, and also created ability to set tag inside static configuration of device so you can reference it in driver machine configuration [Miodrag Milanovic]. Fixed display of device tags in internal profiler (emu\diexec.c) [Alex Jackson]. Removed some auto_mallocs in favor of dynamic_arrays. Added option to clear dynamic_arrays; on GCC this should assert if not done on POD (which is unsafe to memset). Another round of auto_alloc_array conversions. Some minor enhancements to dynamic_array, including clearing to specific values and expanding and clearing newly allocated values [Aaron Giles]. Fixed divide by zero if the clock is changed to 0 at run time (emu\device.c; we already cope with it being 0 at startup) [smf]. Added device_output_interface and macros MCFG_OUTPUT_INDEX/MCFG_OUTPUT_NAME which can be used to specify which output in the layout a device should use (see Sea Battle and the DM9368 7 segment LED) [Curt Coder]. Moved core template container classes up from emutempl.h to coretmpl.h [Aaron Giles]: * These classes now no longer take a resource_pool; everything is managed globally -- this means that objects added to lists must be allocated with global_alloc. * Added new auto_pointer<> template which wraps a pointer and auto-frees it upon destruction; it also defaults to NULL so it doesn't need to be explicitly initialized. * Moved tagged_list template to tagmap.h. Redo of the low-level memory tracking system: * Moved low-level tracking out of emu\emualloc into lib\util\corealloc so it can be shared among all components and used by core libraries. * Global_alloc and friends no longer use a resource pool to track allocations; turns out this was a wholly redundant system that wasted a lot of memory. * Removed global_resource_pool entirely. * Added global_free_array to delete arrays allocated with global_alloc_array. * Added tracking of object versus array allocation; we will now error if you use global_free on an array, or global_free_array on an object. Added new utility helper const_string_pool which can be used to efficiently accumulate strings that are not intended to be modified. Used by updated makelist and software list code. Updated png2bdc and makelist tools to not leak memory and use more modern techniques (no more MAX_DRIVERS in makelist, for example). Deprecated auto_strdup and removed all uses by way of caller-managed astrings and the software list rewrite. Rewrote software list management: * Removed the notion of a software_list that is separate from a software_list_device; they are one and the same now. * Moved several functions into device_image_interface since they really didn't belong in the core software list class. * Lots of simplification as a result of the above changes. Additional notes: Moved definition of FPTR to osdcomm.h. Some changes happened in the OSD code to fix issues, especially regarding freeing arrays. SDL folks may need to fix up some of these [Aaron Giles]. Moved legacy calls that left into one section, and commented not used DEVCB calls since we are moving towards DEVCB2 (emu\devcb.h). No handler usage is possible in DEVCB so removing not used code. READ/WRITE*_HANDLER to READ/WRITE*_MEMBER where it was wrongly placed. Removed ADDRESS_MAP_MODERN (sound\qs1000.c and taitotz.c). Added support to delegates with up to 8 params (emu\delegate.h) [Miodrag Milanovic]. Move destructor definitions out of header files included by emu.h; clean some obsolete junk out of machine.h [Alex Jackson]. Some changes/corrections to device descriptions [MASH].
 - 0.152              : Some legacy macros cleanups (emu\devlegcy.h, drivlgcy.h, video\v9938.c, mame\audio\dkong.c, asteroid.c, bwidow.c, bzone.c, mhavoc.c, omegrace.c, quantum.c, starwars.c, tempest.c and tomcat.c). Misc legacy handlers cleanups (drivers\system1.c, includes\galaxold.h, namcos1.h, machine\galaxold.c, midtunit.c, namcos1.c and tnzs.c) [Osso]. Added a new macro MCFG_DEVICE_CARD_DEFAULT_BIOS, which can be used in the machine config to set the default BIOS for a slot card device [Curt Coder]. Added FATALERROR: tag to standard emu_fatalerror throws for easier parsing of testing results (emu\machine.c) [Tafoid].
 - 0.151              : Added licenseinfo.txt for lookup of the newly added license tags; please add to this file if you multi-license using a license not listed in it [Lord Nightmare]. Bulk convert files that already had standard BSD license in my name to new license tagged form. Based on memory and obvious stuff, attempted to flag driver code with the appropriate license. If there are files in here that need additional attribution or which I'm wrong about, let me know. I deliberately skipped a lot of files I'm 95% sure I rewrote but which had other names in the header, pending further investigation. Added license tags to a few more files. Also converted many of OG's BSD licenses to tags since when he copied & pasted them he forgot to remove one instance of my name, which I caught while searching [Aaron Giles].
 - 0.150              : Removed some obsolete legacy stuff and unused member_wrapper_line from emu\driver.h and some unused macros from emu\drivlgcy.h. Removed DECL_NORETURN in favor of ATTR_NORETURN (emu\emucore.h and osd\osdcomm.h). Removed some unused legacy functions, flagged a few more things as deprecated and reduced the DEPRECATED noise a bit for now (emu\diexec.h, driver.h and machine\generic.c/h). Flagged devices as deprecated (machine\68681.h, machine\m68kfmly.h, machine\pd4990a.h, video\hd63484.h and video\i8275.h) [Oliver Stoeneberg]. Added missing short names to legacy devices and added validation that short name is always mandatory [Miodrag Milanovic]. Setname and description changes to DRC devices to indicate such is being used (cpu\mips\mips3drc.c, rsp\rspdrc.c and cpu\sh2\sh2drc.c) [Tafoid]. Various updates regarding commented out code (AM_DEVWRITE_LEGACY -> AM_DEVWRITE; AM_DEVREADWRITE_LEGACY -> AM_DEVREADWRITE; AM_READ_LEGACY -> AM_READ...), forgotten during past device modernizations [Osso].
 - 0.149u1            : Added emu\devfind.c/h, drivlgcy.h and mcfglgcy.h. Allow devices with execute interface to have a clock of zero, they are suspended and restarted on clock change. Note that the device still needs to have a clock before MAME actually starts executing timeslices (emu\diexec.c/h) [Dirk Best]. Put optional cpu, video, sound and machine cores in one library in order to prevent linking issues on small builds. Made includes of C files in drivers section to use .inc instead, and also renamed galdrvr.c into galaxian.inc and neodrvr.c to neogeo.inc since it makes more sense [Miodrag Milanovic]. Improved exception handling in running_machine::run (emu\machine.c). devlegcy.h usage cleanup. Moved some legacy macros from driver.h to drivlgcy.h. Added comments to diexec.h. Moved some legacy stuff from mconfig.h to mcfglgcy.h [Oliver Stoeneberg]. Removed a couple of unneeded devlegcy.h inclusions (thanks Osso for pointing them out) (machine\adc1038.h and sound\k051649.h) [Fabio Priuli]. Fixed driver_device OVERRIDE macros to work with devices, report_bad_device_cast contains the name of the device as well as the ID (emu\driver.h) [smf]. Device system: Moved required/optional device finders to a new header devfind.h [Aaron Giles].
 - 0.149              : Register the device post load after the devices are started, in case starting the device causes something (like sound_stream) to register it's own post load [smf]. Let's skip the extension when choosing the NVRAM folder name based on software (machine\generic.c) [Fabio Priuli]. Removal of not needed includes of devlegcy.h (includes\snes.h, video\kan_pand.h, ppu2c0x.h and machine\docg3.h) [Miodrag Milanovic].
 - 0.148u5            : Unrolled modulo in {div|divu}_64x32_rem() and {mod|modu}_64x32() since it is apparently faster. This also gets rid of a duplicated div operation in {div|divu}_64x32_rem() / div*_64x32_rem() now call div*_64x32() [Oliver Stoeneberg].
 - 0.148u4            : Made required/optional device finder part of validation (emu\device.c/h, machine\netlist.h and validity.c). Keep naming consistent (emu\device.c). Removal of machine().root_device() where appropriate (audio\circus.c, drivers\asuka.c, chinagat.c, chinsan.c, ddragon.c, docastle.c, gamecstl.c, gcpinbal.c, gladiatr.c, gsword.c, jantotsu.c, lucky74.c, megadrvb.c, megaplay.c, megatech.c, mermaid.c, mlanding.c, namcos2.c, neodrvr.c, neogeo.c, ojankohs.c, opwolf.c, pachifev.c, powerbal.c, rastan.c, savquest.c, segac2.c, spdodgeb.c, taito_l.c, taitotz.c, tbowl.c, tecmo.c, voyager.c, machine\namcos1.c, namcos2.c, video\vectrex.c and ldplayer\ldplayer.c). Removed implementation of legacy DEVCB_MEMORY_HANDLER and used members instead (emu\devcb.c/h, drivers\dkong.c/h, mario.c/h and nbmj8688.c/h) [Miodrag Milanovic].
 - 0.148u3            : Placed m_source variable in device_t and filled it with provided value (emu\device.c/h) [Miodrag Milanovic]. Minor schedule.c optimization (emu\diexec.c and schedule.c) [Nathan Woods]. Moved rotr and fbcrazy out of the fruities section (mame\mame.lst) [hap].
 - 0.148u2            : Drivers cleanup (drivers\asuka.c, drivers\fastfred.c, drivers\trvquest.c, includes\actfancr.h, includes\asuka.h, includes\copsnrob.h, includes\dec0.h, includes\dec8.h, includes\deco32.h, includes\fastfred.h, includes\galivan.h, includes\gameplan.h, includes\nmk16.h, includes\spbactn.h, machine\bonzeadv.c, video\fastfred.c and video\gameplan.c) [Miodrag Milanovic].
 - 0.148u1            : Few minor Atari cleanups (mame\audio\cyberbal.c, drivers\atarig1.c, atarig42.c, atarigt.c, atarisy2., cyberbal.c, includes\atarig1.h, atarig42.h, atarigt.h, atarisy2.h, cyberbal.h, video\atarig1.c, atarig42.c, atarisy2.c and cyberbal.c) [Aaron Giles]. Removed unused crosscast() function from emucore.h [Oliver Stoeneberg]. Modernized reset of pre/postload calls (audio\8080bw.c, drivers\astrocde.c, atetris.c, cave.c, crystal.c, darius.c, djmain.c, dynax.c, fcrash.c, mjsister.c, mw8080bw.c, mystwarr.c, neogeo.c, ninjaw.c, othunder.c, pengadvb.c, psikyo4.c, renegade.c, slapshot.c, taito_f2.c, taito_h.c, taito_x.c, taito_z.c, taitoair.c, topspeed.c, vegas.c, warriorb.c, wgp.c, xexex.c, xmen.c, includes\40love.h, 8080bw.h, astrocde.h, atetris.h, cave.h, chaknpop.h, cps1.h, darius.h, djmain.h, dynax.h, gradius3.h, gridlee.h, hyprduel.h, mw8080bw.h, mystwarr.h, nemesis.h, neogeo.h, ninjaw.h, othunder.h, psikyo4.h, renegade.h, simpsons.h, slapshot.h, tail2nos.h, taito_f2.h, taito_h.h, taito_z.h, taitoair.h, tnzs.h, toaplan1.h, toaplan2.h, topspeed.h, tumbleb.h, twincobr.h, warriorb.h, wgp.h, williams.h, xexex.h, xmen.h, machine\simpsons.c, tnzs.c, toaplan1.c, twincobr.c, williams.c, video\40love.c, cave.c, chaknpop.c, cps1.c, gradius3.c, gridlee.c, hyprduel.c, nemesis.c, neogeo.c, tail2nos.c, taitoic.c, taitoic.h, toaplan1.c, toaplan2.c, tumbleb.c and twincobr.c). Removed not needed function type (emu\devlegcy.h) [Miodrag Milanovic].
 - 0.148              : Placed back schedule change but with fixed logic (emu\schedule.c) [Miodrag Milanovic]. Added an assertion to catch a bad scenario in emu\schedule.c [Nathan Woods]. Handle binding_type_exception in running_machine::run() - gives proper error with apollo.c before assert (emu\machine.c) [Oliver Stoeneberg].
 - 0.147u4            : Added some logging (currently turned off) and minor optimizations (emu\schedule.c) [Nathan Woods]. Placed schedule thing back, will put it back after release [Miodrag Milanovic].
 - 0.147u3            : Cleanup tabs in mame.lst [hap]. Sorted out some odds in src\mame\mame.mak [Roberto Fresca].
 - 0.147u2            : Added emu\devcb2.c/h. Added support for DEVCB_UNMAPPED, that will do the logging on read/write of device callback, preventing a need for making dummy log line handlers. Device callback support for 32bit and 64bit handlers and added missing parts to DEVCB (emu\devcb.c) [Miodrag Milanovic]. Couple of mame.lst corrections [D Go Go Fan]. Created a base class delegate_common_base for all delegate types. Created a binding_type_exception which is thrown when a bind attempt fails due to mismatched types. Added helper templates to driver_device to wrap legacy device read/write handlers into driver_device member functions. This should help move some things forward until more common code is converted into proper devices. Introduce new module DEVCB2 which contains modernized versions of DEVCB. Compared to previous implementation this one is simpler overall, trampolining calls through a single internal set of adapter functions. The new versions are also designed to be specified in the machine_config rather than in structures, so they are no longer simple POD types. Additional new/changed features: * Reads and writes can map to delegates for line or 8/16/32/64-bit. * Reads and writes can map to an I/O port. * Reads can be mapped to a constant value, with or without logging. * Writes can be mapped to a device's input line. * All reads/writes can have a shift, mask and/or xor applied. * Devices can opt to make the functions safe-if-NULL when resolving. * Only member function types are supported.Rewrote the YM2151 interface to be fully modernized, and removed the ym2151_interface struct in favor of inline configs using the new DEVCB2 mechanism. In many cases, removed no longer needed trampolines, instead taking advantage of direct support for input line writes. A little more unification of delegate types (emu\delegate.c/h). Cleanup/merging of delegate classes. Don't re-register the watchdog VBLANK callback on every single watchdog reset [Aaron Giles].
 - 0.147u1            : Removed emu\devconv.h and memconv.h. In some of the READ/WRITE_DEVICE*_HANDLERS, use space instead of driver to fetch the machine. This helps highlight where the actual driver dependencies are. Moved device_delegates into their own files. Employed a non-templatized helper class so that the code can live co-located, rather than invading device.h. Changed the read/write delegates to derive from device_delegate. Updated the address map macros to create these properly. Removed remnants of the old AM_BASE/SIZE macros from the memory system [Aaron Giles]. Manual cleanup of MAME and MESS includes. INTERRUPT_GEN -> INTERRUPT_GEN_MEMBER. Changed from device->machine() to space.machine() in device handlers in order to make next changes easier. Replaced some *_DEVICE_HANDLER with _MEMBER calls. Removed _new from name of modern device (SEGA VDP PSG_NEW, SN76489_NEW, SN76489A_NEW, SN76496_NEW, U8106_NEW and Y2404_NEW)(sound\sn76496.c, sn76496.h audio\qix.c, drivers\appoooh.c, atetris.c, bankp.c, centiped.c, circusc.c, docastle.c, drmicro.c, exedexes.c, finalizr.c, freekick.c, galaxold.c, gatron.c, gberet.c, goldstar.c, guab.c, homedata.c, hyperspt.c, ikki.c, jailbrek.c, jantotsu.c, jpmmps.c, kncljoe.c, kontest.c, ladybug.c, lasso.c, lucky7.c, markham.c, megaplay.c, megatech.c, mikie.c, mjkjidai.c, mrdo.c, mrjong.c, pachifev.c, pacman.c, pingpong.c, retofinv.c, sbasketb.c, sbugger.c, segac2.c, segae.c, segag80r.c, senjyo.c, sg1000a.c, shaolins.c, spaceg.c, spcforce.c, sprcros2.c, strnskil.c, superdq.c, suprloco.c, system1.c, tp8.c, trackfld.c, wico.c, xyonix.c, yiear.c, zaxxon.c, includes\circusc.h, gberet.h, homedata.h, hyperspt.h, lasso.h, qix.h, sbasketb.h, segag80r.h, spcforce.h, trackfld.h, yiear.h, megadriv.c, megavdp.c and segamsys.c). Fix for describe_context (emu\machine.c) [Miodrag Milanovic]. Typos in internal MAME list (The ProgettoEMMA database has different "correct" info than internal MAME list) [D Go Go Fan]. Added missing DECLARE_'s (cpu\psx\dma.h, irq.h, mdec.h, psx.h, rcnt.h, sio.h, machine\m6m80011ap.h, s3520cf.h, video\m50458.h, mb90082.h, psx.h, audio\midway.h, includes\archimds.h, segaxbd.h and segaybd.h) [Curt Coder].
 - 0.147              : Removed emu\cothread.c/h and lib\cothread\amd64.c, fiber.c... (18 files). cothread removed, was not used for a long time and was commented. Made core able to use BIOS selection per slot device (example: MESS kc85_4 -exp d004gide,bios=v31) [Miodrag Milanovic]. Removed astring::stringbuffer() / use cached value in astring::len() instead of strlen() (lib\util\astring.h) [Oliver Stoeneberg]. Clear out remaining global inlines in diexec.h. Get rid of devtag_reset macro. Kill off AM_BASE_LEGACYs. Massive change: MACHINE_START\RESET, VIDEO_START\RESET and PALETTE_INIT changed to be members of state classes. Pass 1/2 of modernizing struct definitions. Enum and union normalization. Final round of struct/union/enum normalization [Aaron Giles].
 - 0.146u5            : Updated GAME, GAMEL and CONS with class name per machine used, for future DRIVER_INIT change. All driver inits are now member of state classes. Added DECLARE_DRIVER_INIT macro to define it H file, and DRIVER_INIT_MEMBER for member declaration in C files Updated all drivers accordingly [Miodrag Milanovic]. Make downcast errors more useful in src\emu\emucore.c [O. Galibert]. Use MAME_DEBUG to flag it (emu\emucore.c). Report errors by throwing an emu_fatalerror, so that we get the standard useful behaviors (break in debugger, caught during validation, stack crawls, etc) [Aaron Giles]. Fixed device mapping on big-endian systems (emu\addrmap.c) [O. Galibert]. Added ___empty after sorting, the count is correct now and the check for no drivers can also work (src\build\makelist.c) [Phill W.]. Avoid excessive usage of strlen() in astring by caching the length. Re-added excessive strlen() usage to astring since it causes mysterious formating issues in debugger for people with non-standard font. Re-applied astring changes after fixing bug in trimspace(), but still using strlen() until all stringbuffer() occurances are gone [Oliver Stoeneberg]. Some cleanup and moved away some casino/misc games that were in the fruity-pin section (src\mame\mame.lst) [hap].
 - 0.146u4            : Properly call va_end() before throwing exceptions in fatalerror functions (emu\emucore.h). Removed some unused variable declarations from MACHINE_CONFIG_* macros [Oliver Stoeneberg].
 - 0.146u2            : Whitespace mame.lst clean up, misc clean up & minor corrections for various Sega protection notes [Brian Troha].
 - 0.146u1            : Conversion of _DEVICE_HANDLER to _MEMBER methods - part 1 and part 2 [Miodrag Milanovic].
 - 0.145u7            : Added the ability to specify member function driver callbacks for machine / sound / video_start / reset. Changed liberatr as an example. If a callback is specified, it is called in place of the corresponding virtual method. Not entirely sure I like this, so consider the example open for discussion. Renamed device_irq_callback to device_irq_acknowledge_callback to make its purpose clearer. Added delegate support for interrupt callbacks, and made driver_device variants of the generic interrupt helper callbacks. Did not convert existing callers yet due to logistical issues. Removed AM_SIZE entirely. AM_BASE_SIZE still exists, though. Validity fixes. Fixed bug where required shared pointers were not actually required. Added optional/required_shared_ptr_array classes so that you can populate an array of shared pointers. You provide a base tag name, and each item in the array is populated with tag.n, where n is the array index. Updated a couple of drivers using arrays to either not use arrays (where they weren't really providing any benefit) or to use the new array classes. Added assertions to catch situations where AM_SHARE is used twice. Fixed existing situations. Merged watchdog back into running_machine. Renamed driver overrides to MCFG_MACHINE / SOUND / VIDEO_START_OVERRIDE to explicitly indicate they are overriding the default behavior. Put liberatr back the way it used to be. Remove AM_BASE in favor of AM_SHARED + required_shared_ptr. This update passes validity checks but will certainly have a number of drivers failing at startup because all pointers are defaulted to required by the automated scripts used. Will fix problems once we get a regression run to find out which drivers need attention. A few key fixes. Also changed error reporting to list all missing objects prior to fatalerror'ing. Several more driver regression fixes. Seek & destroy on duplicate AM_SHAREs. More fixes and a GCC warning fix. Fixed most reported errors and validity check errors. Clear out remaining AM_BASE_SIZE [Aaron Giles]. Mode modernization. More driver modernization. Removed //OBRISI.ME comment. AM_BASE + AM_SIZE -> AM_BASE_SIZE for easier future cleanup. AM_BASE and AM_BASE_SIZE to AM_SHARE by request from Aaron. Fixed assert on double AM_SHARE. Some DIRECT_UPDATE_HANDLER - > DIRECT_UPDATE_MEMBER. Removed the rest DIRECT_UPDATE_HANDLERS from MAME section [Miodrag Milanovic]. Fix for 16bit device callback [Judge]. For 16-bit DEVCB handlers, use separately-named templates devcb_stub16, which in turn required new macros DEVCB_MEMBER16, DEVCB_DRIVER_MEMBER16, and DEVCB_DEVICE_MEMBER16. Sorry about this, but the differences between the function types is apparently not sufficient for proper template differentiation under MSVC [Aaron Giles].
 - 0.145u6            : Added emu\drivenum.c/h and gamedrv.h. Added support for multiple comma separated interfaces for device [Miodrag Milanovic]. MAME going modern part 1-8 [Miodrag Milanovic]: Added 4th parameter to all address maps. Added missing state classes. Removed ADDRESS_MAP_MODERN define. No need anymore for _BASE. Some formating cleanup. Removed legacy macros to prevent their usage in future (emu\addrmap.h). Aaron Giles moved driver list/enumerator to new file drivenum.c/h. Moved game_driver definition and constants to new header gamedrv.h. Extracted driver_device base class from machine.* and into its own file driver.
 - 0.145u4            : Fix for potential driver conflicts with same named machine states between MAME and MESS [David Haywood]. hap fixed various remaining regressions with device tag strcmp. Aaron Giles added save_item template specialization for dynamic_array.
 - 0.145u1            : Allow generic_pulse_irq_line to be longer than 1 cycle. Changed all callers from generic_pulse_irq_line(x, y) to generic_pulse_irq_line(x, y, 1) [hap].
 - 0.145              : Removed set_current, in case someone decides to use them again (emu\device.h) [Phill W.]. Removed LEGACY_MEMORY_DEVICE and LEGACY_NVRAM_DEVICE support in core, since nothing is using it anymore [Miodrag Milanovic].
 - 0.144u7            : tagmap is just a C++ template now. Added iterators to it as well. Updated a few outlying uses [Aaron Giles]. Move devices into a proper hierarchy and handle naming and paths consistently for devices, I/O ports, memory regions, memory banks, and memory shares [Aaron Giles]. NOTE: There are likely regressions lurking here, mostly due to devices not being properly found. I have temporarily added more logging to -verbose to help understand what's going on. Please let me know ASAP if anything that is being actively worked on got broken. As before, the driver device is the root device and all other devices are owned by it. Previously all devices were kept in a single master list, and the hierarchy was purely logical. With this change, each device owns its own list of subdevices, and the hierarchy is explicitly manifest. This means when a device is removed, all of its subdevices are automatically removed as well. A side effect of this is that walking the device list is no longer simple. To address this, a new set of iterator classes is provided, which walks the device tree in a depth first manner. There is a general device_iterator class for walking all devices, plus templates for a device_type_iterator and a device_interface_iterator which are used to build iterators for identifying only devices of a given type or with a given interface. Typedefs for commonly-used cases (e.g., screen_device_iterator, memory_interface_iterator) are provided. Iterators can also provide counts, and can perform indexed lookups. All device name lookups are now done relative to another device. The maching_config and running_machine classes now have a root_device() method to get the root of the hierarchy. The existing machine->device("name") is now equivalent to machine->root_device().subdevice("name"). A proper and normalized device path structure is now supported. Device names that start with a colon are treated as absolute paths from the root device. Device names can also use a caret (^) to refer to the owning device. Querying the device's tag() returns the device's full path from the root. A new method basetag() returns just the final tag. The new pathing system is built on top of the device_t::subtag() method, so anyone using that will automatically support the new pathing rules. Each device has its own internal map to cache successful lookups so that subsequent lookups should be very fast. Updated every place I could find that referenced devices, memory regions, I/O ports, memory banks and memory shares to leverage subtag/subdevice (or siblingtag/siblingdevice which are built on top). Removed the device_list class, as it doesn't apply any more. Moved some of its methods into running_machine instead. Simplified the device callback system since the new pathing can describe all of the special-case devices that were previously handled manually. Changed the core output function callbacks to be delegates. Wrapped the global_resource_pool into a function in an attempt to ensure it is initialized before anyone that references it [Aaron Giles].
 - 0.144u2            : Angelo Salese removed ugly functions interrupt_enable_w() and cpu_interrupt_enable() from the core, and updated all the drivers that used it accordingly. Full list of drivers changed by this can be found at http://mamedev.emulab.it/kale/fast/files/cpu_irq_enable.zip
 - 0.143u3            : Various core and tools memory leaks fixes [Oliver Stoeneberg]. Removed LOADBYNAME, since it is deprecated by using per device rom load_software_part_region. Created makedev tool to generate array of devices, and created lst file according to current devices usage [Miodrag Milanovic].
 - 0.143u1            : Changed emu\devintrf.c/h to emu\device.c/h. Allow adding device-sourced memory maps in the main map and added a useful error detection (addrmap.c) [O. Galibert].
 - 0.143              : Added emu\cothread.c/h + lib\cothread\amd64.c, fiber.c... (18 files). Added BYUU's cothread library, along with a wrapper class. Switched to using one cothread for each executable device. This functionality is strictly internal and should result in no changes in scheduling behavior. However, it now becomes possible to exit out of a device's execution in the midst of an instruction by calling machine().scheduler().make_active(). Note that this is somewhat dangerous for cores that have logic at the start of their execute loop to check for interrupts or other conditions, as those checks will be skipped upon resume, so consider this sort of early exiting to be highly experimental for now. Please Note: cothread usage is behind a compile-time define as per now, they will be re-enabled in the next dev cycle [Aaron Giles, Miodrag Milanovic, BYUU].
 - 24th June      2011: R. Belmont - Miodrag Milanovic and Aaron Giles are integrating BYUU's "cothreads" library into MAME. This allows for more accurate emulation of certain hardware configurations that are found in for instance Sega Model 2, as well as a variety of systems on the MESS side (such as the Sega 32X and many Z80-based home computers).
 - 0.142u6            : Tafoid fixed MAME -h points to incorrect usage file.
 - 0.142u3            : Aaron Giles collapsed device_config and device_t into one class. Updated all existing modern devices and the legacy wrappers to work in this environment. This in general greatly simplifies writing a modern device. Aaron Giles reimplemented DEVCB using delegates and classes. Unified the logic for identifying targets and simplified the code.
 - 0.142u1            : Changed src\mame\mamedriv.c to mame.lst. Aaron Giles replaced mamedriv.c with a new driver list mechanism that is generated by the build tools. The emulator core now expects the presence of a file called src\$(TARGET)\$(SUBTARGET).lst which is just a raw list of driver names, one per line. C and C++ comments are still permitted. This file is parsed by a new build tool makelist which extracts the driver names, sorts them, and generates a file called drivlist.c, which is consumed by the core. Aaron Giles added new osdcore function osd_malloc_array() which is identical to osd_malloc() but obviously hints that the underlying allocation is for an array. Updated all callers to use the appropriate form. Modified the Windows allocator to only use guard pages for array-style allocations, allowing us to enable them once again in debug builds. Aaron Giles created new static class driver_list to wrap accesses to the list of available drivers. Improved speed of driver lookups by relying on the presorting done by makelist. Aaron Giles created helper class driver_enumerator as a helper for iterating through the list of drivers. This class supports basic filtering and iteration, and also serves as a temporary cache of machine_configs. Aaron Giles created cli_frontend object to wrap all the CLI handling code in clifront.c. Updated/simplified all the code to take advantage of the driver_enumerator. Delegates 2.0 implementation [Aaron Giles]. Resdesigned how delegates work to make them more flexible and simpler to use. Got rid of the proto_delegates altogether in favor of supporting delegates that are bound to NULL objects. Added a front-end template that supports "natural" syntax favored by libraries like boost. Added support for static functions that take reference parameters instead of pointer parameters for the object type. Updated all delegate users in the system to the new syntax. Aaron Giles changed the DIRECT_UPDATE_HANDLER to take a machine reference like everything else in the system. Updated all users. Aaron Giles changed the FUNC() macro to automatically put an & in front of the item passed. In general this works transparently, however it does have the nice side-effect of catching situations where a variable is passed instead of a function name. Fixed those cases to push the naming upstream so that the name is now provided properly. Also added a FUNC_NULL macro since FUNC(NULL) no longer works. Curt Coder implemented 16-bit device callbacks.
 - 0.142              : Aaron Giles added device_t::memory() to fetch a reference to the memory interface, or assert if not present. Split address_space::install_[legacy_]handler into install_[legacy_]read_handler, install_[legacy_]write_handler, and install_[legacy_]readwrite_handler [Aaron Giles]. Added variants of address_space handler installers which don't take mirror or mask parameters, since this is by far the most common case [Aaron Giles]. Deprecated API cleanup [Aaron Giles]: cpu_suspend ==> device_suspend, cpu_resume ==> device_resume, cpu_yield ==> device_yield, cpu_spin ==> device_spin, cpu_spinuntil_trigger ==> device_spin_until_trigger, cpu_spinuntil_time ==> device_spin_until_time, cpu_spinuntil_int ==> device_spin_until_interrupt, cpu_eat_cycles ==> device_eat_cycles, cpu_adjust_icount ==> device_adjust_icount, cpu_triggerint ==> device_triggerint, cpu_set_input_line ==> device_set_input_line, cpu_set_input_line_vector ==> device_set_input_line_vector, cpu_set_input_line_and_vector ==> device_set_input_line_and_vector, cpu_set_irq_callback ==> device_set_irq_callback, device_memory(device) ==> device->memory(), device_get_space(device, spacenum) ==> device->memory().space(spacenum), cpu_get_address_space(cpu, spacenum) ==> cpu->memory().space(spacenum), cputag_get_address_space(mach, tag, spacenum) ==> mach->device("tag")->memory().space(spacenum), cputag_get_clock(mach, tag) ==> mach->device("tag")->unscaled_clock() and cputag_set_clock(mach, tag, hz) ==> mach->device("tag")->set_unscaled_clock(hz). Aaron Giles created new enum type address_spacenum for specifying an address space by index. Update functions and methods that accepted an address space index to take an address_spacenum instead. Note that this means you can't use a raw integer in ADDRESS_SPACE macros, so instead of 0 use the enumerated AS_0. Aaron Giles standardized the project on the shortened constants AS_* over the older ADDRESS_SPACE_*. Removed the latter to prevent confusion. Also centralized the location of these definitions to memory.h. Cleanup of machine.h. Shuffled some fields around, and moved several to private member variables with accessors [Aaron Giles]: machine->m_respool ==> machine->respool(), machine->config ==> machine->config(), machine->gamedrv  ==> machine->system(), machine->m_regionlist ==> machine->first_region() and machine->sample_rate ==> machine->sample_rate(). Removed redundant machine items from address_space and device_t. Neither machine nor m_machine are directly accessible anymore. Instead a new getter machine() is available which returns a machine reference [Aaron Giles]: space->machine->xxx ==> space->machine().xxx and device->machine->yyy ==> device->machine().yyy. Globally changed all running_machine pointers to running_machine references. Any function/method that takes a running_machine takes it as a required parameter (1 or 2 exceptions). Being consistent here gets rid of a lot of odd &machine or *machine, but it does mean a very large bulk change across the project [Aaron Giles]. Aaron Giles removed redundant item cpu from address_space, in favor of space->device(). Move overridable device->rom_region(), device->machine_config_additions(), and device->input_ports() to protected methods. Added non-virtual wrappers around them [Aaron Giles]. Aaron Giles added new macro MACHINE_CONFIG_DERIVED_CLASS() which works just like MACHINE_CONFIG_DERIVED() except you can specify an alternate driver_device class. Used this in the 8080bw.c games which require an _8080bw_state, but derive from mw8080bw_root which has the base class mw8080bw_state.
 - 0.141u4            : Aaron Giles converted core_options to a class. Removed a bunch of marginal functionality in favor of alternate mechanisms. Errors are now reported via an astring rather than via callbacks. Every option must now specify a type (command, integer, float, string, boolean, etc). Command behavior has changed so that only one command is permitted. Aaron Giles created emu_options class dervied from core_options which wraps core emulator options. Added mechanisms to cleanly change the system name and add/remove system-specific options, versus the old way using callbacks. Also added read accessors for all the options, to ensure consistency in how parameters are handled. Changed most core systems to access emu_options instead of core_options. Also changed machine->options() to return emu_options. Aaron Giles created cli_options class derived from emu_options which adds the command-line specific options. Updated clifront code to leverage the new class and the new core behaviors. cli_execute() now accepts a cli_options object when called. Aaron Giles updated both SDL and Windows to have their own options classes, derived from cli_options, which add the OSD-specific options on top of everything else. Added accessors for all the options so that queries are strongly typed and simplified. Aaron Giles attached emu_options to the machine_config, and the running_machine inherits it now. Aaron Giles decouple memory_region parameters from the ROMREGION flags. Curt Coder added DEVICE_SELF_OWNER support for device callbacks. Atari Ace added driver_device classes for drivers that don't have any variables, for consistency (and future development). Atari Ace removed globals from a number of device-like shared systems and made them either statics or actual device variables. Aaron Giles fixed -verifyroms list nonexistent roms as bad.
 - 0.141u3            : Define new macro ALLOW_SAVE_TYPE which can be used to declare enums as valid save types on a case-by-case basis. Updated the cosmac CPU core to do this for its mode and state enums, which were previously failing [Aaron Giles]. Miodrag Milanovic added shortname to devices in order to make ROM loading per device possible. mame_file is now emu_file and is a class. It is required to pass a core_options object to the constructor, along with a search path. This required pushing either a running_machine or a core_options through some code that wasn't previously ready to handle it. emu_files can be reused over multiple open/close sessions, and a lot of core code cleaned up nicely as things were converted to them [Aaron Giles]. Aaron Giles created a file_enumerator class for iterating over files in a searchpath. This replaces the old mame_openpath functions. Aaron Giles changed machine->options() to return a reference. Aaron Giles removed mame_options() calls; options can only be queried from the running_machine, or by passing them along. Hash generation and general cleanup. New class hash_collection holds and manages a collection of hashes, and can be built from an internal format string which is stored with each ROM. Also compacted the form of the hash strings used for ROMs, and fixed verification/hashing of non-ZIPped files [Aaron Giles].
 - 0.141u2            : Aaron Giles removed redundant m_machine from the state and execute interfaces to fix ambiguity when using m_machine from within a device that inherits from these. Move generic templates from emucore.h to emutempl.h. Normalize the tagged_list template to wrap a regular standard_list and have similar semantics. Updated a few direct callers to handle the changes [Aaron Giles]. Aaron Giles added methods in the device_t class that implicitly register state against the current device, making for a cleaner interface. Bulk updated existing devices and drivers with driver_device classes to use these methods.
 - 0.141u1            : Miodrag Milanovic added GAME_MECHANICAL flag to mark games having mechanical interface (such as pinball, redemption, bowling games ...). Imported games from PinMAME as skeletons. Tafoid flagged a number of existing games in MAME with GAME_MECHANICAL to indicate the presence of un-emulatable mechanical parts. Made -bios option case insensitive (romload.c) [Fabio Priuli].
 - 0.141              : Aaron Giles added directxor parameter to direct memory accessors. Update all callers that manually XORed addresses to pass the XOR instead. This improves behavior when direct accessors hit non-RAM regions, or when watchpoints are used, because we now know the original, un-xored address and can fall back to standard read/write handlers properly. Also fixes glitched disassembly when read watchpoints are enabled. Aaron Giles removed public decodechar function.
 - 0.140u3            : Aaron Giles added DEVICE_SELF_OWNER which allows an address map to refer to the owner of its owning device. Useful for CPU address map handlers for CPU's that are part of a device.
 - 0.140              : Added new DEVCB type DEVCB_TYPE_DRIVER, which implies the driver_device. Added new macros DEVCB_DRIVER_LINE_MEMBER and DEVCB_DRIVER_MEMBER to specify member functions of the driver device in callbacks [Aaron Giles].
 - 0.139u4            : Changed memory width stubs to fill unpopulated regions with the appropriate portion of the unmap value. Aaron Giles added new (modern) address map macros for referencing member functions in base classes: AM_READ_BASE(_class, _member), AM_WRITE_BASE, AM_READWRITE_BASE, etc. [Aaron Giles].
 - 0.139u3            : Changed the MACHINE_DRIVER_* macros, as follows [Aaron Giles]: 1. Renamed MACHINE_DRIVER_* to MACHINE_CONFIG_* to match the name of the object it actually describes. The MDRV_* prefix may eventually be bulk updated at some point, but not now. 2. MACHINE_CONFIG_START() now takes a driver_data_t-derived class as a required second parameter. This means that MDRV_DRIVER_DATA() is no longer required, and every "root" machine config *must* specify a driver data class (or driver_data_t itself if the driver has not yet been updated to use driver data). 3. New MACHINE_CONFIG_DERIVED() macro defines a machine_config that is derived from another machine_config. This takes the place of the very typical MACHINE_DRIVER_START()/MDRV_IMPORT_FROM() combination. 4. New MACHINE_CONFIG_FRAGMENT() macro defines a partial machine_config that can only be included in another "root" machine_config. This is also used for machine_configs that are specified as part of a device. 5. Changed MDRV_IMPORT_FROM() to MDRV_FRAGMENT_ADD() to more accurately describe what is happening. 6. Added asserts to the above three macros to ensure they are properly used. Updated all machine drivers to use the new macros. Search & replace lists below cover 99% of the changes, with just a few manual fixups [Aaron Giles]. Changed driver_data objects to be devices. Replaced the driver_data_t class with a new driver_device class, which is the base class for all driver_data objects now. The new driver devices are added as the first device in the device list, with a tag of "root"; all other devices are now owned by the driver device [Aaron Giles]. Moved core callbacks (machine_start/_reset, sound_start/_reset, video_start/_reset/_eof/_update, and palette_init) into device configuration parameters on these new devices. The driver_device base class overrides device_start(), ensures all other devices have been started, and then calls, in order, the following overridable methods: 1. DRIVER_INIT function from the game driver. 2. palette_init() - by default calls the MDRV_PALETTE_INIT function. 3. driver_start() - new. 4. machine_start() - by default calls the MDRV_MACHINE_START function. 5. sound_start() - by default calls the MDRV_SOUND_START function. 6. video_start() - by default calls the MDRV_VIDEO_START function. Similarly, the driver_device class overrides device_reset() and then calls these methods in order: driver_reset() - new, machine_reset() - by default calls the MDRV_MACHINE_RESET function, sound_reset() - by default calls the MDRV_SOUND_RESET function and video_reset() - by default calls the MDRV_VIDEO_RESET function. To accommodate these changes, initialization order is slightly altered from before. The tilemap, video, sound and debug systems are now initialized prior to the devices' start. And the user callbacks for DRIVER_INIT, PALETTE_INIT, MACHINE_START, SOUND_START, and VIDEO_START are all called back-to-back. The net effect should be similar, however [Aaron Giles]. Changed device_t::subtag to only prepend a prefix if the device is not the 'root' device, in order to keep compatibility with existing tag searching [Aaron Giles]. Changed device startup to actively reorder devices when they report missing dependencies. This ensures that the reset functions get called in the same order that the start functions did [Aaron Giles]. Changed driver_device to expose the game_driver's ROMs through the device interface. This means all ROMs are now exposed via devices, and thus the process of enumerating ROMs gets simpler [Aaron Giles]. Changed all instances of temporarily allocating machine_config objects to just put them on the stack for simplicity, letting the destructor handle the cleanup work automatically [Aaron Giles]. Changed machine_config constructor to take a game_driver, from which the machine_config constructor is obtained. This also means the resulting machine_config holds a reference to the game_driver [Aaron Giles]. Changed running_machine constructor to no longer take a game_driver, since the game_driver is now obtainable via the machine_config [Aaron Giles]. Added two new template classes optional_device<> and required_device<>. Use these to declare the device pointers in the class. The only difference between the two is that required will fatalerror if the device is not found. These new classes are "pass-through" so the underlying pointer can be passed anywhere a regular device pointer would work [Aaron Giles]. Change shared memory regions to track their size. Added memory_get_shared() functions to retrieve a pointer to a shared region and optionally the size [Aaron Giles]. Added templates required_shared_ptr<> and optional_shared_ptr<> which work just like required_device<> and optional_device<> for retrieving a pointer by tag from an address space that specifies AM_SHARE("tag"). Also added templates required_shared_size<> and optional_shared_size<> for retrieving the size of the AM_SHARE region [Aaron Giles]. Added AM_DEVREAD_MODERN/AM_DEVWRITE_MODERN/etc. macros for the non-modern address map case so that updated devices can shed their old-style read/write handlers in favor of member functions [Aaron Giles]. Added DEVCB_DEVICE_MEMBER() macros which allow you to specify a READ8_MEMBER or WRITE8_MEMBER in a device callback (via dynamically generated trampolines) [Aaron Giles]. Renamed device_execute_interface::m_icount to m_icountptr to avoid commonly-named device values of m_icount [Aaron Giles]. Added DECLARE/DEFINE_TRIVIAL_DERIVED_DEVICE macros to simplify the definition of devices that are based off of a parent device, but which differ in name and a single parameter [Aaron Giles]. Added definitions for [DECLARE_]READ_LINE_MEMBER and [DECLARE_]WRITE_LINE_MEMBER so that read/write line callbacks can be defined as member functions [Aaron Giles]. Added stubs and new macro DEVCB_DEVICE_LINE_MEMBER to allow these to be referenced from device callbacks [Aaron Giles].
 - 0.139u2            : Added emu\delegate.c/h. Converted address_space to a class, and moved most members behind accessor methods, apart from space->machine and space->cpu. Removed external references to 8le/8be/16le/16be/32le/32be/64le/64be. All external access is now done via virtual functions read_byte()/read_word()/etc. Moved differentiation between the endianness and the bus width internal to memory.c, and also added a new axis to support small/large address spaces, which allows for faster lookups on spaces smaller than 18 bits [Aaron Giles]. Provided methods for most global memory operations within the new address_space class. Updated callers to use these instead of the old global functions [Aaron Giles]. Created new module delegate.h which implements C++ delegates in a form that works for MAME. Details are in the opening comment. Delegates allow member functions of certain classes to be used as callbacks, which will hopefully be the beginning of the end of fetching the driver_data field in most callbacks. All classes that host delegates must derive from bindable_object. Today, all devices and driver_data do implicitly via their base class [Aaron Giles]. Added an alternate set of address map macros. Now, if you #define ADDRESS_MAP_MODERN prior to #including "emu.h", you will get the new macros, which have the following properties [Aaron Giles]: ADDRESS_MAP_START takes a 4th parameter, which is the name of the driver_data class the other macros will reference, AM_READ/AM_WRITE/etc. all assume you are providing method names off of the driver_data class you originally specified, AM_READ_LEGACY/AM_WRITE_LEGACY macros are provided for calling global static functions of yore, AM_BASE/AM_SIZE all assume you are providing member names off of the driver_Data class and AM_BASE_LEGACY/AM_SIZE_LEGACY are provided to reference globals if necessary. Defined delegates for read/write handlers. The new delegates are always passed an address_space reference, along with offset, data and mask. Delegates can refer to methods either in the driver_data class or in a device class. To specify a delegate in an address map, you must #define ADDRESS_MAP_MODERN before including emu.h, at which point the AM_READ/AM_WRITE macros will require member function pointers into your driver_data class. Delegates that are specified in an address map are proto-delegates which have no object; they are bound to their object when the corresponding address_space is created [Aaron Giles]. Added machine->m_nonspecific_space which can be passed as the required address_space parameter to the new read/write methods in legacy situations where the space is not provided. Eventually this can go away but we will need it for a while yet [Aaron Giles]. Added methods to the new address_space class to dynamically install delegates just like you can dynamically install handlers today. Delegates installed this way must be pre-bound to their object [Aaron Giles]. Moved beathead's read/write handlers into members of beathead_state as an example of using the new delegates. This provides examples of both static (via an address_map) and dynamic (via install_handler calls) mapping using delegates [Aaron Giles]. Changed the DIRECT_UPDATE_CALLBACKs into delegates as well. Updated all users to the new function format. Added methods on direct_read_data for configuring the parameters in a standard way to make the implementation clearer. Updated all users [Aaron Giles]. Created a simple_list template container class for managing the common singly-linked lists we use all over in the project [Aaron Giles]. Replaced "const address_space" with "address_space" throughout the system. The purpose of making it const before was to discourage direct tampering, but private/protected does a better job of that anyhow, and it is annoying now [Aaron Giles]. Added mask-free versions of read_word/read_dword/read_qword to address_space. Also added unaligned variants that can read unaligned values. Rewrote the core handler as a template that handles all cases, along with a simple unit test to verify that everything is correct [Aaron Giles]. Declared virtual functions in driver_data_t for: machine_start, machine_reset, sound_start, sound_reset and palette_init, video_start, video_reset, video_update and video_eof. The default implementations of these call through the machine configuration's functions as before. However, if a driver_data_t overrides them, it will be called instead [Aaron Giles]. Also added virtual functions for pre_save() and post_load(), which can be overridden to implement machine driver-specific pre-save/post-load functionality instead of registering with the save state system [Aaron Giles]. Updated beathead to use these new virtual functions instead of specifying callbacks in the MACHINE_DRIVER [Aaron Giles]. De-converted MACHINE_DRIVER from tokens back to constructor functions, regaining type safety. If legacy devices still use inline data, those types are not checked. However, new devices no longer have access to the generic m_inline_data. Instead their MDRV_* macros should map to calls to static functions in the device config class which downcast a generic device_config to the specific device config, and then set the appropriate values. This is not to be done inline in order to prevent further code bloat in the constructors. See eeprom/7474/i2cmem/okim6295 for examples [Aaron Giles].
 - 0.139u1            : Return to type safety. Changed address maps back into functions that build up the definition, rather than the whole tokenizing system, which lost type checking. Added a new module addrmap.c which implements the address map classes, and changed the macros to call methods on the address_map and address_map_entry classes which are strongly typed. Fixed a few incorrectly specified memory map entries along the way in twincobr.c, lordgun.c and galaxold.c [Aaron Giles]. More API cleanup [Aaron Giles]: Removed cputag_clocks_to_attotime() and cputag_attotime_to_clocks() in favor of just expanding the class. Same for cputag_suspend() and cputag_resume(). Defined new class driver_data_t, which all driver_data classes must derive from. Updated all class definitions to inherit from the new class, and to call it in the constructor. Also changed the alloc() signature to return a driver_data_t pointer instead of a void *. Renamed and hid machine->driver_data as machine->m_driver_data. Added a new templatized method machine->driver_data<class> which returns a properly downcast'ed version of the driver data. Updated all code which looked like this: mydriver_state *state = (mydriver_state *)machine->driver_data to mydriver_state *state = machine->driver_data<mydriver_state>(). The new function does a downcast<> which in debug builds dynamically verifies that you're actually casting to the right type [Aaron Giles].
 - 0.138u4            : Aaron Giles removed devtag_get_device(); use machine->device() instead. Aaron Giles removed the global clock accessors and cpu_* aliases: cpu_get_clock == device->unscaled_clock, cpu_set_clock == device->set_unscaled_clock, cpu_get_clockscale == device->get_clock_scale and cpu_set_clockscale == device->set_clock_scale.
 - 0.138u3            : Added emu\machine.c/h. Aaron Giles made the machine_config a proper object. Added detokenize method to this object which can be called multiple times to append new devices after the initial machine configuration is set up. Updated member variables to match new naming convention. Aaron Giles changed the running_machine to take a constructed machine_config object in the constructor, instead of creating one itself, for consistency. Also added machine->total_colors() as a shortcut to machine->config->m_total_colors. Aaron Giles changed emualloc to free resource pools from earliest to latest so that early objects can safely clean up stuff they allocated. Aaron Giles changed device name from an overridable function to a parameter passed to the device_config constructor. In situations where the proper name is not known at construction time, a generic name can be specified and then overridden later once the configuration is complete. Oliver Stoeneberg updated expat library match the latest released version (2.0.1). Aaron Giles moved global machine-level operations and accessors into methods on the running_machine class. For the most part, this doesn't affect drivers except for a few occasional bits: mame_get_phase() == machine->phase(), add_reset_callback() == machine->add_notifier(MACHINE_NOTIFY_RESET, ...), add_exit_callback() == machine->add_notifier(MACHINE_NOTIFY_EXIT, ...), mame_get_base_datetime() == machine->base_datetime() and mame_get_current_datetime() == machine->current_datetime(). Aaron Giles cleaned up the region_info class, removing most global region accessors except for memory_region() and memory_region_length(). Again, this doesn't generally affect drivers. Aaron Giles added cycles_to_attotime() and attotime_to_cycles() which is more often what is requested (clocks are the raw input clock, while cycles are internal clock after dividers/multipliers). Aaron Giles removed most other instances of cpu_get_total_cycles. Winmain cleanup [Aaron Giles]: Created dynamic_bind<> template class to handle dynamically binding to optionally-supported functions. Wrapped stack walking code in a class. Wrapped symbol lookup code in a class. Added support for parsing objdump-produced symbol dumps which include non-global functions for much better stack dumps and profiling in GCC builds. Aaron Giles added overrides to fetch the execute, memory and state interfaces without doing a dynamic_cast<> to speed up common legacy operations.
 - 0.138u2            : Added emu\diexec.c/h, distate.c/h, devlegcy.c/h and schedule.c/h. Couriersud added macros for inline device handler initialization to devcb.h. Defined two new casting helpers [Aaron Giles]: downcast<type>(value) should be used for safe and efficient downcasting from a base class to a derived class. It wraps static_cast<> by adding an assert that a matching dynamic_cast<> returns the same result in debug builds. crosscast<type>(value) should be used for safe casting from one type to another in multiple inheritance scenarios. It compiles to a dynamic_cast<> plus an assert on the result. Since it does not optimize down to static_cast<>, you should prefer downcast<> over crosscast<> when you can. Redefined running_device to be a proper C++ class (now called device_t). Same for device_config (still called device_config). All devices and device_configs must now be derived from these base classes. This means each device type now has a pair of its own unique classes that describe the device. Drivers are encouraged to use the specific device types instead of the generic running_device or device_t classes. Drivers that have a state class defined in their header file are encouraged to use initializers off the constructor to locate devices [Aaron Giles]. Removed the following fields from the device and device configuration classes as they never were necessary or provided any use: device class, device family, source file, version, credits [Aaron Giles]. Added templatized variant of machine->device() which performs a downcast as part of the device fetch. Thus machine->device<timer_device>("timer") will locate a device named "timer", downcast it to a timer_device, and assert if the downcast fails [Aaron Giles]. Removed most publically accessible members of running_device/device_t in favor of inline accessor functions. The only remaining public member is machine. Thus all references to device->type are now device->type(), etc [Aaron Giles]. Created a number of device interface classes which are designed to be mix- ins for the device classes, providing specific extended functionality and information. There are standard interface classes for sound, execution, state, NVRAM, memory and disassembly. Devices can opt into 0 or more of these classes [Aaron Giles]. Created a new header devlegcy.h which wraps the old device interface using some special template classes. To use these with an existing device, simply remove from the device header the DEVICE_GET_INFO() declaration and the #define mapping the ALL_CAPS name to the DEVICE_GET_INFO. In their place #include "devlegcy.h" and use the DECLARE_LEGACY_DEVICE() macro. In addition, there is a DECLARE_LEGACY_SOUND_DEVICE() macro for wrapping existing sound devices into new-style devices, and a DECLARE_LEGACY_NVRAM_DEVICE() for wrapping NVRAM devices. Also moved the token and inline_config members to the legacy device class, as these are not used in modern devices [Aaron Giles]. Converted the standard base devices (VIDEO_SCREEN, SPEAKER, and TIMER) from legacy devices to the new C++ style. Also renamed VIDEO_SCREEN to simply SCREEN. The various global functions that were previously used to access information or modify the state of these devices are now replaced by methods on the device classes. Updated all drivers that use the above functions to fetch the specific device type (timer_device or screen_device) and call the appropriate method [Aaron Giles]. Changed machine->primary_screen and the 'screen' parameter to VIDEO_UPDATE to specifically pass in a screen_device object [Aaron Giles]. Reorganized the token parsing for machine configurations. The core parsing code knows how to create/replace/remove devices, but all device token parsing is now handled in the device_config class, which in turn will make use of any interface classes or device-specific token handling for custom token processing [Aaron Giles]. Consolidated address space parameters (bus width, endianness, etc.) into a single address_space_config class. Updated all code that queried for address space parameters to use the new mechanism [Aaron Giles].
 - 0.137              : Made device->tag and devconfig->tag into private member variables (m_tag). Added inline tag() function to return a const char * version. Updated callers to use this instead of directly accessing tag.cstr() which was awkward [Aaron Giles].
 - 0.136u4            : Couriersud removed window config from video_config. Aaron Giles changed MDRV_DRIVER_DATA to reference driver_data::alloc instead of just providing a size. This function is called to allocate the driver data. This allows objects to be embedded in the state data and be properly initialized. Aaron Giles moved driver data allocation after device list construction so that devices can be found when the driver data is constructed. Couriersud fixed NOWERROR=1 casues -fno-strict-aliasing to be dropped.
 - 0.136u3            : Simplified/combined MAME and MESS code [Miodrag Milanovic]: Moved compatibility validation into MAME core from MESS. Made GAME_NO_SOUND check done on MESS too. Removed MESS dependent checks. Renamed GAME_COMPUTER_MODIFIED to GAME_UNOFFICIAL to mark unofficial hardware modifications. Removed GAME_COMPUTER it is distinct by IPT_KEYBOARD. Added GAME_NO_SOUND_HW (to mark that there is no sound hardware) and marked drivers in dotrikun.c, minivadr.c and tgtpanic.c as such. Removed GAME_SHARE_ROMS flag and commented old check for duplicate ROM entries. Moved natural keyboard support from MESS to MAME. Moved OSD file functions and clipboard access functions into OSD core. Significantly reduced the number of new OSD functions needed by MESS [with Couriersud].
 - 0.136u2            : Aaron Giles fixed bug introduced with astring changes that caused malformed tokens when writing out cfg files. Aaron Giles fixed bug where memory regions were not properly enumerated for the debugger memory view. Also, stop creating empty regions for disk regions. Aaron Giles improved stack walking on crash in Windows. Now using StackWalk64 to do the stack walk, resulting in cleaner logs. Also will try to use system function to look up symbol and source/line information if present. Aaron Giles created new template class tagged_list which manages a simple list along with a tagmap. Changed memory regions, input ports, and devices to use this class. For devices, converted typenext and classnext fields into methods which dynamically search for the next item. Changed a number of macros to use the features of the class, removing the need for a bunch of helper functions. Replaced device_find_child_by_tag() -> device->subdevice(). Aaron Giles correct a long-standing design flaw: device configuration state is now separate from runtime device state: * There is a new class 'running_device' which represents the state of a live device. A list of these running_devices sits in machine->devicelist and is created when a running_machine is instantiated. * To access the configuration state, use device->baseconfig() which returns a reference to the configuration. * The list of running_devices in machine->devicelist has a 1:1 correspondance with the list of device configurations in machine->config->devicelist, and most navigation options work equally on either (scanning by class, type, etc.). * For the most part, drivers will now deal with running_device objects instead of const device_config objects. In fact, in order to do this patch, I did the following global search & replace: const device_config -> running_device, device->static_config -> device->baseconfig().static_config, device->inline_config -> device->baseconfig().inline_config and then fixed up the compiler errors that fell out. * Removed device_get_info_ functions and replaced them with  methods called get_config_. * Added methods for get_runtime_* to access runtime state from the running_device. * DEVICE_GET_INFO callbacks are only passed a device_config. This means they have no access to the token or runtime state at all. For most cases this is fine. * Added new DEVICE_GET_RUNTIME_INFO callback that is passed the running_device for accessing data that is live at runtime. In the future this will go away to make room for a cleaner mechanism. * Cleaned up the handoff of memory regions from the memory subsystem to the devices. Aaron Giles converted the rest of devintrf to classes and moved management functions into methods of those classes. The most wide-ranging change was converting device_reset() to device->reset(). Apart from that it was mostly internal shuffling in the core. Aaron Giles made direct accessors for device configuration state. Currently they just call through to the get info function. Removed old macros that wrapped calls. Aaron Giles removed some aliases between CPUINFO_ and DEVINFO_ to help clarify usage. Also converted a few more places to use the new accessors.
 - 0.136u1            : Aaron Giles changed inline_config to be allocated separately to avoid alignment issues. Aaron Giles removed hacks surrounding unicode handling in main(). They are no longer necessary with the new tools. Aaron Giles got rid of setjmp/longjmp for error handling in favor of exceptions. Fatalerror now maps to throwing an exception. Added nicer functions for finding devices, ports and regions in a machine [Aaron Giles]: machine->device("tag") -- return the named device, or NULL, machine->port("tag") -- return the named port, or NULL and machine->region("tag") -- return the named region (Note that machine->region() returns a pointer to a region_info class which describes a region, not a pointer to the region's memory). Made the device tag an astring. This required touching a lot of code that printed the device to explicitly fetch the C-string from it (thank you GCC for flagging that issue!) [Aaron Giles]. Aaron Giles added new member function space() to the device_config, along with shorter constants to be used (AS_PROGRAM, AS_DATA, AS_IO). With no parameters, space() returns the first address space, which is commonly the only space present. Updated a few devices that referenced the old space[] array to call the new function instead. Aaron Giles enforce that numbers are all the same exact width when loading fonts. Aaron Giles added casting operators to the region_info class so you can assign a region to a generic type pointer and have it automatically convert. Also added a bytes() method which is safe if the region is NULL (useful for saying machine->region("foo")->bytes() and not crashing if foo doesn't exist). Aaron Giles changed the region field in the device_config to be a region_info *, and removed the regionbytes field. Updated all users of these fields to use the new casting operators and bytes() methods instead. Aaron Giles added subdevice and subregion methods to the device_config class, so you can easily query for devices and regions that are device-specific. The device prefix ("devicename:") is automatically prepended.
 -  7th January   2010: R. Belmont - Unification: MAME 0.136u1 is going to involve some major changes all around, especially for SDLMAME. In order, they are: - New GCC 4.4.x based MinGW32 and MinGW64 toolchains for the Windows versions (this includes both baseline and SDLMAME Windows targets). Visual Studio is no longer required to build for 64-bit Windows and substantial speedups will be seen by users of 64-bit Windows Vista and Windows 7. - MAME is switching from C to C++ and will include some of the features of that language. While MAME has been getting more object oriented over time we've hit the limits of being able to sanely express that in plain C and many concepts will be cleaner/more intuitive in C++. - SDLMAME will become part of the standard MAME source code download. There will no longer be separate SDLMAME releases on this site (I will update the homepage to say so) but the SDL components will continue to be maintained by Couriersud and myself. As a result of this, SDLMAME has lost one minor feature: the ability to use the "scale2x" graphical filter. It was never well-supported and never worked quite right so it was always on the way to destruction, and so it's now gone. SDLMAME gains two new supported platforms in u1: 64-bit Windows and 64-bit Mac OS X (64-bit on the Mac requires OS X 10.6 Snow Leopard, which implies an Intel Mac, and SDL 1.2.14).
 - 0.136              : Aaron Giles changed behavior of -watchdog option to act like a real watchdog. It now specifies the number of seconds after the last video update that will cause auto-termination of MAME. Also modified it to output a message when the watchdog triggers the exit. Updated windows.txt to reflect this option and the debugger_font options which were never previously documented. Miodrag Milanovic removed sysconfig section from game_driver struct. Made compatible_with attribute available for MAME too (with NULL value set in GAMEL macro). Aaron Giles extended the devtempl.h file to support device address spaces.
 - 0.135u4            : Couriersud added new option "numprocessors" (see windows.txt for an explanation). Aaron Giles added warning messages for auto_malloc, timer and save state allocations done after init time. These should be fixed when detected, and will soon be disallowed entirely. Fixed many cases in the code where this was being done. Aaron Giles added "new" command -listdevices (or -ld) to list the devices attached to a driver. I notice that MESS has a command with the same name; hopefully the behaviors can be combined eventually.
 - 0.135u2            : Added memory_install_write_port_handler & memory_install_readwrite_port_handler to be consistent with installing handlers [smf]. Aaron Giles added new module tagmap which is a simple hashed string map. Updated device and input port lists to use the tagmap for tag searches. Also removed the whole "quark" thing from the validity checker in favor of using the tagmaps. Aaron Giles introduced a generic_pointers structure within machine that is  designed to hold generic pointers that are commonly used. Moved generic_nvram, videoram, colorram, spriteram* and paletteram* pointers there. Added AM_BASE_GENERIC and AM_SIZE_GENERIC macros for initializing generic pointers in memory maps. Also added AM_BASE_SIZE_GENERIC to set both base and size in one step. Aaron Giles moved global variables out of machine\generic and into a private data structure hanging off of the running_machine. Added newly-needed machine parameters to coin_counter_w, coin_lockout_w, and coin_lockout_global_w. Also added machine parameter to set_led_state. Aaron Giles added interface functions to get the number of dispensed tickets and to increment the count, to remove the need for direct access to these global variables. Also added functions to get the current count on a particular coin counter and to determine the lockout state. Aaron Giles purged remaining globals from video\generic.c and audio\generic.c. Aaron Giles added AM_BASE_SIZE_MEMBER() macro for specifying both base and size structure members at once. Updated all cases where this could be used. Memory regions now use a tagmap for lookups [Aaron Giles].
 - 0.135u1            : Fabio Priuli fixed wrong order parameters in memset (spotted by Beledgol).
 - 0.134u4            : Dirk Best changed device callback system to look up devices owned by the same parent if a child device references another device. Christophe Jaillet fixed a couple of unbalaced profiling calls, and added output to help identify the source of unbalanced calls.
 - 0.134u3            : Couriersud added EXPECTED macro to complement the already existing UNEXPECTED macro.
 - 0.134u2            : Added NULL check to prevent MAME from crashing if a new input device was connected at runtime [David Haywood]. Fixed up RAM bank names to prevent crashes with memdump. Extended explicit banks to 96 (emu\memory.c) [Aaron Giles].
 - 0.134u1            : Curt Coder added device_find_child_by_tag helper function (emu\devintrf.c). Now allow for banks to take up half of the available slots. Explicit banks now work up to bank 64 [Aaron Giles].
 - 0.134              : Aaron Giles minor cleanup of machine\generic.c. Changed watchdog_read handlers to return the address space's unmapped value rather than 0xff. Aaron Giles added helper function core_i64_hex_format. Replaced several printf cases in the debugger with this function to avoid runtime differences on older Windows systems. Also fixed up some error logging messages to output the correct number of characters for addresses and data, using the new function.
 - 0.133u5            : Aaron Giles added new function mame_fclose_and_open_next() which will close a file and then keep searching the searchpath for the next valid file. Did some internal rearranging in fileio.c to make this work.
 - 0.133u4            : Curt Coder added helper macros to DEVCB for input lines tied to GND/Vcc (emu\devcb.h).
 - 0.133u2            : Atari Ace updated romload.c and validity.c to not rely on global variables.
 - 0.133u1            : Atari Ace moved priority_bitmap from a global into the running_machine struct. Updated all drivers accordingly.
 - 0.132u5            : Aaron Giles fixed resource leak in core_fload().
 - 0.132u4            : Changes to support address maps for arbitrary devices [Aaron Giles]: * Moved address_map array from cpu_config to device_config. Added MDRV macros in the device for specifying address maps. Changed the memory system to fetch the maps from the new location. * Moved the address-space related get_info constants to devintrf (including endianness). Removed space array from the CPU class header. Made the memory system much more device-neutral. Various other cleanups along the way. * Expanded address maps from 3 to 4. Moved ADDRESS_SPACE_PROGRAM/DATA/IO constants to cpuintrf, as those names are really only applicable to CPUs. Added new ADDRESS_MAP_0/1/2/3 constants to identify address maps more generically. * Updated memory system to be more general about address map handling. Added the concept of default address maps (in addition to the already existing internal memory maps). The difference between internal and default memory maps is that internal memory maps always override everything (including user-specified maps), but default memory maps simply provide a default that can be overridden. * Converted the okim6295 sound driver to use address maps for access. By default, it defines a ROM address map that overlays its full region. As a result, the validity checks require all okim6295 regions to be at least 256k, unless you provide your own address map. Updated all regions to meet this requirement. * Updated the atarijsa code to use a custom address space for its okim6295 accesses (which are banked on the first half and static on the second half), as an example of configuring a device with a custom address space. * For now, attempts to use okim6295_set_bank_base() will still work, though banking for the okim chips should be moved to custom address maps in the drivers eventually. The first time okim6295_set_bank_base() is called, it will install a banked memory handler over the region and use memory_set_bankptr() to change the base on subsequent bank switches. * Moved address map validity checks to be run for each device instead of just each CPU.
 - 0.132u2            : Juergen Buchmueller added casts to ensure proper values are passed to the ctype.h functions.
 - 0.132              : Atari Ace changed several internal interfaces to be more consistent, namely (1) passing device_config as a const always, (2) passing running_machine as a non-const always, (3) eliminating running_machine where possible, (4) passing machine\device first, and (5) preferring (screen, bitmap, cliprect) over (machine, bitmap, cliprect) when all are needed for rendering. Aaron Giles removed the MDRV_<devtype>_REMOVE macros. A simple DEVICE_REMOVE works now that device types are not needed. Aaron Giles added the concept of device contracts. A contract is a well-defined set of interfaces supported by a device, and identified by a unique string identifier. A device may support any number of contracts, described in a list via the DEVICE_CONTRACT_LIST* macros. The purpose of contracts is to provide a means for devices to expose a standard set of interfaces to other parts of the system. For example, the PCI device should expose a contract that includes functions for configuration register access, and 32-bit I/O. Then any device with a PCI interface should implement the PCI contract, so that the PCI bus device can route things appropriately.
 - 0.131u3            : Aaron Giles added DERIVED_CLOCK() macro which can be used by sub-devices to derive their clock from the parent device. Fabio Priuli continued changing CPU references from numbers to tags in drivers.
 - 0.131u2            : Aaron Giles removed second parameter from MDRV_CPU_PROGRAM_MAP, MDRV_CPU_DATA_MAP and MDRV_CPU_IO_MAP. For the remaining drivers that used multiple address maps, converted them to use AM_IMPORT_FROM to import the base map.
 - 0.131u1            : Made a similar change to the auto_* allocation macros like the new 0131u1 memory allocation handling. In addition, added 'machine' as a required parameter to the auto-allocation macros, as the resource pools will eventually be owned by the machine object. The new macros are: auto_alloc(m,t) - allocate memory for an object of type 't', auto_alloc_array(m,t,c) - allocate memory for an array of 'c' objects of type 't', auto_alloc_clear(m,t) - allocate and clear and auto_alloc_array_clear(m,t,c) - allocate and clear. All original calls or auto_malloc have been updated to use the new macros. In addition, auto_realloc(), auto_strdup(), auto_astring_alloc(), and auto_bitmap_alloc() have been updated to take a machine parameter. Removed of SMH_BANKn macros. Just use SMH_BANK(n) instead, which is what the previous macros mapped to anyhow [Aaron Giles].
 - 0.130u3            : Aaron Giles replaced a bulk of AM_READ/WRITE(SMH_NOP) -> AM_READ/WRITENOP.
 - 0.130u2            : smf fixed core_strwildcmp by increasing the limit from 8 to 16 characters. Further annotated the game lists is mamedriv.c [Yasuhiro Ogawa].
 - 0.130u1            : Aaron Giles added new function core_fload() to load a file into an allocated buffer. Updated src2html, regrep and chdman tools to use this function where appropriate. Yasuhiro Ogawa added better descriptions and dates to a number of drivers in the mamedriv.c file.
 - 0.129u6            : Aaron Giles removed device types from device queries that use tags, under the assumption that all device tags are unique. Specifically, the following no longer need to provide a device type: AM_DEVREAD/WRITE, DEVCB_DEVICE_HANDLER, devtag_get_device, devtag_reset and device_list_find_by_tag. As well as several device interfaces that referenced other devices. Aaron Giles added new function memory_install_read_port_handler() to more easily allow you to install read handlers for ports based on tag.
 - 0.129u5            : Aaron Giles renamed a number of commonly-used but confusing device tags. The plan is to move away from generic names like "main" to names that capture the device type as well. This will allow searches for devices to be based on tags alone. Added validity checks to prevent the continuance of this pattern (which I started :), and to ensure that all devices have unique tags, regardless of type. Changes: CPU/"main" -> "maincpu", CPU/"audio" -> "audiocpu", CPU/"sound" -> "soundcpu", SCREEN/main -> "screen" (since it's the only one), SPEAKER/"left" -> "lspeaker", SPEAKER/"right" -> "rspeaker", SCREEN/"left" -> "lscreen", SCREEN/"right" -> "rscreen", SCREEN/"middle" -> "mscreen" and SCREEN/"center" -> "cscreen".
 - 0.129u4            : Aaron Giles fixed logic for deriving direct ranges so that it uses the non-watchpoint-infected tables for its lookups. Aaron Giles added the ability for devices to have their own custom inline config management. This was primarily added to allow for sound routes to be supported in a way that is compatible with the current driver structure. A device can now define a DEVICE_CUSTOM_CONFIG callback which is called whenever one of the MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_* tokens is encountered. A special token MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_FREE is defined to clean up memory allocated and/or reset the custom configuration, and is called when the device is torn down to allow for memory cleanup.
 - 0.129u3            : Added src\emu\devcb.c/h. Added new module DEVCB, which can generically handle conversions between device read/write functions and various other types of functions [Aaron Giles]. Introduced new structures and macros to make this possible: To take advantage of this, a device must change its interface to replace any read/write callbacks with the new devcb_read/write structures. During device start time, the device then uses this new DEVCB module to resolve the information in the devcb_read/write structures into a more efficient form. When the device needs to call one of the callbacks, it uses the inline devcb_call_read/write functions. Once a device has defined its callbacks as devcb_read/write structures, users of the device must use the DEVCB_* macros to specify the type and information about the handler to use: DEVCB_NULL = no handler, DEVCB_HANDLER = a standard device read/write handler, DEVCB_MEMORY_HANDLER = a memory address space read/write handler, DEVCB_DEVICE_HANDLER = a device read/write handler for a different device and DEVCB_INPUT_PORT = an input port.
 - 0.129u2            : Aaron Giles added new #define ENDIANNESS_NATIVE, which maps to either ENDIANNESS_LITTLE or ENDIANNESS_BIG based on the LSB_FIRST definition. Unlink LSB_FIRST, ENDIANNESS_NATIVE always exists and can be used in expressions without invoking the preprocessor. Aaron Giles added macro ENDIAN_VALUE_LE_BE() which selects one of two values based on the endianness passed in. Also added NATIVE_ENDIAN_VALUE_LE_BE() which calls ENDIAN_VALUE_LE_BE with ENDIANNESS_NATIVE. Aaron Giles updated a number of drivers and call sites to use these macros in favor of #ifdef LSB_FIRST. Aaron Giles removed some stray ADDR2BYTE/BYTE2ADDR macros that have been replaced by inline functions. Phil Bennett defined ROM_LOAD64_WORD/ROM_LOAD64_WORD_SWAP in emu\romload.h. Olivier Galibert changed device start routines to no longer return a status. Instead, if a device needs to delay its initialization pending the startup of another device, it must call the new function device_delay_init().
 - 0.129              : Aaron Giles added the ability for a ROMset to specify a default BIOS. Use ROM_DEFAULT_BIOS("biosname") in the ROM definition. This can be used to ensure a correct default BIOS for ROM versions that care. Aaron Giles removed a couple of unnecessary typedefs from mamecore.h. Updated romload to use an astring for accumulating errors (I always feared busting that buffer with some huge romlist).
 - 0.128u7            : NOTE: As of this release, we have two more major changes. These should be the last "huge" changes of this dev cycle. The most major change is the final retirement of the global Machine pointer, which has been part of MAME for many years. Frankly, I never thought we'd hit this point so quickly, so my hats off to Atari Ace who helped push through the final round of changes needed to make this happen finally. As a result of this change, it should be possible in the coming year to finally write a driver that runs two full machines simultaneously. The second big change is that the CPUs are now full-fledged devices, and participate like all other devices in the system configuration. This is mainly an internal structural change, but in the end removes some redundant code and behavior. In a future dev cycle, a similar thing will happen with the sound cores. Starting now, the focus for MAME will be to iron out remaining issues and release a 0.129 sometime around the 1st of the year. Please keep reporting bugs to MAMETesters as you find things. The device system now maintains a parallel list of devices based on type and class, for faster iteration through all devices of a given type or class [Aaron Giles]. Aaron Giles removed start/stop/reset/nvram functions from the device_config in favor of grabbing them as needed. Aaron Giles mapped the devtag_* functions to device_* functions via macros instead of parallel implementations. Atari Ace and Aaron Giles changed a number of APIs in the system to accept running_machine, address_space, or device_config types, in order to remove the use of the global Machine variable. Removed the global Machine variable now that it is no longer directly references. Aaron Giles added the concept of device "owner", for devices owned by other devices. Made the concept of a "clock" native to devices. The clock is now specified when the device is added, and the clock is available in the device_config directly via device->clock. Updated all devices that have a clock to specify it when adding the device, rather than as part of their configuration. As part of this work, also created device-specific _ADD and _REMOVE macros to simplify configuration [Aaron Giles]. Aaron Giles defined a generic device execute function callback, though it is not used yet. The long term plan is that any device with an execute callback will be scheduled along with the CPUs. Now that CPUs are devices, their scheduling will be moved over to this logic eventually. Aaron Giles moved device startup to *before* the DRIVER_INIT is called. This is to allow the DRIVER_INIT to configure devices that have been properly allocated. So far I don't see any negative effects, but be on the lookout if something weird shows up. Aaron Giles removed index and clock parameters from CPU_INIT function.
 - 0.128u6            : Aaron Giles disabled the use of PULSE_LINE for any input lines except NMI and RESET. Added a helper function generic_pulse_irq_line() for doing a single-cycle assert/deassert for those few drivers remaining that were trying to use PULSE_LINE directly. Atari Ace widened some machine init interfaces to pass the machine parameter, allowing more Machine global references to be eliminated. Eventually most of these need to be converted to devices, but this change reduces the deprecation surface in the meantime. Atari Ace squashed another deprecated use of Machine from the MAME core by plumbing machine_config into rendlay.c. Atari Ace changed commonly-used verboselog to require a machine parameter.
 - 0.128u5            : Curt Coder added macros to access ROM and MACHINE_DRIVER by name. Nathan Woods added ATTR_NONNULL to various declarations. Pool items are now tracked globally, and freed in reverse order of allocation. This enables proper nesting [Aaron Giles].
 - 0.128u4            : Atari Ace and Oliver Stoeneberg replaced the Machine parameter where an running_machine * is available and removes the deprecat.h where unnecessary. Aaron Giles generalized the concept of opbase access into "direct" access. Removed opbase globals to the address_space structure. Cleaned up names of pointers (decrypted and raw versus rom and ram). Added inline functions to read/write data via any address space. Added macros for existing functions to point them to the new functions. Other related cleanups. Aaron Giles removed the change_pc() macro. Changed memory_set_direct_region() to return a boolean indicating whether the given address was successfully located in a bank. Change raw/decrypted access to look at this result, and if the given address is not in a bank, calls through to the standard read handlers. This should prevent most crashes when accessing opcodes. Aaron Giles fixed address space mapping handlers to invalidate direct access regions if a change is made to the mapping. This is needed to prevent the Sega dynamic memory mapping chips from falling over. Aaron Giles removed cpu_read_byte/cpu_write_byte. These are replaced with memory_read_byte/memory_write_byte. Aaron Giles removed all direct memory accesses via program_read/write_* from game drivers. All drivers now use the memory_read/write_* and pass in an address space. Aaron Giles removed memory context switch. All memory accesses now specify an address space explicitly. There is no longer any concept of a "current" memory context. Aaron Giles removed all vestiges of the old change_pc macro, which is no longer needed with the banking improvements.
 - 0.128u3            : Aaron Giles changed core cycle computations to use div_64x32 instead of full 64-bit divides. This involves tossing a few bits of resolution at divide time, but should make no real difference in practice.
 - 0.127u7            : Aaron Giles added new functions for building device-relative tags. Changed machine configuration builder to use these functions. Also changed the laserdisc player devices to use them. Updated Z80 CTC/SIO code to assume that the CPU provided for the clock is relative to the device that the CTC/SIO belong to. Updated memory code to assume that regions and devices referenced by the memory map are relative to the device the associated CPU belongs to.
 - 0.127u5            : Aaron Giles fixed -listroms to know about device-specific ROMs.
 - 0.127u3            : Aaron Giles added new device interface selector: DEVINFO_PTR_MACHINE_CONFIG. This allows a device to specify a partial machine driver which is appended to the end of the machine driver for any game using that device. The intention for this is to allow devices which have their own BIOS logic to specify CPUs and other characteristics common to all systems using the device. CPUs, sound chips, devices and ROM-regions which are specified by devices now have their tags auto-prefixed with the device's tag. This allows for multiple instances to be present. For example, the PR-8210 laserdisc player has a CPU with a tag of "pr8210". When it is included as a device by a driver, the driver may tag the device "laserdisc". The resulting final CPU tag name will be "laserdisc:pr8210". Also updated the debugger expression engine to support names with embedded colons [Aaron Giles]. Aaron Giles added checks to ensure that tags used for CPUs, sound chips, regions and devices follow some basic rules: they should be less than 15 characters long, be all lower-case, and only contain letters, numbers, underscores, or dots (no spaces). This is to ensure that they can be used properly in debugger expressions and don't get too long or unwieldy to type (even 15 chars is rather long). Fixed up all tags in the system that failed these checks. Aaron Giles changed DEVICE_START functions to return an error code. Currently this is either DEVICE_START_OK or DEVICE_START_MISSING_DEPENDENCY. The latter should be returned by a device if there is another device it depends on which hasn't been started yet. Added new flag in the device interface to indicate whether a device has been started. Aaron Giles fixed memory handling of internal banks. They should be LOWER priority than the driver's memory maps. Reverted recent changes to MCS-48 core that were very hacky and which crashed many games. You can now properly override the internal memory map and do your own banking.
 - 0.127u2            : Aaron Giles changed refreshspeed target to 0.25Hz below rate provided, in order to guarantee that inexact timings do not lead to sound stuttering.
 - 0.127u1            : smf changed DIRECTINPUT & DIRECT3D handling, so they can be overridden by environment variables. Couriersud added helper function devtag_get_device(machine, type, tag) to retrieve the device_config for (type, tag).
 - 0.126u5            : Aaron Giles fixed incorrect test in winwork that led to spinning instead of using the nicely allocated events we had on hand.
 - 0.126u4            : Aaron Giles fixed bug in winwork that caused the creation of single work items to return NULL, and thus lead to massive memory leaks when using A/V CHDs.
 - 0.126u3            : Aaron Giles changed symbol table reference parameters to void * from UINT32. Aaron Giles cleaned up ROM definition flags and removed some ugly hacks that had existed previously. Expanded to support up to 256 BIOSes. Updated ROM_COPY to support specifying a tag for the source region. Also updated the address map AM_REGION macro to support specifying a tag for the region. Oliver Stoenberg removed a few unnecessary checks after malloc_ort_die() calls, changed two romload.c warnings to use GAMENOUN instead and added "deprecat.h" in a few src\mame\drivers files.
 - 0.125u7            : Oliver Stoeneberg cleaned up most of the machine stuff in src\emu\machine. There is a bit left to clean up, but it's mostly stuck at some interfaces now.
 - 0.125u5            : Oliver Stoenberg cleaned up the usage of Machine in many of the src\video files.
 - 0.125u3            : Aaron Giles added new astring functions astring_del, astring_replace and astring_replacec.
 - 0.125              : Nathan Woods removed bogus assertion in device code - DEVICE_TYPE_WILDCARD is NULL.
 - 0.124u5            : Aaron Giles changed BIOS errors so that specifying an invalid BIOS is a warning, not a fatal error. Also re-allowed "default" as a BIOS setting with special meaning.
 - 0.124u4            : Aaron Giles inverted the sense of the memory mask that is passed to read/write handlers. Previously, the mask indicated which bits were NOT requested to be read/written. Now, the mask indicates which bits ARE to be read/written, which is more logical. Updated a number of drivers and the MIPS CPU cores to comply. Atari Ace specifying an invalid BIOS is now a fatalerror. Also, "default" is no longer a special BIOS type; if you want the default BIOS, leave the BIOS option blank.
 - 0.124u3            : Aaron Giles changed device read/write functions to take a const device_config *. Reverted recent hacks to get around this and removed unnecessary casts. Aaron Giles added support for using smaller-sized memory handlers directly inmemory maps. To do so, you need to use the new AM_READn/AM_WRITEn macros and specify a mask for which bits are connected. Aaron Giles added new functions for dynamically installing device memory read/write handlers. Aaron Giles updated install_memory_XXX_handler() functions to take a machine parameter. Updated all drivers accordingly. Aaron Giles merged installation of read and write handlers where appropriate. Aaron Giles created new macro: AM_RAM_WRITE(handler) which specifies a memory range to be RAM-like for reads but calls the given handler for writes. Aaron Giles replaced AM_READWRITE(SMH_RAM, handler) with AM_RAM_WRITE(handler). Also replaced AM_RAM AM_WRITE(handler) with AM_RAM_WRITE(handler).
 - 0.124u2            : Aaron Giles created a complete set of functions for all databus sizes (8, 16, 32 and 64) and all endiannesses. A few functions are redundant, but it is now very clear which functions to use in which scenarios. It is also now possible to rely on being able to access values of 8, 16, 32 or 64 bits via the built-in accessors without fear of crashing. Updated all cores using 8-bit handlers to explicitly call the 8-bit handlers with the appropriate endianness. Fixed a few games which were calling n-bit handlers directly to use the generic forms. In the future, this is all the access drivers will have. Oliver Stoenberg added the running_machine* parameter to the function passed into cpunum_set_irq_callback() and adds the IRQ_CALLBACK macro for the callback function.
 - 0.124u1            : Added emu\devconv.h. Aaron Giles added fatal error if AM_READ_PORT() references a non-existent port. Oliver Stoenberg changed "Machine" to "machine" in a number of places when the running machine parameter is already available. In some cases this also allowed for the removal of deprecat.h.
 - 0.124              : Aaron Giles explicitly fixed unmapped handler masks so that we don't report all unmapped addresses as 0.
 - 0.123u6            : Aaron Giles fixed chicken and egg problem with device_start callbacks: * Added DEVINFO_INT_TOKEN_BYTES, which is queried before device startup. It should return the size of the structure that will be hung off of device->token. It must not return 0. * Changed the core device interface to allocate and zero a block of memory the size of DEVINFO_INT_TOKEN_BYTES before calling device_start. The pointer to this memory is already attached to device->token at the time device_start is called. * The primary motivation for this is to allow the device_start function to make internal calls and pass the device_config* around as if the object were fully constructed. Since the token is used to indicate whether or not a device is live, this makes the device "live" at the time device_start is called rather than after it completes.
 - 0.123u5            : Aaron Giles removed machine from the parameters of some of the device_get_info and device_set_info calls because that information is stored with the device now. Changed device interfaces to pass the device_config * rather than tokens and individual bits to the device callbacks. Updated all existing devices accordingly. Zsolt Vasvari removed video_data from running_machine. Private state screen information now hangs off the public one, instead of the other way around. Combined video_global and video_private into a single structure. Aaron Giles converted address maps to tokens. Changed the address_map structure to house global map-wide information and hung a list of entries off of it corresponding to each address range. Introduced new functions address_map_alloc() and address_map_free() to build/destroy these structures. Updated all code as necessary. ADDRESS_MAP_EXTERN() now is required to specify the number of databits, just like ADDRESS_MAP_START. Removed ADDRESS_MAP_FLAGS() grossness. There are now three new macros which replace its former usage. ADDRESS_MAP_GLOBAL_MASK(mask) specifies a global address-space-wide mask on all addresses. Useful for cases where one or more address lines simply are not used at all. And ADDRESS_MAP_UNMAP_LOW/HIGH specifies the behavior of unmapped reads (do they come back as 0 or ~0).
 - 0.123u4            : MACHINE_DRIVER_EXTERN now requires a semicolon. Removed a number of extra semicolons [Couriersud]. Aaron Giles added macros to define device functions. Updated existing devices to use the macros. Aaron Giles added the concept of device classes. Devices specify their class in their get_info function. Classes can be used to walk through devices at a more general level than their type. Functions have been added to iterate through devices by class just as you can by type. Aaron Giles removed some unused fields from device_config. Normalized function pointer typedefs [Aaron Giles]: They are now all suffixed with _func. Did this throughout the core and drivers I was familiar with. Added running_machine * parameter to the front of all read/write handlers. Updated all call-through handlers appropriately. Renamed read8_handler to read8_machine_func, replicating this pattern throughout [Aaron Giles]. Added running_machine * to the device_config, live while the device is live, and NULL otherwise, just like the token [Aaron Giles]. Added new macros AM_DEVREAD, AM_DEVWRITE, and AM_DEVREADWRITE, which specify device read/write handlers in address maps, along with the type/tag of the device they reference [Aaron Giles]. Internal address map constructor changes [Couriersud]: Pass running_machine parameter to construct_map_##_name. Change "Machine->" to "machine->" in AM_BASE_MEMBER, AM_SIZE_MEMBER. Pass Machine in construct_address_map. Aaron Giles removed AM_SPACE and matchmask support. Updated relevant drivers to use AM_MIRROR() and AM_MASK() to achieve the same thing.
 - 0.123u3            : Aaron Giles converted MACHINE_DRIVER definitions from function constructors to tokenized lists. For the most part this is a non-invasive change, except for those drivers using MDRV_WATCHDOG_TIME_INIT. In order to allow for tokenization of attotimes, a set of new macros is provided called UINT64_ATTOTIME_IN_x() which follows the same pattern as ATTOTIME_IN_x() but packs the attotime down into a single 64-bit value for easier tokenization. Fixed several errors in the machine drivers which were caught by the additional checks now done in the machine config detokenization code. Separated MDRV_DEVICE_CONFIG_DATA into 32-bit and 64-bit versions. Added floating-point versions with configurable resolutions. Added typedefs for all the machine config callback functions at the top of driver.h.
 - 0.123u2            : Added src\emu\devintrf.c/h and mconfig.c/h. New module: devintrf.c/h. Implements a generic device interface similar to the sound and CPU interfaces [Aaron Giles]. New module: mconfig.c/h. Moved all machine_config and MDRV_* macros here, out of driver.c/h. Added MDRV macros for adding/removing/configuring devices [Aaron Giles]. Aaron Giles renamed machine->drv to machine->config to reduce overloading of the term "driver". Removed expand_machine_driver(). Replaced with machine_config_alloc() and machine_config_free(). Updated all call sites. Aaron Giles implements a new generic device interface (devintrf.c/h) similar to the sound and CPU interfaces.
 - 0.122u8            : Aaron Giles removed distinction between *_gettotalcycles() and *_gettotalcycles64(). All functions now return 64-bit results. Updated all call sites appropriately. Aaron Giles added AM_WRITEONLY as a shortcut for AM_WRITE(MWAx_RAM).
 - 0.122u7            : Zsolt Vasvari removed no longer applicable assert from VIDEO_START(generic). Removed VIDEO_START(generic) from drivers that didn't need it. Removed MDRV_VIDEO_START(generic_bitmapped) from drivers that don't need it. Zsolt Vasvari added a _CALL variant to all prototype macros. The use of these should make it easier to change the signiture of these functions in the future. Replaced existing calls with macro where appropriate. Zsolt Vasvari removed VIDEO_START_CALL(generic) from all drivers not needing it, which were all of them. Removed VIDEO_START_CALL(generic_bitmapped) from jpmimpct. Zsolt Vasvari removed the use of the global Machine from a number of places in the code. auto_malloc() once again actually fails when out of memory [Aaron Giles].
 - 0.122u5            : Atari Ace added machine and cpunum parameters to INTERRUPT_GEN callbacks. Fixed several places that were not using INTERRUPT_GEN or OPBASE_HANDLER macros. Wilbert Pol fixed hang/crash on empty config file. "Fix" for full screen switch, which makes no sense, but is included based on empirical evidence that is somehow works [Emuman].
 - 0.121u2            : Atari Ace switched some #defines in the core over to enums. Also adjusted the GAME macro so that it results in const data, and that it is defined in terms of the more generic GAMEL macro. Cleanups to the inline functions [Vas Crabb]: * Add attributes to functions in eigccppc.h and eigccx86.h to cause GCC to always inline them, and to treat them as arithmetic operators when appropriate (so GCC can identify loop invariants or common subexpressions involving these functions). * Mark locals in functions in eigccppc.h and eigccx86.h as register, so GCC won't always allocate stack space even at O0 optimisation level. * Add dummy +m operands to atomic access functions in eigccppc.h so that GCC will not cache values across calls even if values are not volatile - this will cause GCC to allocate an additional register at O0 optimisation, but not if optimisation is on. * Don't include <altivec.h> in rgbvmx.h if __APPLE_ALTIVEC__ is defined, as this will cause a compiler warning.
 - 0.120u3            : Atari Ace added static qualifiers and renamed symbols in MAME in an effort to further tidy up the global namespace. Generally generic names were targeted and some symbols that were both static and extern. Some specifics: K053247_ram was made static throughout and the existing K053247_export_config was used to obtain the value in xmen.c. The enums DS1991_STATE and DSP_TYPE were unused and were therefore removed. Dead code in cps3.c and thayers.c was discovered and commented out. Obsoleted the GAMEB macro, which is no longer necessary [Atari Ace].
 - 0.120u1            : Aaron Giles added threadid parameter to work item callbacks. This allows for keeping per-thread information by the callbacks.
 - 0.120              : Aaron Giles further tweaked the work code to appropriately check for work items versus checking for the number of outstanding items. Aaron Giles and Curt Coder moved a number of files from mame\machine and mame\video to emu\machine and emu\video. In general, files that emulate a common industry standard chip (as opposed to custom, manufacturer-specific chips) were moved. Further moves may happen in the future to isolate common system-level components (such as amiga, snes, etc.).
 - 0.119u3            : Nathan Woods changed parameters to read/write handlers from "address" to an unmodified "original_address" parameter (having the passed parameter being unmodified makes it easier to determine the original value while debugging). Aaron Giles added new work item flag WORK_ITEM_FLAG_SHARED. When specified on a work item that is queued to a work queue created with the WORK_QUEUE_FLAG_MULTI hint, it means that all threads will be dispatched to process the one work item, instead of the first thread removing it. These "shared" work items are only considered complete when all processing threads have returned. Changed implementation of OSD work queues that are created with the WORK_QUEUE_FLAG_MULTI hint. Such queues now create n-1 threads, where n is the number of logical processors in the system. This allows the main thread to continue accomplishing things while other threads process the work. If the main thread subsequently calls osd_work_queue_wait(), it will then dynamically "jump in" and help the other threads complete all the work items [Aaron Giles]. Added support for controlling multithreading behavior through an environment variable OSDPROCESSORS. To override the default behavior, set OSDPROCESSORS equal to the number of logical processors you wish the OSD layer to pretend you have.
 - 0.119u1            : Aaron Giles experimentally changed full screen behavior when using Direct3D so that if -switchres is NOT enabled, then we don't create a fullscreen Direct3D device. This minimizes large graphics card transitions (in particular it does not disable glass in Vista) when you go full screen. If you want the old behavior, run with -switchres and specify a -resolution parameter equal to your desktop screen size.
 - 0.118u6            : Nathan Woods exposed core_vfprintf(), and implemented mame_vfprintf() in terms of that call. Nathan Woods changed the way MAME handles options internally. Changed mame_options_init() to return a core_options object, which is now passed into mame_execute(). Moved mame_options() to mame.c, which is now only valid while the emulation is running. Audit functions now take a core_options parameter.
 - 0.118u5            : Ernesto Corvi updated memconv.h to convert from basically any to any widths (8/16/32/64), on both little and big endian. Also added macros to create the stubs for the most commonly used mappings, both in the 1:1 fashion, or the LSB/MSB/LSW/MSW style.
 - 0.118u3            : Atari Ace changed MDRV_VBLANK_DURATION macro to accept subseconds directly instead of converting from double. Added new macro USEC_TO_SUBSECONDS to assist in this. Converted all drivers over to using it. Atari Ace improved/fixed validation of memory maps to match current logic in memory.c. Fixed a few problems that were identified this way. Also removed construct_map_0 and isolated map construction to a single function. Nathan Woods added 16-bit handlers to a number of the shared PC components.
 - 0.118u2            : Aaron Giles changed INI parsing to look for source file INIs in <inipath>/source first. This is to disambiguate INIs where the game name matches the source filename. If the INI file is not found in <inipath>/source, then it is looked for in the <inipath> as before.
 - 0.118u1            : Atari Ace fixed behavior of auto_realloc() so that it always reallocs from its original pool.
 - 0.118              : Aaron Giles changed INI parsing so that mame.ini is parsed twice, picking up changes to the inipath.
 - 0.117u3            : Added src\lib\util\astring.c/h. Aaron Giles added new general library module astring.c, which supports allocated strings of arbitrary length and a number of basic functions on them. Replaced assemble_x_strings() functions with the astring equivalents. Updated code in several places to use astrings where appropriate. Converted the memory pool code to a more generic resource pool. Changed internal MAME tracking of timers and save state registrations over to using the new system.
 - 0.117u2            : Nathan Woods added support back for the "none" option for the various *_device options. Aaron Giles moved INI file handling fully into the core. As a side-effect of this change, <exename>.ini is no longer parsed. Changed -createconfig to always output mame.ini instead of <exename>.ini as a result. Renamed run_game() to mame_execute(). The game driver is no longer specified as a parameter; rather, this information is extracted from the options via OPTION_GAMENAME.
 - 0.117u1            : Aaron Giles added new routines mame_openpath(), mame_readpath(), and mame_closepath() for iterating over all files in a path specification, including support for multiple paths. Changed driver_get_approx_matches() and driver_get_count() APIs to work on arbitrary driver lists rather than being hard-coded to the static driver list. Renamed the functions from driver_get_* to driver_list_get_*. Added new function mame_schedule_new_driver() which allows for a new driver to be queued after a hard reset. Removed the NOT_A_DRIVER flag which was overloaded to mean two different things. There are now two new flags: GAME_IS_BIOS_ROOT indicates that a particular driver represents a BIOS rather than a full game. And GAME_NO_STANDALONE indicates that the given driver should not be listed or permitted to execute on its own. For MAME, most BIOSes are executable on their own, so they have the GAME_IS_BIOS_ROOT flag set but not the GAME_NO_STANDALONE flag.
 - 0.117              : Nathan Woods fixed some bugs involving empty or null ROM regions. Aaron Giles rotated the mame_rand() results by 16 bits to reduce periodicity of the resuls.
 - 0.116u4            : Atari Ace fixed a few places where driver code was not properly hooked up. Most cases were benign, but in a couple of instances, save state support was disconnected, and in one case it fixes a potential crash. Zsolt Vasvari changes the last few instances of rand() to mame_rand() and added a #define to prevent it from being used again. Dave Dribin made many of the static info_list*() functions in clifront.c public. Atari Ace simplified the internal handling of BIOS sets. Instead of there being an extra structure, the BIOS information is now embedded in the ROM definition for each BIOS.
 - 0.116u2            : Aaron Giles integrated platform-specific changes into the core makefile, mostly taken from the SDLMAME makefile. Changed the MAMEOS configuration variable to OSD, indicating which OSD layer is being compiled. Added a new configuration variable TARGETOS which specifies the target OS platform.
 - 0.116u1            : Aaron Giles switched driver code to exclusively using mame_rand() instead of rand(), to improve consistency of results. Atari Ace and Zsolt Vasvari fixed a few warnings that show up with -Wextra. Zsolt Vasvari and Aaron Giles fixed numerous regressions in the 0.116 release.
 - 0.115u1            : Atari Ace changed DRIVER_INIT macro to prepend driver_init_* instead of simply init_* to be consistent with the other initialization functions.
 - 0.114u4            : Zsolt Vasvari removed set_vh_global_attribute() and get_vh_global_attribute_changed() from the dozen or so drivers that used it. In the process, made an effort to clean up the video system for these games. The biggest improvements are route16, hyhoo, tutankhm and liberatr. Nathan Woods added calls to support enumerating through options. Atari Ace removed some unnecessary NULL checks and fixed some incorrect usage of auto_malloc.
 - 0.114u3            : Nathan Woods changed the options code so that ranges are specified on the option_entry structure, and enforced when option values are changed. Introduced a mame_options_exit() call to complement mame_options_init(). Added a mame_fopen_options() call, similar to mame_fopen() but with the ability to specify a core_options object to use.
 - 0.114u1            : Nathan Woods fixed bug that caused video glitches when frameskipping due to using out of sync textures.
 - 0.114              : Dave Dribin fixed autoframeskip so it doesn't immediately spike on startup or after a pause. Nathan Woods fixed bug introduced in the memory pool code when hashing was added. Nathan Woods added small optimization to rand_memory().
 - 0.113u4            : Nathan Woods optimized the options code and memory pool code to use hashes for faster searching.
 - 0.113u2            : Aaron Giles cleaned up initialization paths in mame.c. Tried to organize things a bit more logically. Removed a number of return codes in favor of more descriptive fatalerror messages.
 - 0.113              : Zsolt Vasvari removed unnecessary idle skipping code from the m92 driver. This allows removal of a couple of now-unused functions from cpuexec.
 - 0.112u2            : Added src\lib\util\coreutil.c/h and corestr.c/h. Nathan Woods moved some additional pieces of core functionality in the core utility library.
 - 0.112u1            : Brian Troha cleaned up information in mamedriv.c. Nathan Woods added new function driver_get_count() to return the number of drivers.
 - 0.111u6            : Aaron Giles and Nathan Woods added support for screenless drivers.
 - 0.111u5            : Atari Ace updated built-in expat code to version 2.0.
 - 0.110u3            : Aaron Giles added ability for options_add_entries() to override defaults specified in the core. To do this, simply include an option in the list with the same name as the core option and provide a new default. This default will override the one specified in the core.
 - 31st October   2006: Aaron Giles - Cleaning Up: From a software engineering perspective, there's nothing I like more than getting rid of "dead" code and cleaning up how things work under the hood. There's just something extremely satisfying about taking things apart and putting them back together again, ending up with a final result that is more elegant than what you started with. The problem is, it's not always easy to do this in a project as big as MAME. A lot of code is dependent upon certain behaviors, and changing how things work can lead to other things breaking in unexpected ways. In most cases, it's simpler just to leave things alone and ignore the underlying ickiness of the code. If you need an enhancement or some new functionality, just hack it in on top of what's already there, so that you don't break the existing functionality. I'd hate to think what MAME would look like after almost 10 years of that! Even when new ways of doing things are introduced, it is often safer and simpler to do it gradually. For example, when I wrote the new debugger system a few years back, I left the old debugger system in place so that it wasn't a requirement of all the OS-specific ports to immediately update their systems to the new debugger. Unfortunately, this is a prime example where the inertia of having the old system around led to there being little incentive to update to the new system, and so both systems had to be maintained to some extent. (To be fair, in retrospect, I should have provided a bit more guidance in how to write an updated debugger). Fortunately, things have recently taken a step in a more positive direction. The new rendering system was introduced and the old one phased out within a couple of releases. Thanks to SDLMAME, Olivier's GTK debugger, and Ernesto's MacOS X debugger, the old debugger has been officially retired. And I just finished removing support for the old disassembler CPU interfaces, which built in a lot of dependence upon the MAME core. This change will allow most of the disassemblers to be easily compiled separately from MAME and used in other tools. And of course, there's more on the horizon (there always is). There is so much common code between the core MAME and SDLMAME (and the other ports as well) that it makes sense to push more of the functionality down into the core. This requires a few new tweaks to the way things are done, but pays off in the end with a more maintainable source code base. To the end user, this all may seem like unnecessary churn, but in reality, a lot of the changes that go into improving the core systems in MAME have longer-range benefits that are not immediately tangible, but help keep the project healthy.
 - 0.109u4            : Nathan Woods normalized realtime clock accesses across drivers. Now ensure that realtime clocks are reset when recording/saving INP files (machine\timekpr.c). Aaron Giles removed obsolete CPUINFO_PTR_REGISTER_LAYOUT and CPUINFO_PTR_WINDOW_LAYOUT data items.
 - 0.108u4            : Did a bit of object-orienting the core. All core init functions now take a running_machine parameter. All exit, reset and pause callbacks now require a running_machine parameter to register, and pass in the running_machine when called [Aaron Giles]. Added a running_machine parameter to the following driver callbacks: DRIVER_INIT, MACHINE_START/MACHINE_RESET, SOUND_START/SOUND_RESET, VIDEO_START/VIDEO_RESET/VIDEO_EOF/VIDEO_UPDATE and NVRAM_HANDLER/MEMCARD_HANDLER. For the most part, this didn't affect the code thanks to the macros, apart from cases where direct calls were made. Altered most of the mame.c and palette.c interfaces to take a running_machine parameter. Hung private data for these modules off of the running_machine structure instead of using global variables.
 - 0.108u3            : Aaron Giles added driver_data member to the Machine structure, where drivers can hang data instead of using global variables. Added MDRV_DRIVER_DATA macro so the core can allocate this structure at startup. Added AM_BASE_MEMBER and AM_SIZE_MEMBER which are similar to AM_BASE and AM_SIZE but let you specify a member of a struct hanging off of driver_data. Updated the Turbo driver to use these new features as an experiment.
 - 0.107u1            : Aaron Giles renamed ui_popup to popmessage across the code, and implemented popmessage in mame.c. This breaks the dependency between the core driver code and the user interface in almost all cases.
 - 0.106u11           : Aaron Giles added option_get_int_range() and option_get_float_range() functions which do added range checking on parameters, rather than requiring the callers to do the work. Also changed the behavior on options parsing failure to set to the default value rather than defaulting to 0.
 - 0.106u4            : Aaron Giles fixed crash when passing an invalid driver name on the command line. Centralized the approximate matching logic into driver.c so other ports can use it as well. Added new function verbose_printf() which is used instead of checking the verbose global to print information to the screen. Changed all locations that were checking the global to use this new function.
 - 0.105u5            : Improvements to the x86 drc engine and the Windows blitters [???]: Blitter CPUID features now accessed by drc_x86_get_features() call. Added win_blit_init(), to initialize the blitter. Changes to DRC to support usage for things other than CPU cores. Fixed drc_dasm() so it works once again. Added macros for a number of MMX/SSE instructions. Added a number of MMX/SSE instructions to the i386 disassembler.
 - 0.104u8            : Added src\mamecore.c. Andre Hufschmidt improved the "out of context" error message to indicate the source of the problem. Aaron Giles moved logerror handling into the core. OSD ports should set options.logfile to a mame_file handle for the output file.
 - 0.104u7            : Nathan Woods fixed crash when calling fatalerror before the system was ready for it. Aaron Giles moved read/write handlers for input ports, watchdog and interrupt enable out of the core and into machine\generic.c. Moved generic palette handlers out of the core and into vidhrdw\generic.c. Clarified the names of many of the palette handlers and simplified the code.
 - 0.104u6            : Fixed various problems introduced in the last set of changes [Aaron Giles, Nathan Woods, Ville Linde]. Atari Ace and Aaron Giles reduced global namespace pollution by marking many global functions explicitly static, especially in the CPU cores.
 - 0.104u5            : Removed machine\random.c/h. Added support for zero-length palettes (requires RGB direct mode) [Nathan Woods].
 - 0.104u4            : Nathan Woods added "wb+" disposition to osd_tool_fopen. More core file shuffling [Aaron Giles]: Added #include vidhrdw\generic.h to mamecore.h, and removed all explicit includes elsewhere.
 - 0.104u3            : Removed src\common.c/h. Renamed src\driver.c to src\mamedriv.c. Added machine\generic.c/h, src\windows\osd_tool.c and src\osd_tool.h. Nathan Woods created new osd_tool file which is used by utility tools to do file access in an OS independent manner. Aaron Giles reorganized the core initialization/exit sequencing to be "flatter" and more straightforward to understand. System cleanup is now no longer explicitly called by the code in mame.c. Rather, each init function is free to register an exit handler, which will be called in reverse order of registration upon a system exit. Removed default registrations from config_init() into the init functions of the associated modules. Now each system that has config data can register its own callbacks to process it. Refactored/renamed/removed/added several core files: Renamed driver.c to mamedriv.c. Created a new driver.c containing functions defined in driver.h. Split common.c into video.c and machine\generic.c. Moved a number of mame.c functions to video.c. Renamed MACHINE_INIT to MACHINE_RESET to normalize the naming of the callbacks defined in the MACHINE_DRIVER structure. Added several new callbacks. The complete list is now: DRIVER_INIT -- per-game init called once at startup, MACHINE_START/SOUND_START/VIDEO_START -- called once at startup and MACHINE_RESET/SOUND_RESET/VIDEO_RESET -- called each reset.
 - 16th February  2006: Aaron Giles - Every once in a while, you make a small change to the code, and then realize that you really should make a related change to keep things clean. Often, that second change cascades into a third, and a fourth, and then eventually you're making another big core change that everyone loves. All you can do at that point is keep going and hope you can put all the pieces back together again. Thus begins my story of Dr. Frankenstein's Latest Creation, or How I Ripped Apart the Core and Put it Back Together Again. The change in question this week was making some sense of the ordering of initialization in mame.c. If you look at the code now (before any changes), it's pretty confusing. I even have a giant comment at the top of mame.c trying to explain all the steps and subsystems that are initialized and in what order. It's pretty nuts. And it doesn't have to be that complicated. So I flattened it all out. Now there is one init_machine() function which calls all the other init functions. Along the way, I documented why certain subsystems need to be initialized before other subsystems. Then I looked at the exiting code with the thought of simplifying that as well.
 - 0.104u2            : Deprecated the use of multimon.h in the Windows build, which is only necessary for producing Windows 95 and NT 4.0 compatible binaries. Windows 98 is now the minimum version of Windows supported for MAME. Made a few minor tweaks to the Windows sources to support the latest build tools. See http://mamedev.org/tools if your tools are out of date. Cleaned up structs/unions in the debugger and Windows code to match the new core conventions [Aaron Giles]. Made declarations and variables in a number of drivers static and const to reduce global namespace pollution. Fixed a number of multiply-defined global variables [Atari Ace].
 - 0.104              : Aaron Giles ensured that all core and windows files have some indication of copyright on them.
 - 0.103u5            : Aaron Giles separated the allocation of graphics data from the decoding. This fixes the crashes that were introduced in u4, and will allow for decoding progress to be reported eventually. Atari Ace improved auto_malloc so it uses less memory and doesn't have a hard-coded limit on the maximum number of allocations. Also audited the use of auto_malloc in the code and removed unnecessary checks for NULL (since auto_malloc doesn't return if it fails).
 - 0.103u4            : Atari Ace removed a number of unnecessary video_stop and machine_stop routines. Aaron Giles added assert macro to mamecore.h.
 - 0.103u2            : Sync Refresh / Waitvsync / Triplebuffer changes [Alan Kamrowski II]: * It changes the waitvsync code to wait for the beginning of the vertical blank. The previous code simply checked if it was in the vblank and only waited if it wasn't. This caused 2 problems. The first is that when using syncrefresh, if there was enough time, more than one frame can be rendered during a single vblank. This is why syncrefresh would have odd behavior such as the game speeding up or slowing during during less cpu intensive sequences. The second problem is that the retrace line could sometimes be seen because while the code checked to see if it was in the vblank, it did not check where in the vblank it was so it might be at the end of the vblank and by time the frame is rendered the monitor could be out of the vblank. * It removes the waitvsync only if game speed is above 95% restriction. This restriction would only cause waitvsync to vacillate between on and off depending on game speed. If someone enables waitvsync and it is too slow, then it is. * When syncrefresh and triplebuffer are used, MAME would run the waitvsync code anyway. The triplebuffer code takes care of this and having MAME wait for the retrace in the waitvsync code anyway is a waste of time and causes timing issues on some hardware. If triplebuffering is enabled, then there is no need to run the waitvsync code because triplebuffer already does.
 - 0.103u1            : Nathan Woods moved several BCD and date-related functions into mamecore.h.
 - 0.102u4            : William Krick cleaned up and standardized usage of M_PI constants (3.1415) in the code.
 - 0.102u3            : Brian Troha updated driver.c with more consistent and updated info.
 - 0.102u1            : Aaron Giles added new inline math functions to mamecore.h, along with mechanisms for the OSD layer to override them with platform-specific variants: count_leading_zeros, count_leading_ones, and fixed_mul_shift. Updated the TMS32031 core to make use of the first two. Changed the Windows blitters to use an array allocated by osd_alloc_executable() to prevent potential access violations on systems with no-execute support.
 - 0.102              : Marked most gfx_layout and gfx_decode structures in the code as const [Aaron Giles]. Fixed a few more remaining issues from the 0.101u1 update [Aaron Giles, Pierpaolo Prazzoli]. Renamed my_stricmp to mame_stricmp, converted all uses of stricmp in the code to call mame_stricmp, and #defined stricmp to something invalid to prevent code from using it in the future [Aaron Giles]. Fixed implementation of mame_stricmp [William Krick].
 - 0.101u5            : Aaron Giles changed the AM_REGION() macro to store region/offset information instead of a pointer to simplify some of the region valdation code.
 - 0.101u4            : Fixed more games broken by the u1 changes. There are only a very small number of games that are still known to have issues [Aaron Giles with contributions from Mathis Rosenhauer].
 - 0.101u3            : Added check and failure for 0-sized mallocs [Nathan Woods]. Fixed a number of games that were broken with the u1 update. Just a few more cases remain. Most games are working at this point [Aaron Giles, with contributions from El Condor, R. Belmont, Ville Linde].
 - 0.101u2            : Added src\memconv.h.
 - 0.100u4            : Aaron Giles removed the GAMEX and GAMEBX macros. The flags parameter has been moved into the GAME and GAMEB macros and these are used for all games.
 - 0.99u6             : Aaron Giles finished renaming. Major changes this time: struct mame_bitmap -> mame_bitmap, struct rectangle -> rectangle, data8_t -> UINT8, data16_t -> UINT16, data32_t -> UINT32 and data64_t -> UINT64.
 - 0.99u5             : Aaron Giles completed renaming of core structures. Most pervasive change was "struct tilemap" is now just "tilemap".
 - 0.99u4             : Aaron Giles cleaned up/normalized the naming of several core structures in an attempt to impose some order on coding conventions in the core code: struct InputPortDefinition -> input_port_default_entry, struct InputPort  -> input_port_entry, struct RegionInfo -> region_info, struct RunningMachine -> running_machine, struct GameOptions -> global_options, struct GameDriver -> game_driver, struct InternalMachineDriver -> machine_config, struct MachineCPU -> cpu_config, struct MachineSoundRoute -> sound_route, struct MachineSound -> sound_config, struct MachineSpeaker -> speaker_config, struct RomModule -> rom_entry, struct SystemBios -> bios_entry, struct GfxLayout -> gfx_layout, struct GfxElement -> gfx_element and struct GfxDecodeInfo -> gfx_decode. Plus many others along the same lines (follow the pattern). Note that this work is not yet complete. In addition, a few of the more pervasive structs (mame_bitmap, rectangle) will be left until a non-diff release (0.100).
 - 0.98u1             : Added src\mamecore.h. Aaron Giles changed how perodic timers are defined. Previously, you would specify a number which was interpreted either as Hz (if less than 50000) or as nanoseconds (if greater than 50000). Now, the time is specified as a period and you use the standard TIME_IN_HZ or TIME_IN_NS macros. Created a new header file mamecore.h, which contains the core common useful macros and typedefs that were scattered throughout the header files. Also added endian swapping macros from MESS. Fully deprecated the use of cpu_setbank(), which was long ago replaced with memory_set_bankptr().
 - 0.97u1             : Aaron Giles fixed memory leak in the cpu subsystem (mame.c - The CPU system must be reset before memory goes away).
 - 0.97               : Nicola Salmoria fixed memory leak in hiscore system.
 -  5th May       2005: Aaron Giles - About the 0.96 Code Cleanup: I added a step to the build process which runs a little tool over all the source code to ensure some consistency. A lot of people are freaking out about this in ways that are really unwarranted. You have to keep in mind that code is submitted from many people running on various platforms, and certain things like line-endings are not necessarily consistent between platforms. For example, the file drivers\laserbas.c has had screwed up line endings for who knows how long. Diff is not the most robust tool when creating diffs against files with inconsistent line endings. When I tried to create a diff against this particular file, diff freaked, and I had to hand-modify the final patch to make it work. This was the impetus to writing the tool. Since there seems to be a lot of paranoia about what this tool does, let me make it 100% perfectly clear. The tool does three things and only three things: 1. It makes sure all line endings are DOS/Windows standard CR/LF. 2. It removes any extra spaces/tabs at the end of each source line. 3. It converts tabs to spaces (assumes 4-character tabs) within comments. It leaves all other tabs alone. That's it. The tool is also smart enough not to touch the file if nothing needs to be changed so that the datestamps remain consistent. Since all the files in MAME 0.96 were updated with this tool, they will all pass unscathed when I run it before releasing 0.96u1. Which means this is really the only time you will see a significant number of changes resulting from the use of the tool. Going forward into the future, you probably won't even notice.
 - 0.96               : IMPORTANT: As of MAME 0.96, the source code license has changed. Please see the new file license.txt for details. The new license is based off the BSD license, with additional prohibitions against commercial usage. See http://mamedev.com for additional details.
 - 0.94u2             : Updated mame.c documentation [Aaron Giles].
 - 0.93               : smf changed way .map file is generated.
 - 0.91               : Aaron Giles removed obsolete orientation code from tilemap code and drivers.
 - 10th October   2004: R. Belmont - Removed two GPL source files from MAME to ensure MAMEdev's continued legal safety.
 - 0.85u3             : Incorporated bugfix to the zlib code that was missing from the official distribution [smf].
 - 0.84u5             : Aaron Giles fixed mame_fprintf to output various text file formats based on the compile-time define CRLF. This must be set and can be equal to 1 (CR only), 2 (LF only) or 3 (CR+LF).
 - 0.84               : A number of obsolete backward compatibility macros have been removed [Aaron Giles]. See this list for the equivalents if you have a driver that is using them: cpu_set_reset_line -> cpunum_set_input_line, cpu_set_halt_line -> cpunum_set_input_line, cpu_set_irq_line -> cpunum_set_input_line and cpu_set_irq_line_and_vector -> cpunum_set_input_line_and_vector. timer_suspendcpu -> cpunum_suspend/cpunum_resume, timer_holdcpu -> cpunum_suspend/cpunum_resume, cpu_getstatus -> cpunum_is_suspended, timer_get_overclock -> cpunum_get_clockscale and timer_set_overclock -> cpunum_set_clockscale. cpu_gettotalcycles -> cpunum_gettotalcycles and cpu_gettotalcycles64 -> cpunum_gettotalcycles64. keyboard_name -> code_name, keyboard_pressed -> code_pressed, keyboard_pressed_memory -> code_pressed_memory, keyboard_pressed_memory_repeat -> code_pressed_memory_repeat and keyboard_read_async -> code_read_async. install_mem_read*_handler -> memory_install_read*_handler, install_mem_write*_handler -> memory_install_write*_handler, install_port_read*_handler -> memory_install_read*_handler and install_port_write*_handler -> memory_install_write*_handler. memory_install_read*_handler_mirror -> memory_install_read*_handler and memory_install_write*_handler_mirror -> memory_install_write*_handler. READ_HANDLER -> READ8_HANDLER and WRITE_HANDLER -> WRITE8_HANDLER.
 -  9th April     2004: Aaron Giles removed a logerror from the vblank callback in cpuexec.c
 -  9th February  2004: Nathan Woods sent in miscellaneous fixes to the core.
 - 0.79u1             : Aaron Giles fixed a bug with AM_SHARE (memory.c).
 -  6th February  2004: Aaron Giles added support for internal memory maps for CPUs.
 - 28th January   2004: Nathan Woods fixed a bug when running multiple sessions.
 - 0.78u1             : Removed final traces of TESTDRIVER code [Paul Priest].
 - 29th December  2003: Aaron Giles added the ability for drivers to change the refresh rate during emulation.
 - 0.75               : Added src\windows\config.h. Nathan Woods moved config.c externs to a header file. Added another call, cli_rc_create(), which creates MAME's rc struct for use elsewhere. (I'm actually creating a debug time consistency check feature for MAME32, to verify at runtime that the arguments that MAME32 has are consistent with MAME's). When rc_destroy() is now called, freed pointers to strings and files will now be NULLed out.
 - 0.74u2             : The TESTDRIVER system has been removed, all drivers are now enabled working or not, this decision was made by several members of the development team. The drivers that were previously TESTDRIVERS are still marked as GAME_NOT_WORKING so can be filtered out easily with a front-end. Please note, the enabling of these drivers does not indicate they're any closer to working than when they were first added and in many cases it could still be several years before they work depending on when they're worked on and how difficult they prove to be. We're always looking for talented programmers to work on and improve MAME, some of these drivers could be a good place to start (others may be near impossible to fix). If any GAME_NOT_WORKING flags have been missed let us know at MAMEtesters.
 - 0.74u1             : Nathan Woods moved some Config code around.
 - 0.70u5             : Barry Rodewald changed drivers to use mame_rand for random numbers.
 - 27th June      2003: Barry Rodewald changed all drivers needing random numbers to use MAME's own random number generation.
 - 12th June      2003: Chris Kirmse fixed an incorrect number of ROMs being passed to the OSD side when optional BIOS ROMs were used. Paul Priest further fixed the problem in the optional BIOS ROM loading.
 - 0.70u1             : Nathan Woods adds ROM_LOAD32_DWORD to src\common.h.
 - 10th June      2003: Paul Priest changed the default BIOS selection behaviour, the default BIOS is now always the first one listed.
 -  6th June      2003: Paul Priest improved the BIOS switching, making the different BIOS ROMs recognizable by names instead of numbers.
 -  1st May       2003: Leon van Rooij submitted basic Direct3D support, giving the ability to turn off bi-linear filtering when using hardware stretch.
 - 17th April     2003: Bryan McPhail incorporated some fixes from MAME32 Plus! to the main version.
 - 13th April     2003: Nathan Woods fixed MAME from crashing on non-MMX machines.
 - 10th April     2003: Aaron Giles added an option to control the audio output latency and another option to set a maximum size for the error log file.
 -  8th April     2003: Nathan Woods moved the printf and exit functions from the core to the OS dependant part, allowing them to be handled differently.
 - 18th March     2003: Aaron Giles fixed a bug where suspended CPUs didn't update their cycle count correctly.
 - 26th January   2003: Bernd Wiebelt added a generic random number generator to the core.
 - 0.63               : Added src\fileio.c/h. New options -nodisclaimer and -nogameinfo to disable startup screens. Warnings about incorrect emulation are not disabled [Aaron Giles]. smf replaced RDTSC timing with QueryPerformanceCounter. This should fix problems on SpeedStep notebooks. It seems, however, that it causes even worse problems on other machines. Therefore, the old behaviour can be forced with the new -rdtsc option. Moved most of the file I/O out of the OS depndant code and into the core. Added two new types, mame_file and osd_file, which enforce better type checking throughout the system (and prevents confusing the two). Instead of calling osd_fopen, osd_fread, osd_fwrite, etc., you now call mame_fopen, mame_fread, mame_fwrite, etc. The osd_* calls are reserved to the core. All the ZIP handling is done in the mame_file functions, so it will be inherited by all ports [Aaron Giles].
 - 21st December  2002: smf changed the clock speed detection to a probably more compatible method in the Windows version and Nicola Salmoria improved its behavior with the debugger.
 - 14th December  2002: smf fixed another small logging bug.
 - 13th December  2002: smf fixed several memory interface bugs that may have caused crashes.
 - 21st October   2002: Olivier Galibert added support for getting the number of elapsed cycles for a given CPU.
 - 21st July      2002: Aaron Giles fixed a few memory interface bugs.
 - 10th July      2002: Aaron Giles removed rotation support from the core.
 - 28th May       2002: Aaron Giles changed the display interface a little.
 - 17th May       2002: Zsolt Vasvari removed the use of plot_pixel2 which cleans up a few things.
 - 11th May       2002: Aaron Giles fixed a few more problems that occurred after the display update changes.
 -  7th May       2002: Aaron Giles fixed another small bug in the vector games that happened because of the display updating changes.
 -  6th May       2002: Aaron Giles fixed a small bug in the vector games that happened after yesterday's display update changes.
 -  5th May       2002: Aaron Giles sent in a massive update for the display updating, which is now a lot cleaner and more consistent.
 - 0.60               : Fixed Capcom games comment in src\driver.c.
 -  5th April     2002: Aaron Giles fixed a lot of invalid memory accesses in various drivers that caused crashes in 0.59.
 -  6th February  2002: William Kucharski re-submitted his batch of fixes for the various drivers.
 - 0.58               : New macros have been added to declare common callback functions and enforce naming conventions. All drivers have been converted to the new macros: void init_drivername() -> DRIVER_INIT( name ), int generate_int() -> INTERRUPT_GEN( func ), void name_init_machine() -> MACHINE_INIT( name ), void nvram_handler() -> NVRAM_HANDLER( name ), void name_vh_convert_color_prom() -> PALETTE_INIT( name ), int name_vh_start() -> VIDEO_START( name ), void name_vh_stop() -> VIDEO_STOP( name ), void name_vh_eof() -> VIDEO_EOF( name ) and void name_vh_screenrefresh() -> VIDEO_UPDATE( name ). Major change to the way machine drivers are set up. A series of macros is now available (defined in driver.h) to "build up" a machine driver. The ordering of items in the machine driver is arbitrary, apart from CPU-specific data, which is tied to the most-recently referenced CPU. With this new format, machine drivers can now be built by modifying another machine driver, providing a primitive inheritance mechanism. See any driver for an example of the new format. See mcr.c for a more complex example of inheritance.
 -  1st February  2002: Aaron Giles cleaned up the plot_pixel support.
 - 31st January   2002: Aaron Giles converted a few more drivers for the partial update support.
 - 30th January   2002: Aaron Giles added partial screen updating to the core, and converted a few drivers to support it.
 - 28th January   2002: David Graves fixed a few more problems in the Taito drivers that occurred with the latest core changes. Aaron Giles also fixed a crash that happened with the core changes and resetting 68k CPUs.
 - 27th January   2002: David Graves fixed a few more problems in the various Taito drivers that occurred with the core changes.
 - 26th January   2002: David Graves fixed a few problems with some Taito games that occurred with the core changes.
 - 23rd January   2002: Zsolt Vasvari updated the 8080bw driver to use the new core features.
 - 21st January   2002: Aaron Giles fixed a sound problem in the Williams T-unit driver that occurred with the newest core changes.
 - 16th January   2002: David Haywood re-submitted several drivers and clones to work with the newest core changes.
 - 15th January   2002: Aaron Giles sent in the major core rework, adding much more macroization, adding automatic resource management for bitmaps and timers, obsoleting the old interrupt system and adding generic NVRAM handlers.
 - 10th January   2002: Aaron Giles reported some progress on a major core rework, changing machine drivers to a macro system and automatizing timer and video drivers resource management.
 - 0.54               : Improved auto_malloc so that you can auto_malloc at machine_init time and have the memory disposed of on a reset [Aaron Giles].
 - 31st October   2001: Aaron Giles moved bitmap allocation to the core code as opposed to being in the OS-dependant code.
 - 0.37b14            : New helper macros BITSWAP8(), BITSWAP16() and BITSWAP24().
 -  9th March     2001: Nicola Salmoria added 4bpp packed graphics support to the core.
 - 0.37b12            : GAME_IMPERFECT_GRAPHICS flag for game drivers.
 - 0.37b1             : New GAME_UNEMULATED_PROTECTION flag.
 - 0.36RC2            : There's a new game flag GAME_NO_COCKTAIL to mark drivers that don't support screen flip, please use it because gamelist.txt is now generated automatically and this is the only way to know whether a driver supports it or not.
 - 0.36b16            : The transition to the GAME() macro is complete. struct GameDriver must no longer be used. The functionality of osd_skip_this_frame() is now more strictly defined (see osdepend.h). Ports not complying with that must be updated, otherwise problems with certain drivers might arise.
 - 0.36b14            : MachineDriver->frames_per_second is now a float. The struct GameDriver reorganization is finally complete. Drivers should now use the GAME() and GAMEX() macros and not directly the GameDriver structure. IMPORTANT FOR PORTERS: Note that the clone_of field now is not necessarily 0 even if the game is not a clone. If clone_of is not 0, to know if the game is a clone you have to check (clone_of->flags & NOT_A_DRIVER) is 0.
 - 0.36b10            : [DOS] Adjusted the autoframeskip code, to make it increase frameskip a little faster, but not as fast as it was before the previous change. Let's see how this performs [Nicola Salmoria].
 - 0.36b10            : Merged the flags and orientation fields of struct GameDriver.
 - 0.36b9             : Removed adpcm_sample_list, palette and colortable from struct GameDriver. Changed char *color_prom to int prom_memory_region.
 - 0.36b8             : [DOS] Changed the autoframeskip code, making it less anxious to increase frameskip as soon as speed drops below 100%. Let's see if this makes things better or worse [Nicola Salmoria].
 - 0.35b7             : New switch "-waitvsync /-nowaitvsync" (use it with -novsync); it waits for video sync before drawing the screen but uses the normal MAME throttling. This gives smoother display with scrolling game (like vsync), but works with video modes with higher refresh frequency, and is more win-friendly [Valerio Verrando].
 - 0.35b6             : [DOS] All new, completely rewritten autoframeskip code [Nicola Salmoria].
 - 0.35b1             : Frame skipping is entirely handled by the OS dependant code. osd_skip_this_frame() no longer has the "recommend" parameter. Also, replaced osd_update_display() and osd_update_audio() with the single osd_update_video_and_audio(). IMPORTANT: osd_update_video_and_audio() is called *every frame* by the main core. It's its responsability to know whether the frame has to be skipped. osd_skip_this_frame() is used by the main core only to know if it can avoid calling drv->vh_update() [Nicola Salmoria].
 - 0.34b5             : New field driver_init in the GameDriver structure. It's an optional function which can be used to do some game specific initialization, for example by adding memory handlers using the above functions [Nicola Salmoria].
 - 0.33b7             : The copyright disclaimer and driver credits screens are shown only the first time a game is run. The game information screen is always shown since it may contain important info.
 - 0.33b6             : Added new fields to the GameDriver structure: "source_file" (set it to __FILE__, this is used to automatically generate reference lists); "clone_of", used to link clones to the main version of the game. "year" and "manufacturer", for production year and company; "flags", for future use.
 - 0.31               : Reworked the automatic screen resolution picker. It now selects a resolution appropriate for the game's visible area, not the game's physical screen size (which is larger) [Nicola Salmoria]. Zerza added an NTSC video mode for use with a VGA2TV converter (this is definitely not the TV output some newer graphic cards offer). It is untested, use at own risk. More info: http://www.hut.fi/Misc/Electronics/circuits/vga2tv/. New vblank_duration field in MachineDriver, which controls how long to delay screen refresh after a vblank interrupt. This is important to get video properly in sync in some games (e.g. sprites and background in Commando) [Aaron Giles]. Moved the speed throttling code to the OS dependant stuff [Nicola Salmoria].
 - 0.28               : Aaron Giles provided a driver reference sheet (mamelist.txt).
 - 0.27               : ROMs are checksummed before starting the emulation. If the checksum doesn't match, a warning message is printed on the screen (along with the expected checksums). Execution resumes after pressing Return. Not all drivers use this feature yet, but most of them do. The ROM_LOAD() macro now requires four parameters, the last one being the checksum. To quickly upgrade from previous sources you can be used (temporarily) ROM_OBSOLETELOAD(), however adding the checksum is easy (just do a cut & paste from the warning message) so it's better to put them in as soon as possible [Nicola Salmoria]. New macro ROM_RELOAD(), meaning to reload the previous ROM at a different address (useful with 6502 games which need reset/irq vectors at FFFx) [Nicola Salmoria].
 - 0.26               : Mirko Buffoni, Nicola Salmoria, Bernd Wiebelt and Patrick Lawrence have heavily changed the main core set of sources. Improvements to speed, memory access, drivers structure were done. We strongly suggest to developers to start their code on a clean 0.26 version.
 - 0.24               : Modifications to support Driver Description and Credits.
 - 0.21               : Added MasterVolume in MSDOS.C, and changed MAME.C to support this feature. You can change the volume thru various volume percentage [100,75,50,25,0] pressing F9.
 - 0.19               : Substituted strcmp() with case insensitive stricmp() in MAME.C and MSDOS.C. This solve the problem with upcase gamename (ex: Win95 and NDOS).
 - 0.18               : IMPORTANT NOTE: This will be the last version of MAME released by me (Nicola Salmoria). From now on, the project will be maintained by Mirko Buffoni (mix@lim.dsi.unimi.it). Contact him if you have material to submit for inclusion into MAME. Please don't send such material to me.
 - 0.12               : Sometimes interrupt requests happen while interrupts are disabled [Nicola Salmoria]. Until now I just ignored them, but some games need them to be processed as soon as interrupts are re-enabled. Rally X is an example of such a game. The Z80 engine has provision to do that, but it would make writing a driver more complex (need to find the interrupt acknowledge register) so I slightly modified the engine to automatically cache an interrupt request and execute it as soon as interrupts are enabled. I had already done a similar change to the 6502 engine, it was needed by Burger Time which wouldn't accept coins otherwise. Since the functions xxx_vh_start(), xxx_vh_stop(), xxx_videoram_w(), xxx_colorram_w() are the same for most video drivers, I moved them, alongside with some variables, to vidhrdw\generic.c. This doesn't reduce much the size of the executable, but greatly reduces the amount of code that has to be put in a video driver (in many cases, you just have to write xxx_vh_screenrefresh()).
 - 0.08               : The ROM copyright notice is displayed in the main emulation screen [Nicola Salmoria].
 - 0.03               : New definition of custom video modes, this will hopefully be compatible with more systems [Nicola Salmoria]. Thanks to Chuck Cochems for the help in making the Video modes more compatible.
 - 0.01               : [Nicola Salmoria] First of all, thanks to Allard van der Bas (avdbas@wi.leidenuniv.nl) for starting the Arcade Emulation Programming Repository at http://valhalla.ph.tn.tudelft.nl/emul8. Without the Repository, I would never have even tried to write an emulator. If you find out something useful, submit it to avdbas@wi.leidenuniv.nl, so it will be made available to everybody on the Repository page. Z80Em Portable Zilog Z80 Emulator Copyright (C) Marcel de Kogel 1996,1997 Allegro library by Shawn Hargreaves, 1994/96 SEAL Synthetic Audio Library API Interface Copyright (C) 1995, 1996 Carlos Hasan. All Rights Reserved. Video mode created using Tweak 1.6b by Robert Schmidt, who also wrote TwkUser.c.



 2.1  MAMEUI

 - 0.248              : Fixed the version of utf8_from_uchar that returns std::string blowing up on invalid codepoints (util\unicode.cpp) [Vas Crabb].
 - 0.238              : Removed osd\windows\main.cpp.
 - 0.228              : Added osd\eigcc.h. Centralized basic functions and de-virtualize various getters (osd\modules\osdwindow.cpp) [AJR]. Fixed a couple of fixed-size buffers in Windows OSD code. Marked MAME as aware of long paths in Windows manifest. Made a cleaner, thread-safe API for getting volume names. Minimised full-screen windows on losing focus (osd\windows\window.cpp). Clean up window title formatting. Show data type model in window title. Moved window title formatting to a single place (osd\modules\osdwindow.cpp). Rearranged window title to put system name first (modules\osdwindow.cpp). Moved GCC intrinsics out of eminline.h so MAME_NOASM will take the pure C++ implementation with GCC (makes testing the fallback easier) [Vas Crabb].
 - 0.227              : Removed "unicode.h" from emu.h (except for UTF8_xxx macros, which have been transplanted to emucore.h since a lot of drivers use them) and osdepend.h. Added std::string_view overrides for uchar_from_utf8 and normalize_unicode [AJR].
 - 0.216              : Don't create pipe unless requested (osd\modules\file\winptty.cpp) [Carl].
 - 0.212              : Removed a stray (likely vestigial) variable from windows\window.cpp. Changing win_window_info::draw_video_contents()'s update parameter to be bool and winwindow_has_focus() to return bool [Nathan Woods].
 - 0.199              : Fixed connecting to existing socket (osd\modules\file\winptty.cpp) [Carl].
 - 0.190              : Attempted to sanitize/rationalize how we access UTF-8 command line arguments. Specifically, this creates a call osd_get_command_line() that returns UTF-8 command line arguments as std::vector<std::string>. On non-Windows platforms, this does nothing more than build the vector. On Windows, this invokes GetCommandLineW() and CommandLineToArgvW(). This also attempts to unwind usage of wmain()/_tmain() on Windows, which is not standard. Related to this, this fixes a bug in Imgtool; specifically, non-7 bit ASCII was not being handled correctly in Windows. This is really an admission that the way that Windows handles Unicode and command line arguments sucks, and it is my belief that having a wmain() or _tmain() declaration specific for Windows is a worse solution [Nathan Woods].
 - 0.188              : Removed redundant flags MACHINE_NOT_WORKING and MACHINE_NO_SOUND and replaced them with MACHINE_IS_SKELETON [Osso].
 - 0.186              : Disambiguated the WINOPTION_YIQ_PHASE_COUNT option. "yiqp" was used for WINOPTION_YIQ_PVALUE and WINOPTION_YIQ_PHASE_COUNT. Removed redundant ";global_inputs" (windows\winmain.cpp) [Nathan Woods].
 - 0.180              : Added plugins\console\init.lua and plugin.json. Removed mame\console.cpp/h. Make console a LUA plugin (plugins\console). Further improve plugins\console completions by removing break chars from linenoise.cpp that hide the full type [Carl]. Do not take Ctrl-Z in linenoise.cpp since that have it's behavior defined for Linux. Exit on Ctrl-C in console without crashing [Miodrag Milanovic]. Changed window handle storage to template instead of void* [Brad Hughes].
 - 0.178              : Added osd\modules\monitor\monitor_win32.cpp.
 - 0.177              : Fixed UTF-16 encode, pass UTF-16 to Windows character drawing (unfortunately still no nice speaker icon) [Vas Crabb].
 - 0.175              : Changed osd\windows\windir.cpp to osd\modules\file\windir.cpp. Placed back old output system as module "-output windows" need more things cleaned (modules\output\win32_output.cpp/h and windows\ledutil.cpp) [Miodrag Milanovic].
 - 0.174              : Removed dead WM_USER_* events for which handling was causing crashes (windows\window.cpp). This fixed Windows debugger crashes on Win10 64-bit (see MT06217) [Paul Priest].
 - 0.173              : Added osd\modules\output\console.cpp, none.cpp and output_module.h. Removed osd\osdmini.lua, osdmini_cfg.lua, modules\sync\osdsync.cpp, osdmini\minidir.cpp, minimain.cpp, minimisc.cpp, minitime.cpp, osdmini.h, windows\ledutil.cpp and output.cpp/h. Removed OS dependant output handling and added none and console output providers. Moved osdsync to root of OSD and removed osdmini [Miodrag Milanovic]. Probably fixed the arcade only build (missing games smssgame and spartanxtec) [Fabio Priuli, Mamesick]. Implementation for Universal windows main app classes [Brad Hughes].
 - 0.172              : Removed osdmini\minifile.cpp. Moved winptty.cpp and winsocket.cpp to osd\modules\file\. Removing unused functions from winutf8.cpp. Also adding UWP implementations for Set/GetWindowText (windows\winutf8.cpp) [Brad Hughes].
 - 0.171              : Removed osd\osdmini\minisync.cpp. Fixed OSD Mini build issues (osd\osdmini.lua, osdmini_cfg.lua and minimisc.cpp) [Stuart Carnie].
 - 0.164              : Don't include BGFX in windows\video.c [Cowering].
 - 0.161              : Fixed leak in osd\windows\video.c [Miodrag Milanovic]. Fixed repetitive monitor updates. By design, MAME has an issue setting aspect correctly on monitor resolution changes. This needs to be addressed separately (osd\sdl\video.c and osd\windows\video.c) [Couriersud].
 - 0.160              : C++'d more of windows\video.c and windows\window.c [Couriersud].
 - 0.158              : Removed windows\winmisc.c. Fixed ThreadSanitizer data race warnings (osd\windows\winwork.c) [Oliver Stoeneberg].
 - 0.157              : Added macros for calculator button symbols, like eg. squareroot (util\unicode.h). Unicode combining accents go after the base character [hap].
 - 0.156              : Removed duplicated line of code (windows\winmain.c) [Oliver Stoeneberg].
 - 0.155              : Added bus\generic\carts.c/h, ram.c/h, rom.c/h and slot.c/h. Removed web\commands.html, confirmexit.html, confirmhardreset.html and confirmsoftreset.html. Device options have to be removed *before* the call of set_system_name (which sets the options of the new system), or the system is launched with no media options available! (emu\mame.c). Fixed crash in File Manager when selecting "Return to Previous Menu" from the softlist menu. Reducing differences in File Manager options when entering from softlist vs fullpath. Added generic cartslot / ROM socket slot device, which offers basic allocation and access handlers, and converted a few drivers to use this instead of code from cartslot.c. The RAM socket part is just a proof of concept, and the natural extension of the line of thought which lead meto this generic socket/cartslot. it might allow to convert current RAM device to be a slot device as well (after some refactorization, of course, since current code lacks many of the necessary features), or be removed soonish, depending on consensus. Generic cart slot conversions (machine\smpc.c, drivers\megatech.c, stv.c and includes\stv.h) [Fabio Priuli]. Updated to latest mongoose. Do web serving in main thread. Added support for LUA server pages. Reduced tagmap lookups. Allow pasting in text (web\mongoose.c) [Miodrag Milanovic]. Reduced tagmap lookups (emu\webengine.c) [Wilbert Pol]. WebUI: Clean up and fixed HTML compliance [R. Belmont].
 - 0.154              : Removed windows\multidef.h and sound.h. Moved osd\windows\debugwin.c to osd\modules\debugger\. Use the correct call to free memory in windows osd_close [smf]. Fixed a memory leak in webengine, after Firewave's suggestion [Fabio Priuli]. For windows auto is now same as D3D, till video part is redone (windows\video.c) [Miodrag Milanovic]. AvSetMmThreadCharacteristics and friends, this has been commented out since before 2007 (osd\windows\winmain.c) [hap].
 - 0.152              : Fixed D3D multimonitor support [GroovyMAME]. Fixed WM_SYSCOMMAND wparam (windows\window.c) [hap].
 - 0.151              : Removed web\driver.html, image.html, info.html, loadstate.html, logs.html, options.html and savestate.html. Added web\confirmexit.html, confirmhardreset.html and confirmsoftreset.html. Fixed hardcoded hostname and port in web\index.html. Fixed rendering issues on WebKit-based phones in portrait mode, added pause/unpause toggle (emu\webengine.c, web\commands.html and index.html). Added load and save states. Fixed web options reading from ini, improved load/save state UI. More UI improvements. Additional refactoring. Modernized JS usage, fixed several bugs. JS cleanup and fixed a few minor bugs [Firehawke]. Turn Windows multithreaded blit off by default: Shows gfx glitches in drivers with indexed palette otherwise. Added higher resolution icons for MAME/MESS (Windows). These were made available by JacKc a few months ago. I don't mean to imply that they are 'official', they may be replaced later [hap].
 - 0.150              : Removed obsolete define from osd\windows\windows.mak. Removed Visual Studio specific makefile define MAXOPT in favor of adding more generic define LTO (makefile and windows.mak) [Oliver Stoeneberg]. Initial commit of internal web server (web\mongoose.c), mostly to check compiling on various platforms. Added sample index page with menu (web\index.html, favicon.ico, images\logo-mame-small.png). Added json library and working example (web\json\autolink.h, config.h, features.h, forwards.h, json.h, json_batchallocator.h, json_internalarray.inl, json_internalmap.inl, json_tool.h, json_valueiterator.inl, reader.h, value.h and writer.h). Moved webengine into separate file, added callbacks for websockets and made example for triggering ui on driver change, also added json for game driver. Fixed compile with DEBUG=1 and detach do not remove, should fix server crash (emu\webengine.c). Display currently running driver and update on change on server side. Make it work on IE too. jquery mobile looks like better choice (web\js\jquery.js, jquery.mobile.js, css\jquery.mobile.css, images\ajax-loader.gif, icons-18-black.png, icons-18-white.png, icons-36-black.png and icons-36-white.png). Added screenshot option and serving it from webserver. Implemented first commands for web interface (web\commands.html). Fixed possible crash on exit (web\mongoose.c). Preps for slider work. Added sliders to settings page, and show current values (web\driver.html, image.html, info.html, logs.html and options.html). Some 5 min slider work, to make it affect settings [Miodrag Milanovic]. Commented out stray printf("%d, %d\n", config->width, config->height) (osd\windows\window.c) [Robbbert]. Fixed potential memory leak in win_open_ptty() (windows\winptty.c) [Oliver Stoeneberg].
 - 0.148u4            : Don't use osd_free on pointer allocated with malloc (osd\windows\winptty.c and winsocket.c). Fixed compile error in windows\winptty.c. Use GetLastError in windows\winsocket.c [Carl].
 - 0.148u2            : Windows OSD / stdout/stderr output buffering (osd\windows\winmain.c) [qmc2].
 - 0.147u2            : Removed redundant linking with dinput8.lib, it's conditionally added a few lines later (windows\windows.mak) [smf].
 - 0.147              : Values must be normalized (src\emu\clifront.c) [Miodrag Milanovic].
 - 0.146u5            : Removed redundant interlocked function wrappers from Windows code [Oliver Stoeneberg].
 - 0.146u4            : Fixed version check in windows.mak Allow "windowname" in win_create_window_ex_utf8() to be NULL to match behavior of CreateWindowEx() [Oliver Stoeneberg].
 - 0.146u1            : hap fixed sr(syncrefresh) clashed with emuopts sr(samplerate) (osd\windows\winmain.c).
 - 0.146              : Added osd\windows\mame.ico. MAME windows executable gets it's own icon. Fixed display of icon in windows [Miodrag Milanovic].
 - 0.145u8            : static is not needed anymore for latest tools (windows\windows.mak) [Miodrag Milanovic].
 - 0.145u1            : Added windows\winptty.c. Added windows implementation of pseudo TTY access functions over pipes [Carl].
 - 0.144u5            : Removed old C-based interface to astrings. astring exists only as a class now. Updated all stragglers (mostly tools) to use the class form [Aaron Giles].
 - 0.144u2            : Antonio Giner fixed MAME crashed on exit on 32-bit Windows XP (-video d3d).
 - 0.142u1            : Removed osd\windows\winalloc.c.
 - 0.141u1            : Display suggestions in case commands that require game name are called and there were no matching games [Miodrag Milanovic].
 - 0.140              : Aaron Giles added explicit control handler for the console. Ctrl+C/Ctrl+Break now explicitly terminate the process forcefully, rather than unwinding through the system in an unexpected state. Other console events (exit, shutdown, logoff) request a graceful exit. Aaron Giles fixed using CTRL-C to end MAME no longer works reliably.
 - 0.139u2            : Aaron Giles cleaned up internal profiler code.
 - 0.139              : Laszlo Schulteisz added notification of orientation of all monitors at startup via the output system (windows\winmain.c).
 - 0.138u1            : Correct stack walk by using UNICODE_POSTFIX and fixed some incorrect function declarations in osd\windows\winmain.c [Oliver Stoeneberg].
 - 0.137u4            : Oliver Stoeneberg removed some stray invalid code in start_profiler() (winmain.c).
 - 0.136u2            : Aaron Giles fixed bug that mistook a non-NULL token to mean that a device was started. Fixes -video ddraw issue. Exit from the unhandled exception filter cleanly now. Use SetErrorMode() to disable the appearance of dialog boxes when crashes occur [Aaron Giles].
 - 0.134u3            : Added osd\osdmini\minimain.c.
 - 0.134u1            : Rene Single made INI file order explicit via priorities.
 - 0.134              : MAMEUI uses input_seq_from_tokens() outside the context of a running emulation, so this code will crash if machine == NULL and the keycode was not a built in keycode. Changed this so that it will gracefully fail if machine == NULL [Nathan Woods].
 - 0.128u4            : Aaron Giles added template support to regrep. Changed output to not color the entire background of each cell. Switched to astrings and core_files internally.
 - 0.127u7            : Aaron Giles fixed all sets with using 2+ monitors: Crash to desktop on second play.
 - 0.126u3            : Oliver Stoenberg renamed video_exit() to winvideo_exit() for consistency in function names.
 - 0.124u2            : Oliver Stoenberg cleaned up the machine usage in the OSD/Windows files and added the running_machine parameter where possible. Aaron Giles fixed unicode crashing bug with input names.
 - 0.123u6            : Zsolt Vasvari fixed memory leak in clifront.c.
 - 0.123u1            : Moved src\osd\windows\verinfo.c to src\build\verinfo.c.
 - 0.122u7            : Aaron Giles reverted experimental D3D fix, since it breaks switchres.
 - 0.122u5            : Fixed winwork to use proper tchar functions for getenv [Aaron Giles]. Made INPs compatible between 64-bit MAME and 32-bit MAME [Chad].
 - 0.122u4            : Aaron Giles and Emuman fixed ALT+ENTER to switch to window mode with D3D.
 - 0.121u4            : Aaron Giles fixed accidentally included change that allowed MAME to run in windowed mode if switchres was off.
 - 0.121              : Aaron Giles reverted to old behavior where even with -switchres disabled, MAME will use exclusive mode when rendering with Direct3D. This means some of the switching to/from fullscreen mode problems will come back, but should prevent confusion over poor performance by default.
 - 0.120u1            : Aaron Giles added more instrumentation and added some extra paranoia to the winwork code.
 - 0.119u4            : Aaron Giles added new scalable lock implementation for Windows work functions that hopefully has better performance characteristics when scaling above 2 CPUs. Aaron Giles added statistics gathering code for Windows work functions. This is on by default for the moment to help point to problems that might be encountered with this version.
 - 0.119u1            : Aaron Giles experimentally changed full screen behavior when using Direct3D so that if -switchres is NOT enabled, then we don't create a fullscreen Direct3D device. This minimizes large graphics card transitions (in particular it does not disable glass in Vista) when you go full screen. If you want the old behavior, run with -switchres and specify a -resolution parameter equal to your desktop screen size.
 - 0.118u6            : Nathan Woods changed Windows message filtering to only apply to MAME game windows.
 - 0.118u4            : Aaron Giles changed verinfo code to parse the version.c file instead of relying on linking against version.o. This appears to fix the link ordering problem and also prevents it from being constantly regenerated on each build.
 - 0.118u3            : Added src\osd\windows\verinfo.c. Nathan Woods added build tool to extract version information and add it to the Windows version resource.
 - 0.118              : Aaron Giles changed windows builds so that all tools use the utf8_main entry point consistently.
 - 0.117u3            : Removed src\osd\windows\d3d_extra.h.
 - 0.117u1            : Aaron Giles added experimental new minimal game selection user interface. This interface can be accessed if MAME is started with no parameters, or via the main menu by choosing "Select a New Game". This interface allows you to select a game driver by typing in the name of the game. As you type, MAME's fuzzy name matching code will list the top 15 selections that match. The interface will only display games that it finds in your rompath. Changed behavior in the Windows build so that double-clicking on MAME brings up the new game selection interface.
 - 0.117              : Aaron Giles fixed winalloc.c to be thread-safe.
 - 0.116u2            : Oliver Stoeneberg fixed some unicode build issues in the Windows code.
 - 0.115u1            : Added windows\winutf8.c/h. Nathan Woods moved Win32 UTF-8 wrappers into a new module (winutf8.c), and added some new wrappers that Oliver Stoeneberg created for MAME32.
 - 0.115              : Nathan Woods updated Windows exit code to ensure cursor is shown again.
 - 0.114u4            : Aaron Giles moved the -verbose option into the core. Added new function mame_printf_verbose() which is governed by this option. Changed all existing verbose output to use the new functions.
 - 0.114u2            : Changed windows\config.c/h and fronthlp.c to emu\clifront.c/h. Aaron Giles moved frontend commands and command-line handling into a central, core-managed location clifront.c. This eliminates the need for windows\fronthlp.c and windows\config.c and should make creating command-line based ports much easier in the future.
 - 0.113u3            : Added src\lib\util\options.c/h. Nathan Woods refactored the options code into a new generic utility module options.c. Moved the MAME core options into a new module emuopts.c.
 - 0.113u2            : Nathan Woods created a UTF-8 wrapper for the Win32 API GetModuleFileName(). Aaron Giles added stronger priority boosting when sleeping on Windows in the hopes of getting more consistent frame rates.
 - 0.113u1            : Fixed Windows-isms in regrep.c [Couriersud, Aaron Giles]. Nathan Woods added a call winwindow_ui_exec_on_main_thread() to allow code on the window thread to cause a function to be executed on the main thread.
 - 0.113              : Added src\tools\regrep.c and runtest.cmd. Added tools to generate regression tests and mamedev.org-compatible reports. The report generator is cross-platform, but the test running code is Windows-only at the moment. BUT fixed bug where the window thread would stop processing events when MAME was paused. Defined several new exit codes for "unknown game" and "invalid config" and changed the Windows OSD layer to output them [Aaron Giles].
 - 0.112u1            : Added src\tools\tools.mak.
 - 0.111u5            : Added windows\winutil.c/h. Nathan Woods centralized some common Windows utility routines in new module winutil.c.
 - 0.111u3            : Removed src\osd_tool.h, windows\fileio.c, osd_tool.c and ticker.c. Added src\osdcore.h, src\osdmini\minidir.c, minifile.c,minimisc.c, minisync.c, minitime.c, miniwork.c, osd_cpu.h, osdmini.mak, windir.c, winfile.c, winmisc.c, winsync.c, wintime.c and winwork.c. Nathan Woods fixed several issues with the new Unicode support.
 - 0.111u2            : Added windows\main.c, strconv.c/h and src\unicode.c/h. Initial support for Unicode in the core and Windows OSD [Nathan Woods]: Text file reading/writing now automatically handle UTF-8 conversion. A number of Windows functions internally manage TCHARs. New Windows compile-time option UNICODE can be used to build MAME as a Unicode application (see windows.mak).
 - 0.111u1            : Nathan Woods converted some isolated parts of the Win32 OSD code to use 'TCHAR' strings rather than simple 'char' strings. Nathan Woods changed -createconfig to output the INI file using mame_file rather than FILE.
 - 0.110u5            : Minor Unicode changes for the Windows code [Nathan Woods].
 - 0.109              : Aaron Giles normalized exit codes from MAME.exe. The core-specific ones are defined in mame.h. The Windows build will also return code 100 on an unhandled exception now.
 - 0.108u5            : Nathan Woods fixed crash in Windows code if we are unable to create sound buffers (windows\sound.c).
 - 0.108u3            : Removed src\debug\window.c/h and m0813fnt.c.
 - 0.108u2            : Nathan Woods fixed several issues with pausing and the multithreading code.
 - 0.107u3            : Added src\windows\drawnone.c.
 - 0.106u12           : Rewrote windows.txt to reflect all of the new options and to update the behavior of existing options to match the current implementation [Aaron Giles].
 - 0.106u6            : Olivier Galibert fixed the DRC blitters better (windows\blit.c). Aaron Giles moved thread priority logic out of ticker.c and into winmain.c where it really belongs. Backed off of the multithreading for the moment in order to focus on getting the rest of the kinks out of the new renderer. All the infrastructure is still in place and can be re-enabled by flipping the ENABLE_THREADS flag in window.c.
 - 0.106u5            : WARNING [Aaron Giles]: Starting with this version, the MAME windows run on a separate thread. There may be issues relating to this, especially when running unthrottled. If you see any crashes or odd behavior under normal operation, be sure to report it to http://mametesters.org.
 - 0.106u3            : Aaron Giles reorganized fronthlp.c to be one step closer to universal. One more layer of abstraction and hopefully it will be able to move up into the core.
 - 0.106u1            : Nathan Woods converted the Windows blitters to use the DRC engine for generation. RGB effects are officially broken with this change.
 - 0.105u2            : Made "This game doesn't work" text more explicit [Olivier Galibert].
 - 0.105u1            : Olivier Galibert moved region and address space names out of the Windows-specific code and into more common locations.
 - 0.105              : NOTICE: The official Windows binaries are no longer compressed with UPX. This means that when you extract the files, the main MAME .EXE file will be much larger than you are used to. This is normal. The code has always been that big. Leaving it uncompressed will allow MAME to use less memory when run (ironically).
 - 0.104u7            : Wilbert Pol fixed window resizing bug when running in a window.
 - 0.104u5            : Rewrote winalloc to be more dynamic and to ignore memory leaks in the runtime [Aaron Giles].
 - 0.102u3            : Removed windows\dirty.h and snprintf.c.
 - 0.102u1            : Nathan Woods fixed output of mame.ini options that have spaces in them.
 - 0.99u4             : Aaron Giles removed -skip_disclaimer since it automatically goes away after the first time execution.
 - 0.99u3             : Aaron Giles removed the "Press any key" prompts when displaying ROM warnings. Instead, a warning about bad/missing ROMs is now displayed on the warnings screen. Details of the bad/missing ROMs are still printed to the console. Removed the following obsolete and/or redundant command line options from the Windows build: -wrongorientation, -wrongfps, -gamelist, -list, -listgames, -listdetails, -listwrongmerge, -listcpu, -listcpuclass, -listgamespersourcefile, -listnosound, -listnvram, -listpalettesize, -listromdistribution, -listromnumber, -listsound, -listdupcrc, -listsamdir, -listmd5, -listsha1, -verifysets, -vset, -vsam, -sortname, -sortdriver, -[no]clones, -crconly, -maxlogsize, -resamplefilter, -debug_resolution, -history_file and -mameinfo_file.
 - 0.98u3             : smf changed the windows code so the map file isn't loaded unless the profiler is enabled. This stops you running out of memory when the memory tracking is enabled.
 - 0.98u1             : Atari Ace removed usage of dirent.h APIs on Windows builds.
 - 0.97u5             : Added windows\multidef.h. Took another crack at fixing the compilation problems caused by using multi-monitor stubs on Windows [Krick].
 - 0.97u2             : Krick fixed Windows build so it works again on Windows 95.
 - 0.87u2             : Nathan Woods changed the stat() call to use Win32 equivalents (src\windows\fronthlp.c).
 - 0.87u1             : Brad Oliver removed options.color_depth (obsolete anyway) (src\mame.c).
 - 0.84u6             : Aaron Giles fixed enumeration of lightgun and joysticks in the Windows build. Joysticks now no longer show up unless you specify -joystick. And lightguns should work properly as absolute devices.
 - 0.83               : Nathan Woods added an optional definition for the S_ISDIR macro for when it is not present (src\windows\fronthlp.c).
 - 0.76u2             : Sebastien Volpe fixed Aspect Ratio calculationbug on some rotated games (galspnbl for example).
 - 0.76u1             : Window size/prescale/RGB-auto effect can now change when the image size is changed by the game driver [Leon van Rooij].
 - 0.75               : Nathan Woods moves config.c externs to a header file. Also adds another call, cli_rc_create(), which creates MAME's rc struct for use elsewhere. (I'm actually creating a debug time consistency check feature for MAME32, to verify at runtime that the arguments that MAME32 has are consistent with MAME's).
 - 0.71u2             : Nathan Woods moved helpfile name into a constant (windows\winmain.c).
 - 0.70u5             : Leon van Rooij changed message for Double Clicking on EXE slightly. Nathan Woods fixed a bug in visible area changing in windowed, non-stretch mode. Previously, when the visible area changed, the code would simply change the visible area, and look at the resulting window size and tweak it accordingly with win_adjust_window(). The problem with this is that if you have a sequence where the visible area is made larger, then smaller again, what would happen is you wouldn't get the original window size; you would simply get the enlarged window with a bunch of buffer area. Now instead of calling win_adjust_window(), I added code that preserves the "scale" factors, and the space between the emulation rectangle and the window client area. Added a call win_ddraw_fullscreen_margins() that given the dwWidth and dwHeight parameters of a DirectDraw surface, comes up with a RECT that represents the margins. For MAME, this is a very simple operation (a rectangle from (0,0)-(dwWidth,dwHeight)) (and the implementation that I've submitted is corrspondingly simple), but in MESS the window can have a menu bar so this operation works differently. I've also modified winddraw.c and wind3d.c to use this call.
 - 0.70u3             : Message Box prompting the user to read windows.txt if MAME.EXE is double clicked on instead of being run from the command line [Leon van Rooij]. Note, this still needs testing on Win9x, it works as expected on 2000/XP, if it creates new problems it might not be included.
 - 0.69b              : Chris Kirmse fixed a problem in snprintf.c printing out floats with fractional partswith leading zeroes.
 - 31st May       2003: Chris Kirmse fixed a bug in the internal snprintf function that caused wrong output with some fractional numbers.
 - 0.69               : Added windows\wind3dfx.c/h, d3d_extra.h and pattern.h. Fixed a potential crash that could occur if the last line in an INI file was not terminated with a CRLF. Added osd_rc_write(); which does the reverse as osd_rc_read() (this is only used in the MESS Win32 port) (windows\rc.c). Added corresponding _msize implementation (this fixes a benign but very subtle bug when debugging with VC) (windows\winalloc.c). Minor tweaks within #ifdef MESS (windows\fronthlp.c). Put CLIB_DECL in front of a few declarations (windows\winalloc.c + winmain.c) [Nathan Woods].
 - 28th March     2003: Nathan Woods further fixed the bug fix for switching between windowed and fullscreen modes and he enhanced the Win32 blitter to use SSE instructions if available.
 - 20th March     2003: Nathan Woods fixed a bug that caused wrong colors when switching between windowed and full screen modes sometimes.
 - 0.63               : The diff, snap, cfg, NVRAM, etc. directories are created automatically if they don't exist the first time MAME tries to create a file there [Aaron Giles].
 - 0.62               : Added windows\input.h.
 - 13th October   2002: Aaron Giles attempted fixing the flickering window borders seen in the full screen mode under WinXP when using flashy desktop themes, however the fix has not been confirmed yet.
 - 0.61               : Removed windows\ticker.h. The Windows version now rotates the screen at blit time instead of requiring the core to do so. Since the new code is usually faster than the old one, and it allows for great simplifications in the core, rotation at blit time will probably be a requirement in next release. Porters are advised to begin implementing it now [Aaron Giles].
 - 27th May       2002: Bernd Wiebelt added support for multiple ini-directories to the Windows version.
 - 23rd May       2002: Nathan Woods fixed a crash in the command line parameters.
 - 0.59               : Added windows\asmtile.asm. MMX implementation of the tilemap drawing code, providing a 5-10% speed increase with some games [Andrea Mazzoleni].
 - 0.58               : New blitting effect "-effect sharp". This gives a sharper image than the default [Aaron Giles].
 - 26th January   2002: Aaron Giles added the "sharpness" filter effect.
 - 17th January   2002: Bryan McPhail fixed some of the Win32 port files to make them compile with Visual C.
 - 0.57               : Added windows\winalloc.c.
 - 24th October   2001: Aaron also added a debugging feature to help tracing the crashes.
 - 23rd October   2001: Aaron Giles added a debugging feature to the Windows version which allows catching of some memory access bugs.
 -  4th September 2001: Mathis Rosenhauer converted all vector games to use the direct RGB modes.
 -  3rd September 2001: Mathis Rosenhauer added support for direct RGB modes in the vector graphics functions.
 - 0.53               : The Windows port is now called "MAME" (instead of "MAMEW"). CLI improvements: Config option for steadykey (default: OFF). Parse debug.ini in debug builds. MAMEW \anywhere\roms\pacman.zip works. Improved -log option. MAME will now parse argv[0].ini instead of mame.ini. i.e. if the MAME executable is called "m37b17.exe" it will parse m37b17.ini instead of mame.ini [Paul Priest, Bernd Wiebelt].
 -  9th August    2001: Aaron Giles fixed a bug in scanline drawing.
 - 31st July      2001: Aaron Giles fixed the Windows 95 problem again.
 - 30th July      2001: Bernd Wiebelt fixed directory names with spaces in mame.ini, though you still need to wrap the directory with quotation marks.
 - 29th July      2001: Bernd Wiebelt integrated Paul Priest's steadykey config option and fixed a few other command line interface bugs.
 - 20th July      2001: Aaron Giles hopefully fixed the Windows 95 problem for good, and cleaned up the Win32 code.
 -  3rd July      2001: Olivier Galibert fixed a Win32 version bug with direct color modes.
 -  1st July      2001: Aaron Giles added a few new vertical scanlines and RGB blitters designed by Paul Priest.
 - 29th June      2001: Bernd Wiebelt fixed -playback command line parameter in the Win32 version.
 - 28th June      2001: Aaron Giles fixed the new blitters to handle single-pixel edge cases properly.
 - 27th June      2001: Aaron Giles adjusted the auto resolution selection for the new blitters.
 - 24th June      2001: Aaron Giles added RGB blitter effects to the Win32 version from AdvanceMAME.
 - 24th June      2001: Bernd Wiebelt sent in an update to the command line functions, cleaning up and fixing a few things.
 - 16th June      2001: Aaron Giles rewrote the blitters in Win32 version, making it easier to add special effects.
 - 31st May       2001: Aaron Giles (hopefully) fixed the Windows NT sound crash in the Win32 version.
 - 26th May       2001: Aaron Giles added support for more analog axes and POV hats in the Win32 version, and he fixed the ghost GUI problem in scanline modes.
 - 0.37b15            : The main binary distribution of MAME is now a completely new Win32 console port. Some of the benefits are: support for full screen hardware stretching (if you have a decent video card), and a much better command line / options file parsing (ported from xmame). To create the mame.ini configuration file on startup, use the -createconfig option. -showusage lists all available options [Aaron Giles, Bernd Wiebelt].
 -  9th May       2001: Aaron Giles fixed a few more problems in the Win32 version.
 -  8th May       2001: Aaron Giles fixed some graphics problems with the Win32 version.
 -  7th May       2001: Aaron Giles sent in yet another Win32 version update.
 -  5th May       2001: Aaron Giles updated the Win32 version yet again, fixing a lot of things.
 -  1st May       2001: Aaron Giles fixed a small interface bug in the Win32 version, and added better support for non-standard aspect ratios.
 - 30th April     2001: Bernd Wiebelt updated the Win32 version's config routines. Aaron Giles sent in another Win32 version update with some cleanups and bugfixes.
 - 27th April     2001: Aaron Giles fixed yet more crashes on the Win32 version.
 - 26th April     2001: Aaron Giles fixed several crashes that happened on the Win32 version, and he improved the new Win32 port as well. Dave Haywood also fixed Gunnail from crashing in the Win32 version.
 - 25th April     2001: Aaron Giles re-ported MAME to Win32 console with freely available tools, features including hardware stretching if available.



 2.2  MAME 64-bit

 - 0.153              : Fixed the SSE2 versions of the RGB utility functions (video\rgbsse.h, rgbutil.c and rgbvmx.h), which are currently only used by 64-bit builds. This fixed all screenshots from 64-bit builds have off-by-1 color errors and incorrect alpha (green boxes around trees) in Mt. Shasta stage in California Speed [Alex Jackson]. NamcoSystem22 doesn't mind if it's done this way (video\rgbgen.h, rgbsse.h, rgbutil.c and rgbvmx.h) [hap].
 - 0.144u7            : Fixed 64-bit GCC compile [O. Galibert].
 - 0.141              : General stability issues with 64-bit builds fixed for cybertnk.c [David Haywood].
 - 0.136u1            : Fixed controller input not functional in 64bit version.
 - 0.136              : Aaron Giles explicitly sign-extend 32-bit indexes for load/loads/store on 64-bit machines to prevent overflow issues. Fixes DRC crash in 'Magical Tetris Challenge'.
 - 0.134u1            : Rene Single made INI file order explicit via priorities. "=A" inline assembly seems to be only supported on 32bit GCC. Provide a 64bit safe version of _get_profile_ticks [Couriersud].
 - 0.131u2            : smf fixed cpu\vtlb.c 64 bit warning: 64bit vs compile warnings.
 - 0.129u3            : Phil Bennett fixed 64-bit build fails (machine\balsente.c).
 - 0.127u7            : Aaron Giles fixed 64 bit build fails.
 - 0.127u3            : Aaron Giles fixed 64 bit compiling error.
 - 0.126              : Nuapete fixed possible 64-bit crash/hang with survival.
 - 0.124u3            : Aaron Giles fixed access violation in 64 bit build when exiting a game.
 - 0.122u5            : Made INPs compatible between 64-bit MAME and 32-bit MAME [Chad]. Aaron Giles added code to debug 64-bit builds to allocate all address space below 4GB to help find 64-bit errors. Added environment variable OSDDEBUGMALLOC which, if set, explicitly overrides the debug malloc debug settings. Added environment variable OSDDEBUG4GB which, if set, explicitly overrides the new 64-bit address space allocations (sadly this is necessary due to some D3D drivers being 64-bit unclean....).
 - 0.122u3            : R. Belmont fixed various 64-bit GCC warnings. Oliver Stoeneberg and Aaron Giles fixed several UNICODE=1 issues in the debugger. Changed the Windows build process to always enable UNICODE=1 for 64-bit builds.
 - 0.121u2            : Remoned src\osd\windows\mamex64.rc and mamex64.man.
 - 0.120u3            : Vas Crabb cleaned up the inline assembly for both x86 and PPC, enabled the mul32 family assembly stuff on 32-bit x86, and fixed some compiler warnings on 64-bit GCC. In addition: * Provided single-precision reciprocal approximation code for PowerPC and x86 with SSE2. * Filled in all other TBD functions in eigccx86.h for completeness. * Conditionalised some code in eigccppc.h so that it isn't used when the compiler has 64-bit instructions available.
 - 0.120              : Atari Ace fixed a few pointer truncation bugs in the Windows 64-bit code. Enabled warnings for 64-bit pointer truncations. Merged the x86 and x64 manifests.
 - 0.118u4            : Aaron Giles significantly improved the i386 disassembler. Changed it so that it no longer outputs 'byte ptr' except for ambiguous cases. Updated for full 64-bit disassembly support. Added support for the full IA32 opcode matrix as specified by recent Intel manuals, including all SSE opcodes and variants.
 - 0.118              : Oliver Stoeneberg fixed some more 64-bit warnings and unused functions.
 - 0.117u3            : Aaron Giles fixed a few more 64-bit build errors.
 - 0.117u2            : Aaron Giles fixed a number of 64-bit compiler warnings.
 - 0.116u4            : x64 compilation fixes [Oliver Stoeneberg]: Some VS2005 x64 warning fixes. Enables the x64 porting warnings in VS2005. Adds win_create_window_ex_utf8() to get rid of some tstring_from_utf8() usage. Removed win_extract_icon_utf8().
 - 0.112u1            : Ville Linde fixed uninitialized use of video_dma_address to address the Raiden Fighters Jet crash in 64-bit builds.
 - 0.111u1            : Alex Jackson fixed the core's compile-time self-configuration (m68000 core) so that it uses the same code paths on LP64 platforms (64-bit Linux, etc.) as on LLP64 (64-bit Windows) and 32-bit platforms.
 - 0.106u6            : Minor fix for x64 compilation support with MSVC [Malice].
 - 0.106u5            : Added src\windows\mamex64.rc and mamex64.man. Fixed windows.mak to support 64-bit builds [Malice].
 - 0.105u5            : Aaron Giles added preliminary support for 64-bit targets. A new makefile define PTR64 should be set if you are compiling for a 64-bit target. This propogates a PTR64 define into the C files as well. Made the makefile smart enough to auto-disable the drc cores for 64-bit, and removed most of the roadblocks to a 64-bit build, apart from the assembly blitters, which are currently undergoing a rewrite.
 - 0.93u1             : R. Belmont fixed Itech32 64-bit crash (src\vidhrdw\itech32.c).
 - 0.91u1             : R. Belmont fixed SFTM on 64-bit builds/systems.
 - 0.90               : R. Belmont fixed itech32 driver crash on AMD64 CPUs.
 - 0.89u5             : IremGA20 64-bit crash fix [Stephen Behling].
 - 0.88u3             : Various fixes to prevent crashes in X86-64 compiles [Hans de Goede].
 - 0.88               : Memory system changes / fixes [Aaron Giles]. Added explicit casting to the memory handler width when computing the shifted data/mask values for read/write handlers -- this should in theory fix R. Belmont's 64-bit issues.
 - 0.85               : Nicola Salmoria fixed debugger memory access for 64-bit CPUs.
 - 0.81u4             : Aaron Giles support OSD 'NO EXECUTE'. This patch introduces two new OSD functions: osd_alloc_executable() and osd_free_executable(). For most platforms, these can just map to malloc and free. However, starting with WinXP SP2, if you are running on a processor that supports the NO_EXECUTE bit (currently only 64-bit AMD chips), standard user-mode memory allocations won't allow you to put code in them and execute it. Since this is exactly what x86drc.c does, I've added the two functions above. On Windows, these map to calling VirtualAlloc and VirtualFree, which allow you to specify the read/write/execute states of the pages thus allocated.



 2.3  MAMEUI32

 - 0.187              : 32-bit release builds need /bigobj (scripts\genie.lua) [Vas Crabb].
 - 0.180              : 32 bit windows monitor module fix (monitor\monitor_win32.cpp) [Brad Hughes].
 - 0.175              : Added WINAPI to other needed functions for stdcall calling convention on 32-bit (font\font_dwrite.cpp, input\input_xinput.h, d3d\d3dhlsl.h and drawd3d.cpp).
 - 0.150              : Multisession bug fix for Exidy 440 audio [Osso].
 - 0.141u1            : Build vconv in all circumstances as part of Win32 build. Always use GCC to build vconv. Added missing extern "C" to intrinsic definitions. Change vconv to call link.exe instead of lib.exe for libraries [Aaron Giles].
 - 0.134u1            : Rene Single made INI file order explicit via priorities.
 - 0.113u2            : Nathan Woods created a UTF-8 wrapper for the Win32 API GetModuleFileName(). Nathan Woods created a utility call win_is_gui_application() to determine if the current process is a console or a non-console application. Added a call to direct error output to message boxes if MAME is running as a windows application (such as MAME32). This will allow MAME32 failures to be reported to the user rather than silently fail.
 - 0.90u1             : Taken out the resource file from the windows objs when UI=1 (for MAME32) [Chris Kirmse].
 - 0.86               : Chris Kirmse fixed some Multisession Win32 bugs.
 - 0.79               : Multiple Session fixes (for Mame32 etc.) [Nathan Woods].
 - 22nd June      2003: Nathan Woods fixed some slight problems with Direct3D fullscreen usage and Windows menus.
 - 22nd April     2001: Bart Puype fixed Major Havoc from crashing in MAME32.
 -  9th April     2001: Ben Bruscella fixed some MAME32 compilation bugs.
 -  8th April     2001: Bart Puype submitted a few fixes to occasional MAME32 crashes.
 -  6th April     2001: Aaron Giles fixed a bug in Hydra and Pit Fighter, which caused crashes in MAME32.
 - 15th February  2001: Quench fixed a Twin Cobra driver compilation bug that affected MAME32.
 - 0.28               : Removed src\win32\directdraw.c/h, dirent.h, strings.h and win32.c/h.
 - 0.27               : Added src\win32\directdraw.c/h, dirent.h, strings.h and win32.c/h. Christopher Kirmse ported MAME to Win32. It compiles from the same source tree as the DOS version; to compile using Visual C++ 5, just do nmake -fmakefile.w32 To build mame32.exe, you also need the SEAL audio library for win32.



 2.4  Windows XP/Vista/7/8/10

 - 0.172              : Build project for Windows Store [Brad Hughes].
 - 0.163              : Added skeleton support for Windows Phone and Windows Store - far from working [Miodrag Milanovic].
 - 0.131              : Derrick Renaud fixed verbose output of RAW device names for XP.
 - 0.111u4            : Aaron Giles removed Vista build hacks from windows.mak as they are no longer necessary.
 - 12th January   2007: Aaron Giles - I've worked my way through the remining MinGW build issues. Below is a summary of the issues and steps for working around all of them. Turns out only one of the bugs is an actual MinGW bug. The rest have to do with other parts of the environment. The first problem I encountered was that the built-in paths within the MinGW environment were no longer working. This is an actual MinGW bug that has been tracked down to a change in the way the Microsoft standard C libraries handle invalid parameters. Older versions of the DLL would not check invalid parameters and go down potentially untested code paths with them. The versions in Vista do stricter parameter checking. Some calls made by the MinGW tools pass invalid parameters to one of the functions and fail, causing the internal paths to quit working. The symptom of this problem is that you can't run GCC because it can't find some of its subcomponents in the internal paths. Furthermore, even if you work around that issue, GCC can't find the standard include paths when compiling, nor can it find the standard lib paths when linking. To fix this, I updated the MAME makefile a while back with some hacks, but it turns out that a simple environment variable change will solve the real problem. However, neither solution solves the search path problem, so you must also configure your PATH variable to include the mingw\libexec\gcc\mingw32\3.4.2 path in your build tools. In summary: Fix #1: Set the environment variable GCC_EXEC_PREFIX to point to the root of your MinGW install. Fix #2: Add %GCC_EXEC_PREFIX%\libexec\gcc\mingw32\3.4.2 to your search PATH. Edit: I got a response from someone who said this didn't work. Turns out that GCC_EXEC_PREFIX only works if it points to a directory immediately off the root of your hard disk for some reason. So c:\mingw works fine, but c:\tools\mingw won't. You may have to alter the locations of your MinGW directory to make this work. The second problem I encountered is that I would often see *Cannot fork* errors during the build. I originally thought these errors were coming from the make utility, but eventually I determined that it was the sh.exe that was the problem. See, when make launches subprocesses to run its commands, it needs a command-line shell environment to run them in, in case the commands redirect output (since that requires support of a shell). By default, GNU make under Windows will look for sh.exe and use that to launch commands. If sh.exe isn't present, then it will create a batch file and use cmd.exe, which is the Windows shell. As an experiment, I went ahead and deleted the copy of sh.exe in the mingw/bin directory and sure enough, things started working again without errors. But I wasn't quite done yet. On my new C2D machine, I wanted to take advantage of both cores by compiling with the -j 2 option. Unfortunately, make doesn't support the -j option when using batch files and cmd.exe. So I needed sh.exe, but obviously couldn't stick with the one I had. I tried the one from both msys and cygwin, and neither of them worked as-is in the MinGW environment. So then I thought, well, all sh.exe is required to do is run the specified command. I already wrote a tool similar to that for builing with the Visual Studio compilers. So I adopted vconv.c into a sh.c, which is a new, minimal sh.exe implementation that works and allows multi-threaded builds. So, Fix #3: Replace the sh.exe in mingw/bin with the version here (http://aarongiles.com/sh.zip). And that's it! So really it comes down to 2 bugs: one in MinGW caused by stricter parameter checking, and one in the ancient version of sh.exe that I was including with the build environment.
 -  3rd January   2007: Aaron Giles - As several folks have pointed out, yes I'm running Vista on my laptop. Overall, I have to say it runs pretty well, but then again, I have a decent machine (2GHz Pentium-M, 2GB RAM, ATI Mobility Radeon 9600). There are a few definite improvements that have been nice to have. For example, the video driver now properly detects when I plug/unplug my second monitor, and adds/removes the second half of the display automatically now. You can also now shift-right click on any file or folder in Explorer and there is a new "Copy as Path" option, which is very useful when you are switching between GUI navigation and command-line windows. Most everything I've run on it seems to work fine, even the stuff it warns you about. The newly redone games are quite nice (yes, even Minesweeper got a nice rewrite  ) And MAME itself runs as well as it did under XP, no problems there (whew!). On the flip side, I have run into some issues, especially with regards to building MAME. Mingw and Vista don't get along very well, which is unfortunate. The handling of built-in paths (i.e., includes pointing to GCC libraries, paths, etc) is completely broken, meaning you have to explicitly specify them when you build. I've already done some workarounds in the windows.mak file to sort of get things limping. If you set the environment variable VISTA_MINGW_ROOT to point to your MinGW folder, it triggers some of the additional paths to be explicitly added to the command line. It's a pretty ugly hack, however and doesn't work 100% unless you're using the MSVC tools (which is good enough for my development, at least  ). I've brought this up with the MinGW-developer group, and it appears that the Vista version of the standard C library is much stricter about proper parameters, and will return errors in many cases that used to "work" due to invalid parameters. A somewhat more annoying problem is that the MinGW make utility will randomly fail with a "Cannot fork" error during a build. This error is completely random; if you re-run the make it will often succeed on the files that failed. My suspicion is that there is some sort of objection to the fork process, which is a little unnatural under Windows, and requires creating an empty process and poking data into memory - which looks a lot like a malicious program trying to modify another application. I've taken to using the -i parameter with make, which ignores errors and keeps making. Then I run make several times in a row. By about the 5th time, all the files tend to be built. I haven't found a good workaround to this one yet, unfortunately. It's been reported, but I haven't heard any reported solutions from the MinGW folks at this time. Both of these issues are annoying, so if you wish to develop with MAME, I would recommend holding off on a Vista upgrade until they are fixed. Or (shameless plug) you can install a beta version of Virtual PC 2007 (http://microsoft.com/virtualpc), install Windows XP, and run your development environment in there. It's kind of a heavyweight approach, though and requires a copy of XP to play with. And finally, there is one issue I have run into that just really gets my goat. With the new user access control, some bright bulb decided that any .EXE file with the phrase "setup" or "patch" in its name required authorization to run. Sadly, this means that patch.exe, which you might recall is pretty commonly used in MAME development, pops up an authorization dialog every time you try to use it. The workaround is easy enough: rename patch.exe to undiff.exe and it works fine. Or just turn off the user access control. But still, it's pretty awful. You might think with all the problems I would give up, but for the most part, it works pretty well. Heck, I even kind of like the aero glass theme and the animations. It's also pretty cool to run MAME in a window and then use flip-3D to switch apps and watch MAME run live in that mode. And well, somebody has to be the squeaky wheel that points out the issues. There's still a few weeks left before broad availability, so who knows, maybe these things will get solved before most people will really be affected.



 2.5  DOS

 - 26th January   2003: smf fixed some blitter bugs in the DOS version and added aspect ratio support.
 - 25th January   2003: Stephane Humbert fixed some small things in yesterday's DECO16 update to make it compile in DOS.
 -  3rd December  2002: smf fixed another few bugs related to hard disk verifying.
 -  2nd December  2002: smf fixed various bugs in the DOS version that occurred when running in pure DOS mode, and he improved the hard disk MD5 verifying.
 - 29th November  2002: smf fixed some memory leaks in the DOS version.
 - 28th November  2002: smf added some extra error checks to the file I/O functions in the DOS version.
 - 24th November  2002: smf added ctrlr.ini support to the DOS version.
 - 23rd November  2002: smf fixed the path handling also in the DOS version.
 - 19th November  2002: smf updated his GCC 3.2 install instructions.
 - 16th November  2002: smf did a GCC 3.2 compiler package for DOS.
 - 14th November  2002: smf fixed some compile problems that happened with GCC 3.2.
 - 31st October   2002: smf added HD image support to the DOS version.
 - 26th October   2002: smf added support for 24bpp graphics modes to the DOS version.
 - 17th October   2002: smf updated the DOS version of MAME, adding a -createconfig parameter and improving various other things.
 -  7th October   2002: smf added vertical scanlines and a lot of configuration options to the DOS version of MAME.
 - 23rd September 2002: smf sent in another update to the DOS version of MAME, with support for reducing the number of colors for 8-bit graphics modes.
 -  3rd September 2002: smf sent in a major update to the DOS version.
 - 21st August    2002: Andre Cotrim submitted driver-specific config support for the DOS version.
 - 11th June      2002: smf sent in an update to the DOS version.
 -  3rd June      2002: smf submitted a major patch to the DOS version, bringing it up to date with the core changes.
 - 15th May       2002: Lawrence Gold sent a few patches that fix warnings with GCC 3.1.
 - 0.61               : Removed msdos\asmblit.asm, ati15khz.c/h, blit.c, config.c, dirty.h, fileio.c, fronthlp.c, gen15khz.c/h, input.c, mamalleg.h, monitors.h, msdos.c, msdos.mak, osd_cpu.h, osinline.h, sound.c, ticker.c/h, twkuser.c/h, vgafreq.h and video.c.
 - 0.60               : osd_opl_control() and osd_opl_write() removed; direct access to the SoundBlaster OPL chip is no longer useful.
 - 0.53               : The DOS port is now called "DMAME". Support for C64/Atari/Sinclair joysticks connected via DB9 or Turbografix interface [Aley Keprt].
 - 0.37b14            : The keyboard special handling introduced in the previous beta, which makes it easier to register two- or three-button presses, is now optional. By default it's off; to turn it on, use -steadykey [Mike Coates].
 - 0.37b13            : Added a workaround for the slow PC keyboard interface. This makes it easier to accomplish special moves that require two or three keys pressed at the same time, but delays response by at least one frame. The change doesn't affect josyticks and keypads connected through the game or USB ports [Nicola Salmoria].
 - 0.37b12            : [DOS] Now compiled with Allegro WIP 3.9.34, this fixes problems with the Sidewinder gamepad. GNU Binutils 2.9.5.1 might also be needed to compile. The "resamplefilter" option can be used to turn the filtering off [Andrea Mazzoleni].
 - 0.37b4             : [DOS] The SEAL patch was bugged on mono sound cards, a new one is included.
 - 0.36               : [DOS] Compiled with Allegro WIP 3.9.32. You MUST use this version (or later), previous ones had bugs causing incorrect behaviour and crashes. DOS -hotrodse selects a more appropriate button configuration when NeoGeo games are played [Paolo Fiorani].
 - 0.36RC2            : [DOS] Modified the SEAL audio library so it outputs real 16-bit samples instead of truncating the least significant 8 bits [Jarek Burczynski].
 - 0.36RC1            : Added msdos\ticker.c/h. DOS Compiled with Allegro WIP 3.9.31.
 - 0.36b16            : Added msdos\asmblit.asm. DOS MMX optimized video blitting functions [Bernd Wiebelt].
 - 0.36b9             : [DOS] Now compiled with Allegro 3.9.27 WIP.
 - 0.36b7             : Now compiled with Allegro 3.9.26 WIP. The new Allegro library supports the Gravis GrIP devices, use -joy grip or -joy grip4 to enable.
 - 0.36b4             : Changed the tweked VGA modes definitions to be more compatible. It is suggested to delete mame.cfg to get rid of the obsolete tweak parameters. Remember to set tweak = yes after doing so [Brian Lewis].
 - 0.36b2             : -noym3812opl is now the default (this won't have effect unless you delete mame.cfg) [Nicola Salmoria].
 - 0.36b1             : Added msdos\mamalleg.h. Compiled with Allegro WIP 3.9.23. IMPORTANT: There is a bug in Allegro's new keyboard hangling, which will prevent numeric pad keys from working properly when used together with ctrl and alt. Until it is fixed in the main Allegro distribution, you will have to replace the source file allegro\src\misc\pckeys.c with the provided one, and recompile Allegro [Nicola Salmoria]. DOS: The new Allegro provides support for PSX and N64 pads (info here: http://www.debaser.force9.co.uk/ccmame), Gravis GrIP devices, Wingman Warrior and IF-SEGA (Saturn joystick I/F card available in Japan). The names for the -joy parameter are psxlpt1, psxlpt2, psxlpt3, n64lpt1, n64lpt2, n64lpt3, grip, grip4, wingwarrior, segaisa and segapci [Nicola Salmoria]. Triple buffer support in tweaked VGA modes. Warning: This is slower than standard tweaked modes [Brian Lewis]. If you are using a HotRod, use the -hotrod switch to adjust the default keyboard settings [Nicola Salmoria].
 - 0.35RC1            : Added src\msdos\ati15khz.c/h, gen15khz.c/h and monitors.h. New video modes from CabMAME: Low scanrate modes for connection to NTSC/PAL and arcade monitors. -monitor NNNN selects the monitor type: "standard" (default), "ntsc", "pal", "arcade". -centerx N and -centery N each take a signed value (-8 to 8 for centerx, -16 to 16 for centery) and let you shift the low scanrate modes around. -waitinterlace forces update of both odd and even fields of an interlaced display for each game loop [Brian Lewis]. Since there are now many tweaked VGA modes which may have compatibility problems with some video cards / monitors, they are now off by default. By default, VESA is used; the -vesa command line switch is no longer used. Instead, there is a -tweak switch which enables the VGA tweaked modes [Nicola Salmoria]. New tweaked VGA modes: 384x240 (for CPS1, Pang etc.), 384x256 (for Lode Runner etc.), 336x240 (for Gauntlet and other Atari games), 320x240 (for NeoGeo and others). They are used automatically, if your video card/monitor can't handle them, use -notweak (or try adjusting the parameters in mame.cfg if you know what you are doing) [Brian Lewis, Andrea Mazzoleni]. Removed the -nodouble command line option. Use -nostretch instead. If you are updating from an earlier beta, make sure to delete mame.cfg (or manually update it) otherwise stretch will be disabled [Nicola Salmoria].
 - 0.35b13            : Enabled again the -triplebuffer option, and triple buffering is disabled by default. Remember that -triplebuffer disables -vsync, so if you absolutely want to use -vsync in VESA modes, don't use -triplebuffer [Nicola Salmoria]. DOS -stretch 1024x768 can be used with Sichuan II and Golden Star [Nicola Salmoria].
 - 0.35b12            : All flickering problems with triple buffering should now be solved, so it's now always ON. Let me know if you have problems with it, and I'll add back an option to disable it. vsync and waitvsync are automatically disabled, so you can leave them enabled - they will only be used in tweaked VGA modes or if your video card doesn't have enough RAM to do triple buffering [Nicola Salmoria].
 - 0.35b11            : Rough triple buffering support in VESA modes. You can turn it on with the -triplebuffer switch. It is not guaranteed to work well, but if it does, it offers results similar to -waitvsync but without the performance drop. Do NOT use it together with -vsync or -waitvsync [Nicola Salmoria].
 - 0.35b10            : Fixed severe slowdowns when 16-bit audio was selected [Nicola Salmoria]. The parameters which control tweaked VGA modes can be changed by editing mame.cfg, so they can be fine tuned to match each particular video card/monitor combination (these are non standard modes so they can't be made to work in the same way on all setups). If you want to try that (warning: only experienced users should try) make sure to read vgatweak.txt [Valerio Verrando].
 - 0.35b9             : New tweaked 256x256 VGA modes (both scanlines and noscanlines) stretched to fill the screen. They are automatically used for horizontal games, and are preferable to the -stretch option since they are faster. You might have to adjust your monitor settings to make them properly centered and fill the screen (use the border displayed on startup as a guideline) [Valerio Verrando].
 - 0.35b4             : Now compiled using Allegro 3.11. Unfortunately, contrary to what I had been promised, allegro.h provided with the library still fails to compile with MAME, so a fixed one is included. New -quadra and -triple video options. They are slower than the others, but provide interesting features. With -quadra the screen is quadrupled horizontally and tripled vertically, so a 256x256 game fits perfectly in a 1024x768 screen. -triple triples horizontally and doubles vertically, so it's perfect for Moon Patrol [ole00@usa.net].
 - 0.35b1             : Widened the frameskip range. It now is 0-11, meaning the number of frames to skip out of 12. For example, if the game normally runs at 60 fps, "-frameskip 2" will make it run at 50 fps, and "-frameskip 6" at 30 fps. Also, if a frame takes more than the allotted time to display, the lost time can be recovered in the following frames. Moreover, improved the way audio streams are handled, so they stay more in sync with the video. There should never be any more audio breakups EVER (as long as your system can keep the game running at 100% speed). All of these changes together mean that it is now possible to run at much higher frame rates than before (if your system is fast enough) [Nicola Salmoria]. Implemented auto frameskip. It dynamically adjusts the frameskip setting to display the maximum possible frames without dropping below 100% speed. It is on by default; to turn it off, specify an explicit frameskip value, e.g. "-frameskip 0". Autoframeskip only works well if your machine is fast enough to run the game at 100% speed. If it isn't, you had better use a fixed frameskip. NOTE: you must delete mame.cfg (or manually change the line "frameskip = 0" to "frameskip = auto") for the auto frameskip to become the default [Nicola Salmoria]. "vmame" modes 320x480 and 400x600, which speed up scanlined VESA modes for some games and graphic cards which support these resolutions. Currently, these modes will not be autodetected, that is, the commandline options "-320x480" or "-400x600" have to be used [Nicola Salmoria, Michael Cunanan]. Joysticks are now selected by a symbolic name (e.g. "-joystick wingex" for Wingman Extreme) instead of a number. For the list of names, look into readme.txt. Numbers are still supported, but may not be in future releases. SNES gamepads on parallel ports are supported now, provided you have some additional hardware (the "official" Snespad-Support site is http://snespad.emulationworld.com) [Bernd Wiebelt]. For cosmetical reasons, added support for VESA3, which can be selected by putting "vesamode=vesa3" into mame.cfg. It is highly unlikely that you'll get any speed improvement [Bernd Wiebelt]. Now compiled with Allegro 3.1. Unfortunately the standard allegro.h doesn't compile with the pedantic compiler setup we are using, you'll have to use the provided fixed version instead [Bernd Wiebelt].
 - 0.34b8             : Stereo sound support. It is a little slower than mono, to turn it off use -nostereo. Stereo is enabled only for YM2610 and YM2151 games. The others always use mono. Now using a new beta version of the SEAL audio library which further improves the dynamic range. You'll notice louder and better balanced sound in many games. Let me know about games with bad balance [Nicola Salmoria].
 - 0.34b7             : Now using a beta version of the SEAL audio library which will improve the dynamic range. This change isn't complete yet [Nicola Salmoria].
 - 0.34b6             : Now using version 1.05 of the SEAL audio library. This should fix problems with the ENSONIQ AudioPCI and Creative PCI64 cards.
 - 0.34b2             : Juergen Buchmueller rearranged the makefile using archives to work around E2BIG error on some machines.
 - 0.33b7             : To improve compatibility, older VESA modes are back. If your card doesn't work in VESA mode, try "vesamode=vesa2b" or "vesamode=vesa1" in mame.cfg [Bernd Wiebelt]. Slightly changed the resolution picker, so that when -vesa and -noscanlines are requested, it will use e.g. 320x240 instead of 640x480 with pixel doubling, and 400x300 instead of 800x600 with pixel doubling. If the lower res mode is not available, it automatically switches back to the pixel doubled mode [Nicola Salmoria].
 - 0.33b6             : Zerza fixed the NTSC mode. For feedback on this mode, please contact sta@carinthia.com. We are now using Allegro 3.0 + WIP (30th May). Allegro (3.0+diffmay) now supports SideWinders and Gravis Gamepad Pro's and so does MAME [Bud Crittenden]. To improve portability, the makefile is more conservative, using the -pedantic and -Wshadow switches. Note that to compile with these switches, several changes had to be made to allegro.h, which is included. The average FPS is printed on exit [Nicola Salmoria].
 - 0.33b4             : The DOS version is now compiled with GCC 2.8.1. Increased the default gamma correction for the DOS version to 1.2. This will not have effect unless you change it in MAME.CFG (or just delete the file). In the DOS version, -vsync is supported for games running at 57fps (e.g. Moon Patrol). However, due to the sync rate being different, the game runs 6% faster than it should [Nicola Salmoria]. Fixed -ror and -rol with ORIENTATION_SWAP_XY games (e.g. Kick) and ORIENTATION_FLIP_X games (e.g. Discs of Tron) [Nicola Salmoria]. Set back the default vgafreq to -1 (=auto). This is necessary for -vsync to pick the correct freq (most of the time) when used with tweaked VGA modes. This will not have effect unless you change it in MAME.CFG (or just delete the file).
 - 0.31               : Added msdos\config.c, fileio.c, fronthlp.c, input.c, osinline.h, sound.c, vector.c and video.c. The DOS version is now compiled with GCC 2.8.0, optimized for Pentium. 16 bit color support for games which need it (e.g. Rastan, Gauntlet, Black Tiger, and many others). It is on by default, since it looks much better; of course it's also slower, so you can turn it off and revert to the previous 8 bit downgraded palette using (in the DOS version) the -depth 8 command line option [Aaron Giles]. BEFORE COMPLAINING THAT 0.31 IS SLOWER THAN 0.30, READ THIS WHOLE SECTION, OK? ESPECIALLY WHERE IT TALKS ABOUT 16 BIT COLOR SUPPORT. You'll need -depth 8 and -sr 11025 to run some of the bigger games at an acceptable speed. In the MS-DOS version, some games might require you to increase the memory available to DPMI.
 - 0.30               : Added src\msdos\vgafreq.h. In the DOS version, dirty rectangles are supported in all resolutions [Bernd Wiebelt]. Modified the tweaked video modes to be as close as possible to 60Hz. However please note that on some systems the new modes might not work, while the old do. You can work around that by changing the line syncedtweak=yes to syncedtweak=no in mame.cfg [Valerio Verrando]. Now using Allegro 3.0 - this fixed problems 0.29 had under NT with mouse enabled.
 - 0.29               : We are now using the "WIP 2.8" version of Allegro to compile the DOS version. You can get it from http://www.talula.demon.co.uk/allegro/. "-vesa" picks the best VESA mode available. The new "-vesa1" forces VESA 1.2 [Bernd Wiebelt].
 - 0.27               : EXTREMELY IMPORTANT: osd_obtain_pen() now doesn't return pens sequentially. This ensures that MSDOS driver writes are aware of the existence of Machine->pens[] and use it appropriately. Drivers which don't do this will have wrong colors [Nicola Salmoria].
 - 0.26               : Mirko Buffoni fixed a bug that locked your PC if BLASTER variable was not found (thanks to James Oliver for the suggestion).
 - 0.25               : Bernd has cleaned up VESA command line options. No longer supported: '-vesascan'   --> use '-vesa' or (faster, if it works) '-vesa2l', '-vesaskip N' --> use '-640x480 -skiplines N'  instead, '-rotate'     --> use '-rol' or '-ror' instead. New: '-ror', '-rol' Rotate the display (anti)clockwise. Since this uses the standard VESA scanline mode, you'll get *vertical* scanlines on rotated games (authentic?). '-nodouble' prevents pixel doubling, if you like miniaturised arcade emulation. It's also faster than the standard pixel-doubling VESA modes. '-skiplines N' does what '-vesaskip N' used to do, except it does not select 640x480 VESA mode. Bernd changed the VESA code to provide '-rol' and '-ror' replacing '-rotate'. Rotation modes are now supported in all VESA resolutions. The '-nodouble' option prevents pixel doubling in VESA modes, resulting in more speed and a smaller display. Added an alternate 224x288 video mode (on my Matrox this produce correct aspect ratio with this tweaked mode). To select it simply add -224 or -224x288 parameter.
 - 0.23               : Changes were done to MSDOS.C to fix OSD_READ_KEY for people having problems with keyboard.
 - 0.22               : Bernd Wiebelt provided modifications to MSDOS.C for Vesa 2.0 linear and banked extensions. Also inline assembly double pixeling provided a faster approach on slower videocards. Check the readme.txt file for new video options.
 - 0.21.5             : Changed MSDOS.C to support 240x272 (video mode provided by V.Verrando). Fixed a bug in sound init of phoenix/pleiads that caused the game to crash under DOS. Nicola Salmoria fixed a bug in Memory addressing that caused Galaga to trash under DOS.
 - 0.21               : Added MasterVolume in MSDOS.C, and changed MAME.C to support this feature. You can change the volume thru various volume percentage [100,75,50,25,0] pressing F9.
 - 0.20               : Changes in MSDOS.C: vesa and vesascan are now mutex. Also fixed a bug caused by calling joystick initialize before starting allegro.



 2.6  LINUX

 - 0.284              : Avoid passing -m flags for pointer size on 64-bit RISC-V Linux (makefile) [Julian Sikorski].
 - 0.277              : Added code to detect attached debugger on Linux (lib\osdlib_unix.cpp) [Vas Crabb].
 - 0.265              : Added C compiler flags for Wayland EGL from pkgconfig to OSD build options on Linux. This will hopefully fix compiling on openSUSE where Wayland headers are in \usr\include\wayland (osd\sdl_cfg.lua) [Julian Sikorski].
 - 0.261              : Suppress Clang unused label warning (src\3rdparty.lua). Fixed inadvertent assignment in PulseAudio callback (pulseaudio\pa_linux_pulseaudio_cb.c) [Vas Crabb].
 - 0.260              : Added initial support for Wayland on Linux (render\drawbgfx.cpp) [Julian Sikorski].
 - 0.248              : Updated build prerequisite package names for newer Ubuntu versions (initialsetup\compilingmame.rst) [Golden Child].
 - 0.243              : Initial GCC 12 support for Fedora 36 [R. Belmont].
 - 0.243              : Fixed MAME reports missing BGFX files and crashes (Arch LINUX only) [???].
 - 0.238              : Define _FILE_OFFSET_BITS=64 on Linux (scripts\genie.lua). Note: Compiles GENie with off_t defined as a 64-bit integer to assist with building MAME on a 32-bit operating system like Raspberry Pi OS and a storage volume larger than 2 GB. Without this, the build can fail with a misleading error [Matthew Barnes].
 - 0.223              : Added arm64 and s390x to Travis CI (travis.yml). Overhaul travis.yml in an attempt to speed up macos builds (travis.yml) [Julian Sikorski].
 - 0.222              : Updated Travis CI build environments (travis.yml). Switched Ubuntu build from GCC-9 to GCC-10 [Julian Sikorski].
 - 0.215              : Check that m_display is not null to prevent crash. Fixes X11 Lightgun routine does not check for valid X11 display, resulting in crash (segmentation fault) [George McMullen].
 - 0.213              : Fixed 'cleansrc' target for Unix/Linux (makefile) [Christian Groessler]. Explicitly use Ubuntu Trusty (travis.yml). Note: Due to ppas used the travis-ci only works when trusty is being used. With xenial being the default as of August 2019 the builds fail most of the time. Request trusty explicitly until the CI configuration can be migrated to a more recent Ubuntu release. Migrate travis-ci configuration to Ubuntu Bionic. Make sure Qt5 is the default when tools like moc are being called [Julian Sikorski].
 - 0.211              : travis.yml: Added libxi-dev to Travis Linux Config [Kiall Mac Innes]. Overhaul to advanced gun instructions. This cleans up spelling and other issues in the original text. This work is still prototype and will probably require fine-tuning (docs\source\advanced\linux-lightguns.rst) [Firehawke].
 - 0.210              : Added python to list of required ubuntu packages (docs\source\initialsetup\compilingmame.rst) [Henrik Algestam]. Documented Linux Lightguns with Xinput. Added a new doc page within the 'Advanced Configuration' section which describes how to enable Lighuns on Linux using the XInput lightgun provider (docs\source\advanced\linux-lightguns.rst). Enabled Xinput support by default on Linux. The Xinput lightgun driver is the only reliable+accurate method to use lightguns on Linux, we should enable this by default to reduce the friction for Linux Lightgun users. This should have no effect on users of Windows/Mac etc (makefile and osd\sdl.lua) [Kiall Mac Innes]. Fedora users need libXi-devel now that X11 XInput is enabled by default - no clue about other Linuxes (docs\source\initialsetup\compilingmame.rst) [Vas Crabb].
 - 0.209              : Linux X11 Input: Fixed multiple lightgun support on X11 Linux, every lightgun event was passed onto every lightgun device within MAME. This obviously works for 1 gun, but with 2, it causes both crosshairs to move in the same direction at the same time (input\input_x11.cpp) [Kiall Mac Innes].
 - 0.208              : Fixed lightgun support for Linux X11. SDL/X11 number mouse/lighgun buttons 1,2 and 3, while Windows and other parts of MAME like offscreen_reload expect 0, 2 and 1. Transpose buttons 2 and 3, and then -1 the button number to align the numbering schemes. This fixes lightgun support on Linux - tested with an Ultimarc AimTrak and the following config: lightgun = 1, lightgun_device = lightgun, lightgunprovider = x11, lightgun_index1 = "Ultimarc Ultimarc" and offscreen_reload = 1. Note: MAME must be compiled with XInput support: make -j10 NO_USE_XINPUT=0 [Kiall Mac Innes].
 - 0.176              : Added detection for Linux architectures alpha and mips64el, to avoid using GCC -m64, which isn't available on them. Detect GNU/Hurd systems, but treat them as Linux. Compile fixes for GNU/Hurd systems: Define PATH_MAX if it's not defined and the compiler defines __GNU__. Cherrypick portability fixes for 3rdparty modules [Jordi Mallach]. Fixed pluginspath in LINUX does not resolve $HOME [Carl]. GNU/kFreeBSD support. Sync with upstream [Steven Chamberlain].
 - 0.172              : Fixed build on SteamLink and enforce BGFX on it [Miodrag Milanovic].
 - 0.170              : Added SteamLink initial support [Sam Lantiga, Miodrag Milanovic].
 - 0.164              : Fixed Linux compile with -Wodr in GCC 5.2 (render\drawogl.c). Let MAME compile in Arch Linux GCC 5.2. 16G RAM used to prevent crash (scripts\genie.lua). Compile with 'make SSE3=1 LTO=1' testing GCC 5.2 MSYS2 now [Cowering].
 - 0.160              : Fixed crashing on ARM Linux targets (util\delegate.h) [R. Belmont, rjosal].
 - 0.154              : Link fix for some Linux-es (lib\lib.mak) [Miodrag Milanovic].
 - 0.149u1            : Initial support for Fedora 19 / GCC 4.8.1 [R. Belmont].
 - 0.149              : Trying to fix linking on Linux [Miodrag Milanovic].
 - 0.144u7            : R. Belmont fixed Linux compile (lib\util\tagmap.h).
 - 0.142              : Fixed MAME/SDL/Linux/PowerPC does not build [jordi].
 - 0.141u3            : Fixed multiple typos with receive spelled recieve in Debian GNU/Linux system [hap].
 - 0.141              : qmc2 fixing compiling process (machine\s3c24xx.c) on Linux and MacOSX.
 - 0.138u4            : MAMEdev kant spel (Ubuntu/Canonical cares about this) [wallyweek].
 - 0.137u4            : R. Belmont fixed Linux 64-bit compile issues in snes_snd.
 - 0.137u3            : Julian Sikorski added makefile PPC64 autodetection.
 - 0.134u1            : hap fixed GCC warning for src\emu\sound\ymf271.c with OPTIMIZE=3 on openSUSE 11.1 x86.
 - 0.130u1            : Vas Crabb fixed build for PPC64 Linux. This slightly messes up static branch prediction hints on OS X and AIX, but OS X for PPC64 is dead, and no-one builds MAME for AIX, and it will still build, anyway.
 - 0.129              : Aaron Giles fixed compile error on openSUSE 11.1 / GCC 4.3.2 with OPTIMIZE=3.
 - 0.122u8            : Couriersud enables building MAME using MinGW on Linux.
 - 0.84u5             : Lawrence Goldf fixed several compilation issues for LinuxPPC and other ports.
 - 0.12               : Fixed bug in msdos.c/osd_play_streamed_sampled() which prevented it from handling more than one audio stream. This part of the code still needs a major cleanup.



 2.7  SDLMAME

 - 0.279              : Testing for glibc does not guarantee pty.h is available. It's possible to build glibc for targets where its PTY wrapper functions are not implemented (osd\modules\file\posixptty.cpp) [Vas Crabb].
 - 0.278              : Use dirent::d_type on any GNU libc platform (osd\modules\file\posixdir.cpp and posixptty.cpp). This BSD extension is provided by GNU libc, so enable its usage with that C library. Use <pty.h> on any GNU libc platform (osd\modules\file\posixdir.cpp and posixptty.cpp). openpty() is implemented by GNU libc for all the OSes, so include <pty.h> when using that C library. Cast dirent::d_name to const char* before using it (osd\modules\file\posixdir.cpp and posixptty.cpp). According to POSIX [1], the type of dirent::d_name is loosely defined as "char d_name[]", as array with an undefined size. In particular, few ways are seen in the wild: (a) "char d_name[size]", i.e. as proper array with a full size and (b) "char d_name[1]"/"char d_name[0]", i.e. as C flexible arrays. Regardless of its type, dirent::d_name is used as if it was a classic const char *, i.e. as pointer to a null-terminated string. util::string_format() uses C++ templates to collect all the arguments, and thus it will use the actual type of dirent::d_name. In case of (a) there is no issue, however for (b) the result is that only the first character is used. To ensure that dirent::d_name is fully used, explicitly cast it to const char * before passing it to util::string_format(), so the whole string is used. Removed redundant checks when setting BASE_TARGETOS/SDLOS_TARGETOS. The vast majority of the OSes use BASE_TARGETOS=unix and SDLOS_TARGETOS=unix, which are set as default values; the few exceptions (Windows and macOS) already have their own selections. Hence drop all the empty if statements for other OSes than Windows and macOS, as actually redundant (osd\sdl.lua). Define buffer size for openpty(). There is no defined size for the slave name returned by openpty(); OSes that have a PATH_MAX constant usually use that as limit. Create a custom OPENPTY_PATH_MAX constant specifically for openpty(), even in case PATH_MAX is not available: in that situation, use 8192 as buffer size, which hopefully should be "good enough" (osd\modules\file\posixptty.cpp) [Pino Toscano]. Better handling of getting PTY path, etc. Support Issue 8 TTY_NAME_MAX/ptsname_r and pre-standard ptsname_r. Set termios flags directly rather than relying on BSD's cfmakeraw. Actually enable the XPG-8 path (file\posixptty.cpp) [Vas Crabb].
 - 0.276              : Nothrow is passed to operator new, not to reinterpret_cast. Pass in explcit alignment to operator new just in case (osd\modules\file\posixfile.cpp) [Vas Crabb].
 - 0.272              : Removed assert(0 <= info->clickcnt) (sdl\window.cpp) [AJR]. Only check for hold/drag conversion on losing pointer if it hasn't already happened (sdl\window.cpp) [Vas Crabb].
 - 0.267              : Fixed various warnings (tools\aueffectutil.mm) [Vas Crabb].
 - 0.265              : Fixed a class memory access warning (osd_window_config initialises all members to zero in constructor) (osd\sdl\video.cpp) [Vas Crabb].
 - 0.259              : Fixed interpretation of result of SDL_GetDesktopDisplayMode. Fixes display mode not being printed (sdl\osdsdl.cpp). Don't specify SDL_WINDOW_BORDERLESS for full-screen windows (sdl\window.cpp). May address GitHub #7532 and #7922 [Davidian1024].
 - 0.258              : Fixed sound level default for underrunning case (sound\js_sound.js) [holub]. Don't request OpenGL context (render\drawsdl.cpp) [hiromasa].
 - 0.255              : Really inhibit full screen toggle in debug mode to prevent accidental crashes (mac\video.cpp and sdl\osdsdl.cpp) [AJR].
 - 0.253              : Removed support for SDL < 2.0.6 [Vas Crabb].
 - 0.252              : Avoid variable-length array (font\font_sdl.cpp) [Patrick Mackinlay].
 - 0.247              : Include device serial number in ID when available for SDL joysticks (input\input_sdl.cpp) [Vas Crabb].
 - 0.246              : Removed keyboard/mouse/joystick device mapping options. The keyboard and mouse device mapping options did nothing at all, mostly because of lack of support for separating inputs from multiple devices. The joystick options were useless when you have two of the same kind ofcontroller, and you can achieve the same thing with controller configuration files (osd\modules\input\input_sdl.cpp, sdl\osdsdl.h and sdl\sdlmain.cpp) [Vas Crabb].
 - 0.245              : Acknowledge presence of circular dependencies to keep GNU ld happy on Linux (scripts\genie.lua) [Vas Crabb]. Moved devmap_init down into class (input\input_sdlcommon.cpp and input_x11.cp) [AJR]. Throw a fatal error if combination of bgfx video and wayland videodriver has been detected (sdl\sdlmain.cpp) [Julian Sikorski].
 - 0.244              : Detect joystick reconnection with SDL. Also improved display name scheme for joystick axes and buttons. 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) [Vas Crabb]. Prefer the X11 SDL video driver on Linux (sdl\sdlmain.cpp) [Julian Sikorski].
 - 0.242              : Added error retval check for BGFX on fallback (sdl\window.cpp and windows\window.cpp) [hap].
 - 0.241              : -video auto now means "bgfx" on all platforms (sdl\video.cpp) [R. Belmont]. Keep -video soft as the default for Emscripten for now (sdl\video.cpp) [Justin Kerk].
 - 0.240              : Improved scale factor selection. Fixes aspect related issues, undesired overscan, etc. (GitHub #8209, #8387 and MT08110) (emu\render.cpp and osd\windows\window.cpp). Correctly adjust window size based on the computed visible area for different stretching cases (sdl\window.cpp and windows\window.cpp) [Antonio Giner].
 - 0.236              : Removed osd\modules\file\posixdomain.cpp.
 - 0.235              : Fixed SDL UI choosing the root path (util\zippath.cpp) [Tim Lindner].
 - 0.232              : Added option -attach_window (create or attach to an existing window) [Nathan Woods].
 - 0.230              : Fixed ZEXALL target compilation (zexall\main.cpp) [Miodrag Milanovic].
 - 0.227              : Fixed a couple of X11 resource leaks (osd\modules\input\input_x11.cpp, midi\portmidi.cpp and sdl\sdlmain.cpp) [Vas Crabb].
 - 0.226              : Fixed ZEXALL target compile [Miodrag Milanovic].
 - 0.225              : Drop MASK from osd\sdl\taputil.sh [Rhett Aultman].
 - 0.218              : Process control characters so that the natural keyboard can see them (SDL normally strips these out) (input\input_sdl.cpp) [AJR].
 - 0.217              : Ignore joystick buttons beyond maximum supported number (input\input_sdl.cpp). Note: The code to map excess buttons to switches doesn't actually do anything useful while INPUT_MAX_BUTTONS and MAX_BUTTONS happen to be defined to the same number [Vas Crabb].
 - 0.215              : Support RRGGBB00 format used by ARM Mali GPUs [R. Belmont]. Odroid N2 build fixes. Allow specifying NO_OPENGL manually. Switch BGFX to OpenGL ES renderer if NO_X11 is specified. Only link against EGL when NO_X11 is specified on linux, netbsd and openbsd. Only switch BGFX to OpenGL ES on linux, netbsd and openbsd. Indentation fix [Julian Sikorski].
 - 0.214              : The current Emscripten release is not happy with the use of '-s ERROR_ON_MISSING_LIBRARIES=0' as a link option, it gives an error stating that all libraries must now be present, so remove that use. This leaves a missing 'util' library. This did not appear to be needed on the few builds I have tried, and this patch avoids adding this library for asmjs (osd/sdl.lua; configuration=asmjs). Avoid explicitly linking SDL2_ttf. It appears that it is sufficient to include '-s USE_SDL_TTF=2', and emcc links in the SDL2_tff library, and it does not like attempts to link this twice (osd/sdl.lua; configuration=asmjs) [68bit].
 - 0.208              : Fixed lightgun support for Linux X11. SDL/X11 number mouse/lighgun buttons 1, 2 and 3, while Windows and other parts of MAME like offscreen_reload expect 0, 2 and 1. Transpose buttons 2 and 3, and then -1 the button number to align the numbering schemes. This fixes lightgun support on Linux - tested with an Ultimarc AimTrak and the following config: lightgun = 1, lightgun_device = lightgun, lightgunprovider = x11, lightgun_index1 = "Ultimarc Ultimarc" and offscreen_reload = 1. Note: MAME must be compiled with XInput support: make -j10 NO_USE_XINPUT=0 [Kiall Mac Innes].
 - 0.207              : Added tools\testkeys.cpp. Fixed SDL2 keymap processing. Keymaps must have been broken for ages: It is now possible to map every scancode SDL2 defines. Removed keycode field. This was a leftover from SDL1.x. Fixed bug preventing keymaps from working. Fixed the DE keymap. Converted other keymaps to new format and added a comment that they have to be reviewed and fixed. Added sdl testkeys as a tool again (src\tools.lua and tools\testkeys.cpp) [Couriersud]. Show video-mode option 'accel' in help and GUI (sdl\sdlmain.cpp) [Andreas Mueller]. Added SDL testkeys as a tool again. Attempt to fix testkeys linking in more configurations (osd\sdl.lua and tools.lua). Testkeys: Clean up and modernise code. Use std::endl to end lines for its implicit flush. Centre window (less likely to hide behind taskbar, etc.). OSDWin: Ensure new windows are positioned within the work area of a monitor (windows\video.h and window.cpp). Use lowercase for some libraries that are lowercase in System32 on Windows anyway. Make USE_BUNDLED_LIB_SDL2=0 not use the bundled SDL (osd\sdl.lua and tools.lua) [Vas Crabb].
 - 0.206              : Workaround for Web Audio autoplay restrictions in Chrome 71 (sound\js_sound.js). Fixed joystick initialization with Emscripten SDL (input\input_sdl.cpp). Better Emscripten SDL fix (input\input_sdl.cpp). Keep track of which SDL input subsystems were initialized (input\input_sdl.cpp) [Justin Kerk].
 - 0.204              : Added force feedback (haptic) device (input\input_sdl.cpp) [R. Belmont].
 - 0.203              : Disable setting the SDL_WINDOW_OPENGL extra flag if -video none is set. This allows a true headless run when the environment variable SDL_VIDEODRIVER=dummy is set prior to mame/mess execution [Dustin Stahlback].
 - 0.201              : Fixed debug assert failure when using SDL fullscreen toggle [AJR].
 - 0.199              : Added osd\modules\file\posixdomain.cpp. GetCurrentProcessId is valid on lib\osdlib_uwp.cpp [Carl].
 - 0.198              : Disabled multithreading on the Emscripten target (osd\osdsync.cpp) [Justin Kerk].
 - 0.197              : Set SO_REUSEADDR in posixsocket. Without it you have to wait until the socket is moved out of the TIME_WAIT state, which can take quite a while. This is pretty anoying when using MAME with serial ports forwarded via TCP (modules\file\posixsocket.cpp) [Sven Schnelle].
 - 0.194              : Added -lSDL2main to fix linking with GCC 7 (osd\sdl.lua). Use dynamic linking for Windows SDL builds to workround an error during linking about liblualibs.a being corrupt, which is dependant on the order of the .o files contained within it (scripts\genie.lua). Removed qtmain on windows, it conflicts with SDL2_Main (osd\modules.lua) [smf].
 - 0.192              : Make SDL input less eager to generate double-click events when mouse doesn't move between clicks (input\input_sdl.cpp) [AJR].
 - 0.191              : Fixed ZEXALL build target (zexall\main.cpp) [RandomArts].
 - 0.190              : Make the C-like parts more consistent with MAME (tools\aueffectutil.mm) [Vas Crabb].
 - 0.188              : Added SDL_WINDOW_BORDERLESS for fullscreen, required by some window managers on Linux [O. Galibert]. Fixed sound_sdl::sdl_callback, fill buffer with silence when underflow. The problem is most noticeable when you are saving state and the save takes a relatively long time, short period of audio gets played repeatedly, which is usually unpleasant. I found out it's caused by sdl_sound::sdl_callback not fill the audio buffer with silence when underflow occurs. According to https://wiki.libsdl.org/SDL_AudioSpec, if there's nothing to play, the callback should fill the buffer with silence. I tested this change and the problem is gone [rslovers]. Updated compiling instructions for Fedora Linux. DNF is now preferred package manager. alsa-lib-devel is also required (not mentioned in the current docs) (initialsetup\compilingmame.rst) [Brian King]. Fixed save/load states in Emscripten build. Simplified Emscripten integration points. Moved standalone JS functions to be static member functions of running_machine. Improved Emscripten main loop. Use convenience functions for cleaner code. As an added bonus, this now allows for proper shutdown of the running machine when running in the Emscripten environment - previously, attempts to exit the program were just being ignored. Export soft_reset, hard_reset, exit, load and save functions for Emscripten builds (scripts\resources\emscripten\emscripten_post.js) [James Baicoianu].
 - 0.184              : Fixed SDL build on Win32 and ZEXALL build [Miodrag Milanovic].
 - 0.180              : Updated SDL2 to 2.0.5 [Miodrag Milanovic].
 - 0.179              : Fixed alt-enter full screen toggling on SDL (Linux/Mac/BSD) builds [Hans Ostermeyer].
 - 0.178              : Added osd\modules\monitor\monitor_sdl.cpp. Removed osd\sdl\video.h. Partially fix SDL joysticks with same name. Each mouse should track its own double-click status (input\input_sdl.cpp) [Brad Hughes].
 - 0.177              : Attempt to fix mouse state on startup in SDL builds by initialising members (sdl\window.cpp) [Vas Crabb].
 - 0.176              : Use allocating mode of ::realpath by default (modules\file\posixfile.cpp). POSIX implementation for valid filename/path character functions. Fixed build on Debian PPC64 with -maltivec. Problem is caused by <SDL2/SDL_cpuinfo.h> puling in <altivec.h> which #defines vector, pixel and bool however when the compiler is in Apple Altivec mode, these are context-sensitive keywords and don't need to be #defined we never need the #defines in our own code because we use the GCC-specific __vector instead of vector so we trick the header to think the compiler is in Apple Altivec mode to suppress the #defines [Vas Crabb]. Fixed warning message says "-waitsync" but should say "-waitvsync" (sdl\video.cpp) [Michael.S.G, Tafoid]. Take pkg-config path from env if defined (osd\modules.lua, osd\sdl.lua and sdl_cfg.lua) [OXC].
 - 0.175              : Changed osd\sdl\sdldir.cpp to osd\modules\file\posixdir.cpp. Disable pthreads under Emscripten for now, they aren't actually available unless you compile with experimental settings (osd\osdsync.cpp) [Justin Kerk]. Fixed video mode opengl duplicated in SDL build (modules\lib\osdobj_common.cpp, sdl\sdlmain.cpp and windows\winmain.cpp) [dankan1890]. Fixed SDL version of (MESS) ZEXALL [Miodrag Milanovic]. POSIX implementation for new directory read features, cleanup of Windows implementation, return directory handle as smart pointer, fix full build [Vas Crabb].
 - 0.174              : Removed osd\sdl\sdlinc.h. Export SDL_SendKeyboardKey function to allow scancode injection in Emscripten build (emscripten\emscripten_post.js) [R. Belmont]. Removed dead code left over from "-mt". This fixed double-free starting up puckman when using mame64 -mt [Couriersud]. No SDL 1.2 support anymore [Miodrag Milanovic].
 - 0.173              : Changed sdl\watchdog.cpp/h to osd\watchdog.cpp. Removed sdl\ledutil.sh, main.cpp, output.cpp, README_SDL20.txt, sdlos_macosx.cpp, sdlos_unix.cpp, sdlos_win32.cpp and testkeys.cpp. Unsubscribe SDL input modules from events on exit (input\input_sdl.cpp and input_sdlcommon.h). Fixed BACKSLASH2 SDL key mapping [Brad Hughes]. Cleanup init for SDL in total (input\input_sdl.cpp). Merged sdl\main.cpp for windows platform (unicode). Moved clipboard handling on proper place. Moved aueffectutil to tools. Removed OS dependant output handling and added none and console output providers [Miodrag Milanovic]. Fixed keepaspect & unevenstretch toggles in SDL OSD [Antonio Giner]. Refactored osd_work to become more C++. Bye to malloc and memset [Couriersud]. JSMAME: Updated function signatures for Emscripten (emscripten\emscripten_post.js) [Justin Kerk].
 - 0.172              : Added osd\modules\file\posixfile.cpp/h, posixptty.cpp, posixsocket.cpp and sync\osdsync.cpp. Removed osd\modules\lib\osdlib_os2.cpp, sync\sync_mini.cpp, sync_ntc.cpp, sync_os2.cpp, sync_sdl.cpp, sync_tc.cpp, sync_windows.cpp, work_mini.cpp, sdl\sdlfile.cpp/h, sdlos_os2.cpp, sdlptty_os2.cpp, sdlptty_unix.cpp, sdlptty_win32.cpp and sdlsocket.cpp. OS/2 can not support SDL2 which is needed for MAME to run. Separated Windows only part in SDL2 build and prepared OSX one. Using SDL_INIT_GAMECONTROLLER it explicitly calls SDL_INIT_JOYSTICK some experimental code [Miodrag Milanovic]. Added -exit_after_playback to man pages sdl\man\mame.6 and mess.6 [Michele Fochi]. Fixed drawing characters outside Unicode BMP with SDL. Font selection on Linux seems to be working provided you don't choose C/J/K fonts. Selecting a C/J/K font causes MAME to give a black screen when dropping back to main menu. Since fallback fonts aren't used, this means you can't use the Chinese/Japanese localisations with SDL font provider. Implement Couriersud's proposal to put style name in the config name for SDL fonts. Enumerate available font styles as well as families. Still has a problem in that TTC fonts are enumerated but can't be loaded by SDL_ttf (font\font_sdl.cpp) [Vas Crabb]. A lot of TTF fonts (including C/J/K fonts like unifont) do not have an type attribute "Regular". This fix will load the first font found if no "bold" "bold italic" "italic" or "regular" attribute was found [Couriersud]. Build more of font_sdl.cpp with Emscripten since there is an SDL2_ttf port now (src\main.lua) [Justin Kerk]. Fixed SDL input focus tracking bug plus removed references to USE_OLD_SDL_INPUT compiler directive from the input refactor [Brad Hughes].
 - 0.171              : Added modules\sound\js_sound.js. If binding, listening or connecting to a socket fails, then close the socket handle (sdl\sdlfile.cpp) [Barry Rodewald]. Substantial improvements to Web Audio sound backend for Emscripten port (sound\js_sound.js) [Grant Galitz]. Make window index part of osd_window. Removed SDL 1.2 support. Added SDL 2.0.4 for Visual Studio, so it can be compiled out of box. Made OSD=sdl build compile out of box in Visual Studio [Miodrag Milanovic]. Refactor MACOSX_USE_LIBSDL to USE_LIBSDL for windows and linux static library support [Jeffrey Clark].
 - 0.169              : Make SDL2 use software if hardware acceleration is not available (render\drawsdl.cpp) [Miodrag Milanovic].
 - 0.168              : Added sdl\emscripten_post.js. Fixed SDL build fix for windows (osd\sdl.lua) [Miodrag Milanovic]. Updated OS/2 support for GEnie and MAME [KO Myung-Hun]. Fixed warning in sound\js_sound.cpp. Allow for Emscripten compile to JavaScript out of the box (src\main.lua and sdl\emscripten_post.js). MAME can now be built using Emscripten's 'emmake' tool, e.g. like so: emmake make SUBTARGET=pacman SOURCES=src/mame/drivers/pacman.cpp This should produce a .js file which can be supplied to an HTML front-end [Justin Kerk]. Removed references to non-existing files. The file was removed from the other gmake.*/genie.make files. The build/gmake.* files do not exist upstream, so this is a purely local problem. I have however filed a PR to get bsd support added upstream: https://github.com/bkaradzic/genie/pull/110 [Thomas Klausner].
 - 0.167              : Removed obsolete CapsLock hack (sdl\input.c) [Sergey Svishchev].
 - 0.164              : In SDL command line version, don't look for depth in -resolution (sdl\video.c and windows\video.c) [dnlopez]. Fixed Clang version detection in Ubuntu (makefile) [Dirk Best]. Fixed 0.160 aspect ratio regression [Hans Ostermeyer].
 - 0.163              : Fixed BGFX on Windows SDL build. Fixed compile on GCC 4.4 on old Ubuntu [Miodrag Milanovic]. Added new SDL_INI_PATH flag [Cesare Falco].
 - 0.162              : Drop NO_SDL_GLEXT define on OSX (osd\sdl_cfg.lua) [mbcoguno]. Don't segfault on software list image save (sdl\sdlfile.c) [Curt Coder].
 - 0.161              : Removed osd\sdl\build.mak, osinline.h and sdl.mak. Changed sdl\strconv.c to osd\strconv.c. Added sdl\aueffectutil-Info.plist and aueffectutil.m. Added distro support for Linux. Added network flags (SDLMAME_NET_PCAP, SDLMAME_NET_TAPTUN and SDLMAME_NET_PCAP). Made SDL build to be able to be compiled on VS [Miodrag Milanovic]. Fixed cross-compile. The following will build mame64.exe on Linux: make TARGETOS=windows PTR64=1 OSD=windows OS=linux VERBOSE=1 OVERRIDE_CC="@ccache x86_64-w64-mingw32-gcc" OVERRIDE_CXX="@ccache x86_64-w64-mingw32-g++" OVERRIDE_LD="x86_64-w64-mingw32-g++" WINDRES="x86_64-w64-mingw32-windres" MINGW64=/usr $*. Fixed repetitive monitor updates. By design, MAME has an issue setting aspect correctly on monitor resolution changes. This needs to be addressed separately (osd\sdl\video.c and osd\windows\video.c). Make sure monitor refresh is called when switchres is used (osd\sdl\window.c) [Couriersud]. Added missing SDLMAME_X11 to osd\sdl_cfg.lua [qmc2]. Bring back some SDL OSD configurability. Get NO_X11, NO_USE_XINPUT and SDL_LIBVER working on Linux. Restored DONT_USE_NETWORK, MESA_INSTALL_ROOT, NO_USE_MIDI, NO_OPENGL, SDL2_MULTIAPI, USE_DISPATCH_GL some more OS support from the old SDL makefile. Enabled MALLOC_DEBUG for SDLWin32 [Vas Crabb]. *nix man pages: Added new options to select debugger font face and size [Cesare Falco]. SDLMAME v0.160 selects the first mode unconditionally as a best mode when -switchres is used on SDL12 [KO Myng-Hun].
 - 0.160              : Added osd\modules\osdwindow.h. Removed sdl\drawbgfx.c. Moved osd\sdl\blit13.h, draw13.c, drawogl.c and drawsdl.c to osd\modules\render\. OpenGL related stuff to modules\opengl [Couriersud]. Fixed SDL builds and video with OpenGL renderer [Couriersud, Vas Crabb]. Introduced osd_rect and osd_dim to allow for more code alignment. Fixed resizing on windows (sdl\window.c and windows\window.c). Moved all renderers to osd\modules\render. Merged sdl_video_config and win_video_config. Aligned monitor handling between SDL and baseline. Fixed switchres for SDL build [Couriersud]. OS/2 patches for SDLMAME 0.159 [KO Muyng-Hun].
 - 0.159              : Fixed more JSMESS breakage. Emscripten target now uses SDL2 [Justin Kerk]. Converted blit13.h to templates and fixed a number of bugs around different ycc formats. Some fixes for multimonitor fullscreen on Linux and Windows. In Virtualbox, even switchres now works for two monitors. That doesn't imply it will work on real hardware. The probability is higher. On Windows, default render driver now is OpenGL since Direct3d wouldn't work reliably. This functionality currently is limited to the "-video accel" driver. More userspace blitting enhancements. Converted sdl_monitor_info into a proper object. Converted sdl\nedev_pcap.c to dynamic library loading. Fixed SDL1.2 (OSX, Linux and Windows) (sdl\video.c). All private members for sdl_window_info now start with "m_". Introduced concept of an osd_renderer. Changed draw code to inherit from this interface. Aligned code. Once done the window creation code should be in window.c to avoid having near identical code in each render driver (sdl/draw13.c, drawogl.c and drawsdl.c). Fixed natural keyboard input on all platforms for SDL2 builds (sdl\input.c and testkeys.c). Make sure testkeys ends up in $(BIN) (sdl\sdl.mak). Reworked the -video soft driver so it works like Accel and OpenGL. That will enable the move of some now identical functions back to sdl\window.c. Fixed GCC 4.9 + Clang compiles (sdl\drawsdl.c). Moved all window related code to window.c (sdl\draw13.c, drawbgfx.c, drawogl.c, input.c, video.c and sdl\window.c). Removed some passing around of running_machine where it is not needed (sdl\input.c, video.c and window.c). Get rid of SDL "resize" render method. Added a pointer to the render_container to quad_primitives. This can be used to pick up user_settings for gamma, brightness and contrast in case they will ever be supported by the OSD layer (emu\render.c and sdl\drawogl.c). Temporarily break SDL1.2 Xinerama Multi-Monitor Support as announced on mailing list. Removed start_viewscreen, fix sdl.mak. Make OpenGL renderer available in mainline build as well. This needs to be explicitly enabled by specifying USE_OPENGL=1. More code alignment. HDC is passed differently to GDI renderer (the only one using it). Merged sdl_window_config and win_window_config into osd_window_config. Use osd_window_config instead of replicating individual member variables in osd_window. Simplified multithreading code-paths (via defines) [Couriersud]. Fixed MAME fails to compile in Slackware 14.1 x86_64 with; make: *** [chdman] Error 1 [???]. Only evaluate sdl- and pkg-config commands once [Ramiro Polla]. Set SDL_HINT_MOUSE_RELATIVE_MODE_WARP only for SDL >= 2.0.2 (sdl\window.c) [Announ]. OS/2 patches for SDLMAME v0.158 [KO Myung-Hun].
 - 0.158              : Added osd\modules\font\font_module.h, font_sdl.c, midi\none.c, portmidi.c and modules\osdmodule.c/h. Removed osd\sdl\sdlmisc_os2.c, sdlmisc_unix.c, sdlmisc_win32.c, sdlsync.h, sdlsync_win32.c, sdlwork.c and modules\font\font_unix.c. Changed osd\windows\winsync.h to osd\modules\sync\osdsync.h, osd\sdl\sdlsync_mini.c to osd\modules\sync\sync_mini.c, sdlsync_ntc.c to sync/sync_ntc.c, sdlsync_os2.c to sync_os2.c, sdlsync_sdl.c to sync_sdl.c, sdlsync_tc.c to sync_tc.c, windows\winsync.c to sync_windows.c and osd\sdl\sdlos.h to modules\lib\osdlib.h. Fixed ThreadSanitizer warning about unlocking a non-locked mutex (osd\sdl\sdlsync_tc.c). Fixed ThreadSanitizer data race warnings (sync\work_osd.c). Fixed uninitialized memory usage/data race in osd_work_item_wait + cleanups. Appears to be a Linux-only issue (sync\work_osd.c and osd\windows\winwork.c) [Oliver Stoeneberg]. Fixed a memory leak in draw13.c and a clipping issues with vertically flipped textures. Simplified the code and added consts were appropriate. This was a preparation for using SDL2.0 texture rotation going forward (sdl\blit13.h and draw13.c). Fixed compiling with SDL 1.2, BASELIBS need X11 in this case (sdl\sdl.mak). Renamed draw[sdl2|ogl|sdl]_window_get_primitives and related variables to set_target_bounds. That's what is really done here. Moved common code back to window.c. Moved sync related osd stuff to osd\modules\sync. Merged winwork and sdlwork into osd/modules/sync/work_osd.c. Moved miniwork.c to osd\modules\sync\work_mini.c. The makefile now adds either a OSD_SDL, OSD_WINDOWS or OSD_MINI define to DEFS. This was necessary so that work_osd.c could determine the build on a OSD level. Use templates to implement spinning in work_osd.c. This will fixed Radikal Bikers and other games using video\poly.h. Minor code path optimization. Fixed linking of chdman (sync\work_osd.c). Proposal to fix MT05682 (SDL resize issue). Please check and provide feedback whether MT05682 can be closed. Merged winmisc/sdlmisc into osdlib_*.c [Couriersud]. Some small work_osd.c refactoring and lots of TODOs. Only allocate main threads when WORK_QUEUE_FLAG_MULTI / some logging of thread count / fixed Clang warning (sync\work_osd.c). Limit WORK_QUEUE_FLAG_HIGH_FREQ to 3 threads since we don't scale well above / logging tested with n64dd on Windows with Intel Sandy Bridge i7-2600k with GCC and Visual Studio 2013 compiles with and without optimization (sync\work_osd.c). Lowered SPIN_LOOP_TIME / TODOs. This at least greatly reduces the CPU load when running n64dd (sync\work_osd.c). Removed maximum thread limit for WORK_QUEUE_FLAG_HIGH_FREQ queue on Windows with the new SPIN_LOOP_TIME value it now scales (sync\work_osd.c). Use the non-yield implementation of spin_while() for all platforms futher tests have shown there is no actual speed difference - and it reduces the CPU load even more. Small formating change (sync\work_osd.c). Use n threads when n CPUs are detected since modern CPUs have at least two cores per CPU also makes -np use the actual number supplied across all platforms (sync\work_osd.c). Added OSD_EVENT_WAIT_INFINITE and implemented it properly for all platforms (osd\modules\sync\osdsync.h, sync_ntc., sync_os2.c, sync_sdl.c, sync_tc.c, sync_windows.c and work_osd.c). Default back to numproc-1 threads for WORK_QUEUE_FLAG_MULTI (sync\work_osd.c). Moved thread count printing to KEEP_STATISTICS / prevent KEEP_STATISTICS loop from going out-of-bounds (sync\work_osd.c). Fixed testkeys linking on Windows (sdl\sdl.mak). Use same SPIN_LOOP_TIME value on all platform (sync\work_osd.c) [Oliver Stoeneberg]. Window height was 0 after a switch from fullscreen to windowed if SDLMAME was started in fullscreen. Fixed -switchres. This is now working on Ubuntu 14.04 again. Performance will vary on your hardware and drivers and I suspect SDL to be partly broken. Driver accel now supports "-filter", i.e. bilinear filtering (sdl\draw13.c). Fixed compile of sync_sdl.c. Moved osd MIDI stuff to osd\modules\midi. Needed to touch a couple of other files so that MAME compiles and links. Tested SDL build (Linux/Windows). For Unix and Windows, moved osd_ticks() and friends to osd\modules\lib. For mainline and SDL Windows the implementations slightly differed. Dropped the SDL one in favour of mainline Windows osd_ticks() implementation. Moved OSX osd_sleep and friends to modules\lib. Aligned sdlfile.c to winfile.c (which is actually included by SDL). Consequently removed quite some dead code spread across different files. Untangled options inheritance. Previously code locked in osd_options locking any potential future OSD to these. Options inheritance now is core_options, emu_options, cli_options, osd_options and [sdl|win]_osd_options. This required a number of minor changes to other code as well. Tested on Linux-SDL, Windows-SDL, Windows-mainline and OSX-SDL. Removed some machine() references (osd\sdl\input.c, osdsdl.h, sdlmain.c, sdl\video.c and sdl\window.c). Aligned strconv.h (same code on SDL and mainline). Aligned font code between SDL and mainline. Fixed SDLMAME build on windows without QT debugger [Couriersud]. Fixed linking for Windows SDL cross-compilations: Library names must be lower-case when cross-compiling from Linux (-limm32 instead of -lImm32) and ntohl() needs -lws2_32 (sdl\sdl.mak) [Ramiro Polla]. Fixed bug in work_osd.c causing discrete sound to crash (sync\work_osd.c) [Tafoid, David Haywood, Couriersud]. Restored path creation in SDLMAME builds on Windows (windows\winfile.c). Make 'auto' on SDL Windows mean 'OpenGl' The MACOSX build is already this way so hopefully not an issue. Non-GL performance on Windows is terrible (I struggle to get >100% on pacman) (sdl\video.c) [David Haywood]. Get machine for cursor_state from somewhere -> *m_machine (debugger\debugqt.c) [Carl]. SDL keeps adding SDL_HINTs with every patch release [qmc2].
 - 0.157              : Updated *nix man pages to 0.156 [Tafoid]. Fixed build with non-framework SDL 2 issue on OS X (sdl\sdl.mak) [mbcoguno]. Use consistent logical ID for joystick registration log (sdl\input.c) [Kyungdahm Yun]. Do not check gl_lib() without OpenGL support (sdl\draw13.c). The gl_lib() function is not defined if we do not #USE_OPENGL, as can be seen in osdsdl.h. Building with NO_OPENGL=1 then breaks, unless we add this conditional #ifdef (sdl\draw13.c) [Tarnyko]. Improved SDL2 Alt-Enter functionality (now works on all screens at once) and prefer upper-left placement of windowed mode windows (osd\sdl\draw13.c, drawogl.c and video.c/h) [R. Belmont]. Enable proper network compile for SDL windows build [Miodrag Milanovic]. Fixed "-mt" for SDLMAME windows build [Calamity, Couriersud]. Changed sdl_window_info to be closer to C++: Made some members private. Moved static functions into sdl_window_info. Extended work_param struct with constructors for better readability [Couriersud]. Fixed linking on FreeBSD and simplified network part in sdl.mak a bit [Oliver Stoeneberg].
 - 0.156              : SDL2 is now the default except for OS/2 builds [R. Belmont]. Allow SDL_LIBVER to be overridden without modifying sdl.mak [Alex Jackson]. OS/2 build fixes (lib\sqlite3\sqlite3.c and web\mongoose.c) [KO Myung-Hun]. Build fixes for Emscripten (makefile and osd\sdl\sdl.mak). Slightly more optimized SDL defaults for Emscripten (sdl\sdlmain.c) [Justin Kerk].
 - 0.155              : Work around linking issue with JSMESS (makefile). See https://github.com/kripken/emscripten/issues/2619 for discussion [Justin Kerk]. Update manpages [Cesare Falco]. Don't require -str to enable watchdog (sdl\sdlmain.c). Fall through to the baseline Win32 implementations for file, socket and pty/named pipe I/O. This fixes laserdisc games and enables socket and named pipe I/O in SDL Windows builds (SDL-based: Most Laserdisc CHD games either do not boot or have other issues (MT05681) and -watchdog command not operable in SDLMAME (MT05683)). Init timebase the first time it's needed on Windows, Mac and OS/2 targets (sdl\sdlos_macosx.c, sdlos_os2.c and sdlos_win32.c). Removed more dead code from the GL paths (sdl\drawogl.c). More SDL cleanups. Removed dead code from SDL2 renderer, fix laserdisc crash with SDL2 -video accel rendering. Link properly on OS X for SDL2. More OS X fixes for SDL2. Use the same screen selection method for SDL2 as Windows. Re-enable SDL_ttf for SDL2 builds. SDL2: Not quite yet [R. Belmont]. Let's static link SDL on Win32 build. Support for SDL2 builds on Win32 [Miodrag Milanovic]. Removed cpu mask and thread affinity code from sdl\sdlwork.c as suggested by Couriersud [Oliver Stoeneberg].
 - 0.154              : Removed sdl\debugqt.h, debugwin.c, netdev.h, output.h and sdlmidi.c. Moved sdl\debugosx.h/m, debugqt.c, debugqtbreakpointswindow.c/h, debugqtdasmwindow.c/h, debugqtlogwindow.c/h, debugqtmainwindow.c/h, debugqtmemorywindow.c/h, debugqtview.c/h and debugqtwindow.c/h to osd\modules\debugger\. Fixed OS X compile with non-official SDL [R. Belmont, based on a patch by Fernando Lemos]. Fixed transparency in SDL2.0 code (sdl\draw13.c). Left a "FIXME" too remind me later, that gamma needs attention in MAME and that GL_FRAMEBUFFER_SRGB is supported by SDL2 (sdl\drawogl.c) [Couriersud]. Properly disable sound on -bench runs [Alex Jackson]. Fixed 0.153 SDL regression where user GLSL shaders didn't work (sdl\drawogl.c). Fixed SDL shaders for games that output indexed16 (e.g. pacman) (sdl\drawogl.c). Fixed -prescale 0.153 regression (sdl\drawogl.c). Always supply screen size uniforms to GLSL shaders, and fix bug with X multihead (sdl\drawogl.c). Rebuild all GL textures when the core changes resolutions (sdl\drawogl.c and window.h) [R. Belmont]. Silence compiler warning (sdl\drawogl.c) [Wilbert Pol, R. Belmont]. Added shim for Web Audio sound module (modules\sound\js_sound.c) [Katelyn Gadd, Justin Kerk].
 - 0.153              : Removed sdl\texcopy.c and texsrc.h. Fixed SDL build (sdl\sdl.mak). Temporarily restore compatibility with Qt versions below 4.7 (sdl\debugqtview.c). Fixed SDL 2.0 build (sdl\blit13.h) [R. Belmont]. Fixed relative mouse motion. This makes Missile Attack playable again with my Logitech marble trackball (sdl\window.c) [Couriersud]. Fix for SDL compile (sdl\drawsdl.c, video.c and window.c). Fixed SDL build (sdl\texsrc.h) [Miodrag Milanovic]. Added a notification for JSMESS when the emulation begins (emu\machine.c) [Vito]. Use emscripten_get_now() for JSMESS instead of gettimeofday() [clb]. Rearrange JSMESS code a bit. Allow JSMESS to compile with -Werror[Justin Kerk]. Fixed bug in default font handling for OSX (sdl\sdlmain.c). Removed obsolete include and correct SDLMAME_ARCH quoting in sdl.mak [Oliver Stoeneberg]. Cleaned up some warnings (sdl\sdlmain.c). Removed "totalColors" hack, now only RGB32 is sent to the GPU. There's much, much more cleanup to be done now, but this serves as a functional baseline. Next SDL cleanup, aligned texture conversion with current Windows/D3D code, and fixed overzealous GL texture caching. This fixes brightness/gamma/contrast on RGB32 format games, which has been broken since 2008 and breaks prescale [R. Belmont].
 - 0.152              : Fixed non-Qt non-Windows SDL build (sdl\sdl.mak). This fixed error when compiling with NO_USE_QTDEBUG. Slightly more SDL inclusive ARM check [R. Belmont]. Use QPainter::drawStaticText() to render strings with the same attribute (sdl\debugqtview.c) [Juergen Buchmueller]. Fixed JSMESS build on Ubuntu 12.10, thanks to Vito for debugging this. Removed fstat hack no longer needed with current emscripten (sdl\sdlfile.c) [Justin Kerk].
 - 0.151              : Added osd\sdl\debugqt.h and sdlsync_mini.c. Removed sdl/debug-cb.h, debug-cb.ign, debug-intf.c/h, debug-sup.c/h, debug.glade, debug.gladep, debugwin.h and dview.c/h. Work around incorrect warning generated by Clang (sdl\drawogl.c) [R. Belmont]. Updated SDL man pages [Cesare Falco]. OS/2 build fixes for SDL (lib\web\mongoose.c and sdl\sdl.mak) [KO Myung-Hun]. Added SDL_FRAMEWORK_PATH option to control where SDL is installed on OS X plus OS X 10.9 support. Removed deprecated GTK+ debugger [R. Belmont, Balrog]. Fixed joystick to work with final SDL 2.0. Disabled TrueType support for SDL2 builds for now [R. Belmont]. Fixed SDL1 build (sdl\input.c) [Alex Jackson]. Fixed a logging bug (sdl\sdlmain.c). Fixed testkeys utility to compile with SDL2.0 (sdl\testkeys.c) [Couriersud]. Fixed SDL compile with NOASM=1 (emu\eminline.h). Still need the stub functions from debugwin.c for the NO_DEBUGGER case (sdl\debugwin.c). More SDL header fixes for Clang / emscripten (sdl\gl_shader_mgr.c, sdlsync_tc.c and watchdog.c). Simplify SDL file changes [Justin Kerk]. Upstream changes needed to compile JSMESS. Note: There are still a few files being worked on, and the build scripts which are currently set up outside of the MAME source hierarchy. Always open to cleaner ways of doing things [Justin Kerk, John Vilk, Justin de Vesine]. Other JSMESS tweaks [Justin Kerk].
 - 0.150              : Revise the *IX man pages in SDL (sdl\man\mame.6 and mess.6) [wallyweek]. Some small tweaks for Rasberry Pi/ARM-based systems out-of-the-box compilation experience (sdl\osinline.h, sdl.mak) [Oliver Stoeneberg].
 - 0.149u1            : Fixed uninitialized variables in sdlvideo_monitor_refresh() with SDL < 1.2.10. Disabled some warnings for GCC 4.8 (sdl\sdl.mak) [Oliver Stoeneberg]. Don't hide cursor while in debugger (sdl\debugqt.c) [Carl].
 - 0.149              : Added debug\dvbpoints.c/h and sdl\debugqtbreakpointswindow.c/h. Added the Image menu to the QT debugger's main window. This allows the user to mount disk/c images from the UI. Fixed return value & menu item name in the QT Debugger's Image menu. Also Slot names aren't unique. Qt Debugger: The MAME memory tracking system no longer double-frees closed QT windows. Also fixes the font segfault on exit again (thanks Carl). QT Debugger: WIP for a new breakpoints window (debug\dvbpoints.c/h). Note: You can't click to enable/disable breakpoints yet, and the number of rows doesn't resize yet, but that stuff will come [Andrew Gardner]. Cleaned a bit Carl's solution for optional QT debugger for Windows. Reorder ifdefs [Miodrag Milanovic]. Ubuntu wants to be different (sdl\sdl.mak) [R. Belmont]. Prevent threading deadlock in Win32 with qt debugger (sdl\debugqt.c). Added the breakpoint window to the Win32 build too [Carl]. Fix per OG to allow SDLMAME to compile on Windows. Added SDL.txt document for users of SDL builds containing up to date listing of commands as well as updating parts of windows.txt and config.txt to take in account SDL differences [Tafoid]. Merged duplicated define in sdl\sdl.mak [Oliver Stoeneberg].
 - 0.148u4            : Fixed SDL symlink handling by internal file manager (sdl\sdldir.c) [qmc2]. QT Debugger: Added trackpc command, allowing for a visual display of where the program counter has visited in the DASM windows. Run "help trackpc" in the debugger to see the options. Out of whatsnew: This isn't enabled by default because of how sloooow it is to disassemble each opcode when you want to compute its crc32. That can be sped up with lookup tables and the like. There's a good chance I should pull the 'clear tracks' argument into its own command, but it functions as-is. This can be added to the windows debugger with a simple change to the osd display code. Convert the std::vector of settings to a simple_list in preparation for saving individual window settings (sdl\debugqt.c and debugqtwindow.h). Now saves all settings for all open windows - including docks in the main debug window. Also fixes bug where closing the main window with the X in the corner didn't save settings properly [Andrew Gardner]. Support for both OS X native and Unix-style multiuser installs (sdl\sdlmain.c) [R. Belmont, Nick Boos]. Don't double-shutdown the font cache on *IX when exiting with the debugger enabled (sdl\debugqt.c, sdlmain.c) [R. Belmont].
 - 0.148u3            : QT Debugger fixes: New memory windows start focused on the active CPU. Opening a utility window, closing it, and stepping no longer re-opens the window. Fixes bug where commands don't refresh all windows. The memory view chunk size radio now reports proper sizes. Fixed "ignore" command reporting incorrect invalid CPUs. Fixed crazy code responsible for opcodes' crc32s in the comments system [Andrew Gardner]. Disabled some GCC-specific hacks in sdl.mak when Clang is being used / also silenced linker for DISTRO=ubuntu-intrepid [Oliver Stoeneberg].
 - 0.148u2            : Added osd\sdl\netdev_pcap_osx.c. Don't include GTK+/GConf in Qt debugger builds (sdl/sdl.mak). Make the Qt debugger the default for *IX and Win32 builds (sdl\sdl.mak) [R. Belmont]. Make Ethernet pcap work on Mac OS X & disable unnecessary packet filtering [Rob Braun]. Do Mac filtering in sdl\netdev_tap.c. Filter packets try 2 (sdl\netdev_tap.c) [Carl].
 - 0.148u1            : QT Debugger improvements [Andrew Gardner]: Fixed disassembly window not following PC correctly. Switched font to Courier New since it seems more universal. Fixed gaps between rendered text characters. Plumbed mouse handling through the debugger core (clicking selects). Made the Enter key behave like old SDL debugger; silently steps. Save and load window locations. Preliminary work on "run and hide" and "hard reset" (don't crash on one of my copmilers but do on another - more work to do!). Fixed color when cursor is the same as PC in debug view. Closing the main window now shuts down the machine (same as quit). Help now wraps to the log window size [Andrew Gardner]. Fixed srcclean damage in sdl.mak. Updated MAME and MESS manpages and updated manpages to reflect the -lr alias for -listroms (sdl\man\mame.6/mess.6) [Wallyweek]. Improved some version checks in makefiles and added TODO (sdl\sdl.mak) [Oliver Stoeneberg]. Added server socket support instead of just client (sdl\sdlfile.h, sdlsocket.c and windows\winsocket.c) [SailorSat, R. Belmont].
 - 0.148              : Added osd\sdl\man\castool.1, imgtool.1, ldresample.1 and mess.6. Added osd\sdl\debugqt.c, debugqtdasmwindow.c/h, debugqtlogwindow.c/h, debugqtmainwindow.c/h, debugqtmemorywindow.c/h, debugqtview.c/h and debugqtwindow.c/h. Added MESS-related manpages. Autodetect Ubuntu 12.10 and work around faulty default compiler (osd\sdl\sdl.mak). Fixed SDL "Illegal integer value for numprocessors: "auto"; reverting to auto" [R. Belmont]. Qt debugger support cleanup, fixed OS X crash [qmc2, R. Belmont]. Experimental Qt-based SDL debugger [Andrew Gardner, R. Belmont]. Made QT debugger compiles under windows SDL build. Removed -mwindows I have added recently makes console unusable (osd\sdl\sdl.mak) [Miodrag Milanovic]. Work around Qt differences between Fedora and everyone else [qmc2].
 - 0.147u4            : Revise *IX man pages [wallyweek]. Typo fix from QMC2 (osd\sdl\output.c) [Miodrag Milanovic].
 - 0.147              : Added GCC-4[567]-generic entries to sdl.mak to select GCC with DISTRO= switch [Couriersud]. Fixed default SDL OSX UI toggle key name. Added Swedish/Finnish SDL keymaps for OSX and Linux [Curt Coder]. Don't enable XInput by default in SDL [R. Belmont].
 - 0.146u5            : Fixed -prescale option for SDL builds [Matthias Reichl].
 - 0.146u4            : Use XInput to allow multiple lightguns on Linux/*BSD targets [Markus Rathgeb, based on a patch by SpritesMods.com]. Some SDL compile fixes for OS X, Windows and non-Windows (osd\sdl\sdl.mak) [R. Belmont].
 - 0.146u3            : Greatly improved drawing speed of GTK+ debugger windows [Fabrice Bellet].
 - 0.146u2            : Support newer Linux distros for SDL using GCC 4.7. Clean up GCC 4.7 test so it's the same path on all targets [R. Belmont].
 - 0.146u1            : Fixes for SDL OS/2 compile [K.O. Myung-Hun]. Preliminary Haiku OS support for SDL [PulkoMandy]. hap fixed sr(syncrefresh) clashed with emuopts sr(samplerate) (osd\sdl\sdlmain.c).
 - 0.145u8            : Fixed linking for MinGW GCC 4.6.3 and upper using libwinpthread for SDL build on windows (sdl/sdl.mak). Removed -static for SDL windows build (sdl/sdl.mak) [Miodrag Milanovic].
 - 0.145u7            : Removed sdl\sdlmisc_macosx.c and sdlptty_macosx.c. Got rid of some code duplication between the _unix and _macosx implementations for sdlptty and sdlmisc [Wilbert Pol]. Fixed build on non-OS X targets [R. Belmont].
 - 0.145u6            : Fixed formatting of chdman man page (sdl/man/chdman.1) [wallyweek].
 - 0.145u5            : Added osd\sdl\man\mame.6. Removed osd\sdl\man\mame.1. Updated SDL man pages. chdman has formatting glitches but at least matches the binary we ship [wallyweek, R. Belmont].
 - 0.145u4            : Support unofficial (not in the OSD class) num_processors API in SDL used by chdman. Allows chdman to use multiple cores/processors on non-Windows. abort() is intended in this instance (osd\sdl\dview.c) [R. Belmont]. Wilbert Pol fixed typo in sdl/debugosx.m.
 - 0.145u1            : Added osd\sdl\sdlinc.h. hap added SDL cmdline option shortcuts for waitvsync -> vs and syncrefresh -> sr. Couriersud updated SDL os-core to compile against stock SDL-2.0. The SDL team has moved from 1.3 to 2.0. At the same time, changes were made to allow SDL1.2 and SDL2.0 to coexist. All SDL2.0 include files are now in /usr/include/SDL2. Added sdlinc.h to avoid having tons of #ifdef... #include in the code. Scalemode is no longer a per-window setting. Fixed a bug in YUV rendering. Use SDL_GetClipboard (SDL2.0). Updated README_SDL20.txt. Added support for (track)balls to osd\sdl [Couriersud]: To test it, I used my Logitech Trackball (normally a mouse) and configured it as a joystick. Prerequisites: Locate your Linux input device for the trackball. In my case that's /dev/input/event3 "sudo chmod a+r /dev/input/event3" and "export SDL_JOYSTICK_DEVICE=/dev/input/event3". This forces SDL to recognize the trackball as a input device. -mame64 missile -nomouse -w. Configure the trackball axis. Make sure the mouse pointer is outside the window and window still has keyboard focus - most modern window manager should support this. Quit and restart with -mame64 missile -mouse -now to hide the mouse. Voila. Works. Fixed testkeys to work with SDL2.0. Keymaps can now contain SDL1.3 and SDL2.0 mappings. Updated km-de.txt as an example [Couriersud].
 - 0.144u7            : Don't show misleading SDL message for .BDF UI fonts [R. Belmont, The Flying Ape].
 - 0.144u1            : Added osd\sdl\netdev_pcap.c/h. SDL updates [R. Belmont, Carl, cgwg]: pcap network support for OS X and Windows SDL targets. GLSL tweaks to better support the "CRT" shader.
 - 0.144              : Added sdl\netdev.c/h, netdev_tap.c/h and taputil.sh. Carl added TAP/TUN networking capability for SDL and shell script for configuration.
 - 0.143u6            : R. Belmont fixed SDLMAME does not build in OpenBSD.
 - 0.142u6            : SDLsocket Workaround for a problem in the detection of TCP/IP socket address [Michael Zapf].
 - 14th June      2011: R. Belmont - We fully support GCC 4.6.0 and Fedora 15 now as previously mentioned, and the SDL Cabal (it sounds good but we're not that organized) is planning to port the HLSL effects once they've stablized. In more major news, we're going to rewrite the Linux debugger in Qt instead of GTK+ which should make it easier to maintain and add features to. Yes I realize this is going to result in a dependency fire drill for packagers, and I ask in advance that all the great people who package MAME and MESS be patient with us. I'm also looking into providing a native direct PulseAudio output path on Linux, because Pulse-via-SDL imposes a weird delay of several seconds when closing the app and you're not always sure if MAME saw you press Esc. The existing SDL path will of course remain in place and will still be fully supported.
 -  5th June      2011: R. Belmont - The recent release of MAME 0.142u5 marks the start of support for GCC 4.6 series compilers, and for Linux distros based on that compiler. First out of the gate (to my knowledge) was Fedora 15, and MAME and MESS starting with 0.142u6 both should build with no drama on F15. It's possible to build earlier versions on GCC 4.6 with the NOWERROR build switch, but in general we don't recommend that.
 - 0.142u2            : Alex Jackson fixed backwards texture rectangle option for SDL.
 - 0.142u1            : Fixes for non-native SDL builds on OS X [Paulo Cabral].
 - 0.142              : Couriersud fixed font loading in SDLMAME. BDF files are just loaded as TTF by TTF_OpenFont. Load is now protected by a magic check. Also fixed a bug in SDL1.3 keyboard mapping and changed SDL1.3 code to be compatible with recent 1.3 API changes. sdl-config flags are now separated into INCFLAGS and COMFLAGS in sdl.mak. This fixes "make depend" [Couriersud].
 - 0.141u4            : Aaron Giles updated both SDL and Windows to have their own options classes, derived from cli_options, which add the OSD-specific options on top of everything else. Added accessors for all the options so that queries are strongly typed and simplified. Barry Rodewald and R. Belmont fixed uimodekey for MESS in SDL MAME. Fabio Priuli fixed parsing of uimodekey from .ini on SDL.
 - 0.141u3            : GLSL now works for all pixel formats (SDL); fixed memory leak on textures [cgwg].
 - 0.141u1            : Added osd\sdl\sdlptty_os2.c and watchdog.c/h. OSD/SDL again compiles against latest SDL 1.3 SVN. Implemented "-watchdog" option for SDLMAME. "Copy-and-Paste" the "-bench" option from WIN32 to SDL. Makedep now ignores "-include" which is used by SDLMAME to include sdlprefix.h before all other includes. Remove "makedep" stuff from sdl.mak now that the core supports it. Also split sdl-config output between INCPATH and CCOMFLAGS for Linux targets. makedepend now works [Couriersud]. SDL OS/2 fixes [K.O. Myung-Hun]. Added "-syncrefresh" option to OSD/SDL. This will *limit* the game speed to the video refresh rate and works in -mt mode as well. The option has an effect only if "-waitsync" is specified [Couriersud, Chris Kennedy].
 - 0.141              : ElBarto fixed *BSD compilation for SDLMAME. SDLMAME now also looks for fonts in "-fontpath". In addition, moved font config stuff into function search_font_config. This is in preparation to add ttf support to windows SDLMAME build [Couriersud]. Fixed most-likely-to-fail SDL_TTF version check. Added a warning if strikethrough is specified but not supported [Couriersud]. Couriersud fixed SDLMAME for Windows does not work unless you use -window.
 - 0.140u3            : SDL clear and flip 3 times on resolution changes instead of twice, required by some OpenGL drivers [Chris Kennedy].
 - 0.140u2            : Added osd\sdl\sdlfile.h, sdlptty_macosx.c, sdlptty_unix.c, sdlptty_win32.c and sdlsocket.c. SDL update [R. Belmont]: Support -uifont for using arbitrary TrueType fonts on Linux/BSD builds. This takes full pathname/filename to the font, and the name can have styles appended as in Windows: [b] for bold, [i] for italic, [s] for strikethrough, and [u] for underlined. Fonts are rendered at a size of 120 points and scaled down by the core, which looks superb on high-res displays (Liberation Sans that comes with most recent distros looks really good). -uifont now can also look up system font families like Windows. Warning: Linux/BSD builds now require SDL_ttf 2.x. On Fedora the required package names are "SDL_ttf" and "SDL_ttf-devel". OS X support for -uifont [Tim Lindner]. Build fixes for Ubuntu, -uifont non-ASCII rendering fix [R. Belmont, Barry Rodewald]. Mac compile warning fix [Wilbert Pol]. Added ptty (*IX/OS X) and sockets (all SDL builds) capability [Tim Lindner, R. Belmont].
 - 0.140u1            : Aaron Giles updated SDL and Windows OSD to create an osd_interface-derived class and moved their OSD callbacks to be members. Andrew Gardner removed an unnecessary assert in SDL Debugger and brought focus back to the main debugger window on startup.
 - 0.139u4            : Window locations in the SDL debugger are now saved and loaded at exit and startup [Andrew Gardner].
 - 0.138u2            : R. Belmont removed problematic SDL live render type toggle and default OS X to OpenGL. SDLMAME now compiles against SDL 1.3 up to HG rev 4464. Everything beyond that revision is completely broken since Sam ripped out multi-keyboard and multi-mice support. Further information in README_SDL13.txt [Couriersud].
 - 0.138u1            : Fixed SDL compilation for GTK+ 2.20 and later [R. Belmont, Wingman]. Revision 9295 by R. Belmont.
 - 0.137u1            : Oliver Stoeneberg fixed a potential memory leak in sdlwindow_video_window_create().
 - 0.137              : Julian Sikorski fixed Fortify-reported SDL stack smash.
 - 0.136u4            : Couriersud tidied up includes in a number of files in osd\sdl.
 - 0.136u3            : Couriersud cleaned up SDL OSD functions after merging in code from MESS.
 - 0.136u2            : sdl.mak rewrite [Couriersud]: TARGETOS=freebsd may now be given on make invocation. Modular approach, separate sections for opengl, x11, debugger. Most target specific settings parametrized. Added GTL_INSTLL_ROOT to optionally build Win32 with the MAME debugger. On targets supporting "-m64" and "-m32" use them. On unix ppc targets, add -Dpowerpc automatically. Added sdlmisc_<targetos>.c again. This was necessary since certain tools create stubs for e.g. osd_break_into_debugger. If we do not have this in a separate file, the link stage may break. Applied OS/2 patch [Credit: KO Myung-Hun]. Cleaned up #includes. Removed stdlib.h were possible. More malloc to osd_malloc rename. SDL monitor modes are read now when they are needed. This is now consistent across platforms.
 - 16th January   2010: R. Belmont - How to build SDLMAME 0.136u1 and later. Read the instructions here (http://www.bannister.org/forums/ubbthreads.php?ubb=showflat&Number=58111#Post58111). Get the endings.zip utility here (http://rbelmont.mameworld.info/endings.zip).
 - 0.136u1            : Added osd\sdl\README_SDL13.txt, SDL1211_opengl.h, SDLMain_tmpl.h/m, blit13.h, build.mak, debug-cb.h/ign, debug-intf.c/h, debug-sup.c/h, debug.glade, debug.gladep, debugosx.h/m, debugwin.c/h, draw13.c, drawogl.c, drawsdl.c, dview.c/h, gl_shader_mgr.c/h, gl_shader_tool.c/h, input.c/h, ledutil.sh, main.c, osd_opengl.h, osdsdl.h, osinline.h, output.c/h, sdl.mak, sdldir.c, sdlfile.c, sdlmain.c, sdlos.h, sdlos_macosx.c, sdlos_os2.c, sdlos_unix.c, sdlos_win32.c, sdlprefix.h, sdlsync.h, sdlsync_ntc.c, sdlsync_os2.c, sdlsync_sdl.c, sdlsync_tc.c, sdlsync_win32.c, sdlwork.c, shader, shader\genc.sh, shader\glsl_bilinear.vsh, shader\glsl_bilinear_idx16_lut.fsh/.c, shader\glsl_bilinear_rgb32_dir.fsh/.c, shader\glsl_bilinear_rgb32_lut.fsh/.c, shader\glsl_general.vsh/.c, shader\glsl_plain.vsh, shader\glsl_plain_idx16_lut.fsh/.c, shader\glsl_plain_rgb32_dir.fsh/.c, shader\glsl_plain_rgb32_lut.fsh/.c, sound.c, strconv.c/h, testkeys.c, texcopy.c, texsrc.h, video.c/h and window.c/h. SDLMAME makefile improvements [Couriersud]: Fixed TARGETOS detection on OS X. Do not try to check TARGETOS when cross-compiling. For non-windows targets, try to auto-detect PTR64. Testkeys now builds again. For unix targets, added a depend rule to sdl.mak which builds a .depend file. Improved OS X and SDL 1.3 SVN support, try to autodetect SDLMAME targets. Couriersud added BGRA support to -video soft.
 -  7th January   2010: R. Belmont - Unification: MAME 0.136u1 is going to involve some major changes all around, especially for SDLMAME. In order, they are: - New GCC 4.4.x based MinGW32 and MinGW64 toolchains for the Windows versions (this includes both baseline and SDLMAME Windows targets). Visual Studio is no longer required to build for 64-bit Windows and substantial speedups will be seen by users of 64-bit Windows Vista and Windows 7. - MAME is switching from C to C++ and will include some of the features of that language. While MAME has been getting more object oriented over time we've hit the limits of being able to sanely express that in plain C and many concepts will be cleaner/more intuitive in C++. - SDLMAME will become part of the standard MAME source code download. There will no longer be separate SDLMAME releases on this site (I will update the homepage to say so) but the SDL components will continue to be maintained by Couriersud and myself. As a result of this, SDLMAME has lost one minor feature: the ability to use the "scale2x" graphical filter. It was never well-supported and never worked quite right so it was always on the way to destruction, and so it's now gone. SDLMAME gains two new supported platforms in u1: 64-bit Windows and 64-bit Mac OS X (64-bit on the Mac requires OS X 10.6 Snow Leopard, which implies an Intel Mac, and SDL 1.2.14).
 -  4th May       2008: R. Belmont - Here's some nice footage someone recently posted of SDLMAME on the PS3 (http://www.youtube.com/watch?v=q24AXU0o3I8) playing a variety of games. This is why the portability of MAME is cool. And unlike past console MAME setups this won't void your warranty or hurt your ability to play normal games, on or offline. It's allowed by both Sony and SDLMAME.
 - 14th July      2007: R. Belmont - Sven Gothel has delivered working plug-in GLSL support for SDLMAME. This means that starting with 0.117u1 you'll be able to supply your own shader effects to post-process the game image. This is a win-win-win: you can get whatever filter you want (2xSAI, HQ, Eagle, edge-detect, cartoonify, greyscale, sharpen, Gaussian blur), I don't have to ship or support it, and it won't take any of your CPU time, just your GPU time (which is normally quite idle during MAME, especially for Radeon X-series and GeForce 6/7/8-series cards).
 - 21st January   2007: R. Belmont - Will you adore your 64? Here's a few 32 vs. 64-bit SDLMAME benchmarks run on Fedora Core 6. Both versions were run on the 64-bit version. Relevant hardware is: Intel Core 2 Duo E6600 @ 3.2 GHz (ASUS P5B Deluxe, Thermalright XP-90 air cooler), 2 GB of Corsair XMS DDR2 RAM, 512 MB NVidia GeForce 7800GT with 97.46 drivers. Both versions were run with no config file, no artwork and these switches: -window -noswitchres -video opengl -nothrottle -nosound -ftr 5000. In case EEPROM needed initializing (crusnusa, umk3, sexyparo) that was done first before the benchmark run. GCC 4.1.1 20070105 (Red Hat 4.1.1-51) was used in both cases. The 32-bit binary was PM=1 optimized, the 64-bit AMD64=1 optimized. Note: DOAPP was chosen because it runs a 640x480 framebuffer, thus putting max stress on the PSX GPU emulation. Sega System 32 is slower on 64-bit, but it's within the margin of error. In all other cases, 64-bit has a definite advantage, although in no case is it a full speed vs. not distinction. Previous 64-bit Linux benchmarks with XMAME and GCC 3.x showed no win at all, so GCC 4 definitely improves 64-bit codegen. Benchmark (Game: 32-bit / 64-bit): crusnusa: 99.2 / 112.6, propcycl: 32.9 / 43.9, doapp: 137.2 / 155.3, pacman: 2437.8 / 2828.0, galaga: 1843.7 / 2022.6, outrun: 353.9 / 408.8, gforce2: 274.9 / 294.2, contcirc: 434.3 / 479.0, ga2: 200.2 / 197.1, orunners: 116.0 / 119.1, sexyparo: 412.4 / 459.3, rayforce: 288.7 / 329.5, shienryu: 177.4 / 200.9, dnmtdeka: 144.9 / 160.5, umk3: 256.7 / 281.8 and kof98: 426.6 / 499.7.
 - 12th January   2007: R. Belmont - I'm pleased to report that SDLMAME 0.111u3 compiles out of the box on PlayStation 3 Linux, in this case Fedora 5. Pick the "G5" compile target and remove the "-mcpu=g5" when it sets up the CFLAGS - no other modification is necessary.
 - 11th November  2006: R. Belmont - Recent versions of SDLMAME don't get along well with Intel-based Macs using the Intel GMA950 graphics chip, to the extent that OpenGL was slower than software mode. This patch (http://rbelmont.mameworld.info/0110u1_macmini.zip) should correct the problem - it takes OutRun from 30 to 100 FPS in OpenGL mode on my 1.66 GHz Mac Mini. Thanks to arekkusu and Apple's "CHUD" profiling tools for pointing me in the right direction.
 -  8th November  2006: R. Belmont - If you're using ATI's fgrlx drivers on Linux and are sobbing over the inability to use SDLMAME in OpenGL mode, try this patch (http://rbelmont.mameworld.info/0110_ATI.zip) (actually a few replacement source files) for SDLMAME 0.110 which should get things up to speed again (Thanks to Antoine Mine). Please report if the patch works for you on the board http://www.bannister.org/forums/ubbthreads.php?ubb=postlist&Board=8&page=1
 - 31st October   2006: R. Belmont - To get -effect to work on SDLMAME (fix will also work for SDLMESS and SDLHazeMD, but you might need to adjust the line numbers), just follow these directions: http://www.bannister.org/forums/ubbthreads.php?ubb=showflat&Number=24341&Main=24341#Post24341
 - 13th October   2006: R. Belmont - SDLMAME 0.109u2: 0.109u2 includes memory leak fixes (Firewave, RB) and improvements to the Mac OS X debugger (Tim Lindner). Also, unlike u1, it should be generally safe to use *whew*.
 -  7th October   2006: R. Belmont - SDLMAME 0.109u1: Significant OSD changes combined with having to put in some overtime at work make this a more delayed than normal SDLMAME release. This has everything from baseline 0.109u1 plus the SDL improvements seen in SDLMESS 0.109 (namely better handling of the debugger trap and improvements to the Mac OS X debugger). WARNING: File I/O is completely rewritten in this version (both in the core by Aaron and in the SDL layer by me) and therefore it's more likely to be unstable than your typical "u" release. (But the good news is it's no longer a ghastly hack). I've tested several usage scenarios and fixed all the problems I found, but undoubtedly some of you are more creative than I and will find ways to break it. If you just want to play the games, I'd stick with 0.109 for now.
 -  4th October   2006: R. Belmont - The major SDL-layer improvement this time is a set of improvements to the Mac OS X debugger by Tim Lindner. There's a bugfix for scrolling as well as a button to host the popup menu, so it's more obvious that there *is* a menu.
 - 26th September 2006: R. Belmont - SDLMAME 0.109: Up to date with mainline 0.109 (see whatsnew.txt for details). Fixed Win32 builds using pure stock mamedev.org MinGW setups (RB). Added support for generic PowerPC builds (TkChris). Support on Linux, Win32, and Mac OS X for the new "trap to system debugger" functionality (RB).
 - 22nd September 2006: R. Belmont - SDLMAME 0.108u5: For those who haven't been following the "between versions" patches, this includes a fairly large speedup in OpenGL mode, so if that was problematic for you before give it another try. There's also improvements to the Mac native debugger and the FreeBSD compile support. Thanks to Hans de Goede, Ernesto Corvi, Tim Lindner, and Judge for their contributions! A patch (actually 2 replacement files) that fixes Win32 compilation for SDLMAME 0.108u5. BTW, because of the OpenGL speedups, this version can be significantly faster than normal MAME's -video d3d mode on Windows XP if you do not use -prescale. I do not guarantee a speedup in any case, so try for yourself if you're curious. Higher-res games like Prop Cycle and Crusin' USA (or higher color depth like Konami GX) will potentially show the largest speedup over stock.
 - 18th September 2006: R. Belmont - SDLMAME 0.108u4: 1) More cleanup + a pretty major OpenGL speedup by eliminating a copy/conversion pass where possible (Hans de Goede), 2) Fixed a 64-bit issue (Arbee, based on a patch by Hans de Goede), 3) The Mac native debugger is now feature-complete (Ernesto Corvi) and 4) Fixed a crash in the Mac native debugger on PowerPC (Tim Lindner). This patch closes the formerly overly-wide gap between -video none and -video opengl performance and should help out most where it's needed most - slow CPUs and/or "heavy" games like Crusin' USA. CUSA now hits over 100 FPS in-game with graphics and sound going on my Core 2 Duo and is extremely playable.
 - 15th September 2006: R. Belmont - Debug add-on: Here is a source update for SDLMAME 0.108u4. It fixes compiling with the debugger enabled on Linux, and adds an initial test version of the debugger for Mac OS X (no additional packages/frameworks/Darwinports required, it's native Carbon). Right-click on the window to bring up the menus. (I assume that's ctrl-click or command-click on one-button mice?). Big thanks to Ernesto Corvi for the Mac debugger.
 -  7th September 2006: R. Belmont - SDLMAME 0.108u3: In sync with mainline 0.108u3 (NOTE: the new debugger features are not yet available). Fixed centering and possible crashes for non-24/32 bit per pixel displays in soft mode (Hans de Goede). Fixed texture leaking on window resizing and full-screen toggling (Hans de Goede). The window is now created immediately at the correct size in windowed mode rather than creating a default-sized one and resizing it right away (Hans de Goede). Window resizing fixed once and for all (Hans de Goede). Massive cleanup of the SDL code (Hans de Goede).
 -  3rd September 2006: R. Belmont - SDLMAME 0.108u2: Up to date with mainline 0.108u2 (see whatsnew_0108u2.txt for details). Preliminary FreeBSD support (Judge). Fully functional GTK+ multi-window debugger for Linux (Olivier Galibert). Preliminary Mac support for the debugger (Judge). If you turn off all CPU types you now get a fully generic x86 target (TkChris). OPT_FLAGS from the environment are now included with the CFLAGS (TkChris). Improved windowed-mode resize behavior (RB, based on a bug report by Hans de Goede).
 - 17th August    2006: R. Belmont - SDLMAME 0.107u4: Featuring: Up to date with mainline 0.107u4 (see whatsnew_0107u4.txt for details). Artwork compositing works in soft mode (warning: EXTREMELY SLOW! Use OpenGL if you've got it!). Correct error message for -listroms. Various MESS-specific improvements to the OSD layer folded back into the relevant files in SDLMAME. NOTE: There's currently no equivalent to the mainline's new "send outputs to the system" feature. Unix being Unix (yes, even OS X) I'll probaby implement it client/server using a TCP socket, so you can even have the listener on another machine or across the Internet if you like. That's probably the closest thing to a cross-platform consensus on inter-application API we have. (A proper Mac implementation would likely use AppleEvents, and a proper Linux implementation D-BUS, and I'll accept patches towards those ends, but for now sockets works for me). The SDLMAME forum is right here as always (http://www.bannister.org/ubb/ultimatebb.php?ubb=forum;f=37).
 - 12th August    2006: R. Belmont - SDLMAME 0.107u3: SDLMAME users with a console or home computer jones will want to check out SDLMESS 0.107u3 [23.7 MB] (http://rbelmont.mameworld.info/sdlmess0107u3.zip). As always we changed as little as possible from the baseline Windows version, but in this case the UI toggle had to change from "Scroll Lock" to "Insert" (PC)/"Help" (Mac) due to a bug in SDL on the Mac (it doesn't recognize F13/F14/F15/F16). Everything else should work pretty much just as you'd expect, and it's been tested on x86 Linux, Intel Mac OS X, and PowerPC Mac OS X. That said this is a first release and it's based on current MESS CVS rather than a stable release so there are bound to be rough edges.
 - 10th August    2006: R. Belmont - SDLMAME 0.107u3: What's new? * Up to date with 0.107u3 mainline, of course. * -disabledraw changed to -video none to match baseline. * Fixed crashes on non-32bpp ("millions of colors") desktops in soft mode. * Made easier to port to more minimal systems without OpenGL.
 -  4th August    2006: R. Belmont - SDLMAME 0.107u2: SDLMAME 0.107u2 [14.1 MB] is now available. Up to date with MAME 0.107u2. New -disabledraw switch completely shuts off video output for pure CPU benchmarking without video card or driver interference
 - 30th July      2006: R. Belmont - SDLMAME 0.107u1: Everything from mainline 0.107u1. It's now once again possible to build on Linux (only!) with the new debugger. The new debugger is neither complete nor suitable for actual use, contact me if you'd like to help finish it.
 - 29th July      2006: R. Belmont - SDLMAME 0.107_3: 0107_2 was broken for x86 on Linux and Mac (PPC Mac, x86-64 Linux, and x86 Win32 were fine) so here's the latest. NOTE: you MUST "make clean" before applying the patch or the resullts will be unpredictable. Fixed: the x86-64 makefile fix in _2 broke normal x86 on Linux and Mac (Win32 was not affected). Fixed: OpenGL was rendering everything one pixel up and to the left of it's proper position. Thanks to Aaron Giles for noticing I'd copy/pasted a little too much of his D3D code. Added some notes to the documentation pointing people to docs/windows.txt for the "baseline" set of options supported by SDLMAME.
 - 27th July      2006: R. Belmont - Fixed compile problems on Win32 and x86-64 Linux. Mouse capture added. This means that if the mouse is active to control a game and you're in windowed mode, the mouse pointer will now disappear and be stuck inside the MAME window any time MAME is not paused. This duplicates the behavior of Windows MAME and makes mouse control far more usable 'Fast forward' feature added. Now instead of having to toggle F10, you can make MAME go as fast as possible by simply holding down the "Page Down" key. This is great for e.g. DECO Cassette games with long loading or POST times. For support and discussion of SDLMAME, check our our very own SDLMAME forum (http://www.bannister.org/ubb/ultimatebb.php?ubb=forum;f=37), courtesy of Richard Bannister.
 - 23rd July      2006: R. Belmont - SDLMAME 0.106u13_3 is now available [14 MB]. A patch from 0.106u13 or 0.106u13_2 to 0.106u13_3 is here [24 KB] if you already downloaded u13 or _2. See below for details of why _3 is important. Goodies include: * Up to date with baseline u13. * OpenGL code is now optimized and supports ARB_texture_rectangle for even more speed on Mac OS X and some Windows/Linux configurations. * New -hcenter and -vcenter options to center the game screen within the view area. These are separate for each direction to handle dual-monitor cases better. If you have two 4:3 monitors side-by-side you'll want -vcenter on and -nohcenter, or else normal games will be split across your two monitors. (Wide games like OutRunners and Darius 2 will cross the monitors anyway, this is unavoidable). Similarly, with 2 4:3 monitors top/bottom you'd want -centerh and -novcenter. * Software mode now properly clears the unused area when the game geometry changes. * [UPDATE]_2 fixes 2 bad bugs in u13: 1) texture corruption on OS X in windowed mode if the game switched modes in OpenGL mode 2) debug code was accidentally left on that would degrade performance and write "tex{some number}.bin" files all over the place (again, only in OpenGL). * [UPDATE]_3 fixes vector drawing in OpenGL (enjoy the new -beam switch to make the lines fatter and fuzzier - 1.0 is normal, u10 used 1.1, and 5.0 is totally blown out). In addition, the SDLMAME.txt documentation has been revised to reflect that OpenGL works now and stuff. Also, for a sneak peek at the future, here's SDLMAME (see picture) using pixel shaders to apply a more cartoony look to Mortal Kombat II with no CPU usage.
 - 22nd July      2006: R. Belmont - SDLMAME 0.106u13 (available soon) is shaping up quite nicely. I applied several optimizations to the OpenGL code and added support for the older type of non-power-of-2 texturing and the results were collectively fairly stunning on my 2 Mac OS X test machines (my Linux/Nvidia setup is fast no matter what I do to the code, so it's not as good of a benchmark). All results are obtained with -window -video opengl -filter -nothrottle -ftr 5000 -nosound viewpoin (which runs 5000 frames of the NeoGeo shmup Viewpoint as quickly as possible with no sound output). On a dual 2.0 GHz PowerPC G5 tower with an ATI Radeon X800XT Mac Edition graphics card (G5 optimized compile)... SDLMAME u10 test 3: 99.8 FPS, SDLMAME u13: 127.8 FPS and SDLMAME u13 w/non-power-of-2 textures: 149.9 FPS. On a Mac Mini with an Intel Core Duo 1.66 GHz and Intel GMA950 integrated graphics (Pentium M optimized compile)... SDLMAME u10 test 3: 120.9 FPS, SDLMAME u13: 148.4 FPS and SDLMAME u13 w/non-power-of-2 textures: 165.2 FPS. So both machines picked up nearly 50 FPS (unthrottled) on what I think is a fairly representative middle-of-the-road MAME game in terms of power required.
 - 10th July      2006: R. Belmont - SDLMAME 0.106u10 test 3. There are 3 interesting changes in this version: OpenGL is now available as the backend renderer. This brings major speedups vs. software rendering, especially in hi-res full-screen situations. Additionally you may choose to bilinear filter the game graphics when stretching them (or not if you like to see all the pixels). Plus the artwork/bezels/etc are now handled by your video card instead of the CPU (don't worry, they're never bilinear filtered), and vector games are drawn entirely by the video card using antialiasing and translucency for a more accurate looking effect. Try Star Wars or Tempest on a big LCD at full native and you'll never go back. Fixed an issue with the -fullstretch mode where you could cause a "death spiral" and crash by repeatedly rotating a lopsided game such as OutRunners in windowed mode. Added -rdtsc (Win32, Linux, Intel OSX) and -machtmr (PPC OSX) switches so you can choose your timing source. If you have a recent Intel or AMD CPU and your sound fluctuates and skips, these switches are what you're looking for.
 -  5th July      2006: R. Belmont - There was a series of issues with SDLMAME 0.106u10 test 1. This fixes the following: Link fixes for Debian and some other Linux distros. The Mac and Linux builds were not being built with compiler optimizations, which made them far slower than normal. Fixed. As a result of the above, the PowerPC code got too big and I had turned on PPC long branches, which further killed performance. Also fixed. Fixed Win32 build instruction errors (specifically how to handle the includes from the SDL distribution). Fixed file I/O (ROMs being reported as corrupt when they really weren't) on Win32 and enabled non-RDTSC timing for Win32, just like the native builds. Automated some more makefile settings for Mac and Win32 builds - you don't need to worry about the ZLIB/EXPAT settings now for those platforms. So the major thing is that it's faster on all Mac and Linux builds (by a fairly huge margin on PowerPC Macs!), easier to build on the Mac, and the Win32 build works out of the box and is pretty solid now. I still don't recommend using it instead of Aaron's build on Win32, but it's there for the curious.
 -  4th July      2006: R. Belmont - It's been a while, but here's SDLMAME 0.106u10 (http://rbelmont.mameworld.info/sdlmame0106u10_test2.zip). Build instructions are included in the package - look for SDLMAME.txt. There is one addendum to that though: for Mac builds (both PPC and Intel) you need to remove the "#" marks before both "BUILD_EXPAT" and "BUILD_ZLIB" when setting up the options in the makefile. (MinGW builds may also require this depending on how well equipped your MinGW setup is). New stuff in this version: Support (software only) for Aaron's new video engine. Greatly improved windowed-mode behavior. You may now resize and maximize the window and SDLMAME will Do The Right Thing. Support for Win32/MinGW. This is really just for demonstration purposes, although it's a lot less gimpy on Windows than previous SDLMAMEs (SDL 1.2.11 finally fixed their broken DirectSound backend). Support for both PowerPC and Intel Mac OS X. Unlimited software stretching, with or without aspect ratio correction. You may now stretch either in integer steps or in 1-pixel amounts. Just don't expect good framerates filling your 1920x1200 LCD panel. WAV sound logging support. A few known issues: No multi-head or multi-window support, at least until SDL 1.3 is released (I'm guessing fall 2006). No OpenGL yet, and the software stretch can get slow much past 800x600 unless you have a very fast (3+ GHz) PC .Unused areas of the display aren't erased, so you can cause trouble playing with the orientation of multi-screen games in full-screen mode. PSX games probably don't look too great either. (NOTE: in windowed mode this isn't a problem). In full screen mode the image is upper-left justified instead of centered.
 - 11th June      2006: R. Belmont - In addition to the updated games and such we've fixed logging (both to a file and to the terminal) and eliminated the NASM requirement. There's also improved Mac support (you can compile and link on G4 and G5 Macs now, but only sound works) and hopefully improved MinGW support too.
 -  4th June      2006: R. Belmont - SDLMAME had a problem on some systems when exiting the app while in full-screen mode. Updated full source is posted below, and this single source file fixes (http://rbelmont.mameworld.info/sdlmame_1afix.zip) it for folks who already downloaded 1A. There are no other changes between Test 1A and Test 1B.
 -  3rd June      2006: R. Belmont - Endtroducing: What is SDLMAME? It's a port of the base Windows command-line version, simply replacing DirectX with SDL. As a result it retains all of the assembly optimizations, features and command-line switches from that version, except for hardware scaling. Plus it's very lean and very fast compared to other ports of MAME, and you don't have to relearn anything if you're familiar with the Windows version. Joypads and other controllers are fully supported the same way as in Windows MAME, and Alt-Enter even toggles windowed and full-screen modes. WARNING: SDLMAME is not intended for unskilled end-users in it's current form (with a nice front end and suitable binary packaging, that could be very different of course). Of course, if you've compiled MAME or XMAME before and been able to use them directly from the command line, then you can handle SDLMAME no problem. Here's the source for SDLMAME 0.106u1 Test 1B (http://rbelmont.mameworld.info/sdlmame0106u1_test1b.zip). This is based on MAME 0.106u1 with the asmtile removal from u3 backported so it runs properly on CPUs with execute-disable. A canned Mac OS X binary will appear when there's a front end for it (and once I've figured out how Apple's packaging stuff works). Build instructions: on Linux, make sure you have SDL, it's development packages, and nasm installed via apt-get, yum, emerge, or whatever your distro of choice uses. On Fedora 4 or 5, "yum install SDL SDL-devel nasm" will get you going assuming you already have GCC. If you already can compile XMAME/XMESS with the SDL target you're good to go. Just edit the makefile, change the options as necessary, and type "make" (or "make -j2" on hyperthreaded/dual core systems). On Intel MacOSX, you'll need Xcode 2.3 (a free download from http://developer.apple.com/) and SDL 1.2.10. Get SDL here (http://www.libsdl.org/release/SDL-1.2.10.dmg). It will open into a disk image. Click "Macintosh HD" or whatever your disk is named in the left pane of a Finder window, then open the Library folder and drag the SDL.framework folder from the SDL disk image into the "Frameworks" folder. Unzip the SDLMAME source and edit the makefile with your favorite editor (even good old emacs). Change the "SUBARCH=linux" line to "SUBARCH=macosx" (lowercase is important). All of the other defaults are fine for a Mac (in particular, optimizing for the Pentium M series) so save and type "make". "make -j2" is a good deal faster if your Mac has a Core Duo instead of a Core Solo. Again, front ends are needed for both versions, and we'll cough up a more appropriate home page later. If you work on front ends built on cross-platform technology (e.g. C#, Tcl/Tk, Perl, or whatever) here's your big chance: you can target MAME/W on Win32 and SDLMAME on Linux and MacOSX. (I expect it'll be trivial to compile SDLMAME on Open/Free/NetBSD and possibly even BeOS as well). UPDATE: I should note that the default .ini path on Linux is $HOME\.mame\, then the current directory, then ini/. On the Mac, it's the current directory, then ini/. The -inipath switch overrides it in both cases. For now, for questions, we might as well use the M1 forum (http://www.bannister.org/ubb/ultimatebb.php?ubb=forum;f=23). GCC versions from 3.2 to 4.1.1 should work, with varying amounts of warnings. We don't guarantee it compiles free of warnings on any compiler. PS: SDLMAME is brought to you by Olivier Galibert and R. Belmont. Olivier had the idea and did most of the initial port, while RB did the audio, input/controller, execute-disable, and MacOSX support. Coming soon (and I don't know when soon is): the "new debugger", using GTK+, and the "new renderer", using OpenGL (which will eliminate the issue of SDLMAME's lack of hardware scaling).
 -  1st June      2006: R. Belmont - I'm planning to post a preview version of SDLMAME this weekend, thanks in part to the official release of SDL 1.2.10 (http://www.libsdl.org/) that makes Intel MacOSX a fully supported target (the previous experiemental support wasn't an ordeal I was willing to put people, let alone Mac users, through). Linux and MacOSX (Intel only, but Universal binaries will be possible in the future) will be the two initially supported targets, and it'll be based on MAME 0.106u1 without the renderer changes. I'll probably post a canned binary for the Mac (the platform being what it is), so if you have an OSX-compatible or cross-platform MAME frontend your ship is about to come in. Other POSIX-like systems with SDL 1.2.10 available should compile pretty easily (e.g. FreeBSD), and I'll accept trivial patches that add them as valid SUBARCHes if the changes aren't too extensive. Win32/MinGW support will be added at a later date - it's nowhere near as important right now since the default build serves that platform well.



 2.8  MAC OS X

 - 0.277              : Fixed QT6 build for macosx (osd\modules.lua) [holub].
 - 0.274              : Added helper for getting CPU cache line size (lib\osdlib_macosx.cpp) [Vas Crabb].
 - 0.272              : Don't use uninitialised NSRect when creating pop-up button. The initial size doesn't really matter because the pop-up button is resized before being added to the container that holds it and the expression field. The disassembly viewer apparently wasn't updated properly like the memory viewer when the auto-sizing code was refactored. Hopefully this will fix the debugger crashing when restoring window positions from configuration (although I would have thought this would cause crashes in more situations if it was the cause of that) [Vas Crabb].
 - 0.267              : Fixed various warnings (debugger\osx\debugview.mm) [Vas Crabb].
 - 0.260              : Xcode 15 requires explicitly setting -rpath to find the SDL framework (osd\sdl.lua) [R. Belmont, Carbon].
 - 0.257              : Make compile again. Does not yet start up because BGFX tries to force OpenGL (osd\mac.lua and osd\mac\*) [R. Belmont]. 
 - 0.256              : Cleaned up most macOS deprecation warnings up to and including 10.13 (osd\modules\debugger and modules\sound). This raises the hard minimum macOS and SDK versions to 10.13. In practice, the minimum since 0.252 has been macOS 11 Big Sur. 10.13/10.14/10.15 can be built and run with this unsupported patch: https://gist.github.com/rb6502/8a1736ee3775f998e8e71faa47ae4b59. The patch works for me, but no guarantees are offered and it may break at any time [R. Belmont].
 - 0.255              : Really inhibit full screen toggle in debug mode to prevent accidental crashes (mac\video.cpp and sdl\osdsdl.cpp) [AJR].
 - 0.254              : Fixed compile with Clang 14.0.3 on macOS (3rdparty\portmidi\pm_mac) [Curt Coder].
 - 0.249              : MACOS_X_VERSION_10_15 is not defined on really SDKs (debugger\osx\debugview.mm) [ksherlock].
 - 0.248              : Full dark mode support for macOS 10.14 and later [R. Belmont]. Raise requirement for Dark Mode to 10.15 [R. Belmont, kmg].
 - 0.235              : Fixed OSD=mac compile (osd\mac\window.cpp and osd\modules\render\drawogl.cpp) [R. Belmont]. 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) [Vas Crabb].
 - 0.229              : Suggested changes to MacOS to build: Changes in macOS section regarding current build requirements. Added basic info for Apple Silicon to macOS build instructions (docs\source\initialsetup\compilingmame.rst) [mac-a-r0ni].
 - 0.227              : Disable BGFX threading, which causes crashes and wrong drawing on Catalina and Big Sur (scripts\src\3rdparty.lua) [Balrog]. Tidied up compiler warning options for 3rdparty (scripts\src\3rdparty.lua) [Vas Crabb]. Fixed compilation errors in 'posixfile.cpp', for older MacOS/Xcode releases [Masc Guy]. Added macosx_arm64_clang target support (makefile, scripts\genie.lua and toolchain.lua) [R. Belmont, Miodrag Milanovic]. Temp macOS compile fix for bundled SDL2 pending the 2.0.14 release (3rdparty\SDL2\src\atomic\SDL_spinlock.c). Added AudioToolbox framework when building SDL2 on macOS, fixes TOOLS=1 link errors (scripts\src\osd\sdl.lua). Use -Wno-strict-prototypes when building SDL2 on macOS (scripts\src\3rdparty.lua) [R. Belmont]. Temporary hack so most DRC games work on the M1/Apple Silicon (lib\osdlib_macosx.cpp) [R. Belmont, balr0g, Vas Crabb].
 - 0.225              : Standalone makefile support for OSX [Couriersud]. Added build fix for older OS X versions (scripts\src\3rdparty.lua) [AJR].
 - 0.224              : Pass FORCE_C_DRC_BACKEND=1 on ppc architectures: PowerPC architecture is special in a way that it has some inline assembly code but no DRC support. As a result, NOASM=1 was never configured. In contrast to the old DRC, asmjit only compiles on the architectures it supports. FORCE_C_DRC_BACKEND=1 needs to be passed to the makefile or the compilation will fail (makefile) [Julian Sikorski].
 - 0.222              : Updated Travis CI build environments (travis.yml). Switched MacOS build from Xcode 11.0 (MacOS 10.14.6) to Xcode 11.5 (MacOS 10.15.4) [Julian Sikorski]. Fixed OS X build with Xcode 7 (scripts\src\3rdparty.lua). Fixed OS X build on older Xcode versions [AJR].
 - 0.221              : Use Arial Unicode MS as the default font (fixes missing glyphs in many layouts) and fixed deprecation warnings (font\font_osx.cpp) [R. Belmont]. Avoid crashing in OS X debugger when a nonexistent disassembly or memory view is selected (which may happen automatically with .cfg files) [AJR].
 - 0.215              : Work around Retina issue on MacOS Catalina until SDL catches up (render\drawogl.cpp). SDL -video auto on MacOS now selects BGFX rather than OpenGL for future-proofing (sdl\video.cpp) [R. Belmont]. Get rid of allocWithZone as it's ignored on 64-bit ABI. Missed a couple of Mac debugger things (debugger\osx\disassemblyview.mm and memoryview.mm) [Vas Crabb].
 - 0.215              : Fixed build on Apple LLVM version 7.0.2 (clang-700.1.81). The same fix might also be needed for some non-Apple Clang versions [AJR].
 - 0.214              : Added scripts\src\osd\mac.lua, mac_cfg.lua, osd\mac\appdelegate.h, appdelegate.mm, macmain.cpp, main.mm, mamefswindow.h, mamefswindow.mm, oglview.h, oglview.mm, osdmac.h, video.cpp, window.cpp, window.h, windowcontroller.h and windowcontroller.mm. Fixed exception on MacOSX (netlist\plib\pfmtlog.cpp). Some unknown system library seems to force the use of the global locale on OSX. This is not the case for other *nix or Windows builds. This commit fixes this by forcing the C locale in pfmt. Fixed SUBTARGET nl and move netlist makefile to GCC-9 [Couriersud]. Preliminary Mac native OSD. Not working yet. This will compile, link and run a driver all the way to the first info screen, provided you use -video bgfx [R. Belmont].
 - 0.209              : Updated OS X debugger window titles when restoring configuration for disassembly and memory viewers (osx\disassemblyviewer.mm and memoryviewer.mm) [AJR]. Fixed compiling with Xcode 10.2 on MAC OS. This shouldn't affect any other Clang configurations (or any older Xcodes); LMK if problems occur (3rdparty\asio\include\asio\detail\config.hpp) [R. Belmont].
 - 0.203              : Support for MAC OS Mojave (10.14) (build\gmake.darwin\genie.make). Fixed compiling with SDL 2.0.8 and later on MAC OS [R. Belmont]
 - 0.200              : Fixed getting unwanted macros and out of discovered "check" [AJR].
 - 0.194              : Detect attached debugger on OSX before generating trace/breakpoint trap [Vas Crabb].
 - 0.191              : Xcode 9 compile fix (ui\selgame.cpp) [Curt Coder].
 - 0.189              : Use proper font metrics and handle space glyphs with null bounding box on OS X. 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) [Vas Crabb].
 - 0.188              : Added basic support for saving/restoring Cocoa debugger window state, compatible with Qt debugger where possible. Fixed some Cocoa debugger desync issues. Scroll to selection on gaining focus by keyboard (e.g. tab) only. Fixes jump on clicking a memory or disasm view that you've scrolled. Make XML file a class of its own managed with smart poitners. Added a method for copying part of an XML tree into another tree and use it to fix Cocoa debugger fatal error (util\xmlfile.cpp). Save/restore console split positions in cocoa debugger [Vas Crabb]. Fixed include path with USE_LIBSDL on macOS. The cflags will contain an include path ending in "SDL2", not just "SDL", and removing just the latter leaves a stray "2" on the end (osd\sdl_cfg.lua) [Joshua Root].
 - 0.185              : Fixed OS X tools build when MAME_DIR includes spaces (src\tools.lua) [AJR].
 - 0.182              : Fixed OSX build (CGFloat; osx\debugconsole.mm) [Vas Crabb]. Autoscroll log window for OS X Cocoa debugger. Improved view scroll behavior [Curt Coder].
 - 0.180              : Fixed MacOS build (scripts\genie.lua) [Miodrag Milanovic].
 - 0.177              : Remap "P1 Mahjong Score" to / key for OS X (input/input_sdlcommon.cpp; 78-key Apple MacBook & Bluetooth keyboards have no right control key) [AJR]. Warp mode for relative mouse on OSX SDL 2.0.4 [Brad Hughes].
 - 0.176              : Removed #include <codecvt> (lib\osdlib_macosx.cpp and osdlib_unix.cpp) [Vas Crabb].
 - 0.175              : Fixed mouse behavior on OSX [Brad Hughes].
 - 0.174              : Try to support older XCode (scripts\src\3rdparty.lua) [Miodrag Milanovic].
 - 0.173              : Removed sdl\osxutils.h/mm. Fixed OSX x86 invalid intptr_t conversion (sdl\output.cpp:86:50: error: format specifies type 'int' but the argument has type 'intptr_t' (aka 'long')) [Jeffrey Clark]. Removed sdl\osxutils.h/mm, not needed anymore after move to C++11 features [Miodrag Milanovic].
 - 0.172              : Made Xcode params more generic [Miodrag Milanovic].
 - 0.171              : Check STRIP_SYMBOLS in strip function and add strip support for OSX. OSX Clang, silence flac unknown attribute error [Jeffrey Clark].
 - 0.170              : Don't link metal pre El Capitan (scripts\src\osd\sdl.lua) [Vas Crabb].
 - 0.169              : Silence warnings on OSX Clang3.0 (issue #480) (sound\samples.cpp and emu\emuopts.cpp) [OSresearch, R. Belmont]. OSX version of Clang 3.5 is actually 3.4 with features. OSX version is taken on different way so it is considered 6.0 [Miodrag Milanovic]. Allow SDLMAME to build on OS X from paths containing spaces (and allow SOURCES option as well) [AJR]. Support 64 and 80-bit floats in OS X debugger (osx\memoryview.mm) [R. Belmont].
 - 0.168              : Fixed BX/BGFX on older OSX (3rdparty\bx\include\bx\macros.h and os.h). Clean up some stuff that upsets GCC5 (osx/debugwindowhandler.m, devicesviewer.m, sdl/aueffectutil.m and sdlos_macosx.c). Let's assume no-one uses a broken PowerPC 450 core in a multi-CPU configuration (osd\eigccppc.h and modules\sync\sync_ntc.c). Enable metal on El Capitan (bgfx\src\config.h) [Vas Crabb].
 - 0.167              : Fix for some configurations (debugger\osx\debugview.m). Fixed OS X PowerPC build (video\rgbvmx.c) [Vas Crabb].
 - 0.166              : Fixed netdev\pcap.c crashes on OS X [Rob Braun]. Fixed build with Xcode 7. Travis Mac OS X build [Balrog].
 - 0.165              : Fixed crash in osx\debugview.m [Wilbert Pol].
 - 0.163              : Fixed PMF extension doesn't work on OSX [Vas Crabb]. Fix for osx 10.6.x build [Miodrag Milanovic].
 - 0.162              : Fixed drivers using ioport_arrays on OSX (emu\devfind.h) [Wilbert Pol]. Fixed OS X compile (netlist\palloc.c and pstring.c) [Curt Coder].
 - 0.161              : Fixed TOOLS linking on OSX. Embedded version information for OSX. Fixed OSX build with Clang on 10.7.x. Skeleton for XCode support. Added back support for big endian targets including OSX-PPC. Fixed ForceCpp for XCode4. Start adding .h and .inc files to help usage inside IDE's like VS and XCode [Miodrag Milanovic]. Make MinGW and OSX targets use dependencies for running GENie. Use REGENIE=1 to force GENie re-run without removing/touching files. Mark many targets as phony as appropriate. Improved situation for custom targets/OSDs. Build Qt debugger on OSX if requested. Fixed BGFX leak of autoreleased objects and support OS X 10.6 Snow Leopard. Enable BGFX by default on Snow Leopard. Don't automatically disable BGFX for 10.5 Leopard [Vas Crabb].
 - 0.160              : Fixed fullscreen toggle for the accel driver on OSX [Couriersud].
 - 0.159              : Removed sdl\netdev_pcap_osx.c. Fixed SDL1.2 (OSX, Linux and Windows) (sdl\video.c). Fixed fullscreen toggling (SDL2) on OSX [Couriersud]. Added BASELIBS for MACOSX_USE_LIBSDL (sdl\sdl.mak) [Parry]. Embedded verinfo property list in OSX binaries (sdl\sdl.mak) [Vas Crabb].
 - 0.154              : Prevent segfault on OSX (emu\clifront.c). Prevent other possible bad things happening (emu\emucore.h) [Wilbert Pol].
 - 0.152              : Curt Coder fixed make depend on OS X (build\makedep.c).
 - 0.151              : Better Clang support, necessary for Xcode 5.0 on OS X (sdl\sdl.mak). Fixed Xcode 5.0.1 build (web\json\reader.h) [R. Belmont]. Xcode 5.0 compile fixes (mess\drivers\tk80bs.c, zexall.c and machine\ti99\genboard.h). Note: Xcode is an integrated development environment (IDE) containing a suite of software development tools developed by Apple for developing software for OS X and iOS [Curt Coder].
 - 0.149u1            : Fixed OS X 10.5 compile (machine\pccard.h and machine\k573cass.h). OS X 10.5 says hi (added ~ide_device_interface() {} in machine\idehd.h) [R. Belmont].
 - 0.148u2            : Make Ethernet pcap work on Mac OS X & disable unnecessary packet filtering [Rob Braun].
 - 0.148u1            : Fixed Qt debugger on Mac OS X [Balrog].
 - 0.148              : Qt debugger support cleanup, fixed OS X crash [qmc2, R. Belmont].
 - 0.146              : Fixed OS X PowerPC compile [R. Belmont]. Don't optimize TMS57002 on OS X PowerPC builds [Couriersud].
 - 0.144u7            : R. Belmont fixed 64-bit Intel OS X compile w/latest Xcode (sdl/gl_shader_tool.c) and PPC OS X.
 - 0.143u3            : R. Belmont fixed cothreads to run on PowerPC Mac OS X.
 - 0.143u2            : Tim Lindner fixed autorelease pool warnings when running multithreaded on Mac OS X.
 - 0.142u1            : Couriersud fixed loading fonts on MacOSX.
 - 0.141              : qmc2 fixing compiling process (machine\s3c24xx.c) on Linux and MacOSX.
 - 0.138u2            : Fixes for OS X PowerPC compile [R. Belmont].
 - 0.136u1            : Added osd\sdl\osxutils.h/m.
 - 0.130u1            : Fixed cross-compile SDLMAME for PPC on Intel Mac (zlib is building as i686).
 - 0.121              : Vas Crabb fixed compilation problems with altivec accelerators.
 - 0.120u4            : Vas Crabb added an Altivec/VMX implementation (video\rgbvmx.h) of the RGB utilities for our friends with G4, G5 and POWER5 CPUs (rgbvmx.h) and added rgbint_bilinear_filter and rgbaint_bilinear_filter to rgbsse.h (based on rgb_bilinear_filter/rgba_bilinear_filter) for completeness, as these functions exist in rgbgen.h.
 - 0.114u4            : Vas Crabb updated the MIPS3 DRC to align the stack to sixteen-byte boundaries at the point of calls, as required by Mac OS X calling conventions. It doesn't break compatibility with Windows or Linux calling conventions. This fixes crashes in MIPS3 games when running on OS X for Intel.
 - 0.96               : Brad Oliver fixed problem with beatmania games on the Mac.
 - 0.79u3             : Nathan Woods added -createblankhd and -copydata commands, new arguments to -createhd and ported it to Macintosh.
 - 0.72u1             : Nathan Woods changed one of the #include paths in sndhrdw\jaguar.c (due to ProjectBuilder on Mac issues)
 - 24th April     2003: Aaron Giles fixed the sound in Revolution X that got broken with the Mac changes.
 - 21st March     2003: Brad Oliver fixed a problem in the ADSP-210x CPU core that occurred in MacMAME.
 - 15th March     2003: Brad Oliver fixed a few compiling bugs that affected MacMAME.
 - 15th June      2002: Brad Oliver fixed a few more bugs that caused problems on the Mac side.
 - 19th February  2002: Brad Oliver re-submitted a few fixes to compile problems on the Mac side.
 - 24th January   2001: Brad Oliver fixed some compilation bugs which affected the Mac port.
 - 18th January   2002: Brad Oliver fixed several driver problems that occurred on MacMAME.
 - 0.33b6             : On the Mac, the dynamic palette uses 254 colors instead of 256. Due to this, now ALL drivers using VIDEO_MODIFIES_COLOR and 256 colors must call palette_recalc() like the others [Aaron Giles].
 - 0.29               : Formalized support for dirty rectangles, via the function osd_mark_dirty() [Aaron Giles]. It is mostly used by MacMAME, limited DOS support added by Bernd Wiebelt.



 2.9  UNIX

 - 0.274              : Added helper for getting CPU cache line size (lib\osdlib_unix.cpp) [Vas Crabb].
 - 0.213              : Fixed 'cleansrc' target for Unix/Linux (makefile) [Christian Groessler].
 - 0.200              : Fixed crash when running a DRC CPU core under Emscripten (lib\osdlib_unix.cpp) [Justin Kerk].
 - 0.167              : Added bus\rs232\pty.c/h, emu\dipty.c/h and ui\info_pty.c/h. Changed pstname_r to ptsname for OSX compatibility. Added inclusion of stdlib.h on systems != Linux (sdl\sdlptty_unix.c). PTY support for u*x OSes (PseudoTerminal) [F.Ulivi].
 - 0.79u2             : R. Belmont fixed Unix compile (renamed rand_r in namconb1 driver).
 - 0.33b5             : Several fixes to improve Unix portability [Hans de Goede].
 - 0.28               : Remove src\unix\aix.c, audiosrv.c, audiosvr.c, Copyright, hpux.c, irix.c, keyboard.c, lin2ulaw.c, lin2ulaw.h, linux.c, main.c, makefile, netbsd_i386.c, README, sndserver.c/h, solaris.c, sound.c, sunos.c, xdep.c, xmame.h and xmamerc.dist.
 - 0.24               : Added unix\audiosrv.c, audiosvr.c and netbsd_i386.c. Removed unix\unix.c.
 - 0.23               : Removed unix\SNDSERVE.C and COPYRIGH.
 - 0.22               : Added unix\aix.c, COPYRIGH, SNDSERVE.C, sndserver.h and xmamerc.dist.
 - 0.21               : Added src\unix\Copyright, hpux.c, keyboard.c, lin2ulaw.c, main.c, Makefile, sndserver.c, sound.c, xdep.c and xmame.h.
 - 0.20               : Added src\unix\irix.c, lin2ulaw.h, linux.c, solaris.c and sunos.c. To UNIX users: Sorry for the mess I did in my previous distribuition [Mirko Buffoni]. All names and patches should be ok now.
 - 0.09               : UNIX port by Allard van der Bas and Dick de Ridder.



 2.A  NetBSD/OpenBSD

 - 0.267              : Added missing #include <cmath> for std::lround() (input\input_sdl.cpp) (Build MAME on NetBSD) [Thomas Klausner].
 - 0.255              : Set LinkSupportCircularDependencies for FreeBSD as well as NetBSD (scripts\genie.lua) [Vas Crabb].
 - 0.247              : Added support for building on OpenBSD/arm64 [Frederic Cambus].
 - 0.246              : Explicitly set LinkSupportCircularDependencies for NetBSD (scripts\genie.lua). Fixes GitHub #10011 [Thomas Klausner]. Added support for building with Clang on OpenBSD [Frederic Cambus].
 - 0.229              : Declare intent when requesting virtual memory for NetBSD (lib\osdlib_unix.cpp) [Vas Crabb].
 - 0.228              : Fixed build on FreeBSD/powerpc64. FreeBSD uses powerpc64 name for what Linux calls ppc64 [pkubaj].
 - 0.174              : Fixed NetBSD (scripts\src\3rdparty.lua) [Thomas Klausner]. Allow building on OpenBSD [Frederic Cambus].
 - 0.168              : Added missing header to fix build on NetBSD (sdl\sdlptty_unix.cpp) [Thomas Klausner].
 - 0.167              : Fixed build on NetBSD (3rdparty\bx\include\bx\os.h and platform.h) [Thomas Klausner].
 - 0.164              : Re-added NetBSD support [Thomas Klausner].
 - 0.164              : Implement missing osd_truncate(). Fixes linking on Unix when SDL is disabled (osdmini\minifile.c). Added NetBSD support to BX. Added NetBSD support [Thomas Klausner].
 - 0.159              : Defined network API to use on NetBSD. Fixes build on NetBSD (sdl\sdl.mak). Fixed build on NetBSD and possibly Solaris (3rdparty\mongoose\mongoose.c). If _XOPEN_SOURCE is defined to 600, NetBSD does not provide strtoll and other stuff [Thomas Klausner].
 - 0.142u2            : Fixed build on NetBSD and other systems where toupper() is a macro (util\astring.h) [Thomas Klausner].
 - 0.141u2            : NetBSD support [Thomas Klausner]: Added -Wno-conversion unconditionally to disable the warnings Thomas reported. That setting is the default for GCC out-of-the-box but apparently not on NetBSD. As far as I know it shouldn't cause a problem with any GCC version back to at least 4.0.0 so we're safe even on PPC OSX, but do let me know if hilarity ensues [R. Belmont].



 2.B  ANDROID/ARM

 - 0.281              : Added scripts\build\llvm-objdump-filter.py. Improved support for building on Windows arm64. Manage objdump processes from python. Avoids issues with inconsistent shell behaviour (dist.mak, scripts\build\llvm-objdump-filter.py, scripts\src\main.lua and scripts\src\osd\modules.lua) [Vas Crabb].
 - 0.259              : Fixed MinGW AArch64 issues (GitHub #11521): Don't enable SSE on MinGW ARM64 targets (scripts\src\3rdparty.lua). Added Windows ARM64 support (diagnostics\diagnostics_win32.cpp) [Invertego].
 - 0.253              : Removed local copy of SDL source (3rdparty\SDL2\*) and update Android build support. Updated android-project\app\build.gradle. Updated SDL2 Java support glue code. Increased minimum supported Android API version to 24. Updated required asset files for Android app. Added proper tag for Android logging. Added SDL2 hint to make BGFX work on Android [Miodrag Milanovic].
 - 0.235              : Use log write calls directy on Android (osd\osdcore.cpp) [Miodrag Milanovic].
 - 0.225              : Auto-discover Clang version. Fixed android builds after mame-0.224 (makefile) [Tiago Camargo].
 - 0.224              : Use posix_memalign with ANDROID (netlist\plib\palloc.h) [Tiago Camargo].
 - 0.205              : Android compile fix. These fixes enable Android builds to work with NDK r18b, latest Android Studio and latest Gradle as well [Miodrag Milanovic].
 - 0.189              : Added 3rdparty\SDL2\src\audio\android\opensl_io.c/h, android-project\app\src\main\assets\mame.ini and ui.ini. Modification for Android build (NDK r14b, build-tools 21.1.2 and gradle 2.2.1) [Miso Kim].
 - 0.177              : Set Android 5.0 as minimum one, older API are not compatible [Miodrag Milanovic].
 - 0.176              : Android strip SDL lib (src\3rdparty.lua). Added android build folders (scripts\toolchain.lua). Fixed Android x86 and x64 full build. Abuse namespace [Jeffrey Clark].
 - 0.175              : Fixed build (_ prefixed names; netlist\nl_setup.h) [Miodrag Milanovic]. Allow full build on Android: Renamed si_status to si_status_val in n64 as si_status is a preprocessor macro on Android. Renamed PAGE_MASK to page_mask in samcoupe to avoid clash with macro (it's a local anyway). Abuse namespaces to get around the conflict between our x86emit::REG_Rn and Android's ::REG_Rn in DRC [Vas Crabb]. Changed array assignment to double brackets for C++11 and Android compatibility (machine\iteagle_fpga.cpp) [Ted Green]. Fixed Android target libSDL2 circular ref. Also rename ANDROID_NDK_ROOT -> ANDROID_NDK_LLVM to point directly to prebuilt host compiler (removes windows only restriction). 64bit strip, platform version support. Cleanup make targets and configuration rules. Fixed android_ndk_root env test [Jeffrey Clark].
 - 0.174              : Updated to latest build tools for Android [Miodrag Milanovic].
 - 0.173              : New Android icon images (res\drawable-xxxhdpi\ic_launcher.png) [JacKc]. Fixed joystick on Android preventing application to crash, cleanup init for SDL in total [Miodrag Milanovic].
 - 0.172              : Removed NaCl (Google Native Client) and fixed and PNaCl (Portable Native Client) (makefile, scripts\3rdparty.lua, genie.lua and toolchain.lua). Make Android targets compile but not link, using Clang compiler in NDK, since GCC will be removed in next one. Fixing some Android related things and compile. Added support for x64 Androids. Added compiling SDL2 for Android + Build SDL2 for Android. Support for AArch64 (32/64-bit ARMv8-A; makefile). Initial work to make MAME work on Android [Miodrag Milanovic].
 - 0.161              : Fix for Android include ordering. Fixed android compile [Miodrag Milanovic].
 - 0.160              : Official proposal for Android fix. MAX_CLOCKS is defined in Android SDK [Miodrag Milanovic].



 2.C  Raspberry Pi

 - 0.229              : Unbreak aarch64 and arm builds (makefile). Fixes compiler error on Raspberry Pi [Julian Sikorski].
 - 0.172              : Added support for Raspberry Pi cross-compile. Compile BGFX for RPI as well [Miodrag Milanovic].
 - 0.169              : Fixed Raspberry Pi 2 compile (audio\upd1771.cpp). Build system now autodetects and builds cleanly on Raspberry Pi 2 [R. Belmont].



 2.D  SOLARIS VERSION

 - 0.213              : Fixed Solaris 2.11 (non-Oracle) [Rick V].
 - 0.158              : Solaris 11 build support and minor fixes [Couriersud].
 - 0.77u3             : Patch for Solaris [Lawrence Gold]. The patch replaces the uses of sqrtf and floorf, which aren't available on that platform, with their double-precision counterparts. Please let me know if this is a problem, in which case I can add some special-case #defines for Solaris.
 -  1st December  2003: Lawrence Gold sent in a patch that fixes some code on Solaris.



 2.E  UME

 - 0.162              : Moved src\ume\dummy.lst to src\mame\. Removed ume\osd\windows\ume.ico, ume.man, ume.rc, ume\tiny.lst, ume.c, ume.lst and ume.mak.
 - 0.161              : Added scripts\target\ume\dummy.lua src\ume\dummy.lst. Exclude rc's in UME build (ume\ume.lua). Added missing devices ES1373 sound and VOODOO_PCI in UME (ume\ume.lua). Made UME target include MAME and MESS targets. Added UME subtarget dummy so can test compile of all devices [Miodrag Milanovic].
 - 0.149u1            : Fixed UME validation (Arcadia -> Arcadia (NMK)) [David Haywood].
 - 0.147u1            : Added resources and icon for UME / added UME support to verinfo and updated the usage string [David Haywood].
 - 0.147              : Made "make depend" to create files per target, also added "make depend_ume" as new target in case UME is used, since then it becomes complicated. Added proper name of generated mak (makefile, src\ume\ume.mak) [Miodrag Milanovic].



 2.F  MESS

 - 0.165              : Added floppy noises to some MESS drivers [Robbbert].
 - 0.159              : Added missing generation of MESS resources. Still doesn't fix the missing details (mess\osd\windows\windows.mak) [Oliver Stoeneberg].
 - 0.154              : Changed mess.mak to display compilation of ymmu100.ppm nicely. Cleanup of image device interfaces [Miodrag Milanovic].
 - 0.148u2            : Silencing clrmamepro. Fixed repeated descriptions [Fabio Priuli].
 - 0.146u1            : Miodrag Milanovic fixed system crash in MESS regarding -ramsize and internal UI, also now in case ram value is not proper it change itself to default value.
 - 0.145u7            : SoftFloat changes for last CL and x07 tape format from MESS [Miodrag Milanovic].
 - 0.143u4            : Fabio Priuli fixed handling of compatible systems for MESS (driver.h). Fabio Priuli removed support for PORT_CATEGORY from the core, since PORT_CONDITION is enough to deal with removable controllers in MESS.
 - 0.142              : Split the <info> field (added some time ago to handle compatibility requirements) into <info> and <sharedfeat> (softlist.c). The former stays tied to the whole software entry, the latter gets inherited by each part [Fabio Priuli].
 - 0.141u1            : Miodrag Milanovic moved MESS RAM device into emu core. Added COMP and CONS macros in driver.h. Moved image devices implementation and related UI functions to emu section from MESS. Fabio Priuli added support for a new template to -snapname so that it is possible to use the name of images mounted in the devices (for MESS). Namely, it is now possible to use %d_XXXX to prescribe usage of the image mounted in the device XXXX.
 - 23rd June      2010: Guru - The i8742 MCU for PC keyboard BIOS 4 just received and has now been successfully processed (decap, de-protect & read).
 - 0.137u3            : Fabio Priuli fixed keyboard detection (mainly for MESS) (inptport.c).
 - 0.137u2            : Fabio Priuli added a new input type IPT_KEYPAD for MESS, to distinguish between fully featured keyboards and keypad controllers.
 - 0.136u4            : ui.c, ui.h, windows\input.c [Miodrag Milanovic]: Removed ui_use_new_ui check used by MESS code. Moved ui_mess_handler_ingame call in proper place, so device UI callbacks works again. Removed toggle of menu bar (MESS related).
 - 0.136u3            : Simplified/combined MAME and MESS code [Miodrag Milanovic]: Moved compatibility validation into MAME core from MESS. Made GAME_NO_SOUND check done on MESS too. Removed MESS dependent checks. Renamed GAME_COMPUTER_MODIFIED to GAME_UNOFFICIAL to mark unofficial hardware modifications. Removed GAME_COMPUTER it is distinct by IPT_KEYBOARD. Added GAME_NO_SOUND_HW (to mark that there is no sound hardware) and marked drivers in dotrikun.c, minivadr.c and tgtpanic.c as such. Removed GAME_SHARE_ROMS flag and commented old check for duplicate ROM entries. Moved natural keyboard support from MESS to MAME. Moved OSD file functions and clipboard access functions into OSD core. Significantly reduced the number of new OSD functions needed by MESS [with Couriersud].
 - 0.134              : Curt Coder fixed access violation in MESS skeleton drivers with empty INPUT_PORT sections.
 - 0.133              : Several MESS-specific SNES fixes for rendering [Angelo Salese].
 - 0.132u3            : Curt Coder added default monochrome amber and green palettes.
 - 0.131u1            : Curt Coder converted the WAVE sound device to stereo (for MESS) [Curt Coder].
 - 0.130u4            : Fabio Priuli factored out MESS-specific code from machine\atari.c (cart init, loading & unloading).
 - 0.129u6            : Rene Reucher fixed auditing of ROM-less systems (for MESS).
 - 0.127u1            : Nathan Woods readded generic calls to install memory handlers that were in long before 0.126u5 - these are useful on the MESS side for things like the PC driver.
 - 0.123u1            : Atari Ace fixed some MESS cores that were broken by the deprecat.h changes.
 - 0.117u1            : Nathan Woods fixed bug in screenless systems.
 - 0.111u5            : Nathan Woods fixed missing sound interfaces from the MESS sound core merge.
 - 0.111u2            : Nathan Woods added the remaining MESS CPU cores to MAME. They are disabled in the build, but will be maintained along with the MAME CPU cores as future changes are made.
 - 0.111u1            : Nathan Woods adding remaining MESS sound cores to the core MAME sources.
 - 0.110u5            : Nathan Woods merged in some MESS-specific PC support code.
 - 0.110u1            : Aaron Giles added new field Machine->basename which is used to describe the path used for various file accesses. This is a helper for MESS, and should not have any user-visible changes. The file accesses affected are: configuration (cfg) files, snapshots, debugger comments, NVRAM and memory cards.
 - 0.106u8            : Nathan Woods moved MESS-specific Atari FDC code into a MESS specific file, in addition to fixing bugs.
 - 0.106u5            : Nathan Woods added the ability to specify a callback when a given option is parsed. This is used on the MESS side to add system-specific command line options.
 - 0.104u1            : Nathan Woods altered the way MESS interacts with the core config system.
 - 0.102u3            : Nathan Woods added a MESS specific ROM entry type, and changed ROM entry processing code to ignore any unrecognized ROM entry types. Merged in recent changes to the PC share code from MESS.
 - 0.101u3            : Lawrence Gold fixed MESS UI code that prevented P and Esc from being intercepted properly. Nathan Woods merged in recent updates from MESS PC emulation code.
 - 0.99u9             : Nathan Woods cleaned up MESS hooks into the input port system.
 - 0.95u1             : Nathan Woods added a MESS specific option to FILETYPE_SCREENSHOT (src\fileio.c).
 - 0.95               : MESS specific sndintrf update [Nathan Woods].
 - 0.93u2             : MESS specific usrintrf patch [Nathan Woods].
 - 0.89u2             : Nathan Woods removed some obsolete MESS code.
 - 0.88u6             : Minor MESS specific patch [Nathan Woods].
 - 0.88u3             : Nathan Woods added a MESS specific CPU core (src\cpuintrf.c). Fixed a few input group declarations on MESS specific input types.
 - 0.86u5             : Cleaned up some MESS related code [Nathan Woods].
 - 0.85u1             : Rene Single cleaned up some #ifdef MESS and united the two definitions of my_stricmp.
 - 0.85               : Nathan Woods made some MESS-specific additions to the new input configuration code.
 - 0.84u6             : Nathan Woods added several more default strings and some MESS-specific fixes.
 - 0.84               : Miscellaneous cleanups and refactorings done primarily to support a new MESS specific feature. Also removed some '#if 0' code [Nathan Woods].
 - 0.83               : smf added PSX PAL support for MESS.
 - 0.81u4             : Nathan Woods fixes a problem with x86drc.c in src\windows\windows.mak. Adds in a new (windows only) mode for opening files whereby files can be opened for read/write, but changes are not actually not written to the original file but rather to a temporary file. This trick is used by the MESS testing facility so that tests do not mutate the images they operate on (src\windows\fileio.c + small cleanups). Replaces a #ifdef MESS/#else/#endif combo with a usage of the APPNAME macro in png.c.
 - 0.80u2             : Nathan Woods changed MESS specific file type from FILETYPE_CRC to FILETYPE_HASH in src\windows\fileio.c
 - 0.80u1             : Minor changes related to MESS's mouse device (within #ifdef MESS) [Nathan Woods].
 - 0.80               : Nathan Woods changed video_window_proc() to win_video_window_proc() and made non-static so that MESS's window proc can call it. Changed win_init_window() to use MESS's window proc (within #ifdef MESS of course). Added a win_suspend_directx global variable to temporarily turn off DirectX usage (used in MESS). Added a few minor MESS specific #ifdefs.
 -  4th March     2004: Nathan Woods improved the window handling for MESS and added cpu_getscanline functions that return mame_time.
 - 0.77u3             : Misc fixes for MESS [Nathan Woods]: Added auto_strdup(), just an auto_malloc'd version of strdup() (common.c/h). Cleanups in UI string support, primarily to more easily support MESS specific strings without modifying MAME files. Also removed uistring_shutdown(), which is made unnecessary by auto_strdup() (ui_text.c/h, mame.c). Added osd_die() function; a friendlier way to die in some unexpected fatal way than exit(-1) or [shudder] raise(SIGABRT) (osdepend.h, cpu\z80\z80.c, windows\config.c). Added #ifndef <headername>_H protection (harddisk.h, chd.h). Added minor code within #ifdef MESS (windows\config.c).
 -  1st December  2003: Nathan Woods fixed some small MESS-specific things in the code.
 - 0.77u2             : Merged in some #ifdef MESS'd code (windows\fileio.c) [Nathan Woods].
 -  7th November  2003: Nathan Woods improved some MESS-specific functionality in the UI code.
 - 0.76u2             : Integrates some MESS specific fileio functionality (within #ifdef MESS). Removing the update procedure in a MESS specific sound core [Nathan Woods].
 - 0.76u1             : Nathan Woods added 'GAMENOUN' and 'GAMESNOUN' macros; defined to be the human readable text for the words 'game' and 'games' respectively (this is so MESS can use the nouns 'system' and 'systems').
 - 20th October   2003: Nathan Woods sent in another small patch that improves some MESS-specific functionality.
 - 0.75               : Nathan Woods moves the MESS specific code into a separate module, reducing #ifdef clutter.
 - 0.74               : Minor change to recognize MESS IPT_CONFIG input ports (src\inptport.c). Minor changes within #ifdef MESS (src\driver.h). Changed some of the prototypes to use 'mame_file *' instead of 'void *' (src\legacy.h). Added APPNAME and APPLONGNAME macros to define the name of the program (MAME/M.A.M.E. vs MESS/M.E.S.S.) (src\mame.h). Added some MESS specific templated blitters within #ifdef MESS (src\vidhrdw\jaguar.c). Misc changes to support MESS's menu bar (should not affect MAME). Misc changes to use APPNAME and APPLONGNAME [Nathan Woods].
 - 0.73               : Various changes to keep the code inline with MESS [Nathan Woods].
 - 29th August    2003: Nathan Woods forwarded another patch for better intercompatibility with MESS.Nathan Woods forwarded another patch for better intercompatibility with MESS.
 - 0.72u1             : Nathan Woods added a MESS specific UI string (within #ifdef MESS of course) (src\ui_text.c).
 - 14th August    2003: Nathan Woods sent in another patch improving the MESS side of things, a better fix for the scanline display interfering with the registers in the debugger and a fix for pausing so that MAME doesn't busy loop.
 - 0.72               : Nathan Woods added some minor callbacks to the artwork system in order to enable some MESS specific functionality without polluting artwork.c with a bunch of ugly #ifdef MESS's.
 - 0.71u2             : Minor tweaks in #ifdef MESS, and #ifndef MESS'ed a consistency check inapprpriate for MESS (src\mame.c). Added very small hooks for MESS (src\inptport.c) [Nathan Woods].
 - 10th July      2003: Nathan Woods sent in a few small MESS-specific patches.
 - 0.70u1             : Nathan Woods changed a few MAME core files for MESS.
 - 11th June      2003: Nathan Woods sent in a patch for MESS-specific stuff in the core.
 - 19th May       2003: Nathan Woods sent in another bunch of small changes, some needed for MESS.
 - 16th May       2003: Nathan Woods did some minor changes in the core to better accommodate MESS changes.
 -  7th April     2003: Nathan Woods cleaned up some MESS specific code in the core.
 - 14th February  2003: Pierpaolo Prazzoli ported the SNES driver from MESS and modified it to run some Nintendo Super System games.
 - 11th February  2003: Nathan Woods submitted a few minor patches to the core for better interoperability with MESS.
 - 28th January   2003: Nathan Woods fixed some MESS-specific code.
 - 13th November  2002: Nathan Woods re-submitted some old fixes and improved a few MESS-specific things.
 - 12th July      2002: Nathan Woods submitted another small patch, cleaning up some MESS-specific details.



 3.   COMPILING / SOURCE

 - 0.286              : Small comments cleanup to copy-pasted sprite drawing routines [hap]. Fixed last remaining tautological compare warnings for Clang/ARM64 (nscsi\tape.cpp and util\ioprocs.cpp). Promoted tautological comparison warning to an error (scripts\genie.lua) [Vas Crabb].
 - 0.285              : Cleaned up devices build scripts a bit: Lua considers anything other than null or false to be "truthy". The tests against "null" were comparing to a non-existent global called "null" that evaluated to nil. Got bus.lua back in alphabetical order and got at least most of the trigger variables aligned with paths. At least don't put random stuff in the middle of the Acorn devices in machine.lua. Cleaned up some stuff (scripts\src\bus.lua and scripts\src\cpu.lua). Added note about MinGW Clang/LLVM issues with CodeView/PDB symbols at high detail levels (docs\source\initialsetup\compilingmame.rst) [Vas Crabb].
 - 0.284              : Fixed a considerable number of things that give -Wcast-align warnings in src/mame. There are still far more. Fixed a number of endianness issues [Vas Crabb].
 - 0.281              : Fixed pull_request property (.github\workflows\includeguards.yml). Fixed missing EoF marker (lib\netlist\build\create_lib_entries.py) [Angelo Salese]. Don't pass --line-numbers to objdump. It has no effect on --syms for GNU objdump, but it causes LLVM objdump to disassemble the executable (scripts\src\main.lua) [Vas Crabb]. Fixed compile with Clang 21.1.1 (machine\spg_renderer.h, tvgames\generalplus_gpl162xx_lcdtype.cpp) [Osso].
 - 0.280              : Fixed SPIRV shader builder compilation error with newer standard library that doesn't implicitly include stdint in as many places (3rdparty\bgfx\3rdparty\glslang\SPIRV\SpvBuilder.h) [Vas Crabb].
 - 0.279              : Added SN76496 to scripts\target\mame\tiny.lua [Osso]. MinGW/MSYS2 mktime() cannot handle dates before the Unix epoch, so use a precalculated offset between the Unix and MacOS epochs [R. Belmont, Peter Ferrie]. Prevent excessive link times with the default optimization level for emscripten build (scripts\genie.lua) [Justin Kerk]. Removed Wayland-EGL-backend requirement at compile-time. Since MAME 0.274 Wayland is dynamically loaded at run-time (scripts\src\3rdparty.lua) [Julian Sikorski]. Fixed LZMA PPMD support (src\3rdparty.lua) [lucinda lovebuny].
 - 0.278              : Only link asmjit if native DRCs are built (src\cpu.lua and src\main.lua). Moved helpers that use the __int128 type here and fixed availability detection for them (osd\eigcc.h). Added fast multiply/divide helpers for x86-64 (osd\eigccx86.h) [Vas Crabb]. Only check for pipewire lib if NO_USE_PIPEWIRE is 0 (osd\modules.lua) [hap]. Updated VS/MSbuild settings to reflect current ClangCL (scripts\genie.lua and scripts\src\3rdparty.lua). Cherry-pick upstream fixes for ClangCL (3rdparty\bgfx\src\renderer_d3d12.cpp and 3rdparty\flac\src\libFLAC\include\private\bitmath.h) [Patrick Mackinlay].
 - 0.277              : Detect Windows for 64-bit ARM and set PLATFORM accordingly (makefile). Added Windows 64-bit ARM build to GitHub Actions CI matrix (workflows\ci-linux.yml and ci-windows.yml). Avoid the need to set MINGW32 or MINGW64 environment variables when using a standard MSYS environment on Windows (workflows\ci-windows.yml, makefile, scripts\toolchain.lua). Cleaned up build scripts and compiling documentation: Made it a bit easier to cross-compile for x86-64 or i686 on an AArch64 Windows system. Choose the default native recompiler back-end based on predefined macros rather than requiring the build scripts to set it. Don't require every target without a native recompiler to declare this. Got rid of the code that was supposed to set -m32 or -m64 when building GENie (it didn't work - it tried to use ARCHITECTURE before setting it). Avoid relying on the unreliable PROCESSOR_ARCHITECTURE environment variable. Got rid of stuff for versions of Xcode that are definitely no longer supported. Got rid of workarounds for very old Linux distros. Use newer makefile syntax for if/else/if structures, comment some else and endif statements for clarity. Made PTR64 a makefile-only thing - it isn't necessary in the code (makefile). Enabled error for GCC class memory access warning to avoid rot (scripts\genie.lua) [Vas Crabb]. Get windows cpu arch from registry instead of wmic (makefile) [hap].
 - 0.276              : Bail if no argument specified (scripts\build\check_include_guards.py) [Angelo Salese]. Fixed Clang 20.1.0 erroring due to using memset on non-trivial objects (devices\machine\s3cXXXX.cpp) [Osso]. Sort driver projects and sources within driver projects to give more determinisitc output on filesystems that don't enumerate in order by filename (e.g. XFS or ext) (scripts\target\mame\mame.lua) [Vas Crabb].
 - 0.275              : Fixes to get BGFX working. Moved emscripten specific setup into an #elif statement. Fixed indentation. Removed no longer link option DEMANGLE_SUPPORT (scripts\genie.lua, bgfx\shadermanager.cpp and render\drawbgfx.cpp) [Henrik Algestam]. Removed comments from file (mame\tiny.lst) [hap]. Removed majority of comments (mame\mame.lst). Note: A lot of them were empty anyway, or years at risk of getting out of synch with the source files. There's still a commented system entry for some Nokia PC, and the comment at the top of the file. Also sorted systems for some PC source files. Removed unused nws286 entry (it's a commented out NO_DUMP set in driver) [Vas Crabb].
 - 0.274              : Don't treat K&R function definitions as an error. Some AArch64-specific code in C/CpuArch.c uses () when it should be using (void) (lzma; src\3rdparty.lua) [FlykeSpice]. Disable command line string escaping, fixes MAME 0.273 incorrect paarsing SDL_INI_PATH directive and build faild #13150. Adjust MSVC warning settings (scripts\genie.lua and scripts\src\3rdparty.lua). General: Housekeeping and MSVC warning elimination. Avoid potential unsafe use of bool and empty controlled statements. Annotate some unused variables. Removed some undefined functions (i386\i386segs.hxx, machine\arm_iomd.cpp, ui\prscntrl.cpp, tools\nl_convert.cpp, igs\igs_m027.cpp, namco\namcos22_v.cpp and namco\namcos23.cpp) [Patrick Mackinlay]. Deal with NUL when osd_uchar_from_osdchar uses mbstowcs (osd\strconv.cpp). Added constexpr to the bitswap with explicit count. This was a hangover from poor implementation of constexpr in older compilers (util\coretmpl.h) [Vas Crabb]. Added libfontconfig-dev in preparation for Ubuntu 24.04 (github\workflows\ci-linux.yml) [Dirk Best]. Removed "all rights reserved" copyright comment (src\*) [hap].
 - 0.273              : Added .github\workflows\includeguards.yml and scripts\build\check_include_guards.py. Fixed a bunch of #include guards that don't match file paths and added a CI task to check them in src\devices and src\mame [Vas Crabb].
 - 0.272              : Enabled -Wno-tautological-compare for BGFX in order to evaluate turning it off for MAME (src\3rdparty.lua) [R. Belmont]. Fixed several things using memset on non-trivial objects. In particular, this fixes a delegate getting nuked in cpu\powerpc. Started fixing #include guards that don't match the file path. There are still plenty more in src\devices, but it's a start. When there are none left in src\devices and src\mame, a CI task can be added to catch them [Vas Crabb].
 - 0.271              : Added ATTR_COLD to common lifecycle methods for many files in src\mame and src\devices [holub]. Use qmake to query Qt libexec directory to find moc (osd\modules.lua) [Michael Cho]. Upgrade checkout and upload-artifacts actions (github\workflows\*) [Margen67].
 - 0.270              : Bumped GitHub CI to three simuataneous jobs for Windows and Linux - this should be OK with 16GB RAM. Added out-of-line destructors to various device classes that aren't templates and aren't in anonymous namespaces. Don't use image_error::BADSOFTWARE for things that aren't software list errors [Vas Crabb].
 - 0.268              : Various cleanup [Vas Crabb].
 - 0.267              : Fixed build error on VC++ (emu\emucore.h) [Roman Donchenko].
 - 0.266              : Fixed a few class memory access warnings (exidy\vertigo_v.cpp, exidy\victory_v.cpp, konami\viper.cpp, sega\saturn_v.cpp, sega\segaic16.cpp, sega\segaic16_road.cpp, seibu\seibucop.cpp, shared\xbox_usb.cpp, sound\spu.cpp, tatsumi\tx1_m.cpp and ussr\tiamc1_a.cpp). Added override qualifiers for overridden virtual member functions (emu\http.cpp and util\server_http_impl.hpp). Changed a pointer to a const reference in an API (osd\windows\window.cpp). Removed an array overflow (this is dead code, function never gets called, but GCC 14.1 complained) (MESS) rm380z_v.cpp [Vas Crabb].
 - 0.265              : Cleared inappropriate execute bits on a few source files [Davide Cavalca]. Drop support for GCC < 10.3, clang 6, SDL < 2.0.14 and Qt 5.10. Disabled GCC stringop-overflow warning due to numerous false positives (scripts\genie.lua). Fixed a few class memory access warnings (misc\3do_m.cpp, bfm\bfcobra.cpp, midway\midyunit_v.cpp, phoenix\phoenix_a.cpp/h, nintendo\n64_m.cpp/n64_v.h/n64types.h, emu\render.cpp, machine\1801vp128.cpp/h, machine\fdc_pll.h, machine\iopdma.cpp, formats\wavfile.cpp, util\xmlfile.cpp and tools\regrep.cpp). srcclean batches of twenty files - improves performance when process creation or filesystem walk is expensive (makefile) [Vas Crabb]. Removed folder from self #include (misc files) [hap]. Handle UTF-8 Windows code page internally in osd_uchar_from_osdchar (osd\strconv.cpp) [Invertego].
 - 0.264              : Use a raw string literal for regular expression. Fixes Pylint invalid escape sequence warning (scripts\build\verinfo.py) [ksherlock]. Removed unwanted comments/separators in various drivers [Osso]. Fixed compile error in 3rdparty\asio with newer Emscripten versions (scripts\genie.lua) and in 3rdparty\bx (3rdparty\bx\src\debug.cpp) [Justin Kerk].
 - 0.263              : Fixed compilation against musl (Linux C standard library; musl.libc.org) (netlist\plib\pexception.cpp and sound\pulse_sound.cpp) [Elaine Gibson]. Fixed INPUT_PORTS_END and ROM_END macro indent (n8080.cpp and rfslots8085.cpp). Removed some unnecessary backslash line continuations. Removed unnecessary preprocessor line continuations from C++ code. Use parentheses to avoid need for line continuations in expressions in Python code. Removed line continuations at the end of lists in makefiles [amameuser].
 - 0.262              : Changed drivers on where to place class variables [hap]. Use C++ swappable idiom correctly, clean up #include guards for headers that were moved. Cleanup and added escaped characters to comments. Make #include guards match paths, sort filenames (bus\pci\* and mame\shared\*) [Vas Crabb]. Ensure that the has_* file actually has data in them (scripts\genie.lua). Note: The previous PR (MAME 0.261: Make generation of has_foo.h files deterministic) had clearly never been tested [O. Galibert]. Removed use of utf8.h, \xc2 and \xc3 in input defs, mame\ui and devices\bus. Removed some unneeded PORT_NAME from input defs [AJR, hap]. Make building emulator optional. By using make TOOLS=1 EMULATOR=0 it is now possible to build tools only [Miodrag Milanovic]. Removed superfluous semicolons [Osso]. mingw-w64-x86_64-llvm is required for llvm-ar (.github\workflows\ci-windows.yml) [Dirk Best].
 - 0.261              : Make generation of has_foo.h files deterministic. Without this patch, order of entries in generated/has_{buses,cpus,formats,machines,sounds,videos}.h varied across builds. This patch was done while working on reproducible builds for openSUSE (scripts\genie.lua) [Bernhard M. Wiedemann]. Keep local headers before library headers (pkspirit.cpp, sbmjb.cpp, taito_o.cpp) [Vas Crabb].
 - 0.260              : Use multibyte.h function in tools\chdman.cpp and (MESS) imgtool\modules\bml3.cpp, \cybiko.cpp and \psion.cpp [AJR]. Updated some outdated stuff (makefile) [hap]. Added explicitly defaulted copy and move constructors for emu_fatalerror (emu\emucore.h). Fixed apparent misunderstanding of const. Returning const value types and casting to const value types is pointless outside very narrow use cases. Putting const value type parameters in interfaces just makes trouble (util\multibyte.h). Don't pollute global namespace, constexpr implies inline, make narrowing casts explicit (util\multibyte.h) [Vas Crabb]. Fixed documentation compilation warning (title underline too short) (commandline\sdlconfig.rst) [Firehawke].
 - 0.259              : Added util\multibyte.h. Removed some output().set_value() calls (fireball.cpp, mw8080bw.cpp, pong.cpp and segaybd.cpp) [Osso]. Added util\multibyte.h [Mietek Bak]. Added constexpr for getters and noexcept for all functions (util\multibyte.h). Added functions for reading and writing 48-bit values (util\multibyte.h). Fixed shift count bug in 48-bit and 64-bit big-endian functions (util\multibyte.h). This fixes "CHD ERROR: Decompression error" in sf2049, sf2049se and nbagold. Use multibyte.h functions in formats\dsk_dsk.cpp, flopimg.cpp, mdos_dsk.cpp..., formats\fsmgr.cpp, formats\imageutl.h, imgtool\modules\amiga.cpp, imgtool\modules\fat.cpp, machine\akiko.cpp, machine\am79c90.cpp, machine\i82586.cpp, machine\k053252.cpp, machine\stvcd.cpp, machine\t10mmc.cpp, machine\t10sbc.cpp, machine\t10spc.cpp, tools\image_handler.cpp, util\avhuff.cpp, util\aviio.cpp, util\cdrom.cpp, util\chd.cpp, util\chdcodec.cpp, util\flac.cpp, util\msdib.cpp, util\unzip.cpp and util\vbiparse.cpp [AJR].
 - 0.258              : Removed some output().set_value() calls (cischeat.cpp, cops.cpp, exidy.cpp, djmain.cpp, ggconnie.cpp, grchamp.cpp, joystand.cpp, jpmimpct.cpp, mcr.cpp, meritm.cpp, midvunit.cpp, mpu4.cpp, mpu5.cpp, namcos11.cpp, namcos12.cpp, othunder.cpp, portrait.cpp, seattle.cpp, segaorun.cpp, sspeedr.cpp, twinkle.cpp and undrfire.cpp) [Osso]. More use of BIT helper (namcos11.cpp, portrait.cpp, grchamp.cpp and othunder.cpp) [Vas Crabb]. Replaced pi constant with M_PI (mcs48\mcs48.h and sound\vgm_visualizer.cpp) [hap]. Fixed some Coverity warnings in the nscsi_apple_cdrom_device (nscsi\cd.cpp) [R. Belmont].
 - 0.256              : Clean up several sprintf() deprecation warningss in non-3rdparty code [R. Belmont]. Changed "Bios" to "BIOS" in several drivers [hap].
 - 0.255              : Support GCC 13.1 / Fedora 38 (-Wno-error=dangling-reference, -Wno-error=dangling-pointer and -Wno-xor-used-as-pow) (scripts\genie.lua) [R. Belmont]. Added missing #include (modules\lib\osdlib.h) [AJR]. Got rid of a bunch of unnecessary simple_list [Vas Crabb].
 - 0.254              : Edited a pile of copy/pasted comments and made some minor code cleanups (reducing variable scope, etc.). Reduced scope of some variables and edited some copy/pasted comments. More noexcept on things that have no business throwing exceptions (lib\osdlib.h, lib\osdlib_macosx.cpp, lib\osdlib_unix.cpp, lib\osdlib_win32.cpp and osd\osdcore.h) [Vas Crabb]. Reduced I/O port lookups in a number of drivers [Erik Newton]. Clean up floppy-related code in various drivers with finder arrays [AJR].
 - 0.253              : Reduced usage of sprintf. Replaced most simple uses of sprintf with type-safe equivalents [Erik Newton]. Prevent use-after-free warning (GCC; 3rdparty\bgfx\examples\common\nanovg\fontstash.h) [O. Galibert]. Fixed a few "const qualifier has no effect" warnings. Avoid the need for buildoptions -fpermissive since Clang doesn't like it (3rdparty\*). Use the same rules for character literals and strings in C++. Escape 'high' Unicode characters found in strings rather than nuking them (tools\srcclean.cpp). Traded away some unnecessary flexibility for more compact code. The stream objects must derive from std::basic_ostream now - they can't just be any old objects with the expected operators (util\strformat.cpp) [Vas Crabb]. Correct placement of U integer suffix in definitions of shifted LOG_xxx constant macros [AJR].
 - 0.252              : Removed unneeded bankdev.h include in various drivers (atarisy2.h, pcat_dyn.cpp, lependu.cpp, namco65.h, namco68.h and taito_l.h). Put drivers in anonymous namespaces where applicable, updated #ifndef guards to the current tree structure [Osso]. Suppress unused variabe warnings for SQLite3 - Clang 15.0.5 for Windows considers sqlite3_os_type unused (scripts\src\3rdparty.lua). Got rid of some unnecessary and contradictory member initialisations. Having members initialised in the constructor and also at declarations just leads to confusion (sega\segas18.h). Use EQUIVALENT_ARRAY to avoid issues with std::size on member arrays, enable warnings for VLAs in C++ (scripts\genie.lua, input\input_xinput.cpp, render\d3d\d3dhlsl.cpp and tools\chdman.cpp). Got main.h out of emu.h as it's only used in a very small number of places, mostly for getting the application name. Added eminline.h to attotime.h as it's used without emu.h. Cleaned up forward declarations in emufwd.h a little [Vas Crabb]. De-conflict include guards (cpu\i386\i386.h, m68000\m68kmusashi.h and machine\i8087.h) [Patrick Mackinlay]. Code cleanup (Regression test report generator): Eliminated use of sprintf to construct temporary strings. Pass string views instead of string references wherever convenient. Use util::path_concat for building paths (tools\regrep.cpp) [AJR]. Fixed building with GCC-13 [Julian Sikorski].
 - 0.251              : #include shuffling (imagedev\harddriv.h, util\harddisk.cpp/h and imgtool\imghd.h) [AJR].
 - 0.250              : Removed mul_16x16 function (osd\eminline.h). Removed #include <cstdarg> from emu\emu.h and moved it into source files that still require it. Updated various source files to use swapendian_int16. Use core inline functions as appropriate (util\aviio.cpp and util\msdib.cpp) [AJR]. Worked around a couple of MSVC warnings reported in GitHub #10488 (nintendo\vsnes.cpp and (MESS) sinclair\tsconf_m.cpp and ussr\dvk_kcgd.cpp). Fixed narrowing warning from older versions of Clang (util\path.h) [Vas Crabb]. Fixed the linux CI (github\workflows\ci-linux.yml) [O. Galibert].
 - 0.249              : Moved filename utilities to path.h (util\corefile.cpp and util\path.cpp) [AJR]. Added Windows/Clang GitHub CI build task [Invertego]. Adjusted GitHub CI workflows: Changed Linux GCC build to use the tiny subtarget. Added chdman and unidasm executables to artefacts [Vas Crabb].
 - 0.248              : Ignore all but type 0x20 symbols (osd\modules\diagnostics\diagnostics_win32.cpp) [Patrick Mackinlay]. Fixes for Clang 15.0 on Windows [smf]. Removed not strictly needed use of strrchr (util\plaparse.cpp) [hap].
 - 0.247              : Removed unused variables that may give compiler warning [hap]. Fixed some unused local variable compiler errors (formats\fs_oric_jasmin.cpp and tools\floptool.cpp) [napobear]. Cleaned up some ROM macro indentation and spacing [kmg]. Use util::streqlower in more places (emu\diimage.cpp, dislot.cpp, softlist_dev.cpp and ui\utils.cpp). Use std::collate for filename sorting (ui\inifile.cpp and ui\miscmenu.cpp) [AJR]. Fixed SUBTARGET=tiny build (required Sega encrypted CPUs to be added) (mame\tiny.lua) [Vas Crabb].
 - 0.246              : Removed scripts\target\mame\arcade.lua, mess.lua, nl.lua, virtual.lua, mame\nl.lst and tools\reorganize.py. Added mame\nl.flt. Reduced project cross-dependencies and slightly improved renaming script. Rearranged source to match project structure (done using the script in src/tools). Eliminated cross dependencies between driver projects. Driver projects now use globs to search for files. There's less effort editing the Lua files when things are moved around. Remember it won't automatically pick up a change, so if you add/remove/change files, you should touch makefile to get it to find the change. Driver projects no longer get the top-level MAME directory as an include path. This means you need to think about how you structure things and not introduce nasty circular dependencies. Subtarget projects can now be generated entirely from .flt files without the need for separate Lua scripts and .lst files. This has been done for the arcade, mess and virtual targets. It effectively works like a SOURCES= build on a large scale. This means you need to organise things so the dependency genrators can find them. Converted nl subtarget to use a filter rather than a script and driver list. Added make opions for filter file, adjusted source path display. Added SOURCEFILTER option to specify a driver filter file in your make options, e.g. like make SUBTARGET=custom SOURCEFILTER=mydrivers.flt (or put it in your useroptions.mak if you'll be using it a lot). It functions more-or-less like SOURCES on steroids. Changed the way system/device source file paths are displayed to suit the new source layout better. INI file loading hasn't changed, that still just uses the base file name. Added overlooked trigger to src\bus.lua to include NES controller bus if the NES zapper sensor is needed. Added support for directory names in SOURCES=. Added GitHub actions workflow to build bgfx shaders and upload as an artefact (workflows\bgfxshaders.yml). Added notes about issues building MAME with Visual Studio (docs\source\initialsetup\compilingmame.rst). Added CI job to check for likely mame.lst errors (workflows\ci-linux.yml and build\makedep.py). Fail earlier in the build process if SOURCES= specifies no files containing system definitions (scripts\build\makedep.py and scripts\genie.lua). Don't put full path to target resources in generated version resource file (scripts\src\main.lua). Updated documentation on compiling MAME (docs\source\initialsetup\compilingmame.rst) [Vas Crabb]. Prevent src\devices from inadvertently including headers from src\mame. Removed not used template function (osd\modules\lib\osdobj_common.h) [Miodrag Milanovic]. Start moving devices out of src\mame\shared to more appropriate places. Clean up #includes in src\osd [AJR]. Set minimum required permissions on GitHub Actions workflows [Neil Naveen]. Removed leftover timer enums in some drivers and devices [Osso].
 - 0.245              : Added tools\reorganize.py. Removed docs\man\mess.6, scripts\resources\windows\mess\mess.ico, mess.man, mess.rc and mame\mess.cpp. Removed spurious /wx option from prjects generated for Visual Studio. With that warnings as errors were always enabled even if option NOWERROR=1 was specified (scripts\genie.lua) [yz70s]. Cleaned up Windows API usage a little. Bumped target windows version to 6.0.0 (Vista). Use WRL COM pointers to manage some COM-like objects. Cleaned up includes in Windows input modules. Switched to Common Item Dialogs in Windows debugger. Replaced disabled code that never really worked with a TODO comment. Adjust toolchain versions for triggering workarounds (makefile). Disable lifetime DSE optimisation for GCC 10.2 (this may be an issue in GNU libstdc++ rather than GCC itself - using compiler version as a proxy for standard library version is bad, but it's the path of least resistance for now) (scripts\genie.lua). Got rid of some legacy MESS support glue: Got rid of the special-casing for the "mess" subtarget name. Got rid of the MESS-specific Windows resources, emuator info source and man page. Added subtarget name to the internal name and original name in Windows resources. Updated scripts to support SOURCES= builds (scripts\build\makedep.py, genie.lua and src\main.lua) [Vas Crabb]. Removed unneeded header files (scripts\target\mame\ci.lua, nl.lua and tiny.lua). Cleanup of the source files lists for src\mame: Every file in src\mame\{includes,drivers,audio,machine} with the exception of konamiic.txt has to appear in one and only one of the projects of arcade.lua or mess.lua (ignoring mameshared). Files in mameshared must exist in mame.lua. Added src\mame sources reorganization tool (tools\reorganize.py) [O. Galibert]. Removed a few unimportant 64-bit functions (osd\osdcomm.h) [AJR].
 - 0.244              : Fixed SUBTARGET=nl build (Compiles all drivers using netlist code). Suppress compile warnings in asmjit with GCC 7 (scripts\src\3rdparty.lua) [Couriersud]. Fixed error flagged by GCC 12 (mips\mips3.cpp) [Ryan Holtz, R. Belmont]. 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) [sairuk, Vas Crabb]. Sync AsmJit with upstream [Patrick Mackinlay]. Fix for building with Clang 14 as asmjit uses | & operators on bools (scripts\genie.lua) [smf]. Removed superfluous semicolons from various source files [kmg].
 - 0.243              : Init variables for Coverity software (drivers, machine, video, audio, devices, bus and includes) [Robbbert]. Revert initialisation of device members in headers. This is problematic in several ways: Initialising things at construction that aren't needed until after start slows down -romident, -validate, -listxml, etc. Slot cards can be a particular drain on -listxml and -validate as they're instantiated for every compatible slot. It's more pronounced for array members, too. Splitting member initialisation between declaration in headers and constructors in source files means you have to look at two places to check for the initial value, and you always need to check the constructor even if an initialiser is present in the header because the constructor initaliser list takes precedence. (This isn't as much of an issue for driver classes because the constructor is most often inlined at declaration, so it isn't far from the member declarations). Initialisers in headers for frequently-used devices increases the frequency of recompiling dependent devices/drivers as they're exposed to any changes in initialisers. Initialisers in frequently-used headers increase build times because there's more for the compiler to parse/cache (This affects makedep.py as well for single-driver builds, but that's a single pass). It's not a lot individually, but it adds up given the size of MAME, which keeps increasing. Enabled GCC lifetime dead store elimination optimisation. Note: Disabled for GCC 9, otherwise takes issue with Sol's get<std::optional<T> >() (scripts\genie.lua). Try to work around the uninitialised member warning in sol::optional (mame\luaengine.ipp, luaengine_debug.cpp and luaengine_mem.cpp) [Vas Crabb]. Added multibyte check to osd_uchar_from_osdchar to fix decoding ASCII text (osd\strconv.cpp). Note: This allows ASCII INI files to be parsed on Windows systems set to use a double-byte code page. It should also work with correctly-encoded Shift-JIS, GB2312, Big5 and EUC-KR. It won't work for more complex variable-length encodings or when the input is not correctly encoded [Windy Fairy].
 - 0.242              : Re-enabled some compiler warnings and cleaned up some Python scripts a little. Disabled Clang warnings again - only the GCC ones should be re-enabled [Vas Crabb]. Init variables for Coverity software (drivers, includes and formats) [Robbbert].
 - 0.241              : Fixed building with GCC-12 (netlist\plib\pstream.h). Drop unnecessary executable permissions [Julian Sikorski]. Removed http related header polution and now invalid message. Fixed issued detected by Clang and CR at EOF (emu\emu.h, emufwd.h, http.cpp, machine.cpp and main.cpp) [Miodrag Milanovic]. Removed void *ptr parameter from emu_timer, timer_device and all related callbacks. Removed fileio.h from emu.h [AJR]. Separated includes by module in various drivers. Organised #included headers by module (emu\machine.cpp) [Vas Crabb]. Removed extra semicolons after function bodies in headers (src\devices\*) [kmg].
 - 0.240              : Include $ERRNO_CODES in Emscripten build to fix error loading software in Emularity loader - see issue emscripten-core/emscripten#10061 (scripts\genie.lua) [Justin Kerk].
 - 0.239              : Removed etc\doxy_driver.h, gen_device_defs.py, template_cpu.cpp, template_cpu.h, template_device.cpp, template_device.h, template_driver.cpp and template_readme.txt. Removed template code generators [Angelo Salese]. Fixed MSVC build by reordering configuration statements (scripts\src\3rdparty.lua) [Patrick Mackinlay]. Fixed a few coverity errors, several of which are real bugs (drivers\amspdwy.cpp, opengl\gl_shader_mgr.cpp and imgtool\imgtool.cpp) [Vas Crabb]. Removed a few outdated references to MESS [Dirk Best]. Fixed build with newer versions of Emscripten. Minimum supported version is now Emscripten 2.0.25 (https://emscripten.org/docs/getting_started/downloads.html) [Justin Kerk].
 - 0.238              : Removed Android MIPS/64, CMake target, Creator-Ci20, FASTBUILD, iOS, Native Client PNaCl, Raspberry Pi, Steam Link, UWP, Visual Studio LLVM, VisualStudio 2015/17, Windows Phone, Windows Store and XCode4 [Miodrag Milanovic]. Build cleanup and UWP removal: This removes options for deprecated platforms pnacl, steamlink and ci20. rpi target is not used for Raspberry Pi - linux target with parameters is used instead. MIPS architecture for Android has not been supported for some time - removed leftovers. Visual Studio versions older than 2019 are not able to compile anyway, so removed. CMake target was not able to be used for compiling anyway (just to give some editors a way to see project organization). Xcode4 support was added to get iOS to compile, and that was never finished, so removed. UWP has been deprecated by Microsoft, so we remove it as well [Vas Crabb]. Fixes for variables set but not used (scripts\src\3rdparty.lua, cpu\arcompact\arcompact_execute.cpp, debug\dvdisasm.cpp, formats\dfi_dsk.cpp, fdd_dsk.cpp, ti99_dsk.cpp, vt_dsk.cpp, cobra.cpp, gunpey.cpp, nemesis.cpp, seicopbl.cpp, video\3dom2_te.cpp, fmtowns.cpp, midtunit.cpp and model2.cpp). Clang fixes ("-Wno-unused-private-field"; osd\modules.lua and windows\winmain.cpp) [smf]. Miscellaneous #include cleanup [AJR].
 - 0.237              : Added .github\workflows\docs.yml and language.yml. Cleaned up CI targets: Restricted Linux CI build to only run on changes to code, translations, software lists, and build scripts. Restricted Windows/macOS CO to only run on changes to code and build scripts. They provide nothing over Linux for the other stuff. Added plugin properties and controller file validation to the "hash" workflow. Added a workflow for building documentation, so pull requests that affect documentation will at least get a basic check in advance (.github/workflows/ci-linux.yml, ci-macos.yml and ci-windows.yml). Added a separate CI target for localisation updates that produces an artefact, and removed the message catalogs from the trigger paths for the Linux CI build. Removed compiled message catalogs on clean, show clean commands for VERBOSE=1 (makefile) [Vas Crabb]. Avoid MSVC debug assertion (osd\strconv.cpp) [Patrick Mackinlay].
 - 0.236              : Fixes for building with Clang 12.0.1 on Windows (src\3rdparty.lua, osd\windows.lua and input\input_dinput.cpp/h) [smf]. Do not build with -m64 on riscv64 (makefile) [Graham Inggs]. Reduced repeated directory walking in cleansrc target (substantially improves speed of building the target on Windows) (makefile) [Vas Crabb].
 - 0.235              : Use std::clamp in more source files [AJR].
 - 0.233              : Removed emualloc.cpp/h. Fixed stupid warning (-Wno-unused-const-variable) (scripts\genie.lua) [O. Galibert]. Added helpers for 64-bit count leading zeroes/ones (osd/eivcarm.h, osd/eminline.h). Fixed 32-bit GCC/Clang builds (osd\eigcc.h) [Vas Crabb]. End the big-endian block in the right place, fixes FreeBSD section [pkubaj]. Eliminated remaining uses of auto_alloc and friends. Split off auto_alloc changes from deprecated branch. Make the keymap reader non-static so it can access the unique_ptr [Aaron Giles].
 - 0.232              : Avoid name collision on Y2 (util\timeconv.h) [O. Galibert]. Preliminary support for GCC 11.1 (Fedora 34) [R. Belmont].
 - 0.231              : Used anonymous namespace in pockchal.cpp [Osso]. Added param to override AR (Archiver) (mame\makefile) [hap]. Use llvm-ar for GitHub Actions Windows CI build (.github\workflows\ci-windows.yml) [Dirk Best].
 - 0.230              : Make core_filename_extract_base behave more robustly in degenerate cases (util\corefile.cpp) [AJR]. Fixed building with Clang 6 (scripts\genie.lua). Note: Annoyingly, Clang 6 produces warnings for unused private static data members, but does not recognise the [[maybe_unused]] attribute for them [Vas Crabb].
 - 0.229              : Removed 64 suffix on the main executable. If you want to build 64-bit and 32-bit in the same tree without them stomping on each other, use SEPARATE_BIN=1 (you already need to do this for TOOLS=1 anyway). Updated GitHub CI for executable names, added ORM check to Linux builds [Vas Crabb]. LLD (LLVM linker) seems to add a minimal symbol that the system libraries catch. Be smarter about ignoring that (osd\modules\diagnostics\diagnostics_win32.cpp) [Aaron Giles]. Removed references to non-existent headers and duplicate source file references (scripts\src\bus.lua, cpu.lua, emu.lua, netlist.lua, target\mame\arcade.lua and mess.lua) [Roberto Benfatto]. Eliminated ARRAY_LENGTH template in favor of C++17's std::size. Moved definition of EQUIVALENT_ARRAY to coretmpl.h (osd\osdcomm.h). Use STRUCT_MEMBER for save state registration (cpu/sharc\sharc.cpp, machine\gt64xxx.cpp, sound\ym2413.cpp, video\snes_ppu.cpp). Use std::fill(_n) instead of memset (cpu/arm7/arm7.cpp, tms9900/tms9995.cpp, machine\pckeybrd.cpp and video\jangou_blitter.cpp). Removed obsolete typedef (emu\emucore.h) [AJR].
 - 0.228              : Added osd\eigccarm.h. Eliminated redundant std::string("...").c_str() pattern (emu\ioport.cpp). Initialized more pointers and variables (drivers\hitpoker.cpp and video\tlc34076.cpp). Removed the using declaration importing util::string_format into the global namespace. It has been moved to emucore.h and a few tool sources. Other references have been qualified (util\strformat.h). Disaggregate many #includes that were including other standard or custom headers. emu.h now includes basically the same things that it did, but other headers have been streamlined; for instance, emucore.h no longer stealth-includes osdcore.h several ways. The string_format calls need qualification now (file\windir.cpp and winrtdir.cpp). Purge #include "rendlay.h" where not necessary. Much more core std::string_view modernization: Removed corestr.h from emu.h; update a few source files to not use it at all. Changed strtrimspace, strtrimrightspace and core_filename_extract_* to be pure functions taking a std::string_view by value and returning the same type. Changed strmakeupper and strmakelower to be pure functions taking a std::string_view and constructing a std::string. Removed the string-modifying version of zippath_parent. Changed tag-based lookup functions in device_t to take std::string_view instead of const std::string & or const char*. Removed the subdevice tag cache from device_t (since device finders are now recommended) and replace it with a map covering directly owned subdevices only. Moved the working directory setup method out of device_image_interface (only the UI seems to actually use the full version of this). Change doutput_manager to use std::string_view for output name arguments. Changed core_options to accept std::string_view for most name and value arguments (return values are still C strings for now). Changed miscellaneous other functions to accept std::string_view arguments. Removed a few string accessor macros from romload.h. Removed many unnecessary c_str() calls from logging/error messages. Fixed for GCC build ("-Wno-error=attributes", -- GCC fails to recognize some uses of [[maybe_unused]]) [AJR]. Changed some unused functions to use [[maybe_unused]] attribute so they don't rot (audio/redbaron.h, drivers\deco_ld.cpp and pinball2k.cpp).Clean up inline maths utilities. Removed inline assembly for operations compilers handle well. Added ARM and AArch64 implementation for a few operations. Added unsigned integer add with carry out operations. Make preprocessor usage a bit more consistent in inline utilties for PPC/ARM (osd\eigccarm.h and eigccppc.h) [Vas Crabb]. Disable MSVC windows CI, breaks for probably unfisable heap space issues (workflows\ci-windows.yml). C++17: Replaced ATTR_UNUSED with [[maybe_unused]] [O. Galibert].
 - 0.227              : Updated compilingmame.rst doc required MSYS64 packages for using lld (mingw-w64-x86_64-libc++). Apple calls LLVM/Clang 10 Xcode 12, update warning flags (scripts\genie.lua). Added some notes about setting up and using MSYS2 (docs\source\initialsetup\compilingmame.rst). Started writing page on object finders with worked examples (docs\source\techspecs\object_finders.rst). Switch to building MAME as C++17. Updated sol2 to 3.2.2. Updated pugixml to 1.10. Increased minimum Clang version to 6. Cleaned up some stuff that can use new features. Enable GCC implicit fallthrough warning. Clang doesn't like how we're using std::void_t (emu\devcb.h and emu\emumem.h) - switch back to our own void_t-alike until it can be investigated. Removed some deprecated instantiations of static constexpr members (MSVC complains about them now). Work around GNU libstdc++ wanting to stack large temporaries when vector elements can be trivially constructed. C++17 string handling updates (without charconv so as not to break GCC 7). render.cpp, rendlay.cpp, ui\ui.cpp, ui\menu.cpp: Changed argument types for text processing functions from const char * to std::string_view. ui\menu.cpp: Added overloads of item_append omitting the frequently empty subtext argument. cheat.cpp: Removed some c_str() calls that became unnecessary a while ago. Made strformat.h and devcb.h play nicer with C++17 and pre-standard C++20. Format precision now correctly limits the length of string views. Confirmed that strformat.{h,cpp} works with pre-standard C++20 support in GCC 9 (util\strformat.h). Fixed linking the virutal subtarget (scripts\target\mame\virtual.lua) [Vas Crabb]. Removed update step for ci-windows.yml to prevent errors about outdated mirrors. Bump microsoft/setup-msbuild to 1.0.2 (.github\workflows\ci-windows.yml) [Dirk Best]. More uses for std::string_view (debug\debugcon.cpp, textbuf.cpp and emu\rendfont.cpp). Fixed build by updating charconv.cpp to use string_view internally (imgtool\charconv.cpp) [AJR, Robbbert]. Eliminated many unnecessary c_str calls (emu\addrmap.cpp, device.cpp, distate.cpp, emumem.cpp, emuopts.cpp, ioport.cpp, mconfig.cpp, sound.cpp, xtal.cpp, frontend\mame\clifront.cpp...). Updated util\png.cpp add_text to take std::string_view for arguments and use std::string_view internally in another function. Removed another entirely useless string_format call (bgfx\chainmanager.cpp) [AJR].
 - 0.226              : Removed .appveyor.yml, drone.sec and drone.yml. Added github\workflows\ci-linux.yml, ci-macos.yml and ci-windows.yml. FreeBSD fixes. Use gl includes from pkg-config. GenieOS is named simple BSD [Emmanuel Vadot]. Got rid of most of the remaining problematic uses of make_unique_clear and on 'manager' objects (emu\machine.cpp). Got rid of global_alloc/global_free. The global_alloc/global_free functions have outlived their usefulness. They don't allow consistently overriding the default memory allocation behaviour because they aren't used consistently, and we don't have standard library allocator wrappers for them that we'd need to use them consistently with all the standard library containers we're using. If you need to change the default allocator behaviour, you can override the new/delete operators, and there are ways to get more fine-grained control that way. We're already doing that to pre-fill memory in debug builds. Code was already starting to depend on global_alloc/global_free wrapping new/delete. For example some parts of the code (including the UI and Windows debugger) was putting the result of global_alloc in a std::unique_ptr wrappers without custom deleters, and the SPU sound device was assuming it could use global_free to release memory allocated with operator new. There was also code misunderstanding the behaviour of global_alloc, for example the GROM port cartridge code was checking for nullptr when a failure will actually throw std::bad_alloc. As well as substituting new/delete, I've made several things use smart pointers to reduce the chance of leaks, and fixed a couple of leaks, too [Vas Crabb]. Fixed link errors with new versions of Emscripten (scripts\genie.lua). Created GitHub Actions for CI. This is intended as a replacement for AppVeyor and parts of TravisCI. It will create full builds of MAME (including tools) for the following platforms: Linux (GCC and Clang), macOS (Clang) and Windows (GCC and MSVC 2019). It will also upload the resulting executable as artifact so that it can be used for regression testing. This commit also removes the unused TeaCI drone files [Dirk Best]. Allow memory size to grow at runtime for Emscripten when targeting WebAssembly as there is no longer a performance hit (scripts\src\main.lua) [Justin Kerk].
 - 0.225              : Added docs\source\techspecs\naming.rst. 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). 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 [Vas Crabb]. Fixed Clang version detection under Emscripten [Justin Kerk]. Removed memarray.h from emu.h [AJR]. 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) [Couriersud]. Removed embed files unintentionally added to Emscripten build (scripts\src\main.lua) [Justin Kerk].
 - 0.224              : Added scripts\target\mame\ci.lua and mame\ci.lst. Fixed redundancy in pacman-key --verify call. Appveyor VS2017 image only ships with pacman 5.1.3 as of now. In that version pacman-key --verify only takes one argument, the signature (appveyor.yml). Fixed non-x86 build and try to make sure it does not break silently again. Do not build x64 DRC backend when C backend is forced. New CI target (mametiny + kinst). Switch travis to CI target and appveyor to CI target. Define IMGUI_DISABLE_OBSOLETE_FUNCTIONS consistently: IMGUI_DISABLE_OBSOLETE_FUNCTIONS was defined in osd/modules.lua but not in 3rdparty.lua. As a result, two different variants of struct ImGuiIO were being defined, causing a C++ One Definition Rule violation (scripts\src\3rdparty.lua) [Julian Sikorski]. Added simple .editorconfig. Clean up command-line -h output, tidy up emulator_info class a little and added trim trailing whitespace to .editorconfig. Clean up Clang options now that Clang 5 is a hard requirement and suppress xor-used-as-pow warning introduced in Clang 10. CHDMAN: GCC 9.3 is actually the cutoff point for legacy MSVC-style long format flags. Make cleansrc target use shell type to select correct syntax rather than assuming Windows uses cmd shell (makefile) [Vas Crabb]. Cleanup mame\arcade.flt and mess.flt [Robbbert]. Enable ppc64le for travis: Added akkaarrh to the ci target. Switched Travis CI to Ubuntu Focal. Allow ppc64le CI build to fail. Report CI status as soon as a job has failed or remaining jobs are allowed to fail [Julian Sikorski].
 - 0.223              : MinGW SDL build fails with end-group auto added by that LinkSupportCircularDependencies flag option (scripts\genie.lua) [hap]. Only build asmjit on x86 and x86_64 (scripts\src\3rdparty.lua and main.lua). Fixes unable to compile MAME 0.222 for ARM processor (Rasbian Buster) [Julian Sikorski]. Removed superfluous semicolons in various devices and drivers (x();;) [Osso]. Restored some standard library #includes, added some things that were used but not #included and clean up some #include guards [Vas Crabb, Tafoid]. Switch appveyor GCC build to -O3 (appveyor.yml). Appveyor MSYS2 workaround: Work around appveyor not being able to update MSYS2. There has been a change to MSYS2 package maintainers, meaning that the packages are now signed with a different key: https://www.msys2.org/news/#2020-06-29-new-packagers. Import the new keys manually until appveyor image is updated with a new msys2-keyring package. Explicitly kill msys2 before the second pacman call (appveyor.yml) [Julian Sikorski]. Fixed SOL2 build on GCC 10.2 by working around overload resolution problem (3rdparty\sol2\sol\) [AJR].
 - 0.222              : Fixed GCC 10 uninitialized (modules\vzdos.cpp) struct warning. GCC 10 fix for sqlite3 (scripts\genie.lua) [R. Belmont]. Enable option to generate symbols in Release as well as Debug under Visual Studio (this is important because debugging Debug builds is too slow) (scripts\genie.lua) [Frank Palazzolo].
 - 0.221              : Removed last remaining uses of generic_space() and many dummy_space() calls. Fixes for Clang 10.0.0 misleading indentation and XOR used as a pow warnings (src\3rdparty.lua, cpu\z8000\z8000ops.hxx and machine\stvcd.cpp). Fixed VS2019_Clang with LLVM 10.0. Fixed stray character (src\3rdparty.lua) [smf]. Fixed some Clang-tidy-10 warnings [Couriersud]. Centralised instantiation of more of the util::strformat engine (util\strformat.cpp) [Vas Crabb]. Revert "Fixed some modernize-use-equals-default Clang-tidy warnings" from MAME 0.218 [Oliver Stoeneberg]. Fixed hang with Emscripten's "upstream" backend (scripts\genie.lua) [Justin Kerk].
 - 0.220              : Added scripts\build\file2lines.py. Re-Added "premake.gcc.ar  = toolchainPrefix .. "gcc-ar"" for MinGW cross-compilation (scripts\toolchain.lua). Updated more stuff in top-level makefile. Compile in the contents of the COPYING file for the about box - safer than assuming it will be in the working directory. no attempt at compressing it for now (scripts\build\file2lines.py, ui\about.cpp) [Vas Crabb].
 - 0.219              : Fixed some Clang warnings: readability-static-accessed-through-instance, readability-redundant-string-cstr, readability-redundant-control-flow, modernize-use-nullptr, performance-faster-string-find, performance-for-range-copy, performance-unnecessary-value-param, modernize-redundant-void-arg, modernize-use-bool-literals, modernize-use-emplace, performance-move-const-arg, readability-redundant-control-flow, readability-redundant-string-cstr, performance-unnecessary-value-param, modernize-use-equals-default and modernize-use-auto [Oliver Stoeneberg]. Future-proof for C++20. Also removed a workaround for older versions of GNU libstdc++ with incomplete C++14 support (util\strformat.h).
 - 0.218              : Lower number of warnings disabled with Visual Studio from 71 to 27 (scripts\genie.lua and scripts\src\3rdparty.lua). And most of the remaining ones could be removed with simple code modifications [yz70s]. Fixed some Clang warnings: bugprone-throw-keyword-missing, modernize-use-nullptr, readability-delete-null-pointer, performance-faster-string-find, performance-for-range-copy and readability-redundant-string-cstr [Oliver Stoeneberg]. Use C++ library includes [Firewave].
 - 0.217              : Added BGFX artwork path for Emscripten build (scripts\src\main.lua) [Henrik Algestam]. Get rid of deprecated universal newlines open flag in Python scripts (io module is present as of Python 2.6) (scripts\build\verinfo.py, cpu\m6502\m6502make.py, m6809\m6809make.py, mcs96\mcs96make.py and tms57002\tmsmake.py). Enable Clang missing braces warning - it's useful to be able to see when you're initialising a structure or nested array inside an array (scripts\genie.lua). Fixed ACCESS VIOLATION when using -verbose in assorted drivers. Note: It only happens when MAME is built with GCC 8.3.0, and then only on certain system configurations [Vas Crabb]. Enable visual studio warning C5038 about member initialization order. Also put vs warning options all in one place (scripts\genie.lua) [yz70s].
 - 0.216              : Fixed some incorrectly marked up stuff in build scripts [Vas Crabb]. Workaround to fix cross compilation to x86 from a x64 host (makefile) [Tiago Pierezan Camargo].
 - 0.215              : Removed scripts\build\makelist.py. Fixed a compilation bug under Clang-CL (netlist\plib\putil.h) [Nathan Woods]. Use Visual Studio 2019 (16.3.0) image for AppVeyor build (appveyor.yml) [Patrick Mackinlay]. Make osd_printf_* use util/strformat semantics. Also removed a pile of redundant c_str and string_format, and some workarounds for not being able to portably format 64-bit integers or long long. Build system maintenance: Re-write makedep.py for better performance and better parsing front-end. Make srcclean deal with kinds of preprocessor abuse I never want to see in real life. The new parser front-end is better at recognising C++ syntax and also substantially faster - bootstrapping a single-driver build should be noticeably quicker. Having a single parser for C++, .lst and .flt files also gets us a bit closer to making it simpler to create custom subtargets. Fixed std::array initialisation with GCC5 in netlist\prg\nlwav.cpp, stop suppressing -Wterminate now that asserts are really asserts. Clean up leftovers from MCFG removal. Added doxygen comments for a bunch of core stuff and converted a bunch of comments to doxygen format [Vas Crabb]. Allow updating version.cpp when IGNORE_GIT=1 is passed (makefile). Without this tweak it would only create the file if it doesn't exist, and wouldn't update an existing one. Reduced memory usage during compilation. Previous semantics were encouraged by sol2, and ThePhD admitted it was a bad idea for usertypes with lots of members. SOL3 allows to assign members outside a constructor for regular usertypes, but MAME can't move to SOL3 because it requires C++17. Turns out sol2 also has a way to add members separately, and that is what I used. This helps immensely. This approach required a fix to warning C5046 copied from here https://github.com/ThePhD/sol2/commit/57990845726e17fba11a39cfcb1fc0127a7ea638 . Tested current MAME plugins, everything seems to work. PS: Due to come black magic, if I use simple_usertype::set() with "manager" as well, "machine" member dies (others are fine!), so I had to leave it intact [feos]. Removed all AM_ macro in comments [Osso]. Fixed build for nonstandard compiler versions like '8.3-win32' (scripts\genie.lua) [MoochMcGee]. Continuous integration improvements: Added workaround for imgtool and jedutil failing vs2019 debug builds with /ZI. No longer allow msvc build to fail. Enabled tools build for travis to make it more useful. Switched travis to Xcode 11 in order to fix nltool linking failure. Prefer 64-bit compiler with VS 2019 too. Setting PreferredToolArchitecture to x64 is not needed, genie puts it into the project files for vs2015 or later. OPTIMIZE=1 build is faster that OPTIMIZE=0 for some reason. So fast in fact, that TOOLS=1 can be enabled without hitting the 60 minute timeout. Switched MINGW build to VS 2017 image until appveyor figure out why builds on VS 2019 are almost twice as slow. Run pacman twice to account for core system upgrades [Julian Sikorski]. Fixed bimg build for asmjs and added BGFX file [Henrik Algestam]. Added details on compiling MAME documentation (docs\source\initialsetup\compilingmame.rst) [Firehawke].
 - 0.214              : Migrate travis-ci to GCC-9. Added GCC build to AppVeyor. As tea-ci has been broken for quite a while now there has been no MINGW CI available. MINGW builds can be done in AppVeyor too. Tools build had to be disabled as it takes longer than the allowed 60 minutes. Wa,-mbig-obj was added to avoid "file too big" errors. Align AppVeyor GCC build configuration with travis. This will hopefully make the build fast enough not to miss the 60 minute maximum build time [Julian Sikorski]. Fixed vsllvm build (sound\mas3507d.cpp). LLVM refuses to coerce the iterator to a pointer [Peter Ferrie]. substr doesn't modify std::string, but erase does (tools\src2html.cpp) [AJR]. Changed osd_get_clipboard_text() to return std::string. This change has only been tested on Windows. The Un*x/Mac versions were made blindly; they might not even build. This needs to be checked prior to merging [Nathan Woods]. Get rid of assert_always - it's better to be explicit about what this thing is supposed to do. Get rid of a few MCFG_*_OVERRIDE [Vas Crabb].
 - 0.213              : Fixed building using system rapidjson (mame\arcade.lua and video\midtunit.cpp) [Julian Sikorski]. Fixed build in newer Emscripten versions [Justin Kerk]. Enable precompiled header usage in the Visual Studio compiler. But only for libraries emu frontend precompile DASM optional [yz70s]. Improved cleansrc target for source content and srcclean capabilities (makefile) [Vas Crabb]. Resolved [[nodiscard]] warning from c_str() call (emu\rendfont.cpp). In C++98/03, basic_string::c_str() was allowed to be a reallocation to insert the null terminator. MAME is ensuring this actually happens with a do-nothing call to c_str(). In C++11 and later, this is prohibited, and the string is mandated to be always null terminated. As a result Visual C++ marks c_str() with [[nodiscard]], triggering a warning here for discarding the result [Billy Robert O'Neal].
 - 0.211              : Fixed VS LLVM configuration: dxsdk was missing from includes. winmm was missing from libs. Narrowing warning was silenced for VS, but not from vsllvm, where it leads to an error in menu_video_options::handle() (scripts\genie.lua and osd\modules.lua) [feos].
 - 0.209              : Fixed compile (bgfx\shaders\chains\xbr\fs_xbr-lv3-noblend.sc). Note: We do not seem to have shader compilation in our automated testing, that could be a problem [O. Galibert]. Fixed non-Apple Clang (3rdparty\asio\include\asio\detail\config.hpp) [R. Belmont]. Fixed compile warning under Emscripten (ui\videoopt.cpp) [Justin Kerk]. Standardised #include guards [Vas Crabb].
 - 0.207              : Support LLVM extension in MSVC (make vsllvm) using extension from here: https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain [Peter Ferrie]. Fixed cross compile MAME/SDL/Windows. Use OVERRIDE_CC if defined to determine GCC_VERSION. Fixes some cross-compilation issues and most likely edge case using OVERRIDE_CC (makefile) [Couriersud]. Removed some superfluous const, a superfluous temp, superflous semicolons, etc. and also fixed a known broken build script change. Documented cross-compilation options [Vas Crabb]. Removed MCFG_DEVICE_DISASSEMBLE_OVERRIDE usage (emu\didisasm.h) [cam900].
 - 0.206              : Downscope (audio\sente6vb.h and includes\balsente.h) [AJR]. Fixed errors with single-driver build of vsnes.cpp (scripts\genie.lua and src\main.lua) [Justin Kerk]. Additional documentation on compiling MAME (docs\source\initialsetup\compilingmame.rst and osd\sdl_cfg.lua) [Vas Crabb]. Fixed SUBTARGET=nl build (netlist code; scripts\target\mame\nl.lua and mame\nl.lst) [Couriersud].
 - 0.205              : Don't #include legacy header "flopdrv.h" except where it's still used. Included floppy.h explicitly in drivers and bus cards, rather than indirectly through popular FDC headers [AJR]. Uniform spacing, standardised logging and capitalised template parameters. Added per-language compiler flag options to help with exotic setups (makefile, scripts\genie.lua). CHAR_WIDTH and LONG_WIDTH are preprocessor macros in limits.h with glibc if __GLIBC_USE (IEC_60559_BFP_EXT) is enabled - avoid using them as names (sound\cdp1869.cpp, video\clgd542x.cpp, pc_vga.cpp, v9938.cpp etc.). More header cleanup, split up some more all-in-one state classes [Vas Crabb]. Appease deprecation warning for machine\galaxold.cpp [Osso].
 - 0.204              : Misc cleanup - mostly missing #include guards and inconsistent initialiser list formatting. Cleanup header [Vas Crabb].
 - 0.203              : Fixed compile error on Linux with NO_USE_XINPUT=0 (emu\save.h) [Kiall Mac Innes]. Allow undefined GL symbols for WebAssembly target (scripts\src\main.lua) [Justin Kerk].
 - 0.202              : Restored some authors' stylistic choices. Make some stuff more consistent. This fixed debug assertion in aristmk4.cpp, bagman.cpp, gts3a.cpp, mac.cpp, pacman.cpp and others. Fixed lots of inadverently mutable static pointers. Fixed inadvertently non-const pointers - emu.h edition (lib\util\hash.cpp). This fixes all the non-const pointers with static lifetime I could find with a cheap grep (in combination with the last commit). There are likely more lurking that I didn't find, and things that aren't pointers that should be made const. There are still a few mutable static pointers that break the ability to host multiple drivers but these require refactoring to fix [Vas Crabb].
 - 0.201              : Fixed Arcade build [Robbbert]. Fixed for undefined fmin & ceil on GNU Guix with GCC 5.5.0 (cpu\mips\mips3.cpp and ps2vif1.cpp) [smf].
 - 0.200              : Allow passing std::unique_ptr<TYPE> directly to save_pointer and remove now-superfluous .get() in many drivers/devices (emu\save.h and emu\device.h). Made many class members private and removed dead code exposed. Fixed Clang build [-Werror,-Wunused-private-field] [AJR]. Some private -> protected are needed for derived classes [Robbbert]. emu.h must be the first thing in a compilation unit and nowhere else, or behaviour becomes inconsistent between MSVC and GCC due to how pre-compiled headers are handled in MAME. Misc cleanup and DEVCB3 prep. Stuff to make macro removal easier. Allow multiple digits in components of Clang version (makefile). srcclean and some cleanup: * Make more #include guards follow standard format - using MAME_ as the prefix makes it easy to see which ones come from our code in a preprocessor dump, and having both devices\machine\foo.h and mame\machine\foo.h causes issues anyway. * Get #include "emu.h" out of headers - it should only be the first thing in a complilation unit or we get differences in behaviour with PCH on/off. * Added out-of-line destructors to some devices - it forces the compiler to instantiate the vtable in a certain location and avoids some non-deterministic compiler behaviours [Vas Crabb]. Fixed building with Clang 6.0.1 and Microsoft Visual Studio 2015 [smf]. Added AppVeyor badge back to README.md (https://ci.appveyor.com/project/startaq/mame) [Stiletto]. Updated WebAssembly parameters for current Emscripten (scripts\src\main.lua) [Justin Kerk].
 - 0.199              : Added asserts to detect tag being set after object resolution and resolved multiple times. Fixed SUBTARGET=virtual (cripts\target\mame\virtual.lua) [Vas Crabb]. Added AppVeyor build configuration (appveyor.yml) [Balrog]. Made m68000 makefile respect the VERBOSE build option (m68000\makefile). Enable building on RISCV64 [Julian Sikorski]. Removed emupal.h from emu.h [AJR].
 - 0.198              : Begin preliminary GCC 8 support. Don't use C++ flags on plain C files (scripts\genie.lua) [R. Belmont]. set_tag can now take things other than C strings [Vas Crabb].
 - 0.197              : Added possibility of building using system pugixml [Julian Sikorski]. Fixed issues with CHD loading under Emscripten (scripts\src\main.lua) [Justin Kerk].
 - 0.196              : De-staticify initializations for src\devices\video, devices\sound and others [Wilbert Pol]. Removed poor-performing parts of the output_manager (emu\output.cpp): Turn deprecated declaration warnings on by default and make them non-fatal. Make output_finder iterable in algorithms and range-based for loops. Replaced a lot of set_something with output_finder. Fixed end()/cend() on output_finder (acefruit.cpp, bfm_sc4.cpp, by17.cpp, by35.cpp, dlair.cpp, ecoinf2.cpp, ecoinf3.cpp, gts1.cpp, jp.cpp, jpmsys5.cpp, maxaflex.cpp, maygay1b.cpp, mpu3.cpp, mpu4.cpp, mwsub.cpp, peyper.cpp, segaufo.cpp, sigmab52.cpp, stactics.cpp, twinkle.cpp, wacky_gator.cpp, machine\bfm_bd1.cpp and bfm_bda.cpp). Forward some objects; line continuations are not scope (machine\6532riot.h, pla.h and r10788.h). Deprecate first_screen - there's been plenty of warning (emu\machine.h). More string hash reduction. Get rid of the last set_indexed_value in drivers/devices, this ends up a bit ugly to maintain backwards compatibility with layouts/web UI (emu\output.h). Use more constexpr and literal classes in UML to give compiler more optimisation opportunities (cpu\drcfe.cpp and uml.cpp). Reduced scope of stuff with different definitions across CPUs (cpu\e132xs\e132xs.h and sh\sh.h). Prettier way of adding DRC framework on-demand (scripts\src\cpu.lua). Don't sleepcode (dasm_override in emu\didisasm.h) - for some reason this only upset GCC, not Clang [Vas Crabb]. Fixed issue causing drivers using netlists to fail on the Emscripten target (netlist\plib\pdynlib.cpp). Disable multithreading on the Emscripten target as it is not currently supported. Fixes e.g. drivers using discrete audio components (scripts\src\main.lua and osd\osdsync.cpp) [Justin Kerk]. Removed stray address maps on spaces that don't exist (drivers\twincobr.cpp and (MESS) drivers). Cleanup address map remnants (de_2.cpp, s11c.cpp, segaybd.cpp and techno.cpp) [O. Galibert]. Apply same flags when building with SOURCES= as when building normally (scripts\build\makedep.py). This fixes the issue which prompted "model1: clear up some memory issues with very recent gcc" (which only occurred in a SOURCES= build) [smf].
 - 0.195              : Fixed issue linking Emscripten build with certain single-driver compiles (e.g. spectrum.cpp). Emscripten 1.37.29 or higher is now required (scripts\genie.lua) [Justin Kerk]. MAME_INCLUDES_<FILENAME>_H is now the standardized way for a MAME include header, starting with a double underscore is reserved by the C++ standard go figure [Angelo Salese]. De-staticify initializations for src\mame\video, machine, includes and audio [Wilbert Pol].
 - 0.194              : Added workround for Clang static builds and enable them again, don't force -O1 on Clang builds (scripts\genie.lua). Removed qtmain on windows, it conflicts with SDL2_Main (osd\modules.lua). Fixed building for windows with qt debugger (osd\windows\window.cpp) [smf]. Fixed tiny build (scripts\target\mame\tiny.lua). std::function is too inefficient, std::function and delegate both require runtime relocations and slowing down startup. Just use function pointers. Get rid of a circular dependency between gamedrv.h and mconfig.h (emu\devdelegate.h, driver.cpp, emu.h, gamedrv.h and mconfig.h). Eliminated core_strdup (mame\pluginopts.cpp, util\corestr.cpp and lib\osdobj_common.cpp). This fixed memory leak in options. Removed machine_config_constructor (emu\emu.h, gamedrv.h, mconfig.cpp and validity.cpp) [AJR]. Added asserts for index out of bounds with e.g. mushi2k4 and ddboy to sound\aica.cpp and video\k054156_k054157_k056832.cpp. Restored SANITIZE make option. Restored basic support for SANITIZE make option. Disabled some unwanted UBSAN checks / enabled nullability checks / enabled ASAN use-after-scope checks [Oliver Stoeneberg]. Removed unused macro in osd\windows\winmain.h [Firewave]. Work around glibstdc++ allocator not dealing with T & being the same thing as T const & because T is already const-qualified. Note that this makes the code less safe because modifying elements of the list can cause the addresses of the data to change (mame\pluginopts.h) [Vas Crabb]. Temp workaround for GCC 7.3 (3rdparty\glm\glm\simd\platform.h) [MetalliC].
 - 0.193              : Start replacing auto_alloc_* with smart pointers, get rid of reference constants in the debugger in favour of capturing the value in the bind/lambda (cpu\i386\i386.cpp, debug\debugcmd.cpp/h, debugcpu.cpp/h, express.cpp/h, mame\cheat.cpp/h, drivers\amusco.cpp, coolridr.cpp, includes\cave.h, wecleman.h, video\cave.cpp and wecleman.cpp). Allow compiler a little more optimisation leeway in x86 count_leading_* (emu\validity.cpp, osd\eigccx86.h and eivc.h) [Vas Crabb].
 - 0.192              : Get rid of some "auto" (cpu\z180\z180.cpp, sound\ymz770.cpp and drivers\gaelco3d.cpp) [hap].
 - 0.190              : Fixed compling on OS X Sierra (machine\diablo_hd.cpp) [Vas Crabb]. Fix for Clang 5 unused lambda capture errors. Changed the Clang workround for ../../../../../3rdparty/compat/winsdk-override\wrl/internal.h:23:13: error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn] to work with Clang 5.0 [smf].
 - 0.189              : 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 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 additional content for release archive from build repository to main repository (artwork\apertureXXXXX.png, artwork\scanlines.png, ctrlr\hotrod.cfg, hotrodse.cfg, scorpionxg.cfg, slikstik.cfg, ctrlr\xarcade.cfg and dist.mak) [Vas Crabb].
 - 0.188              : Fixed tiny build (missing Z80PIO; scripts\target\mame\tiny.lua). C++14 constexpr doesn't cooperate with universal references (bus\isa\isa.h, machine\gt64xxx.h, pci.h, vrc4373.h and vrc5074.h) [AJR]. Renamed AS_DECRYPTED_OPCODES to AS_OPCODES [O. Galibert]. Convenience macro for enum bitwise operators (ENUM_OPERATORS -> ENUM_INCDEC_OPERATORS; cpu\tlcs90/tlcs90.h, emu\emucore.h, input.h, ioport.h, profiler.h, render.h and mame\cheat.h) [Vas Crabb].
 - 0.187              : Fixed Coverity (software) errors about unintended truncation (machine\cs4031.cpp and genpc.cpp). Coverity (software), cleanup and constructor delegation (video\poly.h, includes\orbit., includes\pass.h, machine\bfm_bd1.cpp, bfm_bda.cpp and taitoio.cpp) [Vas Crabb]. Compile fix for machine\ldvp931.h and pdc.h [Couriersud]. Fixed etc\template_driver.cpp compile [Angelo Salese].
 - 0.186              : Fixed obvious bugs found by GCC 7.1 (cpu\dsp56k\dsp56pcu.cpp, spc700\spc700.cpp, machine\stvcd.cpp, video\snes_ppu.cpp, decodmd1.cpp, emu\render.h and machine\n64.cpp). Fixed buffer overrun warnings from GCC 7.1 (cpu\i8089\i8089_dasm.cpp, drivers\megasys1.cpp and pengadvb.cpp). Fixed remaining GCC 7.1 issue mame\luaengine.h, netlist\plib/ppmf.h and tools\chdman.cpp) [Miodrag Milanovic]. Make the code acceptable to Clang 4.0.0 (drivers\cedar_magnet.cpp). Don't use -static on msys2 Clang 4.0.0 as it's currently broken, also removed -static-libgcc & -static-libstdc++ on GCC builds as they have no effect if you use -static (scripts\genie.lua) [smf].
 - 0.185              : 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 [Nathan Woods].
 - 0.184              : Removed tag() argument from logerror() calls (cpu\i86\i86.cpp, i186.cpp, i286.cpp, Z80 and imagedev\floppy.cpp) [Sergey Svishchev]. Fixed Clang 5.0 warning in util\palette.cpp. Maximum of unsigned X and 0 is always X [Couriersud]. Fixed GCC warning in sound\samples.h and GCC link error in emu\driver.h [Vas Crabb]. Fixed MSVC build (include "screen.h" and "emu.h") [smf]. Changed 'const char *' ==> 'const std::string &' [Nathan Woods].
 - 0.183              : Fixed building using system utf8proc [Julian Sikorski]. Converted m_p_chargen into a required_region and associated cleanups [Robbbert]. Removed device_config_complete from numerous devices that don't really need it [AJR]. Removed emu.h from headers. Per Vas' request. If the compile fails for you (i'm thinking OSX and Windows native debuggers here in particular), add '#include "emu.h"' as first include of the cpp files that fail. Due to our use of precompilation and forced inclusion, emu.h must be included as the very first non-comment thing we do if we want to be sure MSVC compiles are identical to GCC/Clang ones. Doing it directly instead of through an include increases the correctness probability by a magnitude [Olivier Galibert]. Removed #undef min/max, we already have NOMINMAX now in scripts. Cleanup headers of not used friend classes [Miodrag Milanovic]. Cherry-pick some features from self-registering drivers PoC: Use size_t for sizes and <algorithm> for algorithms. Fixed up some files that were getting linked into multiple libraries. Add missing virtual method to sh2 peripheral class. Put shortname in driver struct for locality. Made LRU cache use shared pointers for safety [Vas Crabb].
 - 0.182              : Move special windows.h include directives to build defines [Brad Hughes]. Added JuliaLang utf8proc as a third party library with wrappers [Nathan Woods]. Make DEBUG=0 and SYMBOLS=0 behave (makefile) [Vas Crabb]. Removing unnecessary callback (MSVC 2015 error; emu\main.cpp) [Nathan Woods].
 - 0.181              : Added projects\.gitignore and README.md. Created DYNAMIC_API macros for dynamic bind helper classes. Updated name of DYNAMIC_API macros [Vas Crabb]. Enable building projects that are separate of MAME but use same core and lives in separate git tree. Detect if SOURCES file do not exist [Miodrag Milanovic]. Don't crash on late binding if no object is actually needed (util\delegate.h) [O. Galibert].
 - 0.180              : Removed osd\asio.cpp. Prevent -Wexpansion-to-defined warning in recent Clang (modules\file\posixdir.cpp). Experimental support for compiling to WebAssembly using Emscripten (not yet working) [Justin Kerk]. Added a fifo template in util\coretmpl.h. Turn xmlfile API into something that looks like C++ and allowed use of const data node objects. It's still a bit quirky but it's far better encapsulated before, and it plays nice with const. Patch up Qt debugger for new xmlfile API. More XMLfile cleanup: An empty tag and a self-closing tag are semantically equivalent, so std::string can be used saving some manual allocation. A valid tag can't have an empty name, so that can be std::string too. Still expose empty strings as nullptr to API users. Scope down the int_format enum. Work around buggy standard libraries [Vas Crabb]. Header only mode in osd\asio.h. Fixed clear typo in ASIO, sent upstream. Added _WIN32_WINNT so asio.h file could be used and outside OSD section. Added ability to use ASIO in all core MAME parts (scripts\src\devices.lua, emu.lua, frontend.lua). Added delegate support for lambdas and std::functions in general, also supporting const members now (emu\devdelegate.cpp) - see drivers\statriv2.cpp. Do not use FUNC in delegate where applicable. Lambda always have object in util\delegate.h. Make shaders compile DX9 and DX11 only on windows. Fixed USE_DISPATCH_GL compile, seams no-one is actually using it since it is broken for a while (render\drawogl.cpp). Added VS2017 support into project files. Fixed compilation under VS2017, default_semantics is used by apply so need to be public. Generated proper SLN header [Miodrag Milanovic]. Added 'poke' and 'clear' methods to fifo template (util\coretmpl.h) [Joakim Larsson Edstrom]. Fixed building on IBM S390x and PPC64le [Julian Sikorski]. Hack to allow building with SOURCES=src/mame/drivers/cps2.cpp [smf]. New abbreviated types are in OSD and util namespaces and also in global namespace for things that #include "emu.h". Removed the cstdint types from everything in emu. Removed U64/S64 macros. Fixed a bug in dps16 caused by incorrect use of macro. Fixed debugcon not checking for "do " prefix case-insensitively. Fixed a lot of messed up tabulation. Changed many macros and constants to constexpr. Fixed up many __names [Vas Crabb].
 - 0.179              : Fixed two leaks (input\input_winhybrid.cpp) [Brad Hughes]. Added new string conversion overloads [a|w|t|utf8]_from_[a|w|t|utf8_]string(xyz.c_str()). Bulk renaming of Windows string conversion functions: utf8_from_[a|w|t]string ==> osd::text::from_[a|w|t]string and [a|w|t]string_from_utf8 ==> osd::text::to_[a|w|t]string [Nathan Woods]. Some bool <-> int not needed conversions, also cleaned drivenum.* was using memset for clearing vector. Changed dynamic_buffer to std::vector<UINT8>. Use std algo instead of manual setting (emu\screen.cpp). Use standard types uintptr_t, char16_t and char32_t instead of FPTR, utf16_char, unicode_char. NOTICE (TYPE NAME CONSOLIDATION): Use standard uint64_t, uint32_t, uint16_t or uint8_t instead of UINT64, UINT32, UINT16 or UINT8. Also use standard int64_t, int32_t, int16_t or int8_t instead of INT64, INT32, INT16 or INT8. Converted lot of TRUE/FALSE to real boolean and updated types. Fixed linking warning for ASIO (osd\asio.h) [Miodrag Milanovic].
 - 0.178              : Changing an 'assert(false)' to 'throw false', so that this always errors even in non-debug builds (util\opresolv.cpp). Subscripting std::array<..., 0> is bad; working around this specific case (util\opresolv.h). Introduced an STL container and changed util\opresolv.cpp to use it. Alphabetizing the #include's and added typedef's for the reverse iterators (util\coretmpl.h). Changed win_get_window_text_utf8() to return std::string. This eliminated an unnecessary conversion step [Nathan Woods]. Hack for Clang compiling on windows, as it can't tell that calling ::RaiseException will prevent the function from returning (3rdparty\compat\winsdk-override\wrl\internal.h). Disable unknown-attributes & ignored_qualifiers to allow font_dwrite.cpp to build with Clang (scripts\genie.lua) [smf]. Fixed compile for DirectWrite font provider and make it compile with normal windows build (font\font_dwrite.cpp) [Brad Hughes]. Fixed srcclean when doing multiple files in a single run [Vas Crabb].
 - 0.177              : Added src\formats.lua, util\strformat.cpp and vecstream.cpp. Removed util\cstrpool.cpp/h. Attempt to prevent GCC optimising away global_alloc_clear (scripts\genie.lua). Macros should be turned into constexpr or they can't be used in many situations they were previously use in the silly _partialNN functions are necessary because MSVC doesn't support C++14 properly (osd\osdcomm.h). Re-write tools\srcclean.cpp to be cool with UTF-8 and C++14. srcclean can now clean layouts. Don't rely on macro expansion to supply parentheses around condition for if statement. Replaced BITSWAP8/16/24/32 macros with constexpr function that works for any number of bits. Check number of bits in BITSWAPnn and expand up to 64 (emu\emucore.h). BIT doesn't need to be a macro. Make iterators actually meet requirements of ForwardIterator (and by consequence, ForwardIterator, Iterator and EqualityComparable). Don't use function statics if they can be avoided - it isn't thread-safe. Removed leftover crud from when dynamic_buffer and friends were templates in lib/util. It's still dangerous that the const behaviour of iterators doesn't match STL. Also, simple_list members with similar functionality to STL container members should be renamed (emu\device.h, emumem.cpp, render.h, rendlay.cpp and util\coretmpl.h). Added LUA-cleaning ability to srcclean. srcclean on LUA plugins, too [Vas Crabb]. Use std::min and std:max instead of MIN and MAX, also some more macros converted to inline functions. Changed #include <algorithm> to #include <utility> where appropriate. Made constexprs lower case and used constexpr for returning input value as well for rest of defines in osdcomm.h. For bool type use true and false instead of TRUE/FALSE. Compile netlist and LUA only if used. Made proper formats compiled only if needed. Added documentation to main tree. Note that compilers are now limited to GCC 5.0.0 and up [Miodrag Milanovic]. Changed device_image_interface::filetype() to return 'const std::string &' instead of 'const char *'. Introduced is_filetype(), instead of normalizing filetype() to lower case. Removed util\cstrpool.cpp/h; it is no longer used [Nathan Woods]. Changed warning flags for Clang build: -Wno-missing-braces is unfortunately now necessary to avoid errors on almost every single use of the std::array initializer in devfind.h (apparently C++14 does make double braces optional for std::array initializers, but Clang and GCC's -Wmissing-braces never took that into proper account, which is why GCC may still have it disabled by default). Several other Clang-specific warnings have been undisabled; some might perhaps need to be locally re-enabled if legacy 3rdparty code or sundry OSD includes happen to disagree with them. The only warning to require any code changes was -Wabsolute-value, which seems to have caught a minor render bug (and nothing more) [AJR]. Fixes to build with visual studio: 3rdparty\zlib doesn't seem to be picked up when building drivers, building with msys may work because it comes bundled with it's own zlib.h. GCC pre-compiled headers is broken as it masked the missing emu.h [smf].
 - 0.176              : Added 3rdparty\compat\winsdk-override\roapi.h and internal.h. Fixed compile bug on Bash for Windows (scripts\toolchain.lua). Added a couple msys2 updated MinGW headers to winsdk-override to support linux cross-compile with stock MinGW-w64 [Brad Hughes]. Fixed symbol stripping (scripts\toolchain.lua). Removed FUNC_NULL macro. Made emu_timer register_save properly handle timer_expired_delegate(). Removed timer_expired_func and calls using it. Fixed separate compile of drivers using sharc/ADSP21062 cpu. Fixed compile error (video\dynax.cpp) [Miodrag Milanovic]. Override without virtual looks uncomfortable (util\vecstream.h). Better enum increment/decrement operators: Reduced underlying type rather than assuming int. Return old value from post-increment/decrement. Return reference from pre-increment/decrement. Use function-style casts, added explicit casts to keep newer GCC happy (video\rgbvmx.h). More PPC fixed (video\rgbvmx.h) and ppc64le (video\rgbgen.h, rgbsse.h, rgbvmx.cpp and rgbvmx.h). Fixed bilinear_filter and blend on ppc64le (video\rgbvmx.cpp). Balance configuration macros in genie scripts (osd\modules.lua) [Vas Crabb]. Changed some int's to size_t's and added assertions where we were assuming that option_resolution was a requiremen. C++-ification of util\opresolv.cpp/h and corefile.cpp/h. Removed some c_str() calls that are no longer necessary (tools\chdman.cpp and src2html.cpp). Adopting std::find() and std::find_if() in core_filename_extract_base() (util\corefile.cpp) and added a check for reverse overflow when extensions is longer than filename (util\corefile.cpp). Fixed issue that could cause core_filename_ends_with() to return true when extension.size() > filename.size(). Removed implementations of create_option_guide() that return nullptr. Removed nullptr image_formats and fixed formatting. Using decltype() in winfile.cpp and removing +1/-1 "dance" in strconv.cpp. Changed strconv.cpp/h functions to return their results as std::string and std::wstring [Nathan Woods]. Fixed compile errors due to option_resolution namespacing [AJR].
 - 0.175              : Removed src\version.cpp and util\tagmap.h. Emscripten tweaks (src\main.lua; configuration=asmjs) [Justin Kerk]. Support msbuild from POSIX shell. Preliminary fastbuild support (experimental in GENie) [Jeffrey Clark]. Using std::vector<std::unique_ptr<xxx>> instead of simple_list<xxx> in Cheat engine (mame\cheat.cpp). Added initial ninja support to use add MAKETYPE=ninja to compile command line. Custom build tasks are not yet working. Changed simple_list to std::vector (emu\disound.cpp, screen.cpp and sound.cpp). m_formatlist is now vector (imagedev\chd_cd.cpp, flopdrv.cpp, floppy.cpp, harddriv.cpp, emu\diimage.cpp) [Miodrag Milanovic]. Fixed GIT version: GIT version is set by top-level make, not just when GENie runs. Can set IGNORE_GIT=1 for make to ignore GIT. GIT ignored/unavailable uses "unknown" in version string. Mark modified trees as dirty. Note that version now comes from makefile [Vas Crabb]. Move window_list to osd_common_t. Changed two dynamic bind messages to verbose (netdev\pcap.cpp and d3d\d3dhlsl.cpp) [Brad Hughes]. Fixed double hyphen in -pipe (scripts\genie.lua) [Julian Sikorski]. Fixed GCC 6.1.1 warnings [Vas Crabb, Olivier Galibert]. Improved workaround for missing cbegin/cend in glibstdc++ (util\strformat.h and vecstream.h) [Alex Miller].
 - 0.174              : Added zexall\zexall.cpp/h and scripts\target\zexall\zexall.lua. Work around linker issues with Emscripten (targetos=asmjs) [Justin Kerk]. Fixed typos in scripts\src\cpu.lua (cpu\mb86233\ -> cpu\mb86235\), machine.lua (ncr5389.h -> ncr5390.h) and sound.lua (pic-ac97.h -> pci-ac97.h). Minus sign in subtarget creates problems (makefile). Changed INC -> HXX makes editors and code analyzers see it as C++. Added ability to create standalone emulators, added (MESS) ZEXALL as example [Miodrag Milanovic]. Emscripten options cleanup (scripts\src\main.lua) [Justin Kerk].
 - 0.173              : Removed emu\machine.ipp. Support build without optimize flag. OPTIMIZE= to disable the current default value 3. Also allow ARCHOPTS to be set regardless of OPTIMIZE, useful for debug flags. Added PRECOMPILE=0 so in conjunction with ccache it gives better compile speed. Eliminate device_t::static_config, a type-unsafe legacy feature. Rewrited or removed every last instance of MCFG_DEVICE_CONFIG and its two aliases, including within comments and dead code. Moved osdsync to root of OSD and removed osdmini. Added short GIT version if building non-release build, also if GIT command is not available or if .git is not there (so building out of other sources). Always rebuild version.cpp when there is GIT version change. Various cleanups suggested by static analyzer (NULL -> nullptr, m_device.xxxx -> device()->xxxx, get_xxxx() { return m_xxxx; } -> get_xxxx() const { return m_xxxx; } ... ). Instead of DEVCB_NULL use always DEVCB_NOOP to prevent confusion [Miodrag Milanovic]. Iterate over core classes C++11 style. Avoid auto return types; silence some unused variable warnings. Devfind revision phase 1, cleaning out some legacy stuff: Eliminate the cached device_t::m_region pointer and its region() getter method. Devices that need to bind to a region with the same tag should use optional/required_memory_region or optional/required_region_ptr with DEVICE_SELF as the subtag; this improves error checking (DEVICE_SELF has been moved to device.h for greater visibility in the source). Allow required/optional_region_ptr to specify a specific length which must match that of the region found. Implement finder_base::finder_tag() getter for diagnostic purposes. Perform some (not very efficient) validity checks on memory region finders instead of allowing them to automatically pass. Privatize device_memory_interface::m_addrspace. Iterated over devices C++11 style. Replaced the old device_iterator and its specialized versions with functionally equivalent classes that use standard operators to yield references to devices/interfaces rather than pointers. With range-based for loops, they no longer have to be stored in named variables, though they can also be reused concurrently since the iteration state is now maintained by a subclass. Added a few more typical getters to device_t::subdevice_list [AJR]. Fixed the MSVC build (src\emu.lua) [Peter Ferrie]. Added UWP (Universal Windows Platform) compile to windows\winmain.cpp with implementation for cursor methods [Brad Hughes]. Added includes for dependency documentation. There is still inconsistent use of assert(...) in src\lib\util. libutil compile will use assert from <assert> while other parts of MAME will be compiled with assert from emucore.h. Converted osd_event into a class. Since all is std:: now, reduce to inlineable code [Couriersud]. Added more Clang output to tell where #include errors are coming from [Justin Kerk]. Use std::chrono instead of GetTickCount in window.cpp/h for Windows OSD [Brad Hughes].
 - 0.172              : Added emu\device.ipp, machine.ipp, lib\util\strformat.h and vecstream.h. Splitted PARAMS into PARAMS and TARGET_PARAMS + deprecated (makefile). Added .PHONY sections (makefile). Renamed names that clash system defines in various environments (emu\luaengine.cpp, lib\netlist\nl_base.h, nl_factory.h and plib\pparser.cpp/h). Fixing some more Android related things. No way to support QNX/Blackberry - ARM. Replaced strformat, strprintf and strcatprintf with type-safe steam_format and string_format. Updated MAME to use new function. Instantiate ODR-used static constant members. Removed use of retired functions in tools. Made makefile executable without GNU tools (makefile). Use std::atomic and std::mutex where applicable. Removed test in emu\validity.cpp since atomic functions about to be removed. Use std::atomic in chd.cpp/h and sync\work_osd.cpp. Removed asm part for atomic implementations (osd\eigccppc.h, eigccx86.h, eivc.h, eminline.h and sync/sync_windows.cpp). Used std::thread and std::condition_variable. TIMER_CALLBACK to TIMER_CALLBACK_MEMBER. Use type-safe printf for core_file and emu_file, surprisingly few knock-on effects. With latest package from MSYS of Clang 3.8.0 build at least compile fine on windows. Fixed GCC 6.0 build. Clang 3.8.0 supports -municode. Updated makefile to support more building environments and to prevent crashing if folders are missing [Miodrag Milanovic]. Support *n conversion in stream_format/string_format: Make stream_format return characters printed. Added iostreams with std::vector storage. Move to type-safe templates for logerror and popmessage. Removed now-unnecessary I64FMT from calls to logerror/popmessage. Put some lib/util stuff in util:: namespace. Added function for flushing file buffers. Don't need to call FlushFileBuffers (it's equivalent to fsync, not fflush) in emu\machine.cpp and osd\windows\winfile.cpp. Explicitly flush log file on each line. Added ability to pass argument packs that don't need templates all the way down (util\strformat.h). Get rid of most uses of core_i64_hex_format, all remaining uses are in memory.cpp. Also core_i64_format. this cleans up abuse of static buffers in the unmapped read/write reporters. core_i64_hex_format is now a static function in emu\memory.cpp. Implement swappable concept properly (util\vecstream.h). Reduced number of formatting template instantiations needed - should reduced compile time and executable size a bit (util\strformat.h). Turn core_file into a proper class that gets cleaned up safely using unique_ptr. Allow seek to position 0 in a vectorstream with empty storage, always reserve 1k for core_file printf buffer. Make osd_file a polymorphic class that's held with smart pointers. Fixed many valgrind mismatched free() / delete / delete [] errors (lib\util\corealloc.h). Type-safe C++ printf analog and vector-backed iostreams: Supports most C99, glibc, SUS and MSVCRT format specifications. Allows formatting any object with stream output operator with %s [Vas Crabb]. Put back Doxygen search box (doxygen\doxy-boot.js). Do not sort Doxygen member functions and macros for now (doxygen\doxygen.config) [Balrog]. Get max char size from ANSI codepage instead of IsDBCSLeadChar() (osd\strconv.cpp) [Brad Hughes]. Fixed Emscripten build when Clang is the default compiler (issue #704). Build more of font_sdl.cpp with Emscripten since there is an SDL2_ttf port now (src\main.lua). Enable the internal delegates for Emscripten. Allow command-line errors to work in Emscripten (src\main.lua). Include shadow-mask.png in Emscripten [Justin Kerk]. Ci20 wip support [Miodrag Milanovic]. Avoid dereferencing null pointers in set_system_name (emu\emuopts.cpp) [AJR].
 - 0.171              : Call to nothrow allocation (global_alloc -> global_alloc_nothrow and global_alloc_array -> global_alloc_array_nothrow) (debug\textbuf.cpp, render\drawdd.cpp, sound\wavwrite.cpp, util\corealloc.h and windows\input.cpp). Conversion from auto_alloc_clear -> global_alloc_clear (imagedev\floppy.cpp and emu\diimage.cpp). Removed pointless cast like (wav_file *) global_alloc -> global_alloc (debug\textbuf.cpp and sound\wavwrite.cpp). Avoid strlen calls in a loop (debug\debugcmd.cpp, emu\luaengine.cpp and render.cpp). Replaced int with bool where applicable (int xx = TRUE/FALSE -> bool xx = true/false) [dankan1890]. Added macros for alignment checking [AJR]. Replaced osd_lock with std::mutex. Fixed regression with some drivers, for render we just need to keep mutex per thread. Reverted using dereferenced mutex (sync\work_osd.cpp) [Miodrag Milanovic]. Start making code a little more modern c++y with classes, member functions etc. rather than legacy structs, tokens etc (machine\k033906.cpp/h, video\vooddefs.h, voodoo.cpp/h, voodoo_pci.cpp, drivers\funkball.cpp, gticlub.cpp, hornet.cpp, magictg.cpp, nwk-tr.cpp, savquest.cpp, seattle.cpp, vegas.cpp and viper.cpp) [David Haywood]. Added a document with Emscripten build instructions (Compiling MAME to JavaScript via Emscripten) [Justin Kerk]. Fixed compile when using params like OVERRIDE_CXX='ccache g++' OVERRIDE_CC='ccache gcc' [QMC2]. Improved cross compile support: Added TOOLCHAIN make flag for explicit toolchain prefix cross compiling [Jeffrey Clark].
 - 0.170              : Removed lib\util\corealloc.cpp. Added pre-compiled headers support to build system. Make linking of winpthreads static for posix MinGW build (scripts\genie.lua). Make compiler detection works under posix windows environments (makefile). Removed memory tracking. Removed corealloc.cpp file from build. Make make_unique_clear accept all kind of parameters. Added vector instead of simple_list. Keep naming of binaries for builds made with SOURCES to be same as usual, fixed propagation of flags for builds made with SOURCES. Make SYMLEVEL=1 for full builds, and when custom builds are made save more debug info, otherwise it is not possible to create working executable (is over 2GB) for full build [Miodrag Milanovic]. Common OSD path environment var expansion [Jeffrey Clark]. Return std::string objects by value rather than pass by reference: strprintf is unaltered, but strformat now takes one fewer argument. state_string_export still fills a buffer, but has been made const. get_default_card_software now takes no arguments but returns a string [AJR]. Removed this == nullptr checks and fixed most of the resulting crashes [MooglyGuy, Tafoid]. Some nullptr -> 0x00 and NULL -> nullptr. PORT_C*_MEMBER cleanup [hap].
 - 0.169              : Removed lib\util\tagmap.cpp. Merged Clang++ version 30000 and 30400 sections to enable -Wno-constant-logical-operand [Trammell Hudson]. Initial conversion of core to C++14. Note that compilers are now limited to GCC 4.9.0 and up, Clang 3.4.0 and up and VS2013 and up. Cleanup of genie.lua. Set -std=c++1y to Clang 3.4. MAME Clang-modernize part 1-7. Some core C++11 narrowing fixes. Removed need for -Wno-c++11-narrowing for Clang and -Wno-unused-result, -Wno-narrowing and -Wno-attributes on GCC. Added override specifier to virtual function (part 1-3). Added override for macros that could not be auto recognized by tools. Added addprojectflags function and added -Wsuggest-override for all that are not 3rdparty projects. It is place where all additional checks we should put. Can't do override checks due to QT headers. Respect OVERRIDE_CC and OVERRIDE_CXX. VS2012 is not supported anymore. Cleanup of osdcomm.h. tagmap_t to std::unordered_map or std::unordered_set where applicable. tagged_list without tagmap_t. Macro removal INLINE -> static inline. Removed auto_bitmap_ind*_alloc and auto_bitmap_rgb32_alloc and replaced with std::unique_ptr. auto_alloc_array to unique_ptr. Added make_unique_clear. make_unique_clear instead of clear memset. auto_alloc_array_clear -> make_unique_clear. Some manual changes to unique_ptr. Fixed some that were auto_alloc_array_clear and made them use proper template (drivers\rungun.cpp, saturn.cpp, vboy.cpp and k053246_k053247_k055673.cpp). global_alloc_array to std::make_unique where applicable. global_alloc for m_gfxdecode->set_gfx changed to work with unique_ptr. Removed declarations from H files that are not defined in CPP. Added platform parameter and detection for x86/x86_64/arm/powerpc [Miodrag Milanovic]. Propagate ARCHOPTS to linker (scripts\genie.lua). Added const to qualify source bitmaps in drawgfx [Vas Crabb]. Fixed wrong number of arguments to makedep.py in SOURCES build (scripts\genie.lua) [AJR].
 - 0.168              : Make it easier to build multiple configs (makefile and scripts\genie.lua) [Vas Crabb]. Relaxed emu.h a bit, should make compile a bit faster. Removed render.h from emu.h and fix deps. Cleanup devcpu.h. No need to include network.h. Fixed some errors, some cleanups, init fixes and suggestions pointed by ReSharper C++. Renamed *.c -> *.cpp in our source, updated build scripts for rename c - > cpp, renamed m -> mm and removed not longer needed ForceCpp flag. Added make option to generate CMake files for CLion and root project file. Fixed compile for Intel C++ 15 compiler. Added new doxygen templates and limited basic to core. Fixed uninitialized class members. Added MSBUILD support, msbuild.exe must be in path so update your tools [Miodrag Milanovic]. Disable some intel compiler remarks that are shown in a release config (scripts\genie.lua) [David Haywood]. Fixed all instances of PVS-Studio (Program Verification Systems) warnings: V501: "There are identical sub-expressions to the left and to the right of an operator". V562: "It's odd to compare a bool type value with a value of 0/1". V564: "The &/| operator is applied to bool type value. You've probably forgotten to include parentheses.". V578: "An odd bitwise operation detected. Consider verifying it.". "ambiguity of ?: operator flagged" and others [MooglyGuy].
 - 0.166              : Added scripts\src\devices.lua. Fixed GetModuleHandle to be universal (osd\modules\debugger\win\debugviewinfo.c, debugwininfo.c, editwininfo.c, osd\windows\input.c, output.c, window.c, winmain.c, winutil.c/h) [DrMefistO]. Made FORCE_VERSION_COMPILE option to be used for build server (makefile, scripts\genie.lua and scripts\src\main.lua). Moved all devices into separate part of src tree (src\emu\ to src\devices\) and updated build scripts and code change in order to fixed compile. Moved tools in proper place and moved build python scripts together with other scripts. Renamed DRIVERS parameter to SOURCES since you can add any source you wish to include in target. Removed some unused variables (std::string args, std::string fulltag, std::string prev_owner, std::string regiontag and std::string tempstr). Removed not needed conversions (tmp.c_str() --> tmp) [Miodrag Milanovic]. Removed unneeded drawgfxm.h include (video\hng64.c, pc080sn.c, pc090oj.c, tc0100scn.c, tc0110pcr.c, tc0150rod.c, tc0180vcu.c, tc0280grd.c, tc0360pri.c and tc0480scp.c) [Luca Elia]. Slight speedup to device_scheduler::timeslice() (emu\schedule.c) [Wolf-Fivousix]. Allow current scripts\toolchain.lua for MinGW to work and allow GCC 5.2 to also work if GCC-AR is current enough. Added a little more info about LTO option [Cowering, Balrog]. Fixed osd\osdcomm.h compile on VS2013 and util\corealloc.h to make VS2015 release builds possible [Miodrag Milanovic, DrMefistO].
 - 0.165              : Fixed emscripten compile (netlist\plib\pstring.h and osdmini\minifile.c) [Justin Kerk]. Fixed template_driver.c compilation [Luca Elia].
 - 0.164              : Fixed Clang compile in video\rgbgen.h, rgbsse.h, rgbvmx.h and rdptpipe.c [MooglyGuy]. Added some defines to d3dcommon.h to let BGFX compile with VS2013, but it would be much better to update the Direct3D headers to the latest version. Modify netlist\solver\nld_solver.c to let it comple with VS2013 [yz70s]. Don't make malloc replacement incompatible with malloc and align memory with MALLOC_DEBUG (lib\osdlib_win32.c) [Vas Crabb]. Removed semicolons from end of lines in Python code, removed unused variables and close open files (build\makedep.py) [Mike Naberezny]. Fixed GCC 4.4 compile [Barry Rodewald]. -Wno-error=pedantic fixes and quiet LTO ODR warnings. Quiet anonymous union errors. Used a couple different techniques, all compile to same code as before with -O3. Don't need %lf as arguments are always promoted to double [Cowering]. Added travis-ci support (.travis.yml - http://docs.travis-ci.com/user/getting-started/) [Dirk Best]. Fixed Clang version detection on macos (makefile) [Wilbert Pol]. Do not pass -m32 to GCC on ARM [Julian Sikorski]. Fixed error handling of osd_truncate (osdmini\minifile.c) [Thomas Klausner].
 - 0.163              : Removed -Wno-unused-variable for MinGW/GCC (scripts\genie.lua and src\3rdparty.lua). Force rebuild version.c (scripts\src\main.lua). Start work on creating tiny builds per driver file included (build\makedep.py). Extract components used, allow comma separated list of input files, generating proper output and analyze all files for deps instead just main (build\makedep.py). Made possible creation of custom builds with given list of drivers included. Note that game list is parsed so if macros are used they will not be found. Example: make SUBTARGET=cops -j9 DRIVERS=src/mame/drivers/cops.c. Made FM cores compile only in group, that way it always work. For separate drivers use simple naming logic (scripts\src\main.lua) [Miodrag Milanovic]. Re-enable optimizing SYMBOLS=1 builds (makefile) [MooglyGuy]. Compile fixes for GCC5.1.1 Win64 and CPP11 mode. Requested by MinGW team to test LTO fixes. Please add #ifdefs if 64 bit printf does not work for you! Let subtarget MESS (not MAME, yet) compile with Windows GCC 5.1 and LTO. I am told 'any' recent GCC for Windows has GCC-AR wrapper, if not, change back the line in toolchain.lua [Cowering]. Allow compiling with shared libraries. Put SHLIB=1 in the main makefile, or on the command line. The idea is to get a *way* faster link with symbols. It works at least on Linux, with one annoying caveat: You have to be in the build\projects\sdl\mame\gmake-linux directory to start MAME afterwards. We're going to move some things around to be able to use LD_LIBRARY_PATH or have it start as-is from the root [O. Galibert]. Fixed .lst files whitespace problem (build\makelist.py) [LnmVolbo]. Added OPT_FLAGS back (makefile and scripts\genie.lua). Added the ability to use system flac, jpeg, lua, sqlite3, portmidi and zlib based on wallyweek's work. This brings the system lib capabilities back to where they were prior to build system rewrite [Julian Sikorski]. Moved device constructors from the header to the driver in an effort to keep things uniform (sound\sn76496.c/h and video\tms9928a.c/h) [Tafoid]. Missing bits needed for Emscripten compile (makefile) [Justin Kerk].
 - 0.162              : Changed some rand_r to unknown_r (drivers\24cdjuke.c, bingoc.c, centiped.c, magictg.c, ssv.c, includes\centiped.h and ssv.h) [hap]. Fixed issues with white-space in MAME_DIR [qmc2]. MAME now represent full build, for building MESS drivers only use make SUBTARGET=mess and for building only Arcades drivers only use make SUBTARGET=arcade. Added Cppcheck target in order to run analysis of code (makefile). Propagate _subtarget in maintargetosdoptions call (scripts\src\main.lua, osd\osdmini.lua, sdl.lua and windows.lua) [Miodrag Milanovic]. Added makefile switch to choose linking against bundled OR system expat library [Cesare Falco]. Fixed NO_USE_MIDI (src\3rdparty.lua and main.lua). Support for -Wshadow (show shadow warnings) in Clang (scripts\genie.lua). Removed nonstandard inline overloads (scripts\genie.lua and util\corealloc.c/h). Mark replacements separate from overloads and removed unneeded prototypes (util\corealloc.c/h) [Balrog]. Removed all uses of setjmp.h in MAME. The only place where it is still referenced is cpu\powerpc\ppc.c. I couldn't find any case in which this file would be compiled using the current build system. Nonetheless documented use using PPC_H_INCLUDED_FROM_PPC_C define. Fixed a number of "-Wextra -Wdouble-promotion" warnings. Fixed a couple of float-to-double warnings. Cleaned up RESTRICT and ATTR_ALIGN usage. Fixed some Clang 3.6 compilation errors [Couriersud].
 - 0.161              : Added osd\modules.lua. Removed build\build.mak, cc_detection.mak, flags_clang.mak, flags_gcc.mak, makedep.c, makemak.c, emu\bus\bus.mak, cpu\cpu.mak, emu.mak, machine\machine.mak, netlist\netlist.mak, sound\sound.mak, video\video.mak, ldplayer\ldplayer.mak, lib\lib.mak, mame\mame.mak, tiny.mak, osd\osdmini\osdmini.mak, windows\windows.mak, winprefix.h, osd\windows\osinline.h, tools\tools.mak, ume\osd\windows\windows.mak and ume.mak. Made possible architecture override with PTR64=1 param. PTR64=0 is x86, PTR64=1 is x64 (makefile). Check generated files even if just compiling (makefile). Made CC and LD override possible (renamed to OVERRIDE_CC and OVERRIDE_LD), more parameter handling and removed internal CC and LD settings since it's not needed and can be overwritten externally now (makefile, scripts\genie.lua and toolchain.lua). Include symbols in builds (scripts\genie.lua). sym file generate on MinGW in postbuild process (src\main.lua). Fixed for FORCE_DRC_C_BACKEND (scripts\genie.lua and src\cpu.lua). Create makefiles for targets per subdir. Added NOWERROR support (makefile and scripts\genie.lua). Explicit file listing in LUA scripts making generate much much faster. Added GAWK script to make deps more sane (http://gnuwin32.sourceforge.net/downlinks/gawk-bin-zip.php). Separate OS and TARGETOS recognition and supported more platforms. Enforce OPTIMIZE = 3 for PROFILE builds, suggested by MG. Added back UNIDASM, and enabled building even in tiny builds. Added dependency to makefile, so generation task wait for GENie to be built. Added IgnoreLDFlags and changed sent upstream. Removed windows/osinline.h and placed MSVC dependent files in top folder. Moved MSVC defines from winprefix.h to osdcomm.h. Removed empty file compilation - porttime.c. Removed osinline.h in windows and sdl and change files using them. Removed need for winprefix.h and moved alloca define to osdcomm.h. Ignore moc missing if MOC_FILES is empty (makefile). Added custom build steps support to GENie. Added generated m68kops files to tree, added makefile for developers working on core. Implemented filtering of dependency files, only active if machine have awk or gawk installed (scripts\genie.lua). Made all windows build use icons. Enabled override of resources by OSD. Supported MinGW-Clang builds. Enable multiple definitions for MinGW-Clang, due to weird issue with multiple symbol. Added FILTER_DEPS option for post compile filtering. Added SEPARATE_BIN option to put executable files in bin folder. Added PYTHON_EXECUTABLE to use differently named Python executable. User configuration option can be now stored in useroptions.mak, so no need to alter main makefile. VS2010 and VS2015 compile works. Added SHADOW_CHECK parameter so we can work on shadowing issues in our code. Replaced cstr() -> c_str() as preparation for move to std::string. There is no implicit conversion to char* in std::string. Replaced/Renamed string -> str due to future conflicts. Removed not needed astring includes. Added #include <string> in emucore.h. Converted astring to std::string. Updated astring constructors to have just one string param, to be more like std::string. Made libflac possible to compile under Xcode, and simplify for other. Removed bool conversion and implicit empty check. Added NO_STRIPPING option and enabled stripping of executable by default (makefile). Added regression tests and cleansrc to makefile. Unified objdir and targetdir for supported platforms [Miodrag Milanovic]. Added OVERRIDE_CXX and fixed OVERRIDE_LD. Added support for per-OSD mak files (makefile) [qmc2]. Make GCC_VERSION work with $(CC) (makefile). Allow ARCHOPTS to contain whitespace (makefile). linux-gmake and linux-gmake-clang: Only run GENie build stage if scripts or makefile has changed. The concept may easily be migrated to other builds. I just don't have the time to test other builds right now. The downside of the approach is that you have to force a build stage run by deleting the build/projects folder. This however is a lot less frequent than normal "make". Use vsnprintf instead of printf to avoid libc buffer overflows (emu\emucore.c) [Couriersud]. Removed all the stuff that causes driver and emu sources to be compiled differently with different OSDs. Switch back to building for all OSDs in common directory. Move more OSD-specific stuff into OSD scripts. It still isn't completely safe to be building all OSD into same directory. Common OSD "module" files, e.g. debuggers and renderers, build with different options for each OSD. It works at the moment, but you will end up with slightly different executables depending on the order you build OSDs. Generate project files into OSD subdir to facilitate building multiple OSDs. Build into OSD subdirectory for people building multiple OSDs. Make MinGW and OSX targets use dependencies for running GENie. Use REGENIE=1 to force GENie re-run without removing/touching files. Mark many targets as phony as appropriate. Improved situation for custom targets/OSDs. Fixed VERBOSE=1 for top-level makefile, fix always regenerating makefiles on Windows, make many variable in top-level makefile immediate rather than deferred. Refactor out common OSD modules into separate LUA file. Added back DIRECTINPUT config for Windows OSD. Bring back NOASM, USE_SDL, CYGWIN_BUILD and malloc debugging for Windows OSD. Advantages over SDL sound output are simpler code and lower latency [Vas Crabb]. Fixed race condition/crash when using the OSD to choose pcap devices (netdev\pcap.c) [Rob Braun]. Replaced dynamic_array with std::vector [O. Galibert].
 - 0.160              : First step to move osd_printf_* into osd again. Callbacks are now implemented using an interface and use a push/pop approach where the pop can happen out of order of pushes (emu\validity.c/h, osd\modules\lib\osdobj_common.c/h, osd\osdcore.c/h and osd\windows\winmain.c) [Couriersud]. Disabled some parts of UndefinedBehaviorSanitizer for Clang 3.6 (build\flags_clang.mak). Fixed nltool (debug netlists outside MAME) linking with Visual Studio (tools\tools.mak). Removed unnecessary assert.h includes from many headers and added it to lots of source. Cleaned up emu.h usage in src\lib\formats. Replaced off_st usage in src\lib\formats with UINT32 to reduce libemu dependencies [Oliver Stoeneberg]. Some compilers have issue with "!" signs (util\corestr.h) [Miodrag Milanovic].
 - 0.159              : Converted build\makelist.c to build\makelist.py. Fixed linking tools against system libraries (makefile) [Cesare Falco]. Restored winprefix.h change by Peter Ferrie. Also moved some code around and only defined strtoll when it is actually necessary. Some winprefix.h cleanups. Added makefile define CPP11 to compile C++ code as C++11. Additions for Clang 3.6 and cleanups. Also enabled some warning by default again. They were disabled because of bugs in Clang which have been fixed by now. Unfortunately the disabling predates the proper version handling, so it's not clear for which versions they should be ignored. So if they come up again we just need to re-added them by checking for the proper version (build\flags_clang.mak). Moved Clang C++11 warning supression into CPP11 define. Fixed Clang 3.4 compilation (build\flags_clang.mak) [Oliver Stoeneberg]. Work around Emscripten linking issues by avoiding ar altogether (makefile). See https://github.com/kripken/emscripten/issues/2619. Fixed tiny build when there are no buses [Justin Kerk]. Converted makelist implementation to Python [Miodrag Milanovic].
 - 0.158              : Added modules\lib\osdlib_macosx.c, osdlib_os2.c, osdlib_unix.c, osdlib_win32.c, osd\modules\font\font_none.c, font_osx.c, font_unix. and font_windows.c. Fixed MemorySanitizer linking (lib\lib.mak). Introduced BASELIBS to makefile to link smaller tools with less dependencies. Fixed non-DEBUG PROFILE=1 build with Clang (makefile). Proper fix for PROFILE=1 with Clang. png2bdc was crashing because an implicitly enabled optimizations - see http://llvm.org/bugs/show_bug.cgi?id=14713 (makefile). Added some errorhandling (osd\modules\sync\sync_ntc.c, sync_os2.c, sync_sdl.c, sync_tc.c and sync_windows.c). Moved some Clang specific stuff from makefile to build\flags_clang.mak [Oliver Stoeneberg]. Run build tools based on build OS (makefile and build\build.mak). Make cross-compilation easier (makefile and build\build.mak) [Ramiro Polla]. Make cross compiled windows build to be independent from dll's (windows.mak). Use $(INCPATH) only where needed (makefile, lib\lib.mak). Added include of stdarg to support some platforms (osd\osdcore.h) [Miodrag Milanovic]. Fixed compile of derivatives OSD = winui (makefile) [Robbbert]. Changed error about wrong OSD to a warning. Non supported builds can now add the proper define (OSD_WINDOWS, OSD_MINI, OSD_SDL, or OSD_my_own_OSD) in my_own_OSD.mak (makefile). Moved OS specific low level code to osd\modules\lib. Removed duplicate code. Should support LIB\BASELIB separation better going forward. Move definition of -DOSD_WINDOWS, -DOSD_SDL and -DOSD_MINI into $(OSD).mak. Added sanity check to makefile. Put osdcore.o into libutil.a to avoid linking errors on debug builds. This is a workaround. All osd_printf functions are in reality core functions given they are built around delegates and abuse delegates heavily. Therefore they should be moved to util at some point. Changed osd_font to struct osd_font and removed unnecessary osdepend.h includes. Moved font code into osd\modules\font. Extended osd_font to a proper interface. Converted png2bdc.py to Python 2.5 syntax. More code alignment (osd\sdl\netdev_pcap.c, netdev_pcap_osx.c, sdlos_win32.c, strconv.c, osd\windows\netdev_pcap.c, strconv.c and winfile.c). Promoted osd_getenv from osdlib.h to osdcore.h. Changed return type to "const char*" [Couriersud].
 - 0.157              : Made build tools dependencies smaller (build\build.mak). Better x64 detection for windows (makefile) [Miodrag Milanovic]. Fixed SANITIZE=thread linking (lib\lib.mak). Many clarification on disabled UndefinedBehaviorSanitizer checks (makefile) [Oliver Stoeneberg].
 - 0.156              : Added lib\winpcap\bittypes.h, ip6_misc.h, Packet32.h, pcap-bpf.h, pcap-namedb.h, pcap-stdinc.h, pcap.h, remote-ext.h, Win32-Extensions.h, pcap\bluetooth.h, pcap\bpf.h, pcap\namedb.h, pcap\pcap.h, pcap\sll.h, pcap\usb.h and pcap\vlan.h. Do not set define HAS_OPENMP when makefile define OPENMP is set - fixes warning about macro redefinition. Updated comments/TODOs about invalid vptr warnings (build\flags_clang.mak, bus\isa\s3virge.c, trident.c and video\pc_vga.c). Re-enabled -Wdynamic-class-memaccess and -Wconstant-logical-operand for Clang 3.5 now that all warnings have been fixed (build\flags_clang.mak) [Oliver Stoeneberg]. Added WinPCap headers to the project. Include WinPCap headers during Windows build [Peter Ferrie].
 - 0.155              : Avoid potential conflict between emu\video\poly.h and osd\windows\winwork.c / osd\sdl\sdlwork.c defines. Renamed YieldProcessor() to osd_yield_processor() to match SDL more closely. Some refactoring to make SDL and Windows OSD code match / Windows SDL code did not delete the critical section in osd_scalable_lock_free(). More sdlwork.c and winwork.c consolidation / SDL now supports envrionment variable OSDWORKQUEUEMAXTHREADS [Oliver Stoeneberg]. Fixed Clang compile (util\coretmpl.h) [R. Belmont]. Allow use of external SQLite3 (makefile) [Cesare Falco]. Make it compile on 4.9.x and removed -Wno-strict-overflow for GCC 4.9 (build\flags_gcc.mak) [Miodrag Milanovic]. Make Clang 3.5 compile out-of-the-box by disabling some warnings for now / added TODO (build\flags_clang.mak). Fixed most of the -Wunreachable-code-break and -Wunreachable-code-return warnings of Clang 3.5 when compiling MAME. Removed -Wno-strict-overflow for GCC 4.8 (build\flags_gcc.mak). Flagged some functions as noreturn (build\makedep.c and makemak.c). Some C++11 compilation fixes. Documented some disabled Clang compiler warnings / re-enabled -Wformat-security for Clang 3.5 (was disabled because of a bug in Clang) and disabled C++11 warnings so it compiles out-of-the-box and added TODO (build\flags_clang.mak). "Properly fixed" Clang -Wconstant-logical-operand warnings and enabled it (build\flags_clang.mak, cpu\h8\h8_timer16.c, video\stvvdp2.c and jagblit.inc). Removed some old leftovers (includes\exidy440.h, jackal.h, leland.h, m92.h, psikyo.h, rainbow.h, suprridr.h, toaplan1.h, audio\mw8080bw.c, drivers\mw8080bw.c, namcofl.c, includes\mpu4.h, mw8080bw.h, n64.h and namcofl.h) [Oliver Stoeneberg]. Changing #includes for headers that are part of toolchain and not part of any source/external library (analog\nld_solver.c, emu\rendfont.c, lib\util\hashing.c, windows\mame.rc and windows\ume.rc). Some minor mame.mak cleanup [Tafoid]. Misc drivers: Moved functions into driver class and small cleanups. Restored the support for loading games from compatible softlists (like gbcolor games in gameboy, and viceversa, msx1 carts in msx2, etc.) by using the syntax: mess system -media list:gamename. You can now for instance use again "mess gbcolor -cart gameboy:sml" to play "Super Mario Land" with the custom palettes of the Game Boy Color (emu\diimage.c) [Osso].
 - 0.154              : Moved emu\eminline.h to src\osd\. Added makefile define SSE2 to enable specially optimized code. Synchronized mame.mak and mess.mak. Added GCC 4.9 handling to build/flags_gcc.mak now it has been released (build\flags_gcc.mak). Use -fno-optimize-sibling-calls with SYMBOLS=1 for more complete stack traces with optimizations (makefile, osd\windows\vconv.c) [Oliver Stoeneberg]. Don't get the nodename when auto-detecting build parameters (makefile). Fixed Makefile misinterprets host name in BIGENDIAN autodetection [R. Belmont, based on a patch by robert_s]. Small fix for makemak (makefile). Fixed tiny build. Removed unused parameters (drivers\coolridr.c, cv1k.c, firebeat.c, goodejan.c, gunpey.c, raiden2.c, sengokmj.c, wyvernf0.c, includes\raiden2.h, tubep.h, video\argus.c, fuukifg2.c, gaelco3d.c, hng64.c, konamigx.c and seta.c) [Miodrag Milanovic]. Some parsing friendly spacing corrections (mame.mak) [Tafoid]. Allow line continuation in string literals. Don't convert spaces to tabs if they are in a string literal that is split over multiple lines using line continuation (tools\srcclean.c) [smf].
 - 0.153              : Added build\cc_detection.mak, flags_clang.mak and flags_gcc.mak. Added a "-u" (for unix) flag to srcclean to produce unix-style endings. Updated srcclean source following smf comments. Added a dry-run option (-d) [Couriersud]. Fixed GCC 4.1.2 compiling (drivers\pong.c, machine\netlist.c) [R. Belmont]. Added support to compile windows builds with GCC 4.8.2 x64 only produce working code (windows\windows.mak). For now keep only bus part in separate library to make visual studio builds possible (makefile, emu\emu.mak). Include bus resolve in dynamic build procedure (build\makemak.c) [Miodrag Milanovic]. Fixed compilation with older Clang versions (makefile). Always enable SYMBOLS in case of SANITIZE (makefile). Changed DEBUG -> MAME_DEBUG (audio\snes_snd.c, machine\archimds.c, machine\fddebug.c and mess\machine\wswan.c). Printf fixes for MAME and ATTR_PRINTF review for MESS. Suppress alignment errors with SANITIZE=undefined for now and disabled more checks with SANITIZE=undefined for now (makefile). Do not optimize SANITIZE builds by default. Fixed usage of uninitialized member (cpu\tlcs900\tlcs900.c, cpu\tms9900\tms9900.c, tms9995.c, imagedev\cassette.c, machine\decocass_tape.c, msm58321.c, southbridge.c, tms9902.c, wpc.c, sound\k056800.c and ics2115.c). Moved compiler-specific warning generation to shared files. Added TODOs about potential overflows in core_i64_hex_format() and core_i64_oct_format() (util\corestr.c). Some mismatched malloc/free usage with osd_* functions. Do not use osd_malloc/osd_free in non-OSD code. Removed mame_* aliases and just use core_* functions. osd_* -> global_* compilation fixes [Oliver Stoeneberg]. Fixed GCC 4.8 compile (emu\memory.c). Changed global_free() to global_free_array() (cpu\z8000\z8000tbl.c, sdl\drawsdl.c, sound\discrete.h and sound\spu.c) [Alex Jackson]. Added an osd_truncate call to truncate files (osd\osdcore.h, sdl\sdlfile.c and osd/windows/winfile.c) [O. Galibert]. Added compile time check for 64-bit intel compiler to delegate.h (to prevent assert(sizeof(mfp) <= sizeof(m_rawdata)); ) [external]. Replaced some malloc/free usage with global_alloc_array/global_free_array. Converted some global_alloc_array() usage to dynamic_array/dynamic_buffer. Converted a auto_alloc_array()/auto_free() usage to dynamic_buffer. Converted some malloc()/free() usage to dynamic_array/dynamic_buffer. Some dynamic_buffer/dynamic_array usage cleanups. Just use core_strdup() in osd_get_full_path() in osd\osdmini\minifile.c. Use ARRAY_LENGTH instead of sizeof. Clang 3.4 fixes for MAME and tools [Oliver Stoeneberg]. Making code compiles and work on MinGW 32 bit on versions 4.7.x and 4.8.x [Miodrag Milanovic].
 - 0.152              : Fixed emscripten compile error (emu\ioport.h) [Justin Kerk]. "#pragma GCC diagnostic" was actually added in 4.2, fixes Intel OSX builds. Compatibility fixes for older GCCs (cpu\arm7\arm7drc.c, drivers\cps3.c, cpu\es5510\es5510.c, cpu\i86\i286.c/h, cpu\m6809\m6809.c and machine\t10spc.h). (MESS) Workaround for older GCCs that bug out on default arguments in template functions [R. Belmont]. makedepend now ignores "-D" defines as well [Couriersud].
 - 0.151              : Fixed cross build makefile define to match the other makefiles. More cross_build stuff: DFJustin: the issue is that if you do not add those targets in, then those targets are not defined when you do a CROSS_BUILD and Make fails because targets depend on them the 'correct' fix would be to have the targets that depend on them depend on the correct location of the tools because I think what was happening is that they depended on the location of the tools assuming that they were built for the target platform [John Vilk]. Emscripten makefile stuff [Justin Kerk].
 - 0.150              : Added emu\webengine.c/h and lib\web\mongoose.c/h. Removed obsolete legacy define from emu\emu.h. Added makefile define FASTDEBUG to disable some debug-specific stuff, that is causing performance hits (for e.g. profiling) (makefile, emu\emucore.h, schedule.c and windows.mak). Some legacy cleanups of comments (cpu\cubeqcpu\cubeqcpu.h, f8\f8.h, drivers\megaplay.c and video\redclash.c). Disabled some unused legacy includes (drivers\segajw.c and wildpkr.c) [Oliver Stoeneberg]. Fixed linking of UNIDASM when using MAME target [Wilbert Pol]. Made both DRC and Non-DRC compile for MIPS, RSP and SH2 core and added option to enable/disable DRC from command line (-drc -nodrc by default it's on) [Miodrag Milanovic]. Documented the network compile option [Robbbert].
 - 0.149u1            : Added build\makemak.c, targets\mame.lst, mess.lst and ume.lst. Removed obsolete "tests" target from makefile. Some MemorySanitizer preparations: Put memory initialization in src\emu\emualloc.c behind NO_MEMORY_INITIALIZATION define. Disable memory initialization when msan is used. Use origin tracking for msan when Clang is used (makefile and emu\emualloc.c). Added some flags for SANITIZE=memory to makefile. Cleaner way of disabling memory initialization with MemorySanitizer (makefile and emu\emualloc.c). Enabled U64 and S64 for Visual Studio compilers (osd\osdcomm.h). Added two more output folders to ignore list (mame\trunk) [Oliver Stoeneberg]. srcclean made the gamelist lop sided (drivers\decocass.c) [hap]. The wrath of GCC 4.0.1 rumbles across the plains (drivers\chihiro.c). GCC 4.0.1 doesn't allow -1 for a UINT32 (mess\drivers\casloopy.c). Initial support for Fedora 19 / GCC 4.8.1 [R. Belmont]. Build dependencies for files in src\emu (makefile, mame\mame.mak, mess\mess.mak and ume\ume.mak) [smf]. Make FULLNAME use ?= instead of =, allows users to override the final executable name from the command line (makefile) [MooglyGuy]. Added metadata to rest of make files for optional built devices (emu\machine\machine.mak, sound\sound.mak and video\video.mak). Simplified mamemak. Updated makemak to support splitting per libraries (build\makelist.c and makemak.c). Start work on makemak to produce dependency per driver, added @ sign into lst to declare source file import used by makemak only, added just few testing examples. Don't just ignore first char, but take full line (build\makelist.c). Created lib per driver source file, and make linking correct. Added layout dependancy to build\makemak.c. Made makemak add dependencies for needed devices automatically, added partial meta data into device building mak files (build\makemak.c, emu\cpu\cpu.mak, machine\machine.mak and sound\sound.mak). Made dependency for new lst files (mame\mame.mak). Made makemak create lst as well, and some fixes for cpu.mak. makemak WIP (targets\mame.lst, mess.lst and ume.lst). Extended large amount of devices with shortname and source file data, found few that have fixed values and did modern cpu cores as well. One more fix for inc in srcclean [Miodrag Milanovic]. Some emu.h related redundant #include cleanup [Tafoid]. QS1000 sound core issue now not a mandatory include which allows tiny builds to be built without it [Mamesick].
 - 0.149              : Added emu\machine\machine.mak and video\video.mak. Removed some redundant uses of DEVICE_SELF (cpu\lc8670\lc8670.c, drivers\cobra.c, djmain.c, iteagle.c, jaguar.c, kinst.c, qdrmfgp.c, seattle.c, taitotz.c, twinkle.c and vegas.c) [smf]. Removed not needed include "video\generic.h" (video\vdc.h). Changed make file rules to be consistent to one in SDL build (windows\windows.mak). Moved video and machine part of emu in separate mak files and libraries (emu\machine\machine.mak and video\video.mak). Made video devices build optional and set proper build rules per target. Rolled back set_led_status change and fixed build. Make machine part optionals, update tiny.mak and ldplayer.mak, still need to clear usages in mame.mak and mess.mak. Clear some more core dependencies (emu\emu.mak, sound\sound.mak and video\video.mak) [Miodrag Milanovic]. Used := in windows.mak for variables set by external programs [Carl].
 - 0.148u5            : Added makefile define SANITIZE to specify the sanitizer to use (supported by latest GCC and Clang versions). Added additional library necessary to link with Clang on Linux. Added additional compiler and linker flags necessary for ThreadSanitize [Oliver Stoeneberg]. Delete unneeded file (video\genesis.c) and mame.mak file entry. Further cleaning of an unneeded file and invalid .mak file entries (segasms.c, nes_mmc.c, nes_ines.c nes_pcb.c and nes_unif.c) [Tafoid]. Added additional flags for compiling on Linux and OSX, but enabled just posix, so it should cover most of distributions and variations (lib\lib.mak) [Miodrag Milanovic].
 - 0.148u4            : Unified formating of state class constructors, no functional change (: driver_device(mconfig, type, tag) ,). Some cleanup (drivers\40love.c, airbustr.c, arabian.c, arkanoid.c, ataxx.c, bigevglf.c, bking.c, blktiger.c, bublbobl.c, buggychl.c, byvid.c, cchance.c, champbas.c, champbwl.c, changela.c, cloak.c, cubeqst.c, dec8.c, deniam.c, equites.c, esd16.c, esripsys.c, exprraid.c, exterm.c, fantland.c, finalizr.c, flstory.c, hvyunit.c, jackal.c, kingobox.c, leland.c, lkage.c, lsasquad.c, m72.c, matmania.c, maxaflex.c, mexico86.c, missb2.c, msisaac.c, namcona1.c, namconb1.c, namcos2.c, nycaptor.c, nyny.c, pacland.c, pushman.c, rbmk.c, renegade.c, seicross.c, shougi.c, skykid.c, stv.c, superqix.c, system1.c, tubep.c, tx1.c, xain.c, includes\dec0.h, dynax.h, namcond1.h, namcos1.h, pitnrun.h, qix.h, slapfght.h, taitosj.h, tnzs.h). Discrete lookups removal (atarifb.c, cliffhgr.c, firetrk.c, goldnpkr.c, grchamp.c, hitme.c, madalien.c, mw8080bw.c, norautp.c, skydiver.c, sprint2.c, sprint4.c, starshp1.c, subs.c, tank8.c, triplhnt.c, uapce.c, ultratnk.c, videopin.c and wiz). Small cleanup (drivers\armedf.c/h, eprom.c/h, thunderj.c/h and video\exterm.c). Some cleanup (drivers\galaga.c, gaplus.c, junofrst.c, mappy.c, namcos1.c, polepos.c, system1.c, tatsumi.c, xain.c, machine\taitosj.c, vsnes.c, audio\meadows.c and includes\meadows.h). dac_device tag lookup cleanup (audio\cchasm.c, harddriv.c, n8080.c, drivers\amaticmg.c, aristmk5.c, calchase.c, champbas.c, cheekyms.c, circusc.c, coolpool.c, cosmic.c, csplayh5.c, cvs.c, equites.c, ertictac.c, esripsys.c, exterm.c, galaxian.c, gei.c, homedata.c, looping.c, m72.c, magicfly.c, mappy.c, meyc8080.c, meyc8088.c, mjsister.c, mogura.c, mpoker.c, murogem.c, nbmj9195.c, niyanpai.c, ppmast93.c, quizshow.c, rltennis.c, sbrkout.c, segas24.c, suna16.c, taitosj.c, tceptor.c, tnzs.c, truco.c, trucocl.c, unkhorse.c, vcombat.c, videopkr.c, zaccaria.c, includes\cchasm.h, harddriv.h and n8080.h). speaker tag lookup removal (sound\speaker.h, audio\8080bw.c, drivers\maxaflex.c, pcxt.c, photon.c, photon2.c, includes\8080bw.h, machine\ticket.c). eeprom_device tag lookup cleanup (drivers\20pacgal.c, 39in1.c, 8080bw.c, cave.c, centiped.c, deco_mlc.c, deco32.c, deco32.c, dkong.c, fortecar.c, gaelco3d.c, galastrm.c, galpani2.c, gticlub.c, gunbustr.c, hornet.c, jackpool.c, jaguar.c, jclub2.c, kaneko16.c, konamigv.c, lordgun.c, metro.c, midas.c, mitchell.c, model2.c, model3.c, pirates.c, plygonet.c, pntnpuzl.c, policetr.c, psikyo4.c, psikyosh.c, pzletime.c, r2dx_v33.c, rabbit.c, rbmk.c, segas32.c, seibuspi.c, seta2.c, sigmab98.c, spool99.c, spool99.c, stlforce.c, superchs.c, tecmosys.c, tmmjprd.c, toaplan2.c, undrfire.c, unico.c, vamphalf.c, wheelfir.c, wheelfir.c, xorworld.c, includes\8080bw.h, gaelco2.h, leland.h, sms.h, stv.h, machine\gaelco2.c and leland.c, smpc.c and sms.c). Cleanup of duplicates (drivers\dorachan.c, jaguar.c/h, toaplan2.c/h and video\jaguar.c). Cleanup (cpu\pdp1\pdp1.h, drivers\cischeat.c, ecoinf3.c, equites.c, gaelco3d.c, ggconnie.c, maygay1b.c, seattle.c, uapce.c, machine\pcecommn.h, saturn.c and scramble.c). pcat cleanup + removal of all not used LEGACY calls (in comments) and removal of not used macros (emu\addrmap.h, drivers\alpha68k.c, armedf.c, atarig1.c, bagman.c, bking.c, bwidow.c, calchase.c, cninja.c, cntsteer.c, coolpool.c, deco32.c, fitfight.c, gal3.c, galaxian.c, galaxold.c, gammagic.c, goldstar.c, gottlieb.c, gpworld.c, hng64.c, hvyunit.c, istellar.c, jalmah.c, jclub2.c, laserbas.c, magtouch.c, mirage.c, mlanding.c, mpu4dealem.c, mpu4hw.c, mpu4vid.c, msisaac.c, multfish.c, neoprint.c, nightgal.c, othunder.c, pangofun.c, pcat_dyn.c, pcat_nit.c, playmark.c, pokechmp.c, popobear.c, psikyo.c, quakeat.c, r2dx_v33.c, renegade.c, rungun.c, senjyo.c, skydiver.c, srmp6.c, stactics.c, strnskil.c, stv.c, su2000.c, subs.c, taito_b.c, taito_f2.c, taito_z.c, taitoair.c, tbowl.c, tmmjprd.c, toaplan1.c, umipoker.c, voyager.c and xain.c) [Miodrag Milanovic].
 - 0.148u3            : Removed machine\devhelpr.h. Fixed Clang 3.2 warnings about unused private field warnings (makefile, emu\cpu\dsp56k\opcode.c/h, cpu\psx\sio.h, fileio.c/h, machine\53c7xx.h, machine\at29040a.h, machine\mc68901.h, machine\ncr539x.h, machine\upd7201.h, sound\2151intf.h, sound\cdp1869.h, sound\disc_cls.h, sound\disc_dev.h, sound\disc_flt.h, sound\disc_wav.h, uiimage.h, video\crt9007.h, video\hd61830.h, video\pc_vga.h, mame\audio\gottlieb.c and mame\includes\gottlieb.h). Synced CPUS and SOUND in mame\mess.mak [Oliver Stoeneberg]. Removed devhelpr.h and trampolines in half modern devices (emu\machine\6522via.c, 8237dma.c/h, 8257dma.c/h, devhelpr.h, f3853.c/h, ins8154.c/h, k033906.c/h, k056230.c/h, drivers\calchase.c, dkong.c, funkball.c, gamecstl.c, gammagic.c, gticlub.c, mediagx.c, midqslvr.c, pcxt.c, photoply.c, queen.c, savquest.c, taitowlf.c, vega.c, voyager.c, xtom3d.c, zr107.c, machine\konppc.c and pcshare.c). Expanded device_t constructor with parameters for short name and source file location (cpu\m6502\deco16.c, m3745x.c/h, m4510.c, m5074x.c/h, m6502.c/h, m6504.c, m6509.c, m6510.c/h, m6510t.c, m65c02.c/h, m65ce02.c/h, m65sc02.c, m740.c/h, m7501.c, m8502.c, n2a03.c, r65c02.c/h, cpu\mcs96\i8x9x.c/h, i8xc196.c/h, psx\siodev.c/h, tms32031\tms32031.c/h, devcpu.c/h, device.c/h, driver.c, imagedev\chd_cd.c/h, flopdrv.c/h, floppy.c/h, snapquik.c/h, machine\53c7xx.c, machine\cr589.c, ctronics.c/h, idectrl.c/h, laserdsc.c/h, ldpr8210.c/h, ldstub.h, ldv1000.c, ldvp931.c, n68681.c, nscsi_bus.c/h, nscsi_cd.c/h, nscsi_hd.c/h, scsicb.c, scsicd.c/h, scsidev.c/h, scsihd.c/h, scsihle.c/h, upd765.c/h, sound\bsmt2000.c, sound\dac.c, sound\k054539.c, sound\qs1000.c, sound\segapcm.c, sound\votrax.c, video\h63484.c, video\hd44780.c/h, video\hd61830.c, video\m50458.c, video\mb90082.c, video\msm6255.c/h, video\saa5050.c/h, video\upd7220.c, video\v9938.c, mame\audio\gottlieb.c, audio\midway.c, audio\namco52.c/h, audio\namco54.c/h, audio\williams.c, drivers\chihiro.c, machine\dc-ctrl.c, deco222.c, decocpu6.c, decocpu7.c, gdrom.c, k573cass.c, mapledev.c/h, mega32x.c, mie.c, namco06.c/h, namco50.c/h, namco51.c/h, namco53.c/h, namco62.c/h, zndip.c and znsec.c). Made some of sound devices use device callbacks instead of function callbacks (sound\2608intf.c/h, 2610intf.c/h, 2612intf.c/h, 262intf.c/h, 3812intf.c/h, aica.c/h, es5506.c/h, k007232.c/h, msm5205.c/h, scsp.c/h, ymf271.c/h, ymf278b.c/h, ymz280b.c/h, audio\hyprolyb.c, irem.c, seibu.c, taito_en.c, drivers\2mindril.c, actfancr.c, aerofgt.c, ajax.c, aliens.c, alpha68k.c, amaticmg.c, appoooh.c, ashnojoe.c, asuka.c, asuka.c, backfire.c, battlera.c, bbusters.c, bfm_sc4h.c, bfm_swp.c, bishi.c, bottom9.c, cabal.c, cave.c, chinagat.c, chinsan.c, chqflag.c, coinmvga.c, combatsc.c, coolridr.c, crgolf.c, crimfght.c, crospang.c, crshrace.c, dacholer.c, darius.c, ddragon.c, de_2.c, dec0.c, dec0.c, dec8.c, dec8.c, deco156.c, deniam.c, discoboy.c, docastle.c, drmicro.c, dynax.c, f1gp.c, fantland.c, fastlane.c, fcrash.c, firebeat.c, firetrap.c, flkatck.c, fromanc2.c, fromance.c, fuukifg2.c, fuukifg3.c, fuukifg3.c, galpani3.c, galspnbl.c, gbusters.c, gcpinbal.c, gladiatr.c, goal92.c, gradius3.c, gstriker.c, gsword.c, gunpey.c, hcastle.c, hcastle.c, hnayayoi.c, inufuku.c, itech8.c, jangou.c, jantotsu.c, jchan.c, kchamp.c, kungfur.c, kurukuru.c, lordgun.c, lordgun.c, lucky74.c, lwings.c, macrossp.c, mainevt.c, mastboy.c, maygayep.c, mcatadv.c, mermaid.c, metro.c, metro.c, midas.c, mitchell.c, mlanding.c, model2.c, model3.c, naomi.c, nemesis.c, nemesis.c, neogeo.c, neoprint.c, ninjaw.c, nmg5.c, ojankohs.c, oneshot.c, onetwo.c, opwolf.c, othunder.c, pachifev.c, pcktgal.c, pipedrm.c, prehisle.c, psikyo.c, psikyo.c, psikyo4.c, psikyosh.c, rastan.c, rmhaihai.c, segac2.c, segas32.c, seibuspi.c, seta.c, sf.c, shangha3.c, slapshot.c, snk.c, snk68.c, snowbros.c, sothello.c, spbactn.c, spdodgeb.c, spdodgeb.c, splash.c, spy.c, spy.c, srmp2.c, stadhero.c, stfight.c, stv.c, suna8.c, suprgolf.c, suprnova.c, suprslam.c, system16.c, tail2nos.c, taito_b.c, taito_f2.c, taito_h.c, taito_l.c, taito_l.c, taito_x.c, taito_z.c, taitoair.c, taotaido.c, tbowl.c, tbowl.c, tecmo.c, tecmo.c, tecmosys.c, tehkanwc.c, thunderx.c, tigeroad.c, tmnt.c, toaplan1.c, toaplan2.c, toaplan2.c, toki.c, topspeed.c, tubep.c, twin16.c, twincobr.c, wardner.c, warriorb.c, wc90.c, wc90b.c, welltris.c, wgp.c, yunsun16.c, yunsung8.c, zn.c, includes\stfight.h and machine\stfight.c). Device callback handler cleanup (drivers\2mindril.c, actfancr.c, aerofgt.c, ajax.c, alg.c, aliens.c, alpha68k.c, angelkds.c, appoooh.c, arcadia.c, argus.c, ashnojoe.c, asuka.c, asuka.c, backfire.c, battlera.c, bbusters.c, bfm_sc4h.c, bfm_swp.c, bishi.c, blktiger.c, bottom9.c, bublbobl.c, capbowl.c, cave.c, cave.c, cd32.c, chanbara.c, chinagat.c, chinsan.c, chqflag.c, compgolf.c, coolridr.c, crgolf.c, crimfght.c, crospang.c, crshrace.c, dacholer.c, darius.c, darius.c, ddenlovr.c, ddragon.c, de_2.c, dec0.c, dec8.c, dec8.c, deco156.c, deniam.c, discoboy.c, docastle.c, dooyong.c, drmicro.c, dynax.c, f1gp.c, fantland.c, fastlane.c, fcrash.c, firebeat.c, firetrap.c, flkatck.c, fromanc2.c, fromance.c, fuukifg2.c, fuukifg3.c, gaiden.c, galspnbl.c, gbusters.c, gcpinbal.c, gladiatr.c, goal92.c, goal92.c, gradius3.c, gstriker.c, gunpey.c, hcastle.c, hnayayoi.c, inufuku.c, itech8.c, jangou.c, jantotsu.c, kchamp.c, kungfur.c, kurukuru.c, lastduel.c, lkage.c, lockon.c, lordgun.c, lsasquad.c, lucky74.c, macrossp.c, mainevt.c, mastboy.c, maygayep.c, mcatadv.c, megasys1.c, mermaid.c, metro.c, metro.c, midas.c, mitchell.c, mlanding.c, model2.c, model3.c, mquake.c, naomi.c, nemesis.c, nemesis.c, neogeo.c, neoprint.c, ninjakd2.c, ninjaw.c, nmg5.c, nmk16.c, ojankohs.c, oneshot.c, onetwo.c, opwolf.c, othunder.c, pachifev.c, pcktgal.c, pipedrm.c, pkscram.c, powerins.c, prehisle.c, psikyo.c, psikyo.c, psikyo4.c, psikyosh.c, psychic5.c, pushman.c, rastan.c, sandscrp.c, segac2.c, segas32.c, seibuspi.c, seta.c, sfkick.c, shangha3.c, shootout.c, slapshot.c, snk.c, snk68.c, snowbros.c, sothello.c, sothello.c, spbactn.c, spdodgeb.c, spdodgeb.c, splash.c, spy.c, spy.c, srmp2.c, sshangha.c, stadhero.c, stfight.c, stv.c, suna8.c, suprgolf.c, suprgolf.c, suprslam.c, system16.c, tail2nos.c, taito_b.c, taito_f2.c, taito_h.c, taito_l.c, taito_l.c, taito_x.c, taito_z.c, taitoair.c, taotaido.c, tbowl.c, tbowl.c, tecmo.c, tecmo.c, tecmosys.c, tehkanwc.c, thedeep.c, thunderx.c, tigeroad.c, tmnt.c, tnzs.c, toaplan1.c, toaplan2.c, toki.c, topspeed.c, tubep.c, twin16.c, twincobr.c, upscope.c, volfied.c, wardner.c, warriorb.c, wc90.c, wc90b.c, wc90b.c, welltris.c, wgp.c, xain.c, yunsun16.c, yunsung8.c, zn.c, includes\bfm_sc45.h, amiga.h, dc.h, dynax.h, machine\amiga.c, saturn.c, stfight.c, williams.c and video\cave.c). Changed HANDLER -> MEMBER where it was by mistake (drivers\atari_s2.c, machine\amiga.c and machine\atarigen.h) [Miodrag Milanovic].
 - 0.148u2            : Added missing virtual to device-level overrides (cpu\psx\psx.h, machine\tms9901.h, machine\tms9902.h, sound\bsmt2000.h, ics2115.h, qs1000.h, sn76496.h, tms5220.h, votrax.h, video\k053250.h, machine\jvs13551.h, k573cass.h, zndip.h and znsec.h) [Oliver Stoeneberg]. Modernization of drivers M - Z (drivers, includes, machine and video). Removal of not needed machine().root_device() (MAME drivers A - Z; drivers, machine and video). Some atari modernization (atarigx2.c, atarisy1.c, atarisy2.c, badlands.c, cyberbal.c, galpani2.c, galpanic.c, gauntlet.c, klax.c, skullxbo.c, toobin.c and vindictr.c) [Miodrag Milanovic]. Disabled Clang warning for now (makefile) [Oliver Stoeneberg].
 - 0.148u1            : srcclean now processes XML & C comments the same, so they can be indented but within the comment itself spaces are used. Added file name to unterminated string error message to srcclean. Removed in srcclean extraneous line continuation characters followed by a blank line and blank lines that follow an opening brace in c files. Re-added line terminators followed by blank lines in comments (sound\fm.c, fm2612.c and kas89.c). Leave line continuation characters in comments alone in srcclean [smf]. Fixed some Clang warnings (drivers\mpu4hw.c, machine\vsnes.c and video\carpolo.c). Disabled some Clang warning for now to improve out-of-the-box experience (src\makefile). Added some output files in root folder (mame\trunk) to ignore list (*.exe, *.map, *.sym, obj and pdb). Improved some version checks in makefiles and added TODO (osd\sdl\sdl.mak and osd\windows\windows.mak) [Oliver Stoeneberg]. Avoid some lazy tag lookups (drivers, includes and video: backfire.c, backfire.c, boogwing.c, cbuster.c, cninja.c, crospang.c, darkseal.c, dassault.c, dblewing.c, deco156.c, deco32.c, dietgo.c, esd16.c, funkyjet.c, gotcha.c, lemmings.c, mirage.c, nmg5.c, pktgaldx.c, rohga.c, silvmil.c, simpl156.c, sshangha.c, supbtime.c and tumbleb.c) [David Haywood]. Move some calls into machine state (drivers\alg.c, amaticmg.c, arcadia.c, astinvad.c, astrocorp.c, atvtrack.c, backfire.c, beaminv.c, berzerk.c, bestleag.c, bfcobra.c, bfm_sc1.c, blackt96.c, bnstars.c and boxer.c). Made IRQ_CALLBACK as members to work and made usage of delegates, with few updated drivers (emu\diexec.c/h). IRQ_CALLBACK modernization (drivers, includes, machine and video: aztarac.c, bnstars.c, calchase.c, chihiro.c, crystal.c, dcheese.c, fd1094.c, funkball.c, galaxold.c, galgame.c, gamecstl.c, gammagic.c, jaguar.c, mazerbla.c, mediagx.c, megacd.c, megadriv.c, metro.c, midqslvr.c, mie.c, model1.c, ms32.c, pcxt.c, photon.c, photoply.c, quakeat.c, queen.c, rastersp.c, savquest.c, seibuspi.c, ssv.c, su2000.c, taito_l.c, taitowlf.c, voyager.c and xtom3d.c). Machine_notify_delegate modernization (drivers, includes, machine and video: cobra.c, galastrm.c, midzeus.c, midzeus2.c, model2.c, model3.c, n64.c, namcos22.c, taitojc.c, taitosj.c, taitotz.c and tecmosys.c). Modernization/Cleanup of drivers 0 - L (drivers, includes, machine and video) [Miodrag Milanovic]. Started moving DEVICE_IMAGE_ functions into driver_device classes (emu\diimage.h, imagedev\cartslot.c/h, drivers\jaguar.c/h, megadriv.c/h, megatech.c, neogeo.c/h, saturn.c/stv.h, snes.h and vectrex.c/h). Getting rid of DEVICE_IMAGE_START (emu\diimage.h, imagedev\cartslot.c/h, drivers\jaguar.c/h) [Wilbert Pol]. Delete dependency makefiles on clean [Curt Coder].
 - 0.148              : Removed unreachable code detected by Cppcheck (cpu\arm7\arm7.c, cpu\dsp56k\inst.h, tables.c, cpu\hd61700\hd61700.c, cpu\i386\i386.c, i386ops.c, cpu\i86\instr286.c, emu\distate.c, emu\machine\wd_fdc.c, emu\rendlay.c and mame\video\n64.c) and (cpu\mn10200\mn10200.c, drivers\backfire.c, s3.c, s4.c, s6.c, s6a.c and s7.c). Added CPPCHECK makefile define - it contains the path to the Cppcheck binary. Fixed some Cppcheck warnings about format identifiers and duplicated enum [Oliver Stoeneberg].
 - 0.147u4            : Removed unneeded includes (src\emu\machine\6840ptm.c, 6850acia.c, adc0808.c, cdp1852.c, cdp1871.c, com8116.c, ds2404.c, i8212.c, i8214.c, i8243.c, i8255.c, mc6852.c, mc68901.c, mos6529.c, msm6242.c/h, nmc9306.c, timekpr.h, upd7201.c, video\315_5124.c, cdp1861.c, cdp1862.c, dm9368.c, hd44102.c, huc6202.h, huc6260.h, huc6261.h, huc6270.h, mc6845.c/h, msm6255.c, tms9928a.c and tms9928a.h) [Curt Coder].
 - 0.147u3            : Fixed tiny compile (src\mame\tiny.mak) [tuxit, hap]. Normalize some include paths to always include video\ or machine\ as necessary (machine\naomibd.h, naomig1.c, naomigd.h, video\argus.c and psychic5.c). Fixed weird do-nothing lines that cause Clang warnings (video\konicdev.c) [Robert Muth]. Fixed GCC 4.7 compile (formats\flopimg.c) [R. Belmont].
 - 0.147u2            : Spaces are converted to tabs at beginning of lines and tabs are converted to spaces everywhere else. Comments in .lst files are cleaned. Extra blank lines are trimmed from ends of source files (tools\srcclean.c). Realigns to the tab size if a space is followed by a tab, this mimics the previous behaviour (tools\srcclean.c). Fixed an incorrect optimisation (tools\srcclean.c). If the start of a multi-line comment is indented then following comment lines will be indented with tabs up to that point (tools\srcclean.c). Removed GetCommand() and made command and commandLength protected (machine\cr589.c, scsicd.c, scsihd.c, scsihle.c, scsihle.h, gdrom., acb4070.c, d9060hd.c and s1410.c) [smf].
 - 0.147u1            : Some h files cleanups (includes\1942.h, 1943.h, arkanoid.h, battlex.h, cabal.h, circus.h, ddragon3.h, equites.h, exedexes.h, exprraid.h, n64.h, namcona1.h, namcos21.h, ninjakd2.h, nova2001.h, pbaction.h, system16.h and tehkanwc.h) [Miodrag Milanovic]. Fixed Clang compile error (emu\device.h) [Wilbert Pol]. Fixed resource data of Windows executable. Removed some expressions which are always true/false (drivers\chihiro.c, firebeat.c, gstream.c, megaplay.c, segas16a.c, taitopjc.c, video\artmagic.c, konamigx.c and m90.c) [Oliver Stoeneberg]. Stop allocating arrays of UINT8s for the tokens, when we can allocate objects of the real type [Aaron Giles]. Fixed GCC 4.4 compile [Barry Rodewald].
 - 0.147              : Removed emu\devlegcy.c. Merge of MESS sources. Unified SVN properties of softlists [Fabio Priuli]. Testing the new SVN [Angelo Salese]. Sync software lists from MESS into hash. Made "make depend" to create files per target, also added "make depend_ume" as new target in case UME is used, since then it becomes complicated. Added proper name of generated mak (makefile, src\ume\ume.mak). Removed template usage for legacy devices. Removed not used legacy calls (emu\devlegcy.c/h). Removed zero sized inline_config (machine\pic8259.c, machine\pit8253.c, machine\s3c24xx.c, video\i8275.c, video\tms9927.c, machine\gaelco3d.c and machine\mathbox.c). Removed legacy inline_config support and updated devices using it. Remove some AM_LEGACY_BASE stuff (drivers\asteroid.c, bwidow.c, bzone.c, mhavoc.c, omegrace.c, quantum.c, starwars.c, tempest.c and tomcat.c). Conversion of legacy devices into modern WIP. Cleanup and some inheritance fixes. DEVINFO_ * to * CPU_INFO_, and some cleanups. Made make depend to be defined per target to support special cases. Fixed to make "make depend" work if on empty obj tree [Miodrag Milanovic]. Replaced standard mappers with an enumeration that maps internally to the original functions. The only change is to all-caps since these are constants, e.g., tilemap_scan_rows -> TILEMAP_SCAN_ROWS [Aaron Giles]. Fixed some warnings about unreachable statements reported by Cppcheck (emu\cpu\sh4\sh4comn.c, emu\sound\asc.c, mame\audio\dsbz80.c, mame\drivers\bfm_sc4h.c, mame\drivers\model3.c, mame\machine\mathbox.c and mame\video\konicdev.c). Added missing \n to some fatalerror() calls in many drivers [Oliver Stoeneberg].
 - 0.146u5            : Removed some unnecessary statements reported by Cppcheck (cpu\i8085\i8085.c, cpu\pdp1\tx0.c, cpu\z180\z180.c, video\hd63484.c, drivers\mpu4hw.c, drivers\mpu4vid.c, drivers\raiden2.c, drivers\taitotz.c and machine\megadriv.c). Fixed some unread variable warning reported by Cppcheck (cpu\tms32025\32025dsm.c, sound\ymf271.c, audio\turbo.c and video\midzeus.c). Fixed some unread variable warnings reported by Clang (cpu\arm7\arm7.c, cpu\h83002\h8periph.c, cpu\m6800\m6800.c, sound\es5506.c, video\pc_vga.c, video\resnet.c, video\voodoo.c, formats\z80ne_dsk.c, machine\snes.c and video\stvvdp1.c). Removed some redundant assignments (debug\dvmemory.c, machine\8237dma.c, machine\amigafdc.c, video\mc6845.c, drivers\halleys.c, drivers\karnov.c, machine\acitya.c and machine\theglobp.c). Fixed some incorrect operators and a duplicated game flag reported by Visual Studio Code Analysis (progolf.c). Fixed unreachable code in src\emu\cpu\dsp56k\dsp56mem.c. Fixed unreachable code (and shmem locking) in machine\gaelco3d.c. Added missing \n to some fatalerror() calls (src\osd\osdmini\minimain.c, sdl\draw13.c, windows\d3dhlsl.c, windows\window.c, machine\cdi070.c, machine\cdicdic.c, machine\gdrom.c, machine\konppc.c, machine\model1.c, machine\model3.c, machine\namco06.c, machine\naomi.c and machine\nmk004.c) [Oliver Stoeneberg]. Removed some not used variables (lib\formats\dsk_dsk.c, machine\stvcd.c). Changed macros that are MESS related, no need to recompile MAME since they are not used (emu\gamedrv.h). Removed not used code (emu\mame.c) [Miodrag Milanovic]. Fixed GCC 4.6 compile [R. Belmont]. Significant speedup for "divu_64x32_rem" by using inline assembly for x86_64 as well. GCC will always call into libgcc to catch overflows (emu\eigccx86.h) [Couriersud].
 - 0.146u4            : Small speedup for _get_profile_ticks (emu\eigccx86.h) [Couriersud]. Removed unnecessary strlen() usage [Oliver Stoeneberg]. Fixed constant overflow, 64 bit constants require U64() macro (machine\netlist.c) [Phill W.]. Fixed warning with ?-operator and !-operator [Firewave].
 - 0.146u3            : Fix compile on GCC 4.6 and above (drivers\chihiro.c) [Miodrag Milanovic].
 - 0.146u2            : Stop repeated make all runs from toggling between building chdman & MAME due to both being dependent on version.o, which is always recreated when either exe is built (makefile + src\tools\tools.mak). Swapped order of version.o linking for consistency (makefile) [Phill W.]. A few preliminary GCC 4.7.x changes (drivers\cobra.c + video\polynew.h) [R. Belmont]. Make it compile on windows MinGW 4.7.x [Miodrag Milanovic].
 - 0.146              : GCC 4.6 compile fix (video\bfm_dm01.c) [R. Belmont, Miodrag Milanovic]. Fixed some "comparison is always true/false" warnings reported by Clang in timer.c. I have commented not removed lines that are always false [Firewave].
 - 0.145u8            : Fixed linking for MinGW GCC 4.6.3 and upper using libwinpthread (windows\windows.mak). Killed unicows (windows\windows.mak) [Miodrag Milanovic]. hap optimized optimization options (makefile). Fix for older GCCs [R. Belmont].
 - 0.145u7            : Fix for older GCC, thanks to Robbbert [Miodrag Milanovic]. Clang fixes (emu\device.h) [Aaron Giles].
 - 0.145u6            : Allow compilation with compatible system-installed versions of libjpeg and libflac [wallyweek, R. Belmont]. Miodrag Milanovic fixed compile on GCC 4.6 (m68000\68307tmu.c + emu\uimain.c).
 - 0.145u4            : Support obsolete GCC versions (>= 3) [O. Galibert]. Barry Rodewald fixed GCC 4.4.3 compile (video\bufsprite.h). R. Belmont fixed GCC 4.6 compile (cpu\tms57002\tms57kdec.c).
 - 0.145u2            : Aaron Giles fixed ld tools compilation (tools\ldresample.c - LDRESAMPLE and LDVERIFY.exe).
 - 0.145u1            : Some cleanup of some observed #include redundancy from source files which use emu.h [Tafoid]. Miodrag Milanovic fixed compile on 4.6.2 (util\bitstream.h + chd.c).
 - 0.145              : R. Belmont fixed GCC 4.6+ compile.
 - 0.144u7            : Changes for GCC 4.7 compatibility [Julian Sikorski]. Added -Woverloaded-virtual to makefile to catch mismatched overloaded function signatures [Aaron Giles].
 - 0.144u6            : GCC 4.6 compile fix [Miodrag Milanovic]. Fix PowerPC OS X compile [R. Belmont].
 - 0.144u3            : Removed src\emu\deprecat.h. Angelo Salese completely removed deprecat.h and partial frame irq hacks from the core. Full list of drivers changed by this can be found at http://mamedev.emulab.it/kale/fast/files/deprecat_removal.zip
 - 0.144u1            : Added src\mame\mame.c. Miodrag Milanovic move per emulator constants info into separate class. Miodrag Milanovic changed makefile in order to make sequential compilation of MAME and MESS and their sub targets less resource demanding. Aaron Giles fixed obvious use-after-free error in device_delete() (windows\drawd3d.c).
 - 0.143u7            : Fix for systems where getc() is a #define rather than a function [ElBarto].
 - 0.143u2            : Re-enabled scheduler cothread execution [Curt Coder].
 - 0.143u1            : Correct syntax in some inline assembly [Balrog].
 - 0.142u6            : Oliver Stoeneberg removed duplicated includes from INCPATH.
 - 0.142u5            : Oliver Stoeneberg fixed a use-after-free bug in build\verinfo.c.
 - 0.142u4            : Flush stderr, so the data is actually written when output is being redirected [Oliver Stoeneberg].
 - 0.142u3            : Miodrag Milanovic moved format handling and all formats to separate library. Compile fix for kFreeBSD [Christian Marillat]. srcclean should remove invalid chars only for source files which are not XML (softlists have UTF-8 characters) [Fabio Priuli].
 - 0.141u4            : Atari Ace continued eliminating global/static variables by moving them to the driver_device classes. Mostly drivers from misc.a, and some drivers recently which had dependencies removed. Aaron Giles removed unused static handler entries. Also ensure that subsequent mapping/unmapping of static memory types does not change the memory parameters. This fixes the case where dynamically unmapping memory could lead to incorrectly reported offsets. Aaron Giles removed some straggling const address_space references, and get rid of explicit const_casts in memory.h.
 - 0.141u3            : Julian Sikorski fixed compiling on GCC 4.6 prerelease. Curt Coder deleted symbols file if defined when invoking clean target. R. Belmont fixed reads for 32-bit handlers on 64-bit CPUs too.
 - 0.141u2            : Added all CPU and sound devices in emu folder to the MAME build [Curt Coder].
 - 0.141u1            : C++-ified drcfe and the associated frontends. You now create a frontend by deriving from drc_frontend and implementing the describe method. Converted drccache to C++ [Aaron Giles]. Couriersud fixed a bug in makedep which will caused includes on the first line of the file like in skyraid.h to be ignored.
 - 0.141              : Some bulk naming cleanups across the whole source base [Aaron Giles]: 1. MDRV_* -> MCFG_*, 2. running_device -> device_t, 3. mame_rand() -> machine->rand(), 4. memory_region() -> machine->region()->base(), 5. memory_region_length() -> machine->region()->bytes() and 6. region_info -> memory_region.
 - 0.140u2            : Fixed array bounds problems found by GCC 4.5.x [qmc2, R. Belmont]. ElBarto fixed BSD compile.
 - 0.140              : Fixed default 'tiny' does not build [Aaron Giles]. More Clang fixes (verified OK with GCC) [Balrog].
 - 0.139u4            : Fixed another Clang issue [Balrog].
 - 0.139u3            : Added include files for all remaining drivers with multiple source files [Atari Ace]. New build tool makedep.c, derived from src2html.c (really!). Does basic dependency analysis and supports excluding paths. Makefile now supports a depend target which will run makedep on the src\$(TARGET) tree and create dependencies. It deliberately excludes the root of src\emu as well as the osd directories in order to keep the dependency file down to a reasonable size, so if a core header file changes, you still need to clean and build all. Fixed compiling on older GCCs (including OS X PowerPC) [Aaron Giles].
 - 0.139u2            : Atari Ace removed several exported non-const global variables from the core. Attempt to fix reported GCC 4.5 problems [R. Belmont].
 - 0.138u4            : Atari Ace added some missing makefile dependencies. Clean up some files without a newline at the end for GCC [wallyweek].
 - 0.138u3            : Aaron Giles modified makefile for Win32 targets to automatically run objdump and produce a .sym file if SYMBOLS is enabled. Atari Ace added many instances of missing static and const qualifiers to MAME. Aaron Giles split mame.c into mame.c and machine.c, the latter containing the running_machine definition and implementation.
 - 0.138u2            : Atari Ace added some missing static qualifiers to MAME. Also, renamed some generically named exports from segaic16.c. Changed parameters in a few callback functions from pointers to references in situations where they are guaranteed to never be NULL [Aaron Giles]. Clean up profiling flags in the makefile. Removed GPROF flag, it is now just PROFILE. When enabled, automatically turn on basic symbols. Also added new SYMLEVEL option to control the symbols level (defaults to 2) [Aaron Giles].
 - 0.137u4            : Have srcclean add missing newlines to end of .c files [Atari Ace]. Oliver Stoeneberg fixed the memory leaks with the strconv.c function by using osd_malloc() instead. Fixed other memory leaks as well. Disable many unused variables as identifed by Cppcheck. Fixed compile error when DEBUG_GENERATION is defined.
 - 0.137u2            : Oliver Stoeneberg disabled unused variables and code based on Cppcheck and VS2008 code analysis. Bryan Ischo added gprof support to the makefile, fixed small memory leak in mame.c and made core_strdup use osd_malloc instead of malloc.
 - 0.137u1            : Oliver Stoeneberg several cleanups based on Cppcheck and VS2008 code analysis. Oliver Stoeneberg made the "split" (split.c) return the actual result instead of just 0. R. Belmont fixed broken build for G4 (altivec) and added support for kFreeBSD.
 - 0.136u4            : Couriersud moved global new/delete operators into inlines in emualloc.h to avoid link errors with certain architectures. Some minor cleanup/normalizing of emualloc in general [Aaron Giles]. Aaron Giles changed all driver_data structs into classes with a simple constructor and a static allocation function.
 - 0.136u3            : Couriersud fixed DISTRO=gcc44-generic make shortcut to use GCC-4.4 properly (-V 4.4 does not work for linking). Workaround for GCC-4.3 reporting a false warning on solaris: disable -Werror for this file only [Couriersud].
 - 0.136u2            : Couriersud added makefile autotest for BIGENDIAN. A bit hacked, though. Couriersud removed stdlib.h from osdcomm.h: Added #include stdlib.h where now necessary. Fixed Solaris build. Tools now include stdlib.h where needed. Couriersud changed core library files to use osd_malloc/osd_free where appropriate. Couriersud added checkautodetect target to makefile. Couriersud permitts zlib and expat to be linked dynamically without changing the makefile by specifying "=0": make BUILD_ZLIB=0 BUILD_EXPAT=0. Autodetection of PTR64 can be inhibited now by specifying PTR64=0. On mixed 32bit/64bit targets identifying themselves as 64bit this can be used to build a 32bit executable [Couriersud].
 - 0.136u1            : Makefile changes [Aaron Giles]: Removed CPP_COMPILE flag; all code is now compiled as C++ except for zlib and expat. Mapped INLINE to "static inline" since C++ has real inlining. Added new 'default' make target which just builds the emulator. Use 'make tools' to build the tools, or 'make all' to build the whole thing. 64-bit builds now get a '64' suffix on them. Removed UNICODE flag from Windows; UNICODE is always enabled now. If OSD is not defined, we look for the built-in Windows environment variable 'OS' and if it is set to 'Windows_NT', we assume OSD=windows; otherwise we assume OSD=sdl. If TARGETOS is not defined, we look for the same variable and set TARGETOS=win32 if it is set to 'Windows_NT'. Windows SDL builds have an 'sdl' prefix on the executable so they can live side-by-side. Added cheesy auto-detection of 64-bit Windows builds (based on the PATH including 'mingw64-w64'). Aaron Giles renamed mamecore.h -> emucore.h. Aaron Giles extended the astring class wrapper into something useful, and useable as a stack object. Also designed the interfaces to allow for chaining operations. And added a casting operator to const char * for seamless use in most functions that take plain old C strings. Aaron Giles changed all uses of astring to use the object directly on the stack or embedded in objects instead of explicitly allocating and deallocating it. Removed a lot of annoying memory management code as a result. Aaron Giles changed interfaces that accepted/returned an astring * to use an astring & instead. Aaron Giles removed auto_alloc_astring(machine). Use auto_alloc(machine, astring) instead. Major header file cleanup [Aaron Giles]: Created new central header "emu.h"; this should be included by pretty much any driver or device as the first include. This file in turn includes pretty much everything a driver or device will need, minus any other devices it references. Note that emu.h should *never* be included by another header file. Updated all files in the core (src\emu) to use emu.h. Removed a ton of redundant and poorly-tracked header includes from within other header files. Temporarily changed driver.h to map to emu.h until we update files outside of the core. Aaron Giles added class wrapper around tagmap so it can be directly included and accessed within objects that need it. Updated all users to embed tagmap objects and changed them to call through the class. R. Belmont fixed a number of compiler bugs found by PowerPC MacOS X.
 -  7th January   2010: R. Belmont - Unification: MAME 0.136u1 is going to involve some major changes all around, especially for SDLMAME. In order, they are: - New GCC 4.4.x based MinGW32 and MinGW64 toolchains for the Windows versions (this includes both baseline and SDLMAME Windows targets). Visual Studio is no longer required to build for 64-bit Windows and substantial speedups will be seen by users of 64-bit Windows Vista and Windows 7. - MAME is switching from C to C++ and will include some of the features of that language. While MAME has been getting more object oriented over time we've hit the limits of being able to sanely express that in plain C and many concepts will be cleaner/more intuitive in C++. - SDLMAME will become part of the standard MAME source code download. There will no longer be separate SDLMAME releases on this site (I will update the homepage to say so) but the SDL components will continue to be maintained by Couriersud and myself. As a result of this, SDLMAME has lost one minor feature: the ability to use the "scale2x" graphical filter. It was never well-supported and never worked quite right so it was always on the way to destruction, and so it's now gone. SDLMAME gains two new supported platforms in u1: 64-bit Windows and 64-bit Mac OS X (64-bit on the Mac requires OS X 10.6 Snow Leopard, which implies an Intel Mac, and SDL 1.2.14).
 - 0.136              : Aaron Giles renamed tilemap -> tilemap_t, as the name 'tilemap' is too commonly used for statics and structure members, and some compilers (esp. C++ compilers) don't allow that. Atari Ace updated srcclean to remove "invisible spaces" immediately preceding tabs. Atari Ace cleaned up braces in the code so that they are properly balanced.
 - 0.135u4            : Oliver Stoeneberg removed the global "includes" include and instead specify the "includes" path in all #include occurences. Atari Ace fixed some unbalanced quotes/braces lurking in the source (mostly in disabled code). Atari Ace fixed a couple of edge case parsing bugs in srcclean.c.
 - 0.135u3            : Atari Ace fixed srcclean handling of embedded comments within strings.
 - 0.134u4            : Christophe Jaillet fixed a couple of source typos. Atari Ace removed dead function prototypes, most remaining instances of statically initialized variables and improving multisession support. Christophe Jaillet fixed a couple of unbalaced profiling calls, and added output to help identify the source of unbalanced calls.
 - 0.134u3            : Aaron Giles asserted copyright ownership of core library and OSD files, and relicensed them under the standard BSD license, with permission of the original authors. The files in question all live under src\lib\util and src\osd.
 - 0.134u2            : Atari Ace added more _NAME macros to be consistent with the standard naming conventions, added static qualifiers where possible throughout the code and optimized tab removal in srcclean.
 - 0.134u1            : Atari Ace removed a number of #ifdef LSB_FIRST in favor of macros that do the equivalent. "=A" inline assembly seems to be only supported on 32bit GCC. Provide a 64bit safe version of _get_profile_ticks [Couriersud].
 - 0.134              : Atari Ace added missing static and const qualifiers, and fixed up some header files.
 - 0.133u5            : Fixed 64-bit compiler warnigs [Aaron Giles]. De-globalified sound.c and input.c [Atari Ace].
 - 0.133u3            : Attempt to define an I64FMT string that can be used for printf'ing 64-bit integers. This is defined to be "I64" on MSVC and recent MinGW compilers, and "ll" for all others. Updated all instances of 64-bit prints to use the new macro [Aaron Giles].
 - 0.133u1            : Fabio Priuli fixed MAME tiny build no longer compiles.
 - 0.132u1            : R. Belmont fixed several issues compiling with GCC 4.4 (SDLMAME specific).
 - 0.132              : Atari Ace added missing static and const qualifiers throughout the source.
 - 0.131u3            : Atari Ace added static qualifiers to recently-added code. Oliver Stoeneberg disabled unused variables in the project that were only assigned to but never used.
 - 0.131u1            : Aaron Giles added missing casts and made other tweaks to appease some more strict settings on the compiler.
 - 0.130u1            : Paramaterise the arguments to check for NULL in the ATTR_NONNULL macro rather than just checking the first argument. This requires compiler support for C99 variadic macros (MSVC2005 and GCC4 have this AFAIK) [Vas Crabb].
 - 0.129u6            : Atari Ace another round of static/const qualifier additions, plus a rename of has_addon_chip to snes_has_addon_chip. Notably a number of z80ctc_interface are now const (devicification must have removed the cases where it was dynamically modified). Julian Sikorski fixed GCC 4.4 compilation error. maketms: Free strings on exit [Olivier Galibert]. Another round of static/const qualifier additions, plus a rename of has_addon_chip to snes_has_addon_chip. Notably a number of z80ctc_interface are now const (devicification must have removed the cases where it was dynamically modified) [Atari Ace].
 - 0.129u5            : Emuman fixed cpu.mak typo. Atari Ace added missing static qualifiers to the code.
 - 0.129u2            : Nathan Woods fixed compilation errors if HAS_SAMPLES is 0.
 - 0.129u1            : Atari Ace added static/const where appropriate, updated out-of-sync header files and fixed some minor source confusion/abuse. Oliver Stoeneberg cleaned up a bunch of unreachable bits of code.
 - 0.128u6            : Atari Ace changed many, many global Machine references to use machine, device->machine, etc. instead.
 - 0.128u3            : Atari Ace added include files for many drivers that never bothered before.
 - 0.128u2            : Atari Ace added missing const/statics, added/removed entries in header files, and fixed a few potential multisession issues by explicitly adding initializers. asic65.c has significant changes to accomodate using a struct instead of 16 variables, otherwise the changes are modest and obvious. Aaron Giles modified src2html to use a template source file instead of hard-coding to the MAME site. Changed from explicit styles to classes. R. Belmont fixed GCC 4.3 "array bounds exceeded" error in disc_flt.c.
 - 0.127u5            : Another pass to make static functions static, almost entirely affecting code added in the last few months to MAME. The fixes are the usual lot, changing enum definitions so they aren't declared, decorating dead code/declarations with #if...#endif, and of course, adding static where appropriate. In addition, I fixed a bunch of UNUSED_FUNCTON symbols to be spelled correctly (I didn't introduce this) [Atari Ace].
 - 0.127u3            : Atari Ace moved more static data into const and added some more explicit initialization. Oliver Stoeneberg added running_machine * to some more locations in the system. Updated drivers accordingly.
 - 0.127u1            : Atari Ace fixed handling of a number of static variables to avoid multisession issues. Atari Ace removed useless backslashes lurking throughout the code.
 - 0.126u5            : Aaron Giles moved several include files from mame\ to emu\, as they were included by generic components in emu\ and thus should have no dependencies on the MAME code.
 - 0.126u3            : Updated to build with the latest DirectX SDK, which doesn't support Direct 3D 8 & Direct Input 7. By default, the makefile is set up to compile the old way, but you can set DIRECT3D=9 and DIRECTINPUT=8 in windows.mak or on the command-line to build with a more modern SDK [smf, RansAckeR, uRebelScum]. Oliver Stoenberg cleaned up the mame.mak by adding all missing defines and grouping them based on cpu.mak. Atari Ace changed commented-out functions to #ifdefs.
 - 0.126u2            : Atari Ace moved more items out of .data by either applying const, removing the non-zero initializer (if its overwritten by init/reset) or by adding appropriate initialization code. Removed conditional logging code in favor of allowing the compiler to optimize it out. This prevents bitrot of #ifdef'ed code.
 - 0.126u1            : Macareno added World Rally support to tiny.mak/.c.
 - 0.125u6            : Oliver Stoenberg added missing machine parameters and removed deprecat.h usage in a number of drivers\ and machine\ files.
 - 0.125u5            : Correctness pass over the source tree [Atari Ace]: Added static qualifiers where appropriate. Added missing #include statements, source comments and header declarations. Removed dead declarations. Added ~30 header files for a number of drivers. Consolidated various cchip declarations.
 - 0.125u4            : Introduced/updated some include files for files that export functions whose apis will need to be changed to handle machine parameters (cps1.h, decocrpt.h, ms32.h, pgm.h, fd1089.h, konami1.h). In the case of konami.c, renamed the file konami1.c and changed the api and callers to only require one function export. Pulled memory_region*() calls out of for loops and folded the occasional duplicated call. The compiler can't likely infer that the results are constant, so this should be a minor performance win as well [Atari Ace]. Aaron Giles added compile-time error if PTR64 is incorrectly set.
 - 0.125u3            : Andrew Gardner updated documentation in several drivers based on old readmes and other data that might get lost.
 - 0.125u2            : Atari Ace eliminated a large number of global Machine references. Added machine parameters to IRQ callbacks throughout the system to help remove more. Reduced the number of files needing deprecat.h by ~200.
 - 0.125u1            : Atari Ace consolidated opbase variables into a structure and rescoped them so they are hidden for general access.
 - 0.124u4            : Atari Ace changed code which used assignment in conditionals to break out the assignment. Converted a large number of Machine -> machine and removed #include "deprecat.h" where possible.
 - 0.124u1            : Marc Sandusky added new makefile flag VERBOSE which enables GCC's verbose output during compile.
 - 0.124              : Aaron Giles centralized definitions of _WIN32_WINNT. Removed malloc/calloc/realloc/free link-time overrides; we now rely exclusively on compile-time overrides. Made a few tweaks toward getting MinGW-w64 working, but there are still linker issues. Another batch of pedantic static/const/include fixes [Atari Ace].
 - 0.123u4            : Couriersud changed a number of global functions to being static. Rewrote some potentially compiler specific code: Added ATTR_FORCE_INLINE to osdcomm.h. Added ATTR_NONNULL. Moved U64 S64 fram mamecore.h to osdcomm.h. Define SETJMP_GNUC_PROTECT() in osdcomm.h for use in ppc602 and ppc603. Identified code not used and marked with "#ifdef UNUSED_FUNCTION" [Couriersud].
 - 0.123u3            : Makefile & build system update [Couriersud]: verinfo: New syntax. verinfo now uses the following syntax: verinfo.exe -b windows|winui|mess. Does not depend on compile time defines any longer. makefile will include src\osd\$(CROSS_BUILD_OSD)\build.mak if it exists. This was necessary to enable cross builds for winui. Couriersud removed some deprecat.h includes from osd layer: Add machine as parameter to osd_update and osd_update_audio_stream. Change Machine to machine and remove include deprecat.h.
 - 0.123u2            : R. Belmont fixed build with external zlib. Minor code cleanups. Added static/const where appropriate, plus some include fixes [Atari Ace]. KO Myung-Hun fixed validation fail of '_mul_32x32_hi()' and '_mulu_32x32_hi()' inline function when compiled GCC v3.3.5 with I686 optimization. Zsolt Vasvari removed the unnecessary pen array lookup from some INDEXED16 drivers.
 - 0.123u1            : makefile/build updates [Couriersud, Aaron Giles]: Moved verinfo.c to src\build. Moved rules for verinfo to src\build\build.mak. Removed osdcore.h from file2str.c, verinfo.c and png2bdc.c.
 - 0.122u8            : Added src\emu\deprecat.h. Zsolt Vasvari added deprecat.h that contains some deprecated/discouraged contructs. The idea is to create extra work if a driver wants to use these and hopefully gives an incentive to look for an alternate solution. Added #include of deprecat.h that rely on these contructs. Removed a bunch of unneccassary #include's from these files. Couriersud added checks for CROSS_BUILD=1 to omit building m68kmake.exe, verinfo.exe, png2bdc.exe and file2str. Enables building MAME using MinGW on Linux.
 - 0.122u6            : Atari Ace added some more static qualifiers on recent new/changed code. Neoforma added targ and spectar to TinyMAME.
 - 0.122u5            : src2html improvments [Aaron Giles]: Added line numbers. Added link to the raw file if the src and dst dirs are the same.
 - 0.122u2            : Atari Ace completed the addition of static qualifiers to all MAME symbols that aren't explicitly exported. Adjusted most conditional logging in MAME to use the idiom "do { if (VERBOSE) logerror x; } while (0)". This has the benefit that the compiler checks the syntax of the logging even in the case it will be eliminated, and in fact a number of cases here needed adjustments to compile because of this.
 - 0.122u1            : Minor "code quality" improvements [Atari Ace]: Fixed some remaining static/const qualifier missed cases. Fixed some missing #include "foo.h". A few global names were modified to make them less generic/more consistent (voodoo.c, vrender0.c, lethal.c, rungun.c and zac2650.c). Some dead/useless code was removed (i8051.c, model1.c and romcmp.c).
 - 0.122              : Atari Ace continued to add const qualifiers on remaining items in the project.
 - 0.121u4            : Atari Ace added missing consts to the files in the emu, lib and osd directories. Updated drivers to use const structs and arrays where possible.
 - 0.121u3            : Atari Ace const-ified a number of data structures in the MAME system. Aaron Giles modified src2html to sort by filename rather than assuming that the osd file finding routines would do so.
 - 0.121u2            : Atari Ace converted some more unnecessary globals into statics. Aaron Giles removed the burgeoning list of architecture optimization options. Instead, if you want to make a build optimized for a specific architecture, you explicitly specify the options in a new ARCHOPTS variable. You can control the name of the final executable via the existing PREFIX and SUFFIX variables, which are now documented. Vas Crabb added -pipe flag for GCC in makefile (GCC will pipe between cpp, cc and as rather than using temporary files, which speeds up compiling).
 - 0.121u1            : Atari Ace added more static qualifiers to core files. Nathan Woods changed malloc tracking to be decided at runtime in a function use_malloc_tracking(). This makes it easy to turn it on or off by recompiling only a single file. Aaron Giles added explicit Core2 architecuture support to the makefile (CORE2=1). Note that GCC 4.2.0 doesn't understand Core 2, so this is equivalent to compiling with pentium-m architecture and -sse3. Also note that compiling native on a Core2 is not what you want because native will think you are on a Prescott, which is P4-era hardware. Changed alignment of rgbint values in the namcos22 driver to work around 32-bit GCC's lack of proper alignment handling.
 - 0.121              : Aaron Giles and Vas Crabb defined a couple more inline functions: div_64x32_rem and the unsigned equivalent divu_64x32_rem. Added inline implementations for GCC x86 and MSVC. Atari Ace made more functions static to reduce namespace pollution.
 - 0.120u4            : Made some minor changes in the inline code. The result of atomic_add32 isn't used a lot of the time, so the final addition was brought out to allow it to be optimized away. Removed the unnecessary delta argument from atomic_increment32 and atomic_decrement32 in eminline.h, and added implementations. Changed the condition for using rgbsse.h to include 32-bit platforms with SSE enabled [Vas Crabb]. Analyzed all driver interfaces (DRIVER_INIT, READ8_HANDLER, etc.) to determine which ones should be made static and properly tagged them all to reduce global namespace pollution. Some cases turned out to be dead code, which was also properly tagged [Atari Ace].
 - 0.120u3            : Aaron Giles defined a couple of new functions in eminline.h: atomic_increment32 and atomic_decrement32.
 - 0.120u2            : Added src\emu\eminline.h. Aaron Giles cleaned up inline assembly support: Moved all inlinable functions into new module eminline.h. Defined a number of new inline functions, including: 32x32 -> 64 bit multiply and fast approximate floating point reciprocal. Removed old inline definitions from osinline.h, osd_cpu.h, etc. eminline.h contains C implementations of everything. New module eigccx86.h contains GCC-compatible x86/64 versions. New module eigccppc.h contains GCC-compatible PowerPC versions. eminline.h automatically detects GCC environments and includes appropriate file. osinline.h now only used in non-GCC environments. Updated osd\windows\osinline.h to contain MSVC-compatible versions. Tiago Pierezan Camargo fixed tiny.mak based on new source reorg.
 - 0.120u1            : Oliver Stoeneberg enabled common linker warnings in the makefile.
 - 0.120              : Christophe Jaillet added "native" architecture option to the makefile. Use this to have GCC automatically pick the most appropriate architecture based on the system that it is compiling on.
 - 0.119u4            : Andi fixed several out-of-bounds array accesses in the code.
 - 0.119u3            : Cleaned up the include file usage in the code [Atari Ace]: Removed dead prototypes. Added missing self-#includes. Added missing source comments in mame\includes. Migrated the few #include "driver.h" lines from driver header files to source files (which is the common idiom). Eliminated #include "mame.h", "osdcore.h" et cetera from driver files where #include "driver.h" would suffice. Removed unused srmp6.h and 9900stat.h. Atari Ace changed Machine to machine in several places where feasible.
 - 0.119u2            : Atari Ace cleaned up code to make code and data static where possible and remove some dead code.
 - 0.119u1            : Atari Ace updated the sources to support removing -wno-unused-function. Dead code has been identified with #ifdef UNUSED_FUNCTION to allow for further analysis and potential future removal.
 - 0.118u6            : Aaron Giles fixed stack buffer overrun in install_mem_handler() that broke the Hyperstone-based games under GCC 4.2.1.
 - 0.118u5            : Aaron Giles fixed remaining errors and warnings when building under GCC 4.2.1.
 - 0.118              : Mike Haaland fixed macros in stvcd.c to work with C89 compilers.
 - 0.117u3            : Added src\build\build.mak and src\tools\src2html.c. Aaron Giles added new tool src2html which is used to convert the MAME source tree to HTML format with linked include files and color coded keywords and comments. Aaron Giles separated build tools from general tools. Build tools are now located in the build\ subdirectory. Aaron Giles added new general library module astring.c, which supports allocated strings of arbitrary length and a number of basic functions on them. Atari Ace cleaned up redundant function names.
 - 0.117u2            : Made some minor code quality changes across the code [Atari Ace]: Avoided exporting a few global variables. Fixed variable names that conflicted with typedef names. Removed some shadow variables that were bugs or unnecessary. Removed extraneous #defines. Atari Ace fixed a few errors related to headers in the source code. Added missing self-includes, removed dead prototypes, and added location comments in headers in mame\includes. In a few cases the audit showed items that didn't need to be exported so they were made static.
 - 0.117              : Neoforma cleaned up tiny MAME target.
 - 0.116u4            : Neoforma fixed SUBTARGET=tiny builds.
 - 0.116u3            : Christophe Jaillet added support in the main makefile for profiling. Set PROFILE=1 to turn this on. R. Belmont fixed warnings generated by newer GCC compilers. General driver cleanups [Zsolt Vasvari]: Changed some more global 'Machine' to local 'machine'. Standardized on the function name 'draw_sprites'. Removed some antiquated boilerplate comments.
 - 0.116u2            : Atari Ace cleaned up the exports from a number of drivers, adding static qualifiers to functions and variables t hat don't need to be exported and have generic sounding names. Zsolt Vasvari updated numerous drivers to remove the use of global Machine wherever possible. Also reviewed the clipping regions and made changes to ensure the passed-in cliprect was honored.
 - 0.116              : Zsolt Vasvari removed unused return value from VIDEO_START callbacks. Atari Ace fixed up a number of places where malloc results weren't being checked correctly. Removed usage of unsigned char/short/int from the drivers code in favor of UINT8/UINT16/UINT32 [Aaron Giles?].
 - 0.115u4            : Zsolt Vasvari removed unused return value from MACHINE_START and SOUND_START. Aaron Giles simplified a number of videoram write handlers by removing extraneous dirty checking. Removed a number of common but useless and/or frequently incorrect comment patterns throughout the code.
 - 0.114u2            : Atari Ace fixed the SUBTARGET=tiny build and removed some duplicate entries in mame.mak.
 - 0.114              : Aaron Giles removed obsolete assembly code and compiler definitions.
 - 0.113u2            : Added src\tools\srcclean.c. Aaron Giles added srcclean tool to the tools directory. This is the tool that is run over the source before each release to do some minor code tidying.
 - 0.112u3            : Dirk Best updated makefile to remove the map file when making clean.
 - 0.112u2            : Atari Ace removed the inclusion of unnecessary header files across the project.
 - 0.112u1            : Changed src\core.mak to src\emu\emu.mak. Added src\lib\lib.mak. IMPORTANT: This release brings with it a major source code reorganization. Because of this, there is no diff update, since the diff would be enormous. The new layout at a high level looks like this (see whatsnew_0112u1.txt). Along with these changes come a number of makefile alterations to better distribute the build knowledge within each major subdirectory. There may be some build issues or other interesting side effects to this change. Report them on MAMETesters and future updates will include fixes. Aaron Giles changed the way the tiny build works. There is now the concept of a SUBTARGET. By default SUBTARGET is set equal to TARGET (which is mame) and everything builds as normal. The makefile that is included is now src\$(TARGET)\$(SUBTARGET).mak. Thus, to do a tiny build, you now have to specify "make SUBTARGET=tiny". This will produce an output executable with a name $(TARGET)$(SUBTARGET) (mametiny in this case).
 - 0.112              : Atari Ace cleaned up a number of drivers that were using malloc from within DRIVER_INIT to use malloc_or_die instead.
 - 0.111u6            : Aaron Giles tweaked the main makefile to better support parallel builds. Moved some of the tool sources to a new subdirectory tools.
 - 0.111u5            : Atari Ace fixed several duplicated global variable names, removed unreferenced items from header files and added header files for several drivers.
 - 0.111u4            : Atari Ace modified the makefile to make it possible to independently specify symbols generation and optimization levels.
 - 0.111u3            : Made a fix minor compiler compatibility tweaks to the source [Atari Ace].
 - 0.111u2            : Aaron Giles updated copyright dates in header files and docs.
 - 0.110u4            : Aaron Giles added some hacks to windows.mak to allow limping compilation under Windows Vista. To make these work set an environment variable called VISTA_MINGW_ROOT equal to the base of your MinGW directory, and add %VISTA_MINGW_ROOT%\libexec\gcc\mingw32\3.4.2 to your PATH environment. There are still a few issues, but this will let you build with MSVC, and will compile most of the code with GCC (minus a couple of Windows OSD files). Hopefully the MinGW folks will resolve these issues.
 - 0.109u5            : Nicola Salmoria fixed subtle bug in the UI menu handler that only manifested on MinGW-based compiles.
 - 0.108u3            : Nathan Woods updated core.mak to ensure the make clean will remove file2str.exe.
 - 0.107u2            : Nathan Woods added macros to prevent use of strcasecmp and strncasecmp for better cross-platform compatibility.
 - 0.106u12           : Aaron Giles changed the core makefile to put back specific rules for building EXEs to promote more commonality with platforms that don't put an extension on executable files.
 - 0.106u10           : Removed src\windows\setup.txt.
 - 0.106u8            : Aaron Giles moved cygwin-specific compiler options to windows.mak.
 - 0.106u6            : R. Belmont added workaround to make the V60 core work properly on GCC 4.x (tested on 4.1.1).
 - 0.106u5            : Malice fixed windows.mak to support 64-bit builds.
 - 0.106u3            : Removed windows\asmblit.asm, asmtile.asm, COPYING.LIB and rc.c/h. Olivier Galibert added a size parameter to osd_free_executable(). Lawrence Gold moved large stack buffers into heap buffers to work better on systems with small stacks. Aaron Giles removed remaining chunks of x86 assembly code, as well as references to NASM in the makefiles.
 - 0.105u5            : Added preliminary support for 64-bit targets. A new makefile define PTR64 should be set if you are compiling for a 64-bit target. This propogates a PTR64 define into the C files as well. Made the makefile smart enough to auto-disable the drc cores for 64-bit, and removed most of the roadblocks to a 64-bit build, apart from the assembly blitters, which are currently undergoing a rewrite [Aaron Giles].
 - 0.105u3            : Atari Ace fixed some remaining errors and inconsistencies in the content and usage of MAME header files by comparing declarations against actual definitions. Removed many orphaned/duplicate declarations. Added #includes where appropriate, and moved a few declarations to another file when they were in the wrong location.
 - 0.105u1            : Atari Ace cleaned up the usage of includes\*.h files across the project, by ensuring that: 1. All includes\foo.h files are annotated with comments describing the source of the declarations. 2. Each source file so annotated also explicitly does an #include "includes\foo.h" to ensure consistent definitions. Along the way a number of inconsistent, irrelevant and incomplete declarations were removed/cleaned up. Nathan Woods added $(OBJ)/%.s target to the makefile for easy disassembly analysis of generated code (you can also use the $(OBJ)/%.pp to examine preprocessor output). Atari Ace and Aaron Giles removed hard linkage of game driver clones. This reduces hard inter-driver dependencies and allows for easier usage of tiny.mak.
 - 0.104u9            : smf and Aaron Giles fixed makefile to allow command-line override of MAMEOS and TARGET variables.
 - 0.104u7            : Atari Ace removed unnecessary #includes from a number of files. Added #includes to files that were defining items that were declared in the header. Better documented where items are defined in the header files from the includes directory.
 - 0.104u5            : Lawrence Gold fixed old debugger compilation on non-Windows platforms. Added mame_strnicmp along the way. Fixed compile errors under GCC 4.1.
 - 0.104u4            : More global system cleanup [Aaron Giles, Atari Ace]: Remapped osd_die to fatalerror, which cleans up behind itself and returns to the osd code by returning from run_game. Removed a number of unnecessary includes from driver.h. Moved logerror into the core. Moved 68000-specific build rules to cpu.mak. New function skip_this_frame, should be called by drivers instead of osd_skip_this_frame. Removed includes of osdepend.h and osd_cpu.h from drivers; only the core should include these.
 - 0.104u2            : Aaron Giles added assert_always macro which asserts even in a release build, and requires a friendly message. Fixed problems with latest x86 changes: If you attempt to compile without x86 support, you cannot compile a Windows version of MAME - the code in windows\ticker.c currently requires x86drc.o to be included. Deprecated the use of multimon.h in the Windows build, which is only necessary for producing Windows 95 and NT 4.0 compatible binaries. Windows 98 is now the minimum version of Windows supported for MAME.
 - 0.104u1            : Lawrence Gold fixed new makefiles to be more friendly to non-x86 builds.
 - 0.104              : Derrick Renaud fixed tiny.mak for the changes from 0.103u5. Aaron Giles shuffled a few more files around in mame.mak; rebuild clean once again to ensure correctness.
 - 0.103u5            : Splitted src\rules.mak into src\cpu\cpu.mak and src\sound\sound.mak. Made a clean-up pass over all the makefiles. rules.mak is gone now, replaced by cpu.mak and sound.mak. mame.mak has been reorganized. All the makefiles are now commented and should be easier to follow [Aaron Giles].
 - 0.103u4            : Oliver Stoeneberg converted a few more exit() calls to osd_die().
 - 0.103u1            : Atari Ace tagged a number of constant arrays in the source as static.
 - 0.103              : Oliver Stoeneberg replaced a few stray exit() calls with osd_die().
 - 0.102u3            : Giuseppe Gorgoglione removed several obsolete files: machine\s16math.h, vidhrdw\medlanes.h, windows\dirty.h and windows\snprintf.c.
 - 0.102              : Aaron Giles changed the makefile so that debug objects are not compiled on non-debug builds.
 - 0.101u5            : Atari Ace marked several large arrays properly as const (see machine\fd1089.c).
 - 0.99u1             : Aaron Giles turned off -fomit-frame-pointer in optimized builds. It was leading to crashes when used with setjmp/longjmp on Windows builds.
 - 0.98u1             : Some makefile tweaks to hopefully catch variable declaration problems that kept creeping into builds. Switched GCC compiler standard to GNU89 [Atari Ace].
 - 0.96u4             : Firewave replaced some logerror()/exit(), printf()/exit() and fprintf()/exit() combinations against an osd_die() call.
 - 0.95u4             : Aaron Giles added 'emulator' target to the makefile to make it easier to build just mame.exe. Removed obsolete targets from the main makefile. Added Pentium-M optimization target to the makefile.
 - 0.95u1             : Link Warning fixes [Lawrence Gold].
 - 0.94u5             : Added src\tiny.c. Atari Ace reorganized makefile slightly. Lawrence Gold fixed seibuspi link warning.
 - 0.94u3             : Compiler fixes [Atari Ace].
 - 0.94u1             : Fixed auto_malloc compiler warning with DOS tools [smf].
 - 0.93u2             : 0.93 link warning fixes [Lawrence Gold].
 - 0.93u1             : R. Belmont fixed Itech32 64-bit crash (src\vidhrdw\itech32.c). Misc compiler fixes [Lawrence Gold].
 - 0.93               : C89 fix [Lawrence Gold].
 - 0.92u1             : Compiler fixes [R. Belmont].
 - 0.92               : Misc compiler fixes [Lawrence Gold].
 - 0.91u2             : Compiler warning cleanups [Nathan Woods, David Haywood].
 - 0.91u1             : Compiler Warning fixes for non-GCC compiles [Bryan McPhail]: Duplicate enum (cpuintrf.h). C99 variable fix & warning fix (cpu\mh68hc11\hc11ops.c). C99 variable fix (sound\streams.c). C99 variable fix (vidhrdw\pacman.c). C99 variable fix, unused variable fix and macro redefinition fix (vidhrdw\model3.c). Fixed unused variable warning (vidhrdw\namcona1.c). Fixed unused variable warning (vidhrdw\taitoic.c). Fixed unused variable warning (vidhrdw\wgp.c). Missing #include (windows\debugwin.c).
 - 0.90u2             : Lawrence Gold fixed several compile warnings.
 - 0.90               : Robert Alan Byer fixed Model1 driver compiling problem with OpenVMS. R. Belmont fixed itech32 driver crash on AMD64 CPUs. Some C89 compilers fixes [Lawrence Gold].
 - 0.89u1             : Misc compiler patches [Lawrence Gold].
 - 0.88u4             : Nathan Woods fixed some compile errors.
 - 0.88               : Jeff Mitchell and Lawrence Gold fixed some C99 related compiler issues.
 - 0.87u4             : Rene Single hanged where source filename based config files are stored to avoid conflicts with set name configs.
 - 0.87u3             : Massive compiler warnings cleanup for GCC 3.4.2 [Olivier Galibert].
 - 0.87u2             : Lawrence Gold fixed some Compiler warnings.
 - 0.87u1             : Minor Compiler fixes [Brad Oliver].
 - 0.86u1             : Added src\expat\expat_external.h. Lawrence Gold substituted isnan() for inunordered(), which is only available in C99. Fixed a few C89 warnings about an extra comma at the end of enums. Updated the expat code to 1.95.8, which is the latest release.
 - 0.84u6             : Aaron Giles fixed several makefile errors in the last version.
 -  3rd June      2004: Aaron Giles - I start in on the debugger reworking I've been planning for a while. The new debugger relies on more support from the OSD layer to handle multiple windows and text-based drawing, but it allows a ton more flexibility than the old debugger. The cross-platform core is also greatly expanded in capabilities, supporting multiple breakpoints, conditional breakpoints, full-fledged watchpoints, a full expression parsing engine, and lots more.
 - 24th April     2004: Lawrence Gold sent in a small patch for romcmp.c compiling problems.
 - 0.81u5             : Nathan Woods added __attribute__((noreturn)) to osd_die() when compiling under GCC 2.5 and greater (osdepend.h). Converted printf()/exit() combination of calls to osd_die() in (src\memory.c, src\state.c, src\x86drc.c and src\cpu\i386\i386.c).
 - 0.81u4             : Fixes the afore mentioned problem with x86drc.c (windows.mak) [Nathan Woods].
 -  4th April     2004: Aaron Giles fixed a compiling error that happened without the x86 DRC core.
 - 31st March     2004: Lawrence Gold fixed a few compiling and link warnings in 0.80u3.
 - 0.80u1             : Lawrence Gold fixes the C89 compiler.
 - 0.80               : Lawrence Gold fixed a bunch of compiling errors with GCC 3.3.3.
 - 17th February  2004: Lawrence Gold fixed a bunch of compiling problems on other platforms.
 -  9th February  2004: R. Belmont sent in a small *nix-related compiling fix for u1.
 - 30th January   2004: Olivier Galibert fixed a slight compiling problem in the Vendetta driver.
 - 28th January   2004: smf fixed compiling the Dynax driver in VCMAME and memory.c in DJGPP.
 - 23rd January   2004: Olivier Galibert fixed the memory system to remove useless memory allocations, and he fixed compile warnings in various files.
 -  8th January   2004: smf sent in a small fix for compiling cpuintrf.c in DJGPP.
 - 0.79               : Various compiler specific fixes [Olivier Galibert, smf].
 - 0.78u1             : Nathan Woods added workaround for deficiency in Metrowerks compiler (src\chd.c) and a few more instruction declarations and a call to retrieve CPU feature flags from CPUID in src\x86drc.c. Also added compiler specific assembler code for feature reading replaced by call added above (src\windows\ticker.c).
 - 19th November  2003: Lawrence Gold fixed several warnings and errors in compiling on different compilers.
 - 0.76u1             : Leon van Rooij added CFLAGSOSDEPEND variable. It is used when compiling osd code only (e.g. DirectX needs -Wno-strict-aliasing). COMPILESYSTEM_CYGWIN determines if nasm or nasmw is used (the cygwin version of nasm is called nasm). Quick fix for some #defines in that don't work with win32api 2.4 (windows\fileio.c). Changed a variable name that conflicts with a GCC built-in (windows\snprintf.c).
 - 0.75               : Lawrence Gold replaced instances of "inline", "static inline", and "static __inline" with "INLINE". This fixes some build problems with xmame and makes things more consistent.
 - 11th August    2003: smf fixed various compiling problems that happen with GCC 3.3.
 - 0.71u3             : Brad Oliver fixed compile problems in src\vidhrdw\bigevglf.c and segaic24.c.
 - 25th July      2003: Jarek Burczynski and Martin Adrian fixed a compiling bug in the FM core that happened with some chip configurations.
 -  6th July      2003: Bryan McPhail fixed another compiling error on other compilers.
 -  5th July      2003: Brad Oliver fixed a small compiling bug.
 - 23rd June      2003: Nathan Woods fixed another few compiling problems.
 - 11th June      2003: Bryan McPhail sent in some fixes for warnings with other compilers.
 -  7th June      2003: Lawrence Gold sent in some fixes to compiler warnings and some xmame-specific patches.
 - 0.71u1             : Compiler fixes [Bryan McPhail, Brad Oliver].
 - 0.69               : DriverDataCompareFunc() is now declared with CLIB_DECL (src\datafile.c) [Nathan Woods].
 - 12th April     2003: Lawrence Gold fixed several compiling bugs when using an older GCC or another compiler.
 -  6th April     2003: Brad Oliver fixed some compiling problems.
 - 0.66               : Now compiled with GCC 3.2.2. Removed the patch that was needed to work around a GCC 3.2 bug.
 -  5th March     2003: Nathan Woods fixed the function prototypes to use mame_file instead of void pointers in state.c/h.
 - 29th January   2003: Bryan McPhail fixed some compiling problems that happened with Visual C.
 - 14th January   2003: Andrea Mazzoleni sent in some small compiling fixes.
 - 0.63               : Now compiled with MinGW 2.0/GCC 3.2. There might be bugs caused by the new compiler, let us know.
 -  9th December  2002: Brad Oliver fixed a minor compiling bug that affected 0.62.
 - 15th November  2002: Aaron Giles put together a compiler package with MinGW 2.0 (GCC 3.2) to be used with MAME.
 -  1st November  2002: Nathan Woods did some minor tweaks to allow compiling with the MinGW 2.0 distribution.
 - 29th October   2002: smf fixed some compile errors in the Williams V-unit driver.
 - 30th July      2002: Lawrence Gold fixed some compiling errors that happened with GCC 3.1 optimizations.
 - 31st March     2002: Lawrence Gold fixed some compile problems which occurred with a newer GCC.
 - 16th February  2002: Lawrence Gold sent in a few more patches fixing compile errors.
 - 15th February  2002: Brad Oliver fixed a few compile errors.
 -  4th February  2002: Stephane Humbert fixed some compilation problems.
 -  7th January   2002: Lawrence Gold forwarded some minor compilation fixes to the source.
 -  4th January   2002: Andrea Mazzoleni partially fixed a bug in compiling the Z80 CPU core with GCC 3.0.x.
 -  1st January   2002: Brad Oliver fixed a few compilation problems in MAME 0.57.
 -  1st November  2001: Brad Oliver and Aaron Giles fixed several compile problems.
 - 20th October   2001: Stefan Jokisch fixed several compilation errors which occurred in Visual C, and sent a project file to use with it.
 - 20th August    2001: Peter Trauner fixed a compile problem.
 - 0.37b16            : New subdirectory "includes" for driver-specific header files.
 - 30th March     2001: Aaron Giles fixed some compiling bugs.
 - 15th July      2001: Brad Oliver fixed some compilation problems.
 -  4th July      2001: Olivier Galibert fixed a compilation problem in jrcrypt.c (jrcrypt.c provide detailed documentation of the encryption used by Jr. Pac Man ROMs).
 - 28th June      2001: Lawrence Gold fixed several GCC 3.0 warnings in the source code.
 - 0.37b7             : [DOS] The makefile now uses GNUs mkdir instead of the built-in one. If you don't have mkdir you can find it here: http://www.simtel.net/pub/simtelnet/gnu/gnuish/gnufut21.zip
 - 0.37b6             : [DOS] The makefile now uses rm instead of deltree. If you don't have rm you can find it here: http://www.simtel.net/pub/simtelnet/gnu/gnuish/gnufut21.zip.
 - 0.37b3             : Added src\core.mak, mame.mak, neomame.mak, rules.mak, tiny.mak and msdos\msdos.mak. New makefile, easier to port, split into multiple files [Juergen Buchmueller].
 - 0.36b15            : make68k.exe now requires as parameter the path of the comptab.asm include file (see makefile).
 - 0.24               : TO ALL CONTRIBUTORS: Please do not make use of C++ // comments in your sources. I loose a lot of time every release to adjust them. Then use official source release as a base for your next updates. Use a comment style like in Williams.c sources (this is actually my comment style and almost clear to read). Thanks.
 - 0.22               : Brad Oliver provided me a lot of suggestions to improve portability and fixed a lot of bugs.
 - 0.14               : driver.c was getting much too large and confused [Nicola Salmoria]. I moved the GameDriver structures inside the single driver/xxxx.c files. This has the additional benefit that people sending me drivers will not forget to include the ROM loading addresses. I changed the GameDriver structure, moving there fields from the MachineDrivers structure. The idea is that MachineDriver should describe the hardware, while GameDriver the software. Therefore things like colors (which are usually stored in a PROM) and dip switch settings go into GameDriver; decode_color_prom, on the other hand, goes into MachineDriver because it is an hardware function. It could be argued that input_ports belong to the hardware; but sometimes we have keys tied to dip switches (test switches and so on) whose function is determined by the software. Moreover input_ports contains the default values for all ports, including dip switches, and those are definitely software related.
 - 0.08               : Removed src\machine.c/h. I got rid of machine.c and put all into mame.c [Nicola Salmoria]. When I have time, I'll try to organize the source better [Nicola Salmoria].
 - 0.06               : Nicola Salmoria reorganized the source directory tree, instead of one directory for every game there are now four directories (drivers, machine, vidhrdw, sndhrdw) which contain files named after the game.
 - 0.05               : Some bug fixes and changes to reduce porting problems (thanks to Brad Oliver).



 3.1  VISUAL C/OTHER COMPILER/OSD DEVELOPERS

 - 0.235              : MSVC fixes to drivers\royalmah.cpp and stv.cpp [Aaron Giles].
 - 0.234              : Disable another MSVC warning (C4611) that is known to be noisy (and which showed up with the recent setjmp workaround). Fixed Visual Studio case with displaced object base (internal representation seems to have drifted since it was originally written) (util\delegate.h) [Aaron Giles].
 - 0.233              : Allow building without PulseAudio on Linux (makefile) [jflatt].
 - 0.231              : Fixed vs2019_clang build (scripts\genie.lua) [feos]. Fixed compilation with Emscripten versions greater than 2.0.8 (scripts\toolchain.lua) [Sam Clegg]. Updated compiling document to reflect that MSVC 2019 is working and recommended (initialsetup\compilingmame.rst) [Stiletto].
 - 0.230              : Fixed MSVC build (drivers\dynax.cpp) [Aaron Giles].
 - 0.227              : Fixed some MSVC failure to resolve overloaded operator errors. MSVC isn't trying the object finders' cast-to-pointer operators when looking for a suitable operator+. Since GitHub actions can only find 100 occurrences of a string and don't actually give you the full raw log when you ask for it, it's going to take several passes to catch all of these [Vas Crabb].
 - 0.218              : Workaround for a bug in MSVC (https://github.com/mamedev/mame/issues/6106). __VA_ARGS__ are expanded to a single token in MSVC, all other compilers expand to a list of tokens (netlist\plib\putil.h) [Couriersud, Firewave].
 - 0.217              : Work around MSVC overload resolution issue in save_item/save_pointer (emu\device.h and save.h) [Vas Crabb].
 - 0.216              : Fixed MSVC compile (netlist\plib\palloc.h) [Couriersud].
 - 0.215              : Some Visual Studio 2019 fixes [smf]. VS2019 fixes. Added initial ClangCL support. Fixed uwp builds' vs version typos. Added missing VS2019 toolchain.lua bits [Julian Sikorski].
 - 0.207              : Added 64x64 multiply helpers (osd\eivcx86.h and eminline.h) [Patrick Mackinlay]. Added GCC/Clang implementations of 64*64->128 multiply for x86_64 and adjust some integer casts (osd\eigccx86.h and eminline.h) [Vas Crabb].
 - 0.206              : Fixed non-trivial templates in emu\devdelegate.h for MSVC [Vas Crabb]. Fixed a few missing #includes flagged by VS2019 beta (lib\util\timeconv.h and bgfx\effect.h) [Ryan Holtz]. Fixed MSVC compile (llvm toolset): Conditionally uninitialised variables in PortAudio. Floats passed to attotime. unsigned->signed enums (this one is technically still wrong) [Peter Ferrie].
 - 0.205              : Added support for building with Clang on FreeBSD/NetBSD [Thomas Klausner].
 - 0.204              : Put #include emu.h as the first preprocessor directive in various files to support precompiled headers in Visual Studio (sound\dac.cpp, video\cgapal.cpp, video\rgbgen.cpp, rgbsse.cpp and rgbvmx.cpp) [yz70s]. Added ini/examples to dist.mak [anikom15]. Renmead flipendian_int16/32/64(mem_mask) to swapendian_int16/32/64(mem_mask) (osd\osdcomm.h, cpu\uml.cpp, util\unicode.cpp, emu\save.cpp...) [Ryan Holtz].
 - 0.202              : Workround so you can still compile if you install the Visual Studio 15.8 update, as long as you install the 14.14.26428 compiler as well (3rdparty\genie\src\actions\vstudio\vstudio_vcxproj.lua and 3rdparty\genie\src\host\scripts.c). Set Visual Studio to 64 bit by default (3rdparty\genie\src\actions\vstudio\vstudio_vcxproj.lua). Enabled edit and continue in Visual Studio debug builds (scripts\genie.lua) [smf].
 - 0.201              : Added DEVCB workround to allow Mitsumi keyboard to build with Visual Studio (src\emu\devcb.h) [smf].
 - 0.189              : Work around GCC ambiguous template error (emu\output.h) [Vas Crabb].
 - 0.182              : Clean up inlines for MSVC. No reason to prefer inline assembly over MSVC _BitScanReverse intrinsic on x86 (osd\eivcx86.h) [Vas Crabb].
 - 0.182              : Fixed MSVC compile (src\3rdparty.lua) [intealls].
 - 0.181              : Disable incremental linking for VS debug builds (scripts\genie.lua) [Miodrag Milanovic].
 - 0.179              : Fixed VS build (noticed only when using MSBUILD=1) (scripts\src\3rdparty.lua) [Miodrag Milanovic].
 - 0.177              : Make some constexpr functions comply with older C++11 rules to keep Visual Studio happy (emu\attotime.h) [Vas Crabb]. Some C++14 features are not supported by VS2013. VS2015 is free for home use so no need for legacy support [Miodrag Milanovic].
 - 0.172              : Made Visual Studio use by default bundled SDL2. Make possible to select if bundled SDL2 is used, made MinGW and VS compile so far. Enabled multi core compile on VS [Miodrag Milanovic].
 - 0.170              : Suppressed C4592 warning in VS 2015 (scripts\genie.lua) [dankan1890].
 - 0.170              : Fixed solutionVersion for VS2015 and ToolsVersion for all VS201x. This fixes IncrediBuild under VS2015. Fixed start project for custom builds in Visual Studio (scripts\genie.lua) [Miodrag Milanovic]. OS/2 patch [KO Myung-Hun].
 - 0.169              : Fixed build for VS 2013 and earlier (http://stackoverflow.com/questions/22212737/strange-syntax-error-reported-in-a-range-based-for-loop) [dankan1890]. Fixed compile in MSVC 2015 [Peter Ferrie]. Fixed missing noexcept in Visual Studio 2013 (util\coretmpl.h) [dankan1890].
 - 0.168              : Fix for VS2013 build (osd\osdcomm.h) [dankan1890]. Set only needed VS compile flags for 3rdparty. There are still those in main file, but now can be removed by fixing our code. Made fast delegates work on VS x64 builds [Miodrag Milanovic].
 - 0.166              : Fixed compile for MSVC (netlist\plib\pstream.h and pstring.c) [Peter Ferrie].
 - 0.165              : Fixed VS build (scripts\src\osd\windows.lua) [Miodrag Milanovic]. Disable warnng C4319 with Visual Studio 2015 (scripts\genie.lua) [yz70s].
 - 0.162              : Fixed emu\inpttype.h does not work on GCC 5.x and find a better way to disable optimisation [Miodrag Milanovic, Vas Crabb].
 - 0.161              : Removed windows\vconv.c. Moved osd\windows\eivc.h and eivcx86.h to osd\. Fixed Visual Studio compilation (machine\vrc4373.c) [hap]. Removed vconv, updated warnings/error for vs and icl (scripts\genie.lua) [Miodrag Milanovic].
 - 0.160              : OpenGL MSVC fix. If compiling under MSVC, don't use GL/gl.h or GL/glext.h. Use our own headers [Couriersud]. Fixed compile on MSVC 2012 (opengl\osd_opengl.h) [Peter Ferrie].
 - 0.159              : Disabled some Visual Studio warning (windows\vconv.c) [Oliver Stoeneberg]. Compile fix for MSVC 2012 (lib\lib.mak, windows\vconv.c and winprefix.h) [Peter Ferrie].
 - 0.158              : Support some C99 extensions in older MSVC (windows\winprefix.h) [Peter Ferrie]. Fixed potential memory leaks (windows\vconv.c). Documented all disabled warnings / added VS2013 define also removed some warnings, that don't happen anymore and don't like like they should be disabled (windows\vconv.c) [Oliver Stoeneberg].
 - 0.156              : More appropriate types to avoid warning with VS14 CTP4 (drivers\igspoker.c, namcos21.c, segaufo.c, includes\namcos21.h, machine\nvram.c, osd\windows\windows.mak and winprefix.h) [smf]. Increased maximum allowed stack size of Visual Studio Code Analysis (windows\windows.mak) [Oliver Stoeneberg]. Allow compilation on cygwin based terminals on Windows (like cmder) [Dirk Best]. Simplify MSVC fix, tested with official MinGW and VS2013 & VS14 CTP4 (drivers\segaufo.c) [smf]. Suppress MSVC debug build warning (osd\windows\windows.mak) [Peter Ferrie].
 - 0.155              : Added a dummy bus to allow ldplayer to be built on OSX (and possibly on other platforms too) (ldplayer\ldplayer.mak) [Wilbert Pol]. Added workaround to build with XCode 6.0.1 out-of-the-box (build\flags_clang.mak). Added makefile variable OPENMP to enable usage of OpenMP (includes vconv support of -fopenmp) [Oliver Stoeneberg].
 - 0.154              : Added/updated some vconv TODOs. Enabled rgbsse.h for Visual Studio 64-bit builds as well and use rgbgen.h for all DEBUG builds since this is the fastest combination (makefile, video\rgbutil.c/h). Fixed -j compilation with VS2013. Implemented ATTR_FORCE_INLINE for Visual Studio (osd\osdcomm.h and osd\windows\vconv.c). Map /O3 to /Ox (osd\windows\vconv.c) [Oliver Stoeneberg]. Fixes for PowerPC AltiVec compile (video\rgbvmx.h and util\palette.h) [Vas Crabb]. Fixed tools build (tools\tools.mak) on OS/2 [KO Myung-Hun]. Fixed compile on old Apple GCC (thanks Micko) (video\cyberbal.c) [Fabio Priuli]. Fixed some warnings on older GCCs (e.g. OSX PPC) (cpu\m6809\konami.c and psx\psx.h) [R. Belmont]. MSVC fix (netlist\nl_dice_compat.h) [Curt Coder].
 - 0.153              : Reverted Visual Studio 2012 compiling fix (windows\drawd3d.c) to deal with "roundf" for pre-vs2013 compilers - which is no longer needed [smf, Tafoid]. Fixed #if checks for Visual Studio in osd/osdcomm.h. Fixed VS2012 linking of makemak.exe and makelist.exe. Handle -msse in osd\windows\vconv.c and added a TODO about a changed behavior in VS2012. Added some library dependencies for Visual Studio (castool\castool.mak, floptool\floptool.mak and tools.mak). A few adjustments for Visual Studio analysis (windows\windows.mak) [Oliver Stoeneberg]. Fixed compiling on unusual OS X configurations (osd\sdl\debugosx.m) [Robert Walsh]. Workaround for internal compiler error when using vs2013 64-bit (sound\c140.c) [David Haywood]. Made MAME and MESS compile under VS2013, 32bit only for now. Updated windows\vconv.c for no-sign-compare [Miodrag Milanovic].
 - 0.152              : MAME builds warning-free on PowerPC OS X again (osd\sdl\sdl.mak). Fixes OS X PowerPC MESS compile (machine\6883sam.c) [R. Belmont]. Allow building with ICL on Windows if you have it installed into MSVC: The ICL compiler on Windows installs over MSVC and piggybacks onto the build tools Microsoft provide. To enable compilation use USE_ICL=1 when compiling with MSVC_BUILD=1 (from the ICL enabled command prompt). Gives a more stable build than the MSVC compiler. More informative compile errors when using ICL compared to MSVC compiler. Can still use MSVC debugging tools (better than GCC). Can use additional Intel tools etc. Build is still slower than GCC one [Dean London].
 - 0.151              : Fixed for building with Visual Studio 2012 (lib\web\mongoose.c). Fixes for building with Visual Studio 2013 RTM [smf].
 - 0.149u1            : Fixes for building MAME with Visual Studio 2013 preview (cpu\mc68hc11\mc68hc11.c, rsp\rspdrc.c, tms32031\32031ops.c, emu\debug\debugcmd.c, machine\msm6242.c, pit8253.c, emu\rendfont.c, several formats\*_dsk.c, softfloat\softfloat-macros, drivers\beathead.c, machine\harddriv.c, video\tank8.c, tia.c/h, windows\ledutil.c, windows\winprefix.h and tools\chdman.c) [smf].
 - 0.148u5            : Fixed building with MSVC (machine\psxcd.c) [smf]. Added support for -mavx and -flto (windows\vconv.c) [Oliver Stoeneberg].
 - 0.148u3            : Fixed visual studio compile (debug\debugcpu.c) [Andrew Gardner].
 - 0.148u1            : Fixed MSVC compile (lib\formats\g64_dsk.c) [Curt Coder]. Fixed Visual Studio 2010 compilation by disabling an additional warning. Improved compilation speed for optimized Visual Studio builds (emu\inpttype.h and machine\nes_mmc.c) [Oliver Stoeneberg].
 - 0.148              : Bumped Visual Studio warning level to 4 and disabled most of the new warnings (src\osd\windows\vconv.c). Added translation of -Wno-sign-compare. Fixed for MSVC (cpu\mcs96\i8x9x.c). Added make define MSVC_ANALYSIS to run Visual Studio code analysis (osd\windows\windows.mak) [Oliver Stoeneberg]. MSVC compilation fixes (osd\windows\eivc.h, vconv.c, d3dhlsl.h, drawd3d.h and windows.mak) [Nathan Woods].
 - 0.147u1            : Fixed MSVC compilation (mame\audio\micro3d.c, includes\megadriv.h, mame\machine\megavdp.c, osd\windows\d3d8intf.c, d3d9intf.c, d3dhlsl.c, d3dhlsl.h, d3dintf.h and drawd3d.c) [Aaron Giles]. OSX compile fixes [Wilbert Pol].
 - 0.147              : Fixes so MESS on PowerPC OS X builds and works again. MAME is still a lost cause [R. Belmont].
 - 0.146u4            : Fixed OS X Intel compilation (machine\netlist.h) [Phil Bennett]. MSVC doesn't like classy structs, no idea if this breaks anything (machine\netlist.h). Fixed building with MSVC (drivers\taitotz.c + globalfr.c) [Phill W.].
 - 0.146u1            : Fixed building with Visual Studio 11 RC [Phill W.]. Fixed PPC OSX compile (machine\68681.c) [R. Belmont].
 - 0.146              : Fixes for building with Visual Studio 11 beta [Phill W.]. objdump doesn't work with VS binaries (MSVC_BUILD in makefile), so do not run it [Firewave]. Fixed compilation under VS2010 [Miodrag Milanovic].
 - 0.145u8            : Fixed PowerPC OS X compile [R. Belmont]. Fixes for compiling with MSVC. Fixed "potentially uninitialized local variable" error when building with MSVC. The code does appear to assume that variables on the stack are zero'd [Phill W.].
 - 0.145u4            : Firewave fixed several Visual Studio compiler warnings and 64-bit libflac compilation. Aaron Giles fixed display of driver name under MSVC (emu\ui.c). Some minor cleanup in that function.
 - 0.144u5            : OS/2 updates [KO Myung-Hun].
 - 0.144u2            : Added a placeholder for ohci USB controller in chihiro plus relative hack to avoid an infinite loop. This allows chihiro to try to initialize direct3d and to use the nvidia 3d accelerator [Samuele Zannoli].
 - 0.143u4            : General portability fixes [Robert Muth, R. Belmont].
 - 0.143u3            : OS/2 build fixes [K.O. Myung-Hun].
 - 0.142u4            : Oliver Stoeneberg enable Visual Studio basic run-time checks in non-optimized builds.
 - 0.141u4            : K.O. Myung-Hun fixed OS/2 compile.
 - 0.140              : Aaron Giles fixed visual Studio compiler warning in src\mame\video\n64.c.
 - 0.138u4            : El Barto renamed feof to image_feof (in device_image_interface) in order to compile on FreeBSD.
 - 0.138u2            : Oliver Stoeneberg fixed a warning in Visual Studio 2010 that was introduced by a previous commit.
 - 0.137u4            : Oliver Stoeneberg fixed two VS2008 warnings (namcos23.c and rdpfb.c). Oliver Stoeneberg fixed linking of chdman.exe and romcmp.exe with Visual Studio.
 - 0.136u3            : KO Myung-Hun fixed OS2 auto-detect.
 - 0.136u2            : Couriersud added OS/2 autodetect to makefile. Couriersud added OpenBSD support in makefile/sdl.mak. Fixed XBSD detection of PTR64 (uses AMD64).
 - 0.134u1            : Curt Coder added deletion of MSVC specific files to clean task.
 - 0.133u3            : Fixed MSVC 64-bit compile errors. Attempt to define an I64FMT string that can be used for printf'ing 64-bit integers. This is defined to be "I64" on MSVC and recent MinGW compilers, and "ll" for all others. Updated all instances of 64-bit prints to use the new macro [Aaron Giles].
 - 0.132u5            : Aaron Giles fixed compiling warning at devintrf.c:128 with MSVC.
 - 0.125u9            : Nathan Woods fixed assertion in astring.c when compiled against MSVC and the string is UTF-8.
 - 0.125u7            : Atari Ace fixed make MSVC_BUILD=1 -j2 and correct an oversight in the cross-build support.
 - 0.125u4            : Aaron Giles fixed compiling 125u3 with VS2008 64bit fails.
 - 0.124u1            : Mike Haaland fixed ledutil.c so it compiles cleanly under MSVC.
 - 0.123u3            : Aaron Giles added a rule in vconv.c to make VS2008 compile seamlessly.
 - 0.123u2            : Atari Ace reverted some of the changes to build.mak from u1 which made some MSVC builds fail.
 - 0.122u7            : Atari Ace fixed issues flagged by MSVC warning C4305 (type truncation). Almost all of these are harmless double->float narrowing in initializers, but one warning spotlighted a bug in segasyse.c, where code to use a higher sprite number had no effect due to the insufficient range of UINT8. Atari Ace removed /wd4550 for VS7/VS71 compilers (expression evaluates to a function which is missing an argument list). Fixed some VS7-specific issues (OPTIMIZE=0 at least compiles now).
 - 0.122u5            : Dave Dribin fixed C++ compilation errors. Mariusz Wojcieszek fixed MAME debug build under VC2003.
 - 0.121u2            : MSVC-based builds now automatically get a 'v' prefix unless otherwise specified [Aaron Giles].
 - 0.121u1            : Added osd\windows\eivcx86.h and eivc.h. Nathan Woods split up MSVC inline assembler functions into MSVC specific headers, and removed the assumption that Window's osinline.h would only be used by MSVC.
 - 0.119u4            : NOTE TO OSD PORTERS: The work interfaces have changed again. Please read details below. The updated interfaces remove functionality, so in the end it should be simpler(!) to port. Bill Blake fixed a compile error on architectures where "char" is unsigned (notably some PowerPC configurations). Oliver Stoeneberg fixed the linking issues when specifying MSVC_BUILD=1 and DEBUG=1.
 - 0.119u3            : IMPORTANT NOTE FOR OSD PORTERS: This build requires a pair of new primitives in the OSD synchronization module, as well as some extended functionality in the work item management. See below for details.
 - 0.113u2            : NOTE TO OSD PORTERS: Several OSD-related changes are in this build. Many options in the system are now defined by the core and looked up using the options_* functions. This should allow a bunch of code to be removed from most OSD ports. In addition the mame_file_error type has been renamed to file_error, so a little search & replace action is necessary.
 - 0.113u1            : NOTE TO OSD PORTERS: There are some major changes happening in this version. Most importantly, throttling and frameskipping are now part of the core. Please read the whatsnew carefully!
 - 0.112u1            : Worked around compilation error on MSVC that caused "Calendar error" in the Neo Geo games [Atari Ace].
 - 0.111u3            : OSD porters take note of the changes to the OSD core routines.
 - 0.110u5            : Nathan Woods updated vconv.c to support preprocessor and assembly file output in MSVC builds.
 - 0.109u2            : IMPORTANT NOTE TO OSD DEVELOPERS: As of this release, you are now required to make use of options.c to set core options. At a minimum, this requires calling options_init(NULL) before calling run_game(). Aaron Giles added PATH_SEPARATOR define so that platforms with non forward-slash path separators can get preassembled paths in their native format.
 - 0.109u1            : IMPORTANT NOTE TO OSD DEVELOPERS: The file I/O interface has changed significantly. It is now much simpler. Please read osdepend.h for full details on how the new OSD-defined functions work. In addition, you must now use the options.c to specify your search paths. If you are parsing standard command line options and INI files, this work is relatively straightforward. Otherwise, you can manually call options_set_string() for each of the search paths to configure them from whatever options store you are using.
 - 0.106u6            : Minor fix for x64 compilation support with MSVC [Malice].
 - 0.106u3            : Tweaks to the MSVC compiler support [AtariAce]: Removed _MSC_VER specific #pragmas in nec.c. Removed _MSC_VER specific #include <malloc.h> in winprefix.h. Changed makefile to bootstrap vconv.exe with cl instead of GCC. Changed calls to lib to use link /lib instead. Updated vconv to only use /arch:SSE2 for VC71 and later. Cleaned up the profiler code in winmain.c. Removed the direct dependency of MAME on shell32 has been. Tweaked a couple of preprocessor definitions so we compile as far back as MSVC 5.0.
 - 0.106u1            : Improved MSVC compiler support [Nathan Woods]: Modified vconv to support multiple versions of MSVC based on version info. Added support for more parameter translations. Makefile now displays compiling and linking messages when building vconv.
 - 0.106              : Aaron Giles fixed vconv.exe so it doesn't use options that have been deprecated in MSVC 2005.
 - 0.105u5            : Added src\windows\vconv.c. Aaron Giles added experimental support for building using Visual C++ 2003/2005. To do this, you still need the MinGW environment (ironically) because we rely on the MinGW make system to call out to the MSVC compilers. Set the variable MSVC_BUILD=1 on the command line or by modifying windows.mak, and it will build using the Microsoft compilers. This works through the use of a stub program vconv.exe which translates GCC options into MSVC options. As a bootstrapping measure, vconv.exe is compiled at the start of a clean build by MinGW. Most of the standard build options just work (SYMBOLS, MAP, DEBUG, etc). If you have a beefy computer, you can also set MAXOPT=1 and use link-time code generation for maximum optimization effect.
 - 0.105              : IMPORTANT CHANGES FOR OSD DEVELOPERS: There have been several changes this cycle that impact you. Please scan this file in detail for the details.
 - 0.104u8            : IMPORTANT CHANGE FOR OSD DEVELOPERS [Aaron Giles]: osd_logerror is no longer used. Rather, for error logging you provide a handle to a mame_file in the options.logfile field. If you leave this set to NULL, no logging will be done.
 - 0.104u5            : IMPORTANT CHANGE FOR OSD DEVELOPERS [Aaron Giles]: A new function osd_create_directory is now required in order to create memcard subdirectories. This function was previously defined only for the MESS core, so if there is a MESS port already available, you can just import that function.
 - 0.104u4            : IMPORTANT CHANGE FOR OSD DEVELOPERS [Aaron Giles]: 1. osd_pause is no longer called directly. Rather, your osd_init function should register the osd_pause callback (if necessary) using add_pause_callback. 2. osd_die is now handled by the core; you should remove this function from the OSD layer. 3. logerror is front-ended in the core; it calls to a new OSD function osd_logerror which handles the OS-specific file and/or debugger logging.
 - 0.104u3            : IMPORTANT CHANGE FOR OSD DEVELOPERS [Aaron Giles]: osd_exit is no longer called directly. Rather, your osd_init function should register the osd_exit callback (if necessary) using add_exit_callback. Also, several global variables have been moved into the Machine structure: mame_debug -> Machine->debug_mode, playback -> Machine->playback_file and record -> Machine->record_file.
 - 0.104u1            : Lawrence Gold fixed new makefiles to be more friendly to non-x86 builds.
 - 0.102u3            : Giuseppe Gorgoglione fixed a couple of minor compatibility exposed by VC2005.
 - 0.102u2            : Oshah fixed several uninitialized variables, incorrect string compares and inconsistent variable declarations found by the VC compiler.
 - 0.102u1            : Nathan Woods fixed compilation issue for MSVC when using the winalloc code.
 - 0.95u1             : Patches to fix compile errors with VC [Bryan McPhail].
 - 0.92               : Misc compiler fixes for VC [Bryan McPhail].
 - 0.90               : Kenneth Miller fixed namco54 sound driver compiling in VisualC++.
 - 0.89u2             : VC compiler fix [Rene Single].
 - 0.87u1             : Compiler fixes for VC [Bryan McPhail]. C99 fix in drivers\suprgolf.c. Fixed warnings under VC in cpu\m37710\m37710op.h, cpu\powerpc\ppc.c and cpu\powerpc\ppc403.c.
 - 0.82               : Small VC compile fixes [Bryan McPhail].
 - 0.81               : Lawrence Gold fixed a couple of compile warnings for other compilers.
 - 0.80u1             : C89 compiler fixes [Lawrence Gold].
 - 28th January   2004: smf fixed compiling the Dynax driver in VCMAME and memory.c in DJGPP.
 - 27th January   2004: smf fixed a compiling problem in VCMAME.
 - 0.78u2             : The cpuintrf[] array is now populated dynamically by the cpuintrf_init() function. This means that if you have informational code or other code that relies on the CPU information being present (i.e., if you call any of the cputype_* functions) before calling run_game(), you must manually call cpuintrf_init() first. Don't worry, it is safe to call cpuintrf_init() multiple times [Aaron Giles].
 - 0.75               : Nathan Woods moved some variable declarations out of for loops so that it can compile in non-GCC compilers.
 - 17th September 2003: Bryan McPhail sent in some fixes to make MAME compile with pre-C99 compilers.
 - 0.70u1             : Tiny changes to enable easy compiling under VC6/7 & older non-c99 compilers [Bryan McPhail].
 - 16th May       2003: Bryan McPhail sent in some fixes to compiling errors on non-C99 compilers.
 - 10th March     2003: Mike Haaland fixed a small compiling problem on VC.
 - 20th February  2003: Mike Haaland fixed some compile problems on Visual C.
 - 17th February  2002: Bryan McPhail fixed it to compile with Visual C as well.
 - 18th January   2002: Stefan Jokisch did a tiny clean-up on the ASM 68k core to make it compile with Visual C.
 - 17th January   2002: Bryan McPhail fixed some of the Win32 port files to make them compile with Visual C.
 - 20th October   2001: Stefan Jokisch fixed several compilation errors which occurred in Visual C, and sent a project file to use with it.
 - 0.53               : IMPORTANT CHANGE FOR PORTERS: the OS dependant code is now required to guarantee, in 16-bit palettized mode, that Machine->pens[i] == i. The "pens" argument to osd_allocate_colors() will be NULL, actually it has been renamed "rgb_components" since direct RGB modes are the only ones that will pass that argument.
 - 0.31               : VERY IMPORTANT NOTE FOR PORTERS: now the function osd_new_bitmap() must allocate also a "safety area" 8 pixels wide all around the bitmap. This is required because, for performance reasons, some graphic routines don't clip at boundaries of the bitmap.



 3.2  DEBUGGER/DISASSEMBLER

 - 0.285              : Allow "0" to be specified as a parameter for numeric options (tools\unidasm.cpp) [AJR]. Use "classic" locale for debug console (emu\debug\*) [Vas Crabb].
 - 0.282              : Fixed parsing of unary ! operator in debug expressions (debug\express.cpp) [AJR]. Added support for generating PDB symbols with MinGW Clang and LLD. Also don't disable sibling/tail call optimisation when symbols are enabled. This is hurting our release builds since they're built with symbols. Note: Set PDB_SYMBOLS to 1 to generate CodeView format symbols in separate PDB files, allowing source-level debugging using Microsoft Visual Studio or WinDbg. It can also be used with other tools that can load symbols from PDB files, e.g. the Intel VTune and AMD Prof performance analysis tools. This option is only supported for MinGW builds using the clang compiler and the LLVM linker (lld). This option only takes effect if the **SYMBOLS** option is set to a non-zero value (makefile, scripts\genie.lua, src\main.lua and scripts\toolchain.lua) [Vas Crabb]. Fill q.value was not working (debug\debugcmd.cpp) [O. Galibert].
 - 0.281              : Extended memory commands for region and space (emu\debug\*) [holub]. Reduced unnecessary duplication (debug\express.cpp). Don't persist fallback expressions (debug\debugvw.cpp) [Vas Crabb].
 - 0.280              : Don't repeatedly get the focussed window in a loop (debugger\win\debugwininfo.cpp). Made the code for symlist marginally less dreadful (debug\debugcmd.cpp) [Vas Crabb].
 - 0.279              : Requiring every debugger window class to care about the console window's views is bad design. That's a clear case of unnecessary coupling (debugger\win\*) [Vas Crabb]. Used DCA_SELECTED color friendly for Light/Dark theme (qt\debuggerview.cpp) [holub]. Do not drop into debugger when no MAME window has focus. On Windows, the debugger has a special Windows-specific feature that drops the user into the debugger if the key sequence is pressed. This seems to be present so that the key sequence triggers dropping into the debugger not just from the main window, but also from debugger windows. This has also created an oddity where pressing the debugger key sequence from a MAME window will cause a "User-initiated break" but pressing it from a debugger window will cause "Internal breakpoint" to be displayed. However, while this logic has a check to not apply when to a MAME window, it seems to also activate even if MAME itself is not in focus. This change ensures that a stray debugger sequence in a completely unrelated application won't cause the user to be dropped in the debugger (debugger\debugwin.cpp and win\debugwininfo.cpp) [Nathan Woods]. Have print command insert spaces between numbers (debug\debugcmd.cpp) [AJR]. Fixed symlist default CPU: When executed with no parameters, symlist was displaying the symbol tables for the first CPU and the debugger built-in globals. Defaulting to the first CPU like that didn't make sense. It now displays the symbol tables for the VISIBLE cpu and the debugger built-in globals (debug\debugcmd.cpp) [dave-br].
 - 0.278              : Added fallback to "0" if address evaluation fails ([win] debugger crash). Memory window address field: If address string evaluation fails, we'd fall back to the last-known-working string. This works great if the failure is due to the user changing the string. But if the user changes the source, that also can cause failures (different symbol table used for evaluation), and this fallback does not help. The fix is to add a second fallback: Use "0" as the address string when all else fails (debug\debugvw.cpp). Debugger cleanup: Use enums for m_views indices. For the wininfos that participate as individual panes in the main console window, their viewinfos are referenced via the m_views[] array with hard-coded indices of 0, 1, and 2. Define & use enums for those indices (VIEW_IDX_DISASM, VIEW_IDX_STATE, VIEW_IDX_CONSOLE). Changed MAX_VIEWS from a hard-coded constant of 4 to the last enum in that list, which changes it to 3 (I don't think it should have been 4 in the first place). Wininfos that NEVER appear as panes in the main console window (e.g., logwin_info, pointswin_info, etc.) continue to use m_views[0]. Symlist usability + symbol table extensibility. Address issue #6655 (symlist command usability), added a bit of plumbing for future extensibility. symlist with no arguments displays all global *and* :maincpu symbols, with clear header text for each list. At the bottom, prints helper text to make user aware of the cpu form. To allow for adding new kinds of symbols in the future, this adds an enum field to symbol table for its 'type', for prettier printing from symlist. Symlist now traverses symbol table chain completely [dave-br]. Debug view scroll workarounds for Cocoa debugger. Workaround to fix bottom scrolling and scrollbars the first time the debug window overflows (osx\debugview.mm) [Antonio Malara]. Style over system colors. QPalette:Accent doesn't exist in Qt5 (qt\debuggerview.cpp) [Angelo Salese]. No need to try to convert string_view to const char* and fixed possible nullptr access (debug\debugcmd.cpp) [hap].
 - 0.277              : Added debug\dvepoints.cpp/h, debugger\osx\exceptionpointsview.h and debugger\osx\exceptionpointsview.mm. Fixed Qt6 deprecation warning (see GitHub #13207) (debugger\qt\debuggerview.cpp). Added an option to show exceptionpoints in breakpoints windows (debug\dvepoints.cpp and debugger\osx\exceptionpointsview.h/mm) [Vas Crabb]. No need to check debug enabled flag manually (devices\cpu\*). Correct trace file append. Changed out+app to in+out+ate (debug\debugcmd.cpp) [hap]. Fixed obsolete callback and simplify modifier key reading (debugger\debugimgui.cpp) [AJR].
 - 0.276              : Added option to disable window grouping. Option is in debugger console window Settings menu. Changes apply on hard reset or restarting MAME. Setting is saved to default.cfg (debugger\win\*). Changed "Exception Points" to "Exceptionpoints" in the debugger documentation and help. This better matches "Watchpoints" and "Registerpoints". Also, it's very confusing that you see the help topic listing showing "Exception Points" but typing "help Exception Points" doesn't actually work (debugger\exceptionpoint.rst) [Vas Crabb].
 - 0.275              : Added support for multiple features in the gdb stub and added support for PlayStation CPUs (debugger\debuggdbstub.cpp) [smf]. Fixed order of operands in disassembly of MAC.L (sh\sh_dasm.cpp) [Vas Crabb].
 - 0.271              : Clean up #includes a bit (emu\debug and osd\modules\debugger\qt) [AJR].
 - 0.269              : Don't sleep waiting for events on debugger update (debugger\debugqt.cpp) [Vas Crabb]. Added -debugger_host option. This allows setting the host to 0.0.0.0 to accept connections from outside of localhost. Command line options need to be documented. Don't assume C strings returned as option values remain valid indefinitely. Fixed wording for option description (debugger\debuggdbstub.cpp and lib\osdobj_common.cpp) [Ramiro Polla, Vas Crabb]. Fixed bad display if view is scrolled horizontally (debug\dvdisasm.cpp). Don't restrict maximum window sizes (debugger\win\debugwininfo.cpp) [dave-br].
 - 0.268              : Fixed crash on hard reset (debugger\qt\mainwindow.cpp and windowqt.cpp) [Vas Crabb].
 - 0.267              : Fixed tracesym command outputs NULL strings in case of single symbol (debug\debugcmd.cpp) [Patrick Mackinlay].
 - 0.265              : Don't write data to socket in text mode (debugger\debuggdbstub.cpp). Fixed a class memory access warning (tools\regrep.cpp) [Vas Crabb]. Fixed bad iterator comparison in postfix conversion. One iterator was being compared with another from the wrong container. I observed this by chance when I hit an assert in a debug MSVC build with checked iterators enabled. This bug could cause dereferencing of a past-the-end iterator in expressions ending with an operator (debug\express.cpp) [Invertego]. Added C compiler flags for Wayland EGL backend to BGFX build options (scripts\src\3rdparty.lua) [Julian Sikorski].
 - 0.264              : Fixed checksum on Windows and m68000 register names (debugger\debuggdbstub.cpp) [BartmanAbyss]. Added support for lowercase hex to printf/logerror. Also simplified implementation by better leveraging util\strformat.h (debug\debugcmd.cpp). Added NUL-terminated string argument support to printf/logerror. Use %s to read NUL-terminated strings from emulated memory. Precision sets maximum length. Also added left-justification option for numeric and string formats. Made documentation more consistent and removed duplication (debug\debugcmd.cpp) [Patrick Mackinlay, Vas Crabb].
 - 0.263              : Fixed lockup and debug assert (debugger\debugimgui.cpp) [Barry Rodewald].
 - 0.262              : Allow -count to be specified in hexadecimal or octal (tools\unidasm.cpp) [Invertego]. Added aliases for some MOS 6502-compatible CPUs. Allows m6507, m6510, m65c02, m65ce02 and w65c02s to be debugged with GDB stub (debugger\debuggdbstub.cpp) [John Byrd].
 - 0.257              : Allow the use of either Qt5 or Qt6 on Linux. Look for MOC in QT_HOME/libexec if not found in QT_HOME/bin. Use the Qt6* libraries if the Qt version is >= 6. Switch the include paths for QAction & QActionGroup for Qt >= 6. Replaced the deprecated + operator for keys with | (osd\modules.lua, debugger\qt\*) [Jindrich Makovicka].
 - 0.256              : Added st9\st9dasm.cpp/h. Added disassemblers for Thomson ST9 and ST9+ architectures (tools\unidasm.cpp) [AJR].
 - 0.255              : Documented gp command [Patrick Mackinlay]. Cleaned up logging across the codebase. Converted various logging patterns to use logmacro.h consistently. Removed redefinitions of LOG_GENERAL. Use LOGMASKED in more places [Ryan Holtz].
 - 0.254              : Apply workaround for debugger history command consuming ridiculous amounts of memory when jumping around large address spaces (debug\debugcmd.cpp). Note flaw in design (debug\debugbuf.cpp). Improvements to debugger 'map' command. Added names of physical and logical spaces now that one space can map to another. Correct usage of address space masks (debug\debugcmd.cpp) [AJR]. Show image mount/create error messages on the console (debugger\win\consolewininfo.cpp) [Vas Crabb].
 - 0.253              : Added cpu\interdata16\dasm16.cpp/h. Fixed debugger exception point hit message (debug\debugcpu.cpp). Added Interdata Series 16 disassembler (tools\unidasm.cpp). Fixed oversight in recent refactoring (uninitialized variable) (debug\dvmemory.cpp) [AJR]. Actually use scope-based profiling helpers. This makes the comment at the top of emu\profiler.h less dishonest and makes it easier to write exception-safe code. Got rid of some do { ... } while (0) loops that only existed so break could be used like a goto (emu\profiler.cpp). Abort if the profile stack overflows rather than throwing an exception. This is a developer feature and if it overflows, the code is broken. Calling a noreturn noexcept function generates less code than throwing an exception, which adds up (emu\profiler.cpp). Disable assertion that profiler isn't enabled/disabled with profile scope active (emu\profiler.cpp) [Vas Crabb].
 - 0.252              : Don't skip a history item in Win32 debugger when initially pressing down (win\editwininfo.cpp). Cascade positions of new debugger windows (debugger\debugwin.cpp and debugger\win\*) [Vas Crabb]. Added GitHub issue template for bug reports (.github\ISSUE_TEMPLATE\bug-report.yml and config.yml) [Firehawke, Vas Crabb]. Don't use paged formats for addresses in disassembler output unless logical address width exceeds page size (debug\debugbuf.cpp). Removed long-obsolete macros (debug\debugcon.h). Use ovectorstream instead of static char array and sprintf (debug\debughlp.cpp) [AJR].
 - 0.251              : Improved session save/restore. Qt: Save expression for memory and disassembly views. Made command history behave more like Cocoa. Added expression history and made behaviour more like Cocoa. Refactored global notifications to use signals. Added missing override qualifiers in Qt debugger. Win32: Increased command/expression history size to 100 items. Cocoa: Save state of device info viewer windows. Hopefully fix undefined names in Cocoa debugger. Qt/Win32/Cocoa: Save command/expression history [Vas Crabb].
 - 0.250              : Moved debugger command parameter validation helpers into debugger_console [AJR].
 - 0.248              : Added debugger\exceptionpoint.rst and xmlconfig.cpp/h. Added exception points as a new class of "points" triggering on specific exception numbers, with a similar set of commands to breakpoints and registerpoints. Removed the per-instruction callback hook from device_debug. Only one driver was using this ((MESS) rmnimbus.cpp), and what it was doing with it could be done more cleanly with exception points. Changed the type of the action string parameter for "points"-creating methods and make some parameters optional for those. Changed trace file logging to use a std::ostream instead of FILE * to take better advantage of strformat. Reallow debugger single-step command to break into subroutines during over/out stepping (debug\debugcpu.cpp). Use swapendian_int* (debugger\debuggdbstub.cpp) [AJR]. Capture big objects by reference in lambdas (tools\unidasm.cpp). Added capability to save/restore window arrangement. Format is mostly compatible with the Cocoa debugger, besides reversed vertical positioning. Made Qt debugger more compatible with configuration format used by Win32 and Cocoa debuggers. Added a crude dark theme for the Win32 debugger. Made a start on weaning the Qt debugger off its weird configuation objects. It can now save more view state with less string comparisons on memory labels, but it can't restore all of it yet. Made closing the Qt debugger console window hide all debugger windows and run the emulated machine (debugger windows will be shown on next user break or breakpoint hit). This matches the behaviour of the Win32 and Cocoa debuggers. Made Qt debugger clean up its windows on exit rather than on subsequent starts. This fixes GitHub #9789. Made Qt debugger less reliant on global variables, and made code to save and load configuration a bit less convoluted. It still needs more refactoring on this front, but it's in slightly better shape now. Made Qt debugger a bit less crashy on invalid configuration. Still plenty of ways to crash it, but every little bit counts. Made Qt debugger do less comparisons on menu item names and object names - it might be possible to localise one day. Moved all the C++ debugger implementations into namespaces. They're using awfully generic class names, so it's about time. Don't try closing windows if debugger console wasn't created (debugger\debugqt.cpp) [Vas Crabb].
 - 0.247              : Changed debugger command handler parameter vector element type from std::string to std::string_view. UniDASM code cleanup. Use ioprocs methods and do a single read for normal input files (i.e. without an additional memcpy). Compute pc_mask without using loop. Correct likely mistake in calculation of rounded_size. Split main function in two (tools\unidasm.cpp) [AJR]. Changed gdbstub to no longer expect a CPU named ':maincpu'. The logic was changed to find the first CPU, without any particular expectation about naming. This should address the trouble getting -debugger gdbstub to work with Sega SG1000/SC3000 as it always segfaulted [Nathan Woods]. Some cleanup (debug\debugcmd.cpp and debugger\debuggdbstub.cpp). Fixed failure to find CPU (debugger\debuggdbstub.cpp) [Vas Crabb]. Implemented thread alive command (debugger\debuggdbstub.cpp) [Sandro Ronco].
 - 0.245              : Impose an arbitrary upper limit on the count parameter of the gni command to prevent denial of service (debug\debugcmd.cpp). Small refactoring. Verify that data written to memory spaces read back as the same values (debug\dvmemory.cpp). Documented gbf, gbt and gni commands (debugger\execution.rst). Prevent debugger commands from being evaluated when they are assignment expressions and only supposed to be validated at the moment (debug\debugcon.cpp) [AJR]. Return proper enumeration value (debugger\qt\deviceswindow.cpp) [Miodrag Milanovic].
 - 0.244              : Added time command to MAME debugger. Returns current machine time. Added debugger time command to docs (docs\source\debugger\general.rst) [Ted Green]. 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) [AJR].
 - 0.243              : Debugger feature improvements: Added 'gbt' and 'gbf' debugger commands to step until a true or false conditional branch has been detected. Updated over 100 of the disassemblers in MAME to output a new STEP_COND flag for all conditional branches. Besides being used for execution of the new 'gbt' and 'gbf' commands, this flag also now helps the debugger 'out' command to properly handle conditional return instructions. Removed STEP_OVER from many instructions that aren't actually subroutine calls (e.g. DJNZ on Z80). A 'gni' debugger command (go next instruction) has been added to accommodate some of the misuse. Added instruction flag support to several more disassemblers that lacked them entirely (e.g. st62xx). Don't pass over delay slots for debugging in ASAP core [AJR]. Removed obsolete debugger.h include from devices\cpu\* files [hap, AJR].
 - 0.242              : Use std::string_view in command parsing and eliminate initial buffer copy (debug\debugcon.cpp). Modernized implementation details of mini_printf (debug\debugcmd.cpp) [AJR]. Fixed some debugger memory view annoyances and cleaned up LUA bindings. Made the debugger memory view not depend on isprint which is affected by the global locale. Assume the OSD will display as ISO-8869-1 and replace problematic printable characters [Vas Crabb]. Fixed an assert in the debug build (cobram3, drivers\gottlieb.cpp) [Robbbert].
 - 0.241              : Exposed debug symbol tables and parsed expressions to LUA (these can be used when the debugger is not active). Also made it simpler to walk input types (frontend\mame\luaengine_debug.cpp and luaengine_input.cpp) [Vas Crabb]. Deleted some unnecessary c_str() calls (debug\debugvw.cpp and debugger\qt\mainwindow.cpp) [AJR].
 - 0.240              : Fixed size prefix in find command (debug\debugcmd.cpp) [smf].
 - 0.238              : Debug memory view improvements: Added options for 1-byte, 2-byte, 4-byte and 8-byte octal data display, which are selected automatically for memory spaces configured as octal. Octal data has also been made editable. Added options for displaying addresses in decimal or octal as alternatives to the typical hexadecimal format. This also affects the address expression box. Prevent the cursor from moving left from the first address or right from the maximum address. Note that the new options have only been hooked up for the Qt debugger. The Windows and OS X debuggers should also be updated to include them [AJR]. Support octal on the Mac native debugger [R. Belmont]. Made GUI debuggers more uniform. Added new memory view features to Win32 debugger. Fixed spelling of hexadecimal in Cocoa debugger and added decimal address option. Fixed duplicate keyboard shortcut in Cocoa debugger (Shift-Cmd-D was both new device window and 64-bit float format). Made keyboard shortcuts slightly more consistent across debuggers [Vas Crabb]. Fixed menus losing focus, added octal display and octal/decimal address select (debugger\debugimgui.cpp) [Barry Rodewald].
 - 0.237              : Added debug\dvrpoints.cpp/h and debugger\osx\registerpointsview.mm/h. Removed debugger\expressions.rst. Removed outdated/unused FD1094_HACK (debug\dvmemory.cpp) [hap]. Extended target address syntax to include device/address space. Added a validity check to ensure address space names are tag-like and unique, since they're now used as identifiers in debugger commands. Extended the syntax for target addresses to allow them to be qualified with a colon followed by an optional device tag and/or address space name. If only the device needs to be specified, a debugger CPU number may also be used. This makes commands like bpset and wpset more flexible, as they can operate on CPUs other than the currently visible CPU. Commands like find, fill, dump and load are more flexible as they can access any space of any device. Removed now-redundant CPU parameters from many commands, and renamed pcatmemp to pcatmem for consistency with other commands. Extended region syntax for saver/loadr to support tags relative to the visible CPU (e.g. you can use "." for the region with the same name as the visible CPU, or "^sibling" syntax). Added an optional root device parameter to memdump. Changed interpretation of Boolean values to support numeric expressions as well as true/false strings and literal 1/0. Added checks that the specified device is CPU-like to various commands that require a CPU (e.g. focus). Previously these commands would crash or trigger an assertion failure if a tag for a non-CPU devices was specified. Fixed the cpunum symbol so it uses the same rules for determining what is or isn't a CPU as parameter parsing. Made device_t sanitise subtags better. Previously you could cause an assertion failure or crash MAME by giving it unexpected relative tags via LUA or the debugger. Added help topic alias support, and reworked the data structures to improve the performance of looking up debugger commands and help topics. Removed the "ref" parameter from debugger command functions (std::bind can hold extra argument values for you if you need them). Also added an error message if duplicate debugger commands are registered. Updated help for commands that changed syntax, and also updated summaries for some commands that had changed in the past without corresponding help updates. Extended the memory access prefixes in debugger expressions to support address space names. Made the debugger history command aware of how much history it has collected, and added a help topic for it to the built-in debugger help. Started updating the documentation for the web site, and correct some of the more misleading built-in debugger help. Allow wplist and bplist to accept a CPU argument to list breakpoints/watchpoints for a single CPU only. Fixed some corner cases in address space syntax in memory accesses, and allowed memory region accesses to use tags relative to the visible CPU. Updated more pages of debugger documentation. Also updated more of the built-in debugger help. Made the mount and unmount commands accept instance names as well as brief instance names. Also updated another page of debugger documentation. Added a register points view to the GUI debuggers, to go with the breakpoints and watchpoints views. Extended [brw]p(clear|(en|dis)able) commands to accept multiple arguments to perform the same action on multiple (break|watch|register)points at once. Also made rplist accept a CPU for showing a single CPU's register points ([bw]plist already support this). Updated registerpoints debugger commands page, and updated other pages for latest extensions to syntax. Updated cheat commands to work with arbitrary devices and address spaces. You can still only search RAM areas in a single address space at a time, but any address space of any device can be used now. Made the cheatinit/cheatrange commands not affect current state if the arguments are invalid. Also fixed some bugs in the cheat commands. Updated documentation for cheat commands, and added a simple worked example. Also added single-sentence descriptions of what (break|watch|register)points are to the top of the relevant pages. Fixes MAME debugger crashes when using 'cheatinit' and giving few parameters. Documented debugger's built-in functions for expressions (docs\source\debugger\index.rst). Octal cheats for octal address spaces. Memory accesses in expressions don't support taking the first exposed space (debug\express.cpp) [Vas Crabb]. Fixed multiple issues with debug memory tracking. Track write accesses rather than read accesses. Actually install the taps when the trackmem command is executed. Correct cell addresses for address-shifted spaces in Qt and Windows memory viewers (debug\debugcpu.cpp and modules\debugger\qt\memorywindow.cpp). Fixed pcatmem command (debug\debugcmd.cpp). Fixed regression in interpreting db@, ib@, ob@ and similar memory access operators (debug\express.cpp) [AJR].
 - 0.236              : Octalize watchpoint hit message for memory spaces defined as octal. Make debugger 'out' command step over return delay slots on SH architectures (debug\debugcpu.cpp and sh\sh_dasm.cpp) [AJR]. nitialised m_readbuf_state on construction (debugger\debuggdbstub.cpp) [Alex Siryi]. Fixed suppressing trailing whitespace in copied text on completely blank lnes (most noticeable for the console view) (debugger\qt\debuggerview.cpp and win\debugviewinfo.cpp) [Vas Crabb].
 - 0.235              : Updated debugimgui to compile with latest imgui [Ryan Holtz]. Debugger-related feature removals and cleanup: Removed the hotspot read tracker. This was never robustly implemented, but changes to the memory system made it much less useful, and the "speedup opportunities" which it aimed to determine are not very important from a current emulation standpoint. Removed the CURSP/GENSP state symbol and the generic sp() getter. Stacking semantics vary too much between CPU architectures for this to be of much use. (A "SP" symbol has been added to a few CPU cores whose stack pointers were otherwise not being registered.). Removed the cached pointer to device_state_interface and the state() fast accessor from device_t. Most users of device_state_interface either already had a pointer to the specific CPU device type or needed to check first for the presence of the interface. Changed the PC memory write tracker to use pcbase(), which works even when the instruction callback is masked out, instead of peeking at the PC history index. Removed some obsolete watchpoint-related definitions from machine.h. Substitute strongly typed enum for magic numbers specifying data format (debug\dvmemory.cpp). Fixed exception in debug memory viewer selecting a floating point format when the number of chunks per row is too small (debug\dvmemory.cpp) [AJR].
 - 0.234              : Fixed mount and create image dialogs (debugger\debugimgui.cpp) [Barry Rodewald]. Fixed building mametest (tests\lib\util\options.cpp) [Miodrag Milanovic].
 - 0.232              : Fixed minor positioning glitches in disassembly view related to changing sources (debug\dvdisasm.cpp). Fixed crashes in Qt debugger caused by trying to select a nonexistent disassembly or memory view (debugger\qt\dasmwindow.cpp and memorywindow.cpp). Added option to use octal instead of hexadecimal for output (tools\unidasm.cpp) [AJR].
 - 0.231              : Added %o format support to debugger printf command (debug\debugcmd.cpp) [AJR].
 - 0.230              : Added 'wpsize' variable to access the data size from a watchpoint [Scott Percival]. Fixed Debugger rewind is not functional (emu\save.cpp) [feos].
 - 0.229              : Fixed parsing for preincrement & predecrement operators. Make debugging function print_tokens usable again (debug\express.cpp). Added context menu with Copy Visible and Paste commands to debug views to win32 debugger (debugger\win\debugviewinfo.cpp). Qt debugger updates: Added context menu with Copy Visible and Paste commands to debug views. Made memory view last PC display a context menu item. Fixed crash on right-clicking a memory view showing something other than an address space (debugger\debugqt.cpp and qt\*). Fixed commas in dumpkbd output. Improved scrolling behaviour in Qt debugger. Fixes disassembly view glitch on bottom line. Improved behaviour of bottom line in Qt and win32 debugger views. Ported memory tracking feature from Qt to win32 module [Vas Crabb]. Fixed build on GCC (tools\unidasm.cpp). Updated state views when memory is modified through the debugger (since registers can be memory-mapped) (debug\debugcpu.cpp). Stop converting debugger console commands to all lowercase before parsing them. Case insensitivity has been preserved for command names, CPU and region tags and certain symbolic parameters (as well as expressions, which were treated as case-insensitive in other contexts), but filenames and character constants are no longer automatically lowercased. Removed some superfluous c_str() calls (debug\debugcmd.cpp and debugcon.cpp). Removed local member referencing debugger_cpu, which is accessed only rarely since the console now tracks the visible CPU (debug\debugcmd.cpp) [AJR]. Added m68000 to debugger\debuggdbstub.cpp [nabetse]. Added CLS command to clear console buffer (debug\debugcmd.cpp) [hap].
 - 0.227              : Added M6809 support for GDB remote debugger (debugger\debuggdbstub.cpp) [Gustavo Del Dago]. Added "n2a03" (6502 CPU clone) to gdbstub for NES, and swapped 6502 PC/SP to SP/PC (debugger\debuggdbstub.cpp) [Lucien Murray-Pitts]. Allow input piped from stdin by specifying a bare hyphen as the filename (tools\unidasm.cpp) [AJR, Vas Crabb]. Added strdump debugger command for dumping memory as ASCII strings. Prevent certain register values from being formatted with invalid characters added in debugger state views (e.g. upd7810) (debug\dvstate.cpp) [AJR]. Documented loadr and saver debugger commands (debug\debughlp.cpp) [Osso].
 - 0.226              : Removed more macros, added more const and make a couple more things use smart pointers (emu\debug\*) [Vas Crabb].
 - 0.225              : 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) [AJR].
 - 0.224              : Added 'fill' command to debugger. Syntax and operation are similar to 'find' command (debug\debugcmd.cpp). Documented rowsize parameter for dump command in debugger help [AJR]. #if DEBUG_VRAM_VIEWER instead #ifdef (video\epic12.cpp) [cam900].
 - 0.223              : Added debugger command saver for memory region and debugger command loadr for memory region (debug\debugcmd.cpp) [Jacob]. Don't leak an open FILE when an argument is invalid and also fixed a spelling error. The saver/loadr commands should consider region endianness for portability (debug\debugcmd.cpp) [Vas Crabb].
 - 0.222              : Added debug\points.cpp/h. Refocus debugger on CPU when one of its watchpoints is hit (debug\debugcpu.cpp). This solution may be less than ideal for some multiprocessing environments where CPUs share spaces, but it prevents the focus from shifting unpredictably to whichever CPU happens to be next in line to execute (e.g. when synchronization for a soundlatch write aborts the original CPU's timeslice). Added PC to debugger exception hit message (debug\debugcpu.cpp). Added optional condition parameter to debugger gex command. Fixed focus command (debug\debugcpu.cpp). Fixed debugger regression with systems such as fi6845/fi8275 where a DMAC or other non-focusable executing device is scheduled first of all (debug\debugcpu.cpp). Debugger expression and memory access overhaul: Memory references in expressions no longer default to the console's visible CPU if no device name was specified, except when entered through the console itself. Expressions in view windows now use the context of the currently selected device instead. The pcatmem debug command and similar qt mouseover function now produce an error message if the initial address translation fails. Related internal changes: The debugger_cpu class no longer interprets memory accesses. The existing routines have been moved into symbol_table (which used to invoke them as callbacks), and reimplemented in most other places. Thecode duplication is a bit messy, but could be potentially improved in the future with new utility classes. The cheat engine no longer needs to hook into the debugger_cpu class or instantiate a dummy instance of it. The inclusion of debug\express.h within emu.h has been undone. Some debugging structures now need unique_ptr to wrap the resulting incomplete classes; hopefully the performance impact of this is negligible. Another direct consequence is that the breakpoint, watchpoint and registerpoint classes are no longer inside device_debug and have their own source file. The breakpoint list is now a std::multimap, using the addresses as keys to hopefully expedite lookup. The visible CPU pointer has been removed from the debugger_cpu class, being now considered a property of the console instead. Many minor bits of code have been simplified. Fixed crash when attempting to write to memory from debugger (debug\express.cpp). Eliminated space.device() in watchpoint code (debug\points.cpp). Allow debugger dump command to dump with byte granularity from address spaces with positive shifts [AJR]. Added '-debuglog' option to log debug console output to file. When this option is specified, all console output is echoed to a log file. Some caveats/limitations: The file-open process was copied from -log, so it has the same limits. Filename is hard-coded (debug.log). File is overwritten if it exists. File is opened during emulation initialization. Thus, the file is cleared if you invoke the "Hard Reset" debugger command. Probably some other details I don't know about. Logging works as such: When a string is appended to the scrollback buffer, it is also written to the log file. Some commands forcibly wrap their output (e.g. 'help' to 80 columns). Because this wrapping is done inside the scrollback buffer, the text written to the file is not wrapped. This can be seen with 'help execution'. Added 'condump' command to export console buffer to a log file. This is another debugger enhancement - it allows you to export the current contents of the debug console window to a file. The filename parsing is based on the 'trace' command, and as such, supports both the "{game}" placeholder, and the ">>" prefix for appending instead of overwriting [Stephen Oberholtzer].
 - 0.221              : Fixed some deprecations (debugger\qt\debuggerview.cpp). QT debugger: Added '#define horizontalAdvance width' to QT debugger (debugger\qt\debuggerview.cpp and memorywindow.cpp) [O. Galibert]. Misc fixes for bugs that showed up in DEVNOCLEAR debug builds (cpu\lr35902\lr35902.cpp/h, machine\ds1994.cpp, tc009xlvc.cpp, drivers\megaphx.cpp, machine\inder_sb.cpp and taitosjsec.cpp) [Osso]. Make expressions octal for applicable address spaces in disassembly view. General cleanup (debug\express.cpp, debugcpu.cpp): Changed default base from hardcoded macro to dynamic parameter for parsed_expression. Changed symbol table parameters and variables to references or std::reference_wrapper. Removed the (unused) ability to construct a parsed_expression without a symbol table. Eliminated symbol_table &table and void *memory_param arguments from callbacks (superfluous now that std::function can bind everything necessary). Eliminated globalref pointer from symbol_table. Added explicitly defaulted move constructor and move assignment operator [AJR].
 - 0.220              : Fixed two cases where debugger can crash MAME ("cheatlist" command before "cheatinit", long strings after "help") (debug\debugcmd.cpp and debughlp.cpp) [quasiscroto].
 - 0.218              : Removed the remaining bits of the FASTDEBUG/MAME_DEBUG_FAST introduced in MAME 0.150 (makefile, scripts\genie.lua, emu\emucore.h) [Firewave]. Handle word endianness for address-shifted architectures correctly and safely (tools\unidasm.cpp) [AJR].
 - 0.217              : Added util\corealloc.cpp. Pre-fill things allocated with operator new with 0xcd in debug builds (value can be changed by setting global g_mame_new_prefill_byte with a debugger) - this is gonna hurt performance, but it will help catch issues exposed when we remove pre-clearing before constructing devices [Vas Crabb]. Use std::forward_list instead of custom linked structure and eliminate last use of auto_alloc (debug\debugcon.cpp). Added cpulist command to debugger (debug\debugcmd.cpp). Show opcodes in octal when disassembling code from octal spaces (debug\debugbuf.cpp) [AJR].
 - 0.216              : Get rid of some more simple_list in core debugger code. Made new disassembly windows in Qt debugger default to current CPU. Make debugger view startup more efficient - it's still not going to be practical with 200k save items, but it's better than before [Vas Crabb].
 - 0.215              : Migrate to softfloat3 (debug\dvmemory.cpp) [Patrick Mackinlay].
 - 0.214              : Added -xchbytes option to UNIDASM swap bytes. Use std::forward_list for breakpoint and registerpoint lists. Fixed QT debugger (debugger\qt\mainwindow.cpp). Fixed debugger dump command for address-shifted spaces (debug\debugcmd.cpp) [AJR]. Small cleanup and clarification to debugger\debuggdbstub.cpp. Old GDBs expected the regnum values for some registers to be hardcoded. This is no longer the case with GDB clients that support target.xml. We expect the GDB client to support target.xml (and won't support the 'g', 'G', 'p' and 'P' commands unless it is sent). Added mips (tested with indy_4610) and m68k (tested with macii). Added support for executing MAME debugger commands from the GDB client. It's now possible to send MAME debugger commands, such as "cheatinit", "snap", etc... [Ramiro Polla].
 - 0.213              : Added debugger\debuggdbstub.cpp. Make debug memory view show correct data when chunks are too small for a space's address shift (debug\dvmemory.cpp) [AJR]. Fixed 32bit overflow in some debug commands (debug\debugcmd.cpp) [hap]. Move to the position of the cursor only if the cursor is actually visible. Otherwise it would jump to a seemingly random position in certain cases (debug\dvdisasm.cpp) [yz70s]. Added new GDB stub debugger. This debugger can be used to connect to an external debugger that communicates using the GDB Remote Serial Protocol, such as GDB itself or many other GDB frontends. Currently i386 (ct486), arm7 (gba), m6502 (apple2e) and ppc (pmac6100) and z80 (pacman) are supported. Side-effects must be disabled before reading memory, otherwise apple2e starts failing after the first read to 0xc080. Since GDB doesn't support those processors, I made up the features name with "mame.<cpuname>". I also had to choose the registers to export in the target.xml file, and since I don't have any experience with these processors I don't know if I made the best choice. Enabled GDB stub debugger in mac and windows builds [Ramiro Polla].
 - 0.212              : Fixed calculation of TMS34010/020 shifted memory addresses for debug save and load commands (debug\debugcmd.cpp) [AJR]. Fixed bug in error-log window. New Memory Window would clear the log. Updated debug media menu to latest version (debugger\win\consolewininfo.cpp) [Robbbert].
 - 0.211              : Fixed fatal error when attempting to set watchpoint covering unaligned portions of two adjacent native words (debug\debugcpu.cpp) [AJR].
 - 0.210              : Allow hexadecimal values for -skip with 0x prefix (tools\unidasm.cpp) [AJR].
 - 0.209              : Fixed debugger crashes when accessing memory under certain conditions [hap].
 - 0.208              : Fixed error in determining where clicks are in memory and debugger views (debugger\qt\memorywindow.cpp and debuggerview.cpp) [Golden Child]. Excluded non-CPUs from numerical indexing for debugger commands (debug\debugcmd.cpp). Expose state_find_entry (emu\distate.h and debug\debugcmd.cpp) [AJR].
 - 0.207              : Eliminated qsort usage in debugger (debug\debugcmd.cpp, dvbpoints.cpp/h and dvwpoints.cpp/h) [AJR].
 - 0.206              : Send logerror to stderr if no debugger is attached and -oslog is on (osd\windows\winmain.cpp and winutf8.cpp) [Vas Crabb]. Don't blow up when TMS34010 disassembler tries to read 32-bit operands (tools\unidasm.cpp) [AJR].
 - 0.205              : Prevent watchpoints from being installed multiple times recursively (debug\debugcpu.cpp) [O. Galibert]. Work around Qt crash (debugger\debugqt.cpp) [mizapf, Vas Crabb].
 - 0.204              : Added 'gp' command. gp 'go privilege' starts execution until the privilege mode changes. This can be used to break on task switches. I.e on m68k, one could do: gp { ~sr & 0x2000 && crp_aptr == 0x1234567 }. Which would execute until the privilege mode changes to user mode and the CPU root pointer is 0x1234567. For cpu code, all that is needed to make this work is calling debugger_privilege_hook() when the execution level changes. Added %c to logerror. This is useful for catching putchar() like functions and printing the written value to error.log. On hp9k_3xx, i'm using this with the HP 300 test software, to log test error messages that get printed on screen to error.log, so i have the message directly after the debug messages from my driver. Example: wpset 0xfffe36be,80,w,1,{ logerror "%c", wpdata; g } [Sven Schnelle].
 - 0.203              : Fixed watchpoints for CPUs with a negative address shift (debug\debugcpu.cpp) [Ryan Holtz].
 - 0.202              : Fixed debugger memory view editing for address-shifted spaces [AJR].
 - 0.201              : Use std::deque for token stack (debug\express.cpp). Moved scripting functions down into console (debug\debugcpu.cpp). Mask address expressions in debug disasm view (debug\dvdisasm.cpp). Mask address expressions correctly in debug memory view when using physical addresses beyond logical limits (debug\dvmemory.cpp). Don't apply logical address masks to physical addresses in debug memory accesses (debug\debugcpu.cpp). Fixed scrolling glitch in memory view when address expression is applied (debug\dvmemory.cpp). Apply logical address mask properly in debug disassembly view. Associated core changes: Moved definition of address_space_config from dimemory.cpp to emumem.cpp (declaration was already in emumem.h). Added getters for more members of address_space_config with future privatization in mind [AJR].
 - 0.200              : Removed running_machine::device() call in QT debugger (debugger\qt\deviceinformationwindow.cpp) [AJR]. Fixed some watchpoints (debug\debugcpu.cpp) [O. Galibert].
 - 0.199              : Added command for go_exception. Make save/load support virtual memory. This makes these commands useful and consistent with dump in a virtual memory environment. One minor issue is what to do with save for an unmapped memory address: the approach taken here is to write the space.unmap() value, which seems the least harmful. On load, unmapped addresses are not written to, meaning that save/load with a constant address map work as expected [Patrick Mackinlay].
 - 0.198              : Replaced references to 'decrypted opcodes' with 'opcodes' (debug\debughlp.cpp) [Osso]. Simplified now obsolete and buggy memory access code (debug\debugcpu.cpp) [O. Galibert]. Make debugger dump command work with unaligned addresses (debug\debugcmd.cpp). Fixed error in debug build with SMS card options (emu\emuopts.cpp) [AJR]. Sort save state items in alphabetical order in the debugger memory viewer source list [Curt Coder, Vas Crabb].
 - 0.197              : Documented debugger expression number syntax (debugger\expressions.rst) [Erik Dominikus]. Moved around the debugger hooks to get a small but measurable performance increase. Fixed scheduling session events from debugger (debug\debugcpu.cpp) [Vas Crabb]. Added suspend and resume debugger commands for suspending and resuming scheduled devices (debug\debugcmd.cpp) [Gavin Andrews]. Documented dumpo command (debug\debughlp.cpp) [Osso].
 - 0.196              : Fixed extent of debug view of address-shifted memory spaces (debug\dvmemory.cpp). Fixed output of wplist debug command and find command for address-shifted spaces (debug\debugcmd.cpp) (debug\debugcmd.cpp). Fixed watchpoint view for address-shifted spaces (debug\dvwpoints.cpp). Fixed masking of offset expressions in debug view of address-shifted spaces (debug\dvmemory.cpp) [AJR].
 - 0.195              : Fixed ASCII dump output for big-endian spaces (debug\debugcmd.cpp) [AJR]. Fixed F10 step over of instructions with a branch delay slot [smf].
 - 0.194              : Fixed masking of signed integer types in debug state (emu\distate.h) [AJR]. Added MAME Debugger help documentation [Firehawke]. Removed address-to-byte calls in emu\debug\debugcpu.cpp and mame\luaengine.cpp. This fixed cheats not working in Battletoads and other games [O. Galibert].
 - 0.193              : Added debug\debugbuf.cpp/h and util\disasmintf.cpp/h. Disassemblers are now independant classes. Not only the code is cleaner, but UNIDASM has access to all the CPU cores again. The interface to the disassembly method has changed from byte buffers to objects that give a result to read methods. This also adds support for lfsr and/or paged PCs. Reset m_dasm on source switch (debug\debugvw.h and dvdisasm.cpp/h). Added nicer autoscrolling (debug\dvdisasm.cpp). Fixed memory window (debug\dvmemory.cpp) [O. Galibert]. Fixed building with Visual Studio 2017 & Clang 5.0.0 (also tested with GCC 7.2.0). Removed stutter in dump command ASCII bytes (debug\debugcmd.cpp) [smf]. Fixed watchpoint hit message for address-shifted processors (debug\debugcpu.cpp). Changed back to uppercase hex for util::stream_format (debug\debugbuf.cpp). Set REG_BEAMX/BEAMY/FRAME to 0 on invalid eg. screenless (debug\dvstate.cpp) [AJR].
 - 0.190              : Added support for C++ output streams using LOG_OUTPUT_STREAM instead of using printf as LOG_OUTPUT_FUNC (emu\logmacro.h) [Vas Crabb].
 - 0.189              : Added debugger\win\logviewinfo.cpp/h. In the windows debugger log window added a Log/Clear menu to removed all logged messages [yz70s].
 - 0.188              : Simplify by decoupling information creation and display rendering (debug\dvdisasm.cpp). Eliminated direct() from read_opcode (debug\debugcpu.cpp) [O. Galibert]. Reverted debugger F8 behaviour, to run until next start of vblank, by re-adding a check that was removed in MAME 0.175. Don't assume a watch point exists for the address space passed to watchpoint_update_flags(), which fixes the hotspot command. Stop hotspot from crashing when you start running (debug\debugcpu.cpp) [smf]. Made the length parameter for debugger 'load' command optional (defaults to lenth of file), converted code from stdio to iostream [Nathan Woods]. In class consolewin_info method set_cpu does nothing if the cpu to be set is the current one. This solves a problem in the windows debugger where the registers view would always return to the topafter being scrolled down (debugger\win\consolewininfo.cpp) [yz70s].
 - 0.187              : Added ability to load software-list items. Mount File/Create default to swpath instead of randomness (win\consolewininfo.cpp). Removed "Mount Item" for now due to bugs, also removed internal media slots from images menu (win\consolewininfo.cpp) [Robbbert]. Changed 'enum read_or_write' to be 'enum class' (debug\debugcmd.cpp, emu\emumem.cpp and machine\fddebug.cpp). Changed a few 'const char *' ==> 'const std::string &' in the MAME debugger. Fixed an issue that could cause the debugger 'source' command to falsely display I/O error [Nathan Woods]. Don't try to read past the end of a memory space in debug view [AJR]. Changed the profiler to use std::ostringstream as the text sink (instead of std::string) (emu\profiler.cpp) [Nathan Woods].
 - 0.186              : Fixed a crash in the 'symlist' debugger command (debug\debugcmd.cpp) [Nathan Woods]. Scoped enum for Windows (debugger\debugwin.cpp; MACHINE_PHASE_RUNNING -> machine_phase::RUNNING) [Vas Crabb]. m_owner->tag() -> owner()->tag() cleanup in machine\68561mpcc.cpp, scnxx562.cpp, z80dart.cpp, z80scc.cpp and z80sio.cpp [AJR].
 - 0.185              : More robust memory access operator parsing (debug\express.cpp) [O. Galibert]. 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 [Pugsy]. 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) [Happy].
 - 0.184              : Refactor debugger_access. Added missing disable_side_effect in find_pc_backwards (debug\dvdisasm.cpp) [O. Galibert]. Fixed debug build by removing vestiges of -dummywrite (emu\video.cpp) [AJR]. C++-ification of debugger code (misc std::string/std::vector adoption mainly) [Nathan Woods]. Fixed debug commands in drivers and devices [AJR]. Print octal addresses in the trace if CPU is octal (debug\debugcpu.cpp) [Sergey Svishchev].
 - 0.183              : Make debugger fall back from binary to default base on 0b prefix. This makes expressions like 0B12 parse as hex in hex memory spaces. Where there's ambiguity (e.g 0B01) binary takes precedence [Vas Crabb].
 - 0.182              : Parse octal expressions (prefixed by '0') (debug\express.cpp) [Sergey Svishchev]. Use 0o for octal prefix, added support for binary with 0b a la C++ and uppercase radix speifier (debug\express.cpp). Added logmacro.h inspired by Edstrom's log macros (emu\logmacro.h) [Vas Crabb]. Added a facility to allow logerror output to reside in traces. As a consequence, the debugger 'trace' command was changed so that the third parameter is a list of '|' delimited options. Created a new debugger command 'tracesym'. 'tracesym' is intended to be a shorthand of 'tracelog', whereby the user doesn't have to specify a format string; the default format string is used [Nathan Woods].
 - 0.181              : Added 'o' variants to memory debugging commands to request decrypted opcodes space [AJR]. Lighten combo box list so that it's easier to read (debugger\debugimgui.cpp). Sort directory entries in mount dialog, as zippath_readdir() does not guarantee entries are in any particular order (debugger\debugimgui.cpp) [Barry Rodewald]. Fixed uninitialised memory read as debugger command history and clean up a little [Vas Crabb].
 - 0.180              : Changed all disassemblers to use output stream rather than character buffer. Changed disassembler overrides to use 'std::ostream &' internally. Changed disassembler infrastructure to not use char buffers internally. Eliminated 'device_disasm_interface::disassemble(std::string &buffer, ...'. Moving disasm.clear()/disasm.seekp(0) out of if statement, so the stream is always reset. Refactored device_disasm_interface::disassemble() and dasm_override_delegate to take string buffers as std::string [Nathan Woods]. Moved device_memory_interface from driver_device to dummy_space_device. Exposed the dummy_space_device as machine().dummy_space(), with a trampoline in driver_device for existing callers. Debugger no longer needs to special case root_device() to avoid showing the dummy address space. Replaced machine().driver_data()->generic_space() with machine().dummy_space(). Removed some driver_data<> calls [smf]. Fixed debugcon not checking for "do " prefix case-insensitively [Vas Crabb].
 - 0.179              : Fixed disassembly if 6809 is interrupted mid-instruction (debug\debugcpu.cpp and dvdisasm.cpp). Make sure all CPU's export STATE_GENPCBASE and use safe_pcbase() for everything in the debugger, which allows interruptible CPU's to work properly. Changed CPU cores pcbase handling to be consistent with the majority of CPU cores, now that the debugger relies on it [smf]. Added row size as sixth parameter to debug dump command (debug\debugcmd.cpp) [AJR].
 - 0.178              : Fixed trace command access a parameter beyond the list supplied, added an error message if you provide an invalid boolean, allow boolean to be case-insensitive and skip empty strings when parsing booleans. Initial work towards debug command hookups for Sega Saturn. Usage: saturn <command_name> inside debugger console. saturn help for a list of currently available commands [smf]. Allow STRIP_SYMBOLS=1 and DEBUG=1 to be applied simultaneously [Tafoid].
 - 0.177              : Adding an assert() to util\hash.cpp. The 'trace' and 'traceover' commands were registered as having three arguments. This fixes it so there are four arguments (debug\debugcmd.cpp) [Nathan Woods]. Added images menu, with crude file select dialog and very crude create image dialog (debugger\debugimgui.cpp) [Barry Rodewald]. Fixed -debug -cheat crash (mame\cheat.cpp) [MooglyGuy].
 - 0.176              : Move disasm overrides into interface, reducing driver-debugger depend. Prevent nullptr exceptions when devices named in expressions lack memory interface (debug\debugcpu.cpp), this fixed crash when attempting to use -cheat in gunbird2 and s1945iii [AJR]. Added support for 7z and 'Create' option to windebug images menu (debugger\win\consolewininfo.cpp) [Robbbert]. Fixed scroll in debugger state view. Fixed item hilighting in debugger state view when scrolling. Better encapsulate debug_view_state::state_item (debug\dvstate.cpp) [Vas Crabb]. Make loop collation optional for debugger trace and traceover commands [MooglyGuy]. Fixed order of evaluation making imgui debugger not fail on starting without driver selected (debugger\debugimgui.cpp). Fix for debug build (machine\st0016.cpp) [Miodrag Milanovic].
 - 0.175              : Fixed debugger may crash when validating expression with non-existent memory space name (debug\debugcpu.cpp). Fixed keyboard shortcus for disassembly comments pane. Win32 previously recognised Ctrl+N but menu incorrectly showed Ctrl+M. Qt showed Ctrl+C but it was swallowed by text editing and didn't work. Ctrl+N is now shown/used by Win32 and Qt (matches Cmd-N on OS X) [Vas Crabb]. ImGui based debugger: Removed scrollbar from memory windows, and let the view itself control what is displays. Use cursors/pageup/pagedown to control the memory window when the view cursor is visible. Pressing Enter on an empty console input box does a single step. Added auto select-all flag to disassembly and memory expression inputs. Actually map cursor keys so that they can be used in input text widgets. Use ImGui functions to handle view inputs, allows key repeating to work in the debugger views. Fixed exception when un-collapsing a single window. Adjust key repeat rate a bit. Made debugger keys also use ImGui keypress functions. Make new window shortcut keypresses not repeat. Send character inputs to the debugger view with focus, allows editing in memory views. Draw a light rectangle around a view if it has focus, gives a visual cue as which view accepts input. Use IM_COL32 macro. If console window is active, then give console input widget focus. Note that this means that the disassmbly view in the console cannot get focus at all (but separate disasm windows still can). Added history functionality to debugger console, fixed issue with main views being re-allocated when no extra windows have been created. When using history, set the cursor position to the end of the text. Don't add command to history if it's the same as the previous one. Allow debugger console and log window scrollbars to stay at their maximum value if already there [Barry Rodewald]. Added 'comlist comment' and 'commit command' to debugger [Angelo Salese]. Major refactoring of debugger core: Eliminate globals/file statics. Removed lots of stuff from global scope. Use std::function for custom command registration. Eliminate some trampolines. Build fixes from Vas Crabb and balr0g. Fixed -nodebug crash (emu\video.cpp) [Ryan Holtz]. Added tagged_list to unordered_map for debugger. Removed all usages of tagmap (scripts\src\lib.lua, machine\netlist.h, emu\dislot.cpp, emucore.h, ioport.cpp, machine.cpp, frontend\mame\clifront.cpp, util\tagmap.h, tools\chdman.cpp and UNIDASM.cpp) [Miodrag Milanovic]. Suppress 'no matching space' debugger error when disassembling CPUs without decrypted opcodes (debug\debugcmd.cpp). Eliminate some unnecessary pass-through methods from debugcpu [AJR].
 - 0.174              : Removed debugger\debugint.cpp. Only log at start the message about deprecated vblank to avoid spamming logerror debugger window at each frame, which makes debugging quite hard (emu\screen.cpp) [Fabio Priuli]. ImGui based debugger: Moved building of source lists for disasm and memory windows so they are done once when created. Use a getter function for combo boxes. Memory windows are now much faster. Moved view drawing into a single function, few more minor colour fixes. Made a start on rendering just the visible areas of a debugger view. Generally works, but the scrollbar doesn't appear when viewing a 32-bit or larger address space (imgui bug?) [Barry Rodewald]. No deps between osd and frontend, internal debugger removed [Miodrag Milanovic]. Removed dead WM_USER_* events for which handling was causing crashes (windows\window.cpp). This fixed Windows debugger crashes on Win10 64-bit (see MT06217) [Paul Priest].
 - 0.173              : Added diagnostics\diagnostics_module.h, diagnostics_win32.cpp, none.cpp and debugger\debugimgui.cpp. Added DEBUG_DIR and DEBUG_ARGS parameters, make sense right now for VS build (makefile, scripts\genie.lua and main.lua). Make support for absolute paths for debug dir (scripts\src\main.lua). Enabled internal debugger, but this would need to go in time, it is too coupled with UI (debugger\debugint.cpp) [Miodrag Milanovic]. Added ImGui based debugger. Note: Currently only works with the BGFX renderer. Create diagnostic module for profiling and crash diagnostics. Added error log window to debugimgui, and limited the debugger console to display 100 lines, so that rendering it doesn't get too slow . Added sending of mouse clicks to debugger views in debugimgui. Please note that you have to click the view area first to give it focus before you can set the cursor in a disassmbler or memory view. Optimised rendering by drawing text via the window draw list. Added keyboard input for the debug view with focus [Barry Rodewald].
 - 0.172              : Changed field format to show leading zeros for debugger 'dasm' command as well [Happy]. Use stream with contiguous backing store for the disasmview's buffer (debug\dvdisasm.cpp). Added common debugger commands to global menu bar. Also fix occasional crash in Copy Visible. Note that copy visible, paste, toggle breakpoint and view options still require you to use context menus in windows. Debug/Run menus only work when a debugger window has focus, so Break is less useful than it could be [Vas Crabb]. Commented out regression slow error.log on Windows (machine.m_logfile->flush(); emu\machine.cpp) [hap].
 - 0.170              : Update debugcon.h: Increased MAX_COMMAND PARAMS and MAX_COMMAND_LENGTH to quadruple their previous size. The previous values did not have the capacity to allow trace logging of all registers at the same time in some CPUS. Setting the maximum to 128 should allow for capturing of systems with large symbolic lists (such as Playstation) if needed. For example, the following command would throw an error when trace logging a 68000 CPU because the maximum parameters (16) would be reached when attempting to capture all registers: trace 68K.log,0,{tracelog "A0=%08X, A1=%08X, A2=%08X, A3=%08X, A4=%08X, A5=%08X, A6=%08X, A7=%08X, D0=%08X, D1=%08X, D2=%08X, D3=%08X, D4=%08X, D5=%08X, D6=%08X, D7=%08X ",a0,a1,a2,a3,a4,a5,a6,a7,d0,d1,d2,d3,d4,d5,d6,d7} [Con Huevos Guey]. Fixed vertical scrollbar on large windows (such as the program space of an i386). Added various keyboard shortcuts and pass keypresses to the debug view with input focus. Prevent keypresses from passing through to internal debugger windows while the windows are hidden. Fixed input regression in internal debugger window editors (debugger\debugint.cpp). Make internal debugger menu remember its currently selected item, to help make switching CPUs/regions/options easier. Also, set all windows to visible only on initial display [Barry Rodewald]. Removed usage of NO_MEM_TRACKING macro (debugger\qt\*.*). Disable debugging in windows\ledutil.cpp. Simplify emu\debugger.cpp. Created debugger_manager. Fixed bug debugging drivers with ES5510 core, possibly some others that do not have AS_PROGRAM at all (debug\dvdisasm.cpp) [Miodrag Milanovic].
 - 0.169              : "byte per chunk" is substituted by "data format", data formats lesser than 9 work as before, data format 9 is 32 but floating point in the debug_view_memory class method bytes_per_chunk is substituted by get_data_format, set_bytes_per_chunk is substituted by set_data_format floating point values cannot be edited currently floating point values are available only in the windows debugger. Next commit will add them to the qt debugger, osx i won't be able to do it afterwards 64 and 80 bit formats will be added. Show 32 bit floating point values in QT debugger memory view (issue #476). Added 8 byte chunks. Show 64 and 80 bit floats in windows and QT debugger (issue #476). Show more digits in fp values (issue #476) [yz70s]. Support float view in OS X debugger (debugger\osx\memoryview.mm) [R. Belmont]. Make closed windows actually disappear, and add a Run and Hide Debugger option. Also spaced out initial windows, so that they aren't on top of each other to start with. Make internal debugger windows just a bit more pleasing to the eye. Added memory window to internal debugger. Internal debugger now honours the -debugger_font and -debugger_font_size options. Base the size of internal debugger window title bars on the font size. Made internal debugger window editors appear over the window to which it is related (makes it a little bit clearer). Stop internal debugger window title and editors from drawing text outside the bounds of the window. Make new internal debugger windows appear in a cascade-like position, and give some windows better default sizes. Change render_target::debug_top() to put targets at the end of the target list, fixing the order in which windows are rendered (nothing else uses this function). Stop internal debugger windows from drawing space characters, speeds rendering up quite a bit [Barry Rodewald]. qtdebugger as separate lib. Fixed QT5 build on linux by adding -fPIC and Windows [Miodrag Milanovic]. Qt5 debugger port [O. Galibert].
 - 0.168              : Making logerror part of machine and device classes. Display tag of device that logged message. Fixed linking UNIDASM in small builds (scripts\src\tools.lua, cpu\tms9900\9900dasm.c and tools\unidasm.c). Made 32 bit MinGW-Clang build working (util\delegate.c). Moved regtests out of source tree and updated paths [Miodrag Milanovic]. Get rid of one this == NULL comparison, reduces warnings by 10% with Clang 3.6 (emu\devcb.c, ioport.h and mame\drivers\*) [Vas Crabb].
 - 0.167              : Give message if debugger comments are not saved (debug\debugcmd.c and debugcpu.c) [yz70s]. Do not create dasm.lib if no disassembler compiled (devices.lua and main.lua) [Miodrag Milanovic].
 - 0.165              : Destroy window before destroying view. Destroying the focus window triggers a killfocus event. For cursor-supporting windows, this accesses the just-deleted view data, and then crashes [Peter Ferrie].
 - 0.162              : No optimization for DEBUG builds PROFILE otherwise symbols are not right (makefile) [Miodrag Milanovic]. Correctly Cocoa size controls for user font selection [Vas Crabb].
 - 0.161              : Removed util\simple_set.h. Added two more options to the build system: USE_QT: Compile the QT Debugger. Default is USE_QT=1 (except macosx) and USE_QT=0 to disable. LDOPTS: Optional LDFLAGs. These are mainly used for cross compilation. The following will compile a windows SDL build without QT debugger on Linux: make TARGETOS=windows PTR64=1 OSD=sdl OS=linux OVERRIDE_CC="@x86_64-w64-mingw32-gcc" OVERRIDE_CXX="@x86_64-w64-mingw32-g++" OVERRIDE_LD="x86_64-w64-mingw32-g++" WINDRES="x86_64-w64-mingw32-windres" USE_QT=0 ARCHOPTS="-idirafter ${MINGW64DIR}/x86_64-w64-mingw32/include/ -I${MINGW64DIR}/Qt/include/ -v" SUBTARGET=tiny MINGW64=/usr LDOPTS="-L/mnt/mfhome/andre/mame/w64crosslibs" [Couriersud]. Fixed Cocoa debugger leaks with SDL2. Added debugger font choice with Qt debugger. Added -debugger_font and -debugger_font_size in Cocoa debugger. Replaced simple_set with std::set (debug\debugcpu.c) [Vas Crabb]. Added QT_HOME to support custom QT installations [Miodrag Milanovic].
 - 0.160              : Fixed assert on opening empty watchpoints/breakpoints windows [Vas Crabb]. Fixed building QT debugger on Windows [Carl]. For raw opcode view, don't crop under minbytes (debug\dvdisasm.c) [hap]. Avoid race condition where debugger window update request is made before debugger is initialised (debugger\debugwin.c) [Peter Ferrie]. Added command-line option -[no]dummywrite DEBUG (#ifdef MAME_DEBUG) to create snaphots of each frame without writing them to a file. This is a dummy implementation of -aviwrite/-mngwrite and is used in testruns to detect e.g. palette issues. The dummy implementation greatly speed up testrun since it avoids the snapshot to file format conversions as well as the I/O operations [Oliver Stoeneberg].
 - 0.159              : Removed debugger\debugosx.h. Added osd\modules\debugger\osx\breakpointsview.h/m, consoleview.h/m, debugcommandhistory.h/m, debugconsole.h/m, debugosx.h, debugview.h/m, debugwindowhandler.h/m, deviceinfoviewer.h/m, devicesviewer.h/m, disassemblyview.h/m, disassemblyviewer.h/m, errorlogview.h/m, errorlogviewer.h/m, memoryview.h/m, memoryviewer.h/m, pointsviewer.h/m, registersview.h/m and watchpointsview.h/m, osd\modules\debugger\win\consolewininfo.c/h, debugbaseinfo.c/h, debugviewinfo.c/h, debugwin.h, debugwininfo.c/h, disasmbasewininfo.c, disasmviewinfo.c/h, disasmwininfo.c/h, editwininfo.c/h, logwininfo.c/h, memoryviewinfo.c/h, memorywininfo.c/h, pointswininfo.c/h and uimetrics.c. Renamed osd\modules\debugger\qt\debugqtbreakpointswindow.c/h to breakpointswindow.c/h, debugqtdasmwindow.c/h to dasmwindow.c/h, debugqtview.c/h to debuggerview.c/h, debugqtdeviceinformationwindow.c/h to deviceinformationwindow.c/h, debugqtdeviceswindow.c/h to deviceswindow.c/h, debugqtlogwindow.c/h to logwindow.c/h, debugqtmainwindow.c/h to mainwindow.c/h, debugqtmemorywindow.c/h to memorywindow.c/h and debugqtwindow.c/h to windowqt.c/h. Break up the MacOS X Cocoa debugger by class, it was ugly crammed into a single file. Far better handling of font metrics in Cocoa debugger, and more efficient drawing. More Cocoa intuitive command/expression history. Check which control sends event in Cocoa. Use newer interfaces in Cocoa. More functionality in Cocoa, including (break|watch) points view. Make QT debugger file names match class names without redundant prefix. Cocoa: Map visited to a background colour + Allocate colours once only + Make disassembly view context menu easier to use again + Console feedback for breakpoint changes. Update views for breakpoint changes + Map Option-/Command-click to middle/right click + Disassembly/memory views inherit focus from parent window. Allow run-to-cursor and breakpoint set/clear/enable/disable for inactive CPUs. Added devices window to cocoa debugger. Try not to crash on hard reset in Cocoa. Intuitive Cocoa mouse dragging on views supporting selection, improved click-through behaviour. Allow breakpoint toggle and run-to-cursor on non-current CPUs in Qt debugger. Moved Cocoa breakpoint control code out of view class - it doesn't really belong there. Added Cocoa preliminary device detail windows. Make Cocoa resizing the device info windows work nicely. Better autosizing for windows. Allow Cocoa copying visible portion of debug view to OS clipboard. Allow paste from OS clipboard to debugger windows (use context menu). Disabled Cocoa decrease bytes per line menu items when only one chunk per line is displayed. Fixed debugger crash when setting bytes per chunk to more than current bytes per line (debug\dvmemory.c). Port Windows debugger to C++, fixed some memory leaks, make menus and window resize a bit nicer. Make the (watch|break)points notify correctly in response to clicks. (Break|Watch)points window for Windows debugger. Added enable/disable breakpoint from disasm window menus. Make behaviour of breakpoint control a bit more consistent with other debugger implementations. Qt debugger dynamically updates menu items controlling disassembly views. Use uppercase ID in break/watchpoints windows to match how it's printed on the console; notify disassembly views on changing breakpoints to prevent Qt debugger menus becoming stale. Suppress Cocoa trailing whitespace on copy, draw background to edge and more efficient drawing (osx\debugview.m). Make opening a break/watchpoints window work better if there are already ten or more of them. More Cocoa intelligible auto window position code. Added a whole line scroll mode to make Cocoa breakpoints/watchpoints header work nicely. Many fixes for breakpoints/watchpoints views: Fixed sorting - qsort needs a ternary -1/0/1 comparator. Get rid of the redundant enums - using a funciton pointer is far more concise. Reduced number of allocations and use less expensive functions when updating. Fixed off-by-one error that could cause a crash when clicking the views. Get rid of double iteration [Vas Crabb].
 - 0.158              : Added modules\debugger\debug_module.h. Removed modules\debugger\debugint.h, debugqt.h, debugwin.h and none.h. Renamed osd_debugger_interface to debug_module in a first step to move to new module infrastructure. Converted modules\debugger\* to new module infrastructure [Couriersud].
 - 0.157              : Added debugger\qt\debugqtdeviceswindow.c/h and debugqtdeviceinformationwindow.c/h. Fixed debugger memory display of little-endian memory regions (debug\dvmemory.c and emu\emucore.h) [Alex Jackson]. Fixed debug build (missing $(OBJ)/lib/util/tagmap.o) [Osso]. Fixed the GUI for smaller fonts. Using a font pointsize different from 11pt has a consequence that fontWidth (in pixels) is not an integer anymore (debugger\qt\debugqtmemorywindow.c, debugqtview.c). Fixed a string overflow in comments (debug\dvdisasm.c). Fixed the avl trees logic. The ancestor heights of a node were not updated properly (debug; util/simple_set.h). Better handling of duplicate memory access. Don't removed and reinsert nodes that correspond to a duplicate memory access, because tree rebalancing kills performances. Update the node's element content instead (debug\debugcpu.c/h). Fixed wrong initial m_topleft.x value in memory view (debug\debugvw.c and dvmemory.c) [Fabrice Bellet, Olivier Galibert]. Added device tree view (qt/debug). Looks cool with lindbios (Sega Lindbergh Bios). Added a per-device window (debug\qt) [O. Galibert].
 - 0.156              : The Qt debugger now behaves more like the Windows one, with horizontal scrollbars where the core views expect them. This fixed debugger help text is missing words/lines under Linux. Fixed strange display of long strings in Qt debugger [Andrew Gardner]. Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\arm7\arm7drc.inc, cpu\drcuml.c, cpu\mips\mips3.c, cpu\powerpc\ppccom.c, cpu\sh2\sh2.c and emu\emuopts.c). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state [Oliver Stoeneberg].
 - 0.155              : Added window to osd_interface: win_monitor_info to class and win_window_info to class, partial (debugger\debugwin.c) [Miodrag Milanovic]. Less tagmap lookups counted (emu\machine.c and emu\video.c) [Oliver Stoeneberg]. Make cheat initialization debugger message more verbose (debug\debugcmd.c) [Pugsy].
 - 0.154              : Moved emu\debugint\debugint.c/h and osd\windows\debugwin.c/h to osd\modules\debugger\. Added osd\modules\debugger\debugqt.h and none.c/h. Small FASTDEBUG optimization (util\corealloc.c). Enabled rgbsse.h for Visual Studio 64-bit builds as well and use rgbgen.h for all DEBUG builds since this is the fastest combination (makefile, video\rgbutil.c/h). Enable rgbsse.h for optimized (GCC only) DEBUG builds (video\rgbutil.c) [Oliver Stoeneberg]. Fixed internal debugger memory handling (debugger\debugint.c) [Miodrag Milanovic]. Fixed cheatnext command (debug\debugcmd.c) [Sandro Ronco]. Fixed 'source' capability (debugger\debugqt.c) [Happy]. Added fix for focus seizure (debugger\debugqt.c) [Carl]. Fixed uninitialized auto (debug\express.c); should fix instances where a game with cheats active using multiple expressions in one action crashes at start [m4st4].
 - 0.153              : Added lib\util\tagmap.c. Fixed a bug preventing memory display of INT8/UINT8 in debugger (debug\dvmemory.c) [Couriersud]. #if 0 around some debugging code (lib\util\coretmpl.h) [Aaron Giles]. Added DEBUG-only tagmap lookup counter. Added a few missing \n in logging / cleanups (emu\diimage.c, divideo.c, input.c, ioport.c, render.c, rendlay.c, sdl\netdev_pcap_osx.c and osd\windows\drawd3d.c) [Oliver Stoeneberg].
 - 0.150              : Added debug\dvwpoints.c/h. Added a watchpoint debug view (debug\debugcmd.c, debugcpu.c/h, debugvw.c/h, dvbpoints.c/h and emu.mak). Added the watchpoint view to the QT Debugger's "Break|Watchpoints" window (sdl\debugqtbreakpointswindow.c/h and debugqtwindow.c) [Andrew Gardner]. Added makefile define DEPRECATED to show warnings about deprecated code. Added ATTR_DEPRECATED and flag some stuff in diexec.h as deprecated. Excluded a few codebits with FASTDEBUG=1 (emu\debugger.h and profiler.h) [Oliver Stoeneberg]. Added support to display dividers in the debugger state view (debug\dvstate.c and distate./h) [Dirk Best].
 - 0.149u1            : Finished up QT Debugger breakpoints window. It now shows breakpoints for all CPUs and lets you sort by each field [Andrew Gardner]. Temp fix for QT Debugger until handling of main loop is done in different way (sdl\debugqt.c) [qmc2].
 - 0.148u5            : Added memory tracking to debugger. This includes two new commands: trackmem and pcatmem(p|d|i). Fixed left-click selection bug in the memory window [Andrew Gardner]. Explanation: Call trackmem to start tracking which PC writes to which address in memory and pcatmem(p|d|i) to query a memory region for which PC wrote to it. Users of the QT debugger can also right click on a memory address in the memory window to make a popup message appear with the results - right-clicking also automatically copies the resultant PC onto the clipboard. Added statesave (ss) and stateload (sl) commands to the debugger. Added RP command in new debugger MT03449 [Andrew Gardner].
 - 0.148u4            : Added util\simple_set.h. Added simple_set data structure and hooked it up to the debugger comment system (debug\debugcpu.c/h and dvdisasm.c) [Andrew Gardner].
 - 0.148u2            : Fixed crash with -debug when image loading failed (debug\debugcpu.c). Fill allocated memory with 0xDD pattern to make it easier to spot uninitialized memory in a debug build (emu\emualloc.c) [Oliver Stoeneberg]. Fixed debug build (drivers\igs017.c, drivers\mediagx.c and video\taito_h.c) [Miodrag Milanovic]. Added a new 'lastinstructioncycles' property to the debugger to measure the amount of CPU cycles taken by the last instruction. This is useful to people who are rewriting CPU cores, specifically with regression testing (debug\debugcpu.c). Added the ability to tracelog to '{game}' (without the quotes); performing a substitution when the trace is run (debug\debugcmd.c). Fixed UNIDASM, but this fix is really gross. If we are serious about UNIDASM, somebody should figure out our strategy for ensuring that disassemblers are usable by this tool in a way that won't cause problems for device modernization [Nathan Woods]. All cpu cores with a CPU_DISASSMBLE are supported by UNIDASM. Meant to sort these into cpu name order before last commit, they appear to have mostly been in "find in files" order before with manual changes (tools\unidasm.c). Revision 21548 caused "trace off" to crash with a access violation [smf]. Added support for Debugger registerpoints. Added 'exit' as a synonym for 'quit' [Wilbert Pol].
 - 0.148              : Log all unhandled exceptions in running_machine::run() / handle bad_cast exceptions thrown by dynaic_cast - gives proper error in osc1000b and pippin now (emu\emucore.h and machine.c) [Oliver Stoeneberg]. Try a slightly better hashing function (lib\util\tagmap.h) [O. Galibert].
 - 0.147u4            : Profiler rewrite: Simplified, streamlined and less overhead (src\emu\eigccx86.h, profiler.c/h, ui.c, osd\osdcore.h and osd\windows\eivcx86.h) [Nathan Woods].
 - 0.147u3            : Make expression functions work debug\express.c) [Carl]. Fixed regtest, now all is executed fine [Miodrag Milanovic].
 - 0.147u2            : Drink from the firehose, fixed debug\dvmemory.c [R. Belmont].
 - 0.147              : Removed some astring::stringbuffer() usage - fixes potential missing \0 termination (emu\debug\debugcpu.c) [Oliver Stoeneberg].
 - 0.146u5            : Fixed debugger window to just use fixed-pitch font and removed fallback since CreateFont will still return a font based on other characteristics when the face was not found [Oliver Stoeneberg].
 - 0.146u1            : In cases of debug optimized build tools return error on this, code however looks good but still there is special case with warning (emu\device.h) [Miodrag Milanovic].
 - 0.145u7            : Cleaned up required_/optional_<object> templates. Added new ones for memory banks and memory regions. Removed debugging verbose printfs. Only print mismatched width warnings for required pointers. Gets rid of spurious messages in tons of drivers [Aaron Giles].
 - 0.145u6            : Fixed debug map command returns unexpected tag (example: MAME dariusg -debug then typing "map 600000").
 - 0.145u5            : Removed the TMS57002 from UNIDASM until modern cores are handled sanely. This fixed UNIDASM does not link in 0.145u4 [O. Galibert].
 - 0.145u2            : Fixed debug asserts (emu\info.c + input.h) [Miodrag Milanovic].
 - 0.145              : Show save state items in debugger memory windows [R. Belmont]. Aaron Giles fixed device search in the debugger to work like a normal device search.
 - 0.144u7            : Removed lib\util\tagmap.c. Don't free device_debug->m_trace from a notifier because the object is already blown by then [O. Galibert].
 - 0.143u3            : Fixed SHARC CPU in UNIDASM [trap15].
 - 0.143u1            : Samuele Zannoli added two new commands to the UNIDASM utility: skip <n> allows to skip the first <n> bytes from the file. count <n> specify that only <n> bytes from the file must be disassembled.
 - 0.142u6            : Miodrag Milanovic added image devices support to debugger and added image devices menu to debugger (windows only for now). Wilbert Pol fixed display of physical addresses in the debug memory viewer.
 - 0.142u4            : Alex Jackson fixed a tiny bug with the debugger hex dump command: The printable characters in ASCII range from 32 to 12*6*, not 127. Fixed memory leaks when running the debug build of MAME without a game to start.
 - 0.141u3            : Aaron Giles fixed disassembler override hook.
 - 0.141u2            : Pugsy added basic LOAD function to the debugger to complement the existing SAVE function. It allows you to load a binary file straight into writeable memory. The format is the same as the SAVE function with the exception that the <length> can be handled differently. Curt Coder implemented proper mouse wheel event handling in the Windows debugger. Ensured that the debugger disassembly PC cursor is visible on startup [Curt Coder]. Made "run to next CPU" more reliable [Aaron Giles].
 - 0.141u1            : hap fixed pressing F10 (Step Over) occasionally causes Debug menu to light up.
 - 0.140u3            : Robbbert fixed debug command symlist (bug #4131), Debugger cannot set 8bit registers with 'do' command (bug #4121) and Debugger print command does not behave as per the help (bug #04130).
 - 0.140u2            : Aaron Giles fixed F4 shortcut so it explicitly labels the address as a number by preceding it with "0x". This allows F4 to work properly, for example, on the 68000 stepping to address a6, which also happens to be a register name.
 - 0.140u1            : Wilbert Pol moved call of i80286_urinit to CPU_INIT. Fixed display of PC in the debugger. Aaron Giles converted the expression engine to C++, did the usual cleanup.
 - 0.140              : Aaron Giles fixed massive memory leaks + crash upon exit in debug build.
 - 0.139u4            : Aaron Giles enabled vertical scroll bars in debugger comboboxes, and resize them to show the full text.
 - 0.139u3            : Aaron Giles integrated comments into debugcpu.c, and removed debugcmt.c. Modernized the code and updated so it actually works with the modern debug classes. On Windows, osd_break_into_debugger() will now dump a stack crawl if there's no debugger attached. This means that asserts should have a full crawl now, for easier debugging [Aaron Giles]. Have each device create its own device_debug instead of letting the debugger do it. This allows the device to start itself up before the debugger tries to figure out what to do with it. Fixes the problem where register names were not populated into the symbol table correctly after I shuffled the initialization order [Aaron Giles].
 - 0.139u1            : Aaron Giles fixed crash when exiting the debugger if breakpoints are set.
 - 0.138u3            : Added debug\dvdisasm.c/h, dvmemory.c/h, dvstate.c/h and dvtext.c/h. Aaron Giles moved debugging structure away from CPUs only and attached to all devices. Debugger now creates one for each device. C++-ified most debugger operations to hang off the debugging class, and updated most callers. C++-ified the debugger views. split implementation of individual view types out to separate files and updated all callers [Aaron Giles]. Miodrag Milanovic modified way device_type constants are defined in order to get UNIDASM compile. Aaron Giles resurrected the old sampling profiler, and improve it to be useful: Always available now, just specify -profile <n> to enable it. Supports stack walking to uniquely identify call chains; the <n> parameter to the -profile option specifies how deep to go. Automatically turns off throttling and multithreading, and sets the number of processors available to 1 (since we only sample the main thread). Output now uses the common symbol lookup, which actually uses the PDB for MSVC builds and sym files for GCC builds. The top 30 unique call chains are output.
 - 0.138u2            : Added emu\didisasm.c/h.
 - 0.137u4            : Lord Nightmare replaced the DEBUG_FRAME_DUMP define with a new DEBUG_PARSE_FRAME_DUMP which produces binary listings of each frame parsed.
 - 0.137              : Robbbert fixed debugger memdump command.
 - 0.136u4            : Make mips register names accessible in the debugger expressions [Olivier Galibert]. sz72 fixed a bug in debugint.c: Actually make Del and BS delete the last character. Couriersud fixed overloaded C++ operator new/operator delete is too restrictive.
 - 0.136u3            : Minor changes for internal render debugger [Couriersud]: ui_input_frame_update is now global. Moved element_component from rendlay.c to rendlay.h. Added ability to rendlay.c to define "container" components. These simply provide a render_container. Added DEBUG_FLAG_OSD_ENABLED to allow coexistence of debuggers going forward. Replaced all occurrences of OPTION_DEBUG in src\osd\* by checking machine->debug_flags. Replaced all occurrences of DEBUG_FLAG_ENABLED in src\osd\* by DEBUG_FLAG_OSD_ENABLED For the time being, DEBUG_FLAG_OSD_ENABLED is default (set in mame.c) [Couriersud]. Internal debugger using the MAME rendering infrastructure [Couriersud]: Added support for arbitrary number of containers for render_target. Added command-line parameter -debug_internal (-di) to use the internal debugger when in debug mode. Internal debugger supports all views except memory view. Added "Debug" view to layout\vertical.lay to create more place for debug views in vertical games. NOTE: The colors are ugly. Font rendering needs improvement. There are no shortcut keys right now. There is still a lot of room for more improvements. However, it works and does not depend on any ui toolkit. The interface has been designed to support displaying views programmatically e.g. from the ui. Short HowTo: Start MAME with "-debug -di". Console, register and disasm views will be shown. Place them by dragging the view on the title bar. Views can be resized by dragging the bottom-right yellow square. The view having the focus has a green background title bar. Hit "Tab" (IPT_UI_CONFIGURE) to show the menu. Console and disasm views support a very simple facility to support entering commands and addresses. Just start typing. Hit "enter" when finished. R. Belmont fixed immediate crash on startup of GTK debugger.
 - 0.136u2            : Aaron Giles fixed memory allocation issue in debug builds. GTK Debugger work [Couriersud]: glade-2 can now be used again to edit the debug.glade file. No more need to edit the files created by glade-2. All "activate" handlers now pass the parent window pointer. malloc ==> osd_malloc to prevent mixed C++/C window allocations. Run to cursor (main view). In place memory editing (memory view). implement key handling (Up, down, ..) like in windows. Tab and ESC not yet handled. Functionality now matches Win32 debugger. Further code review/rewrite/simplification. Added more comment headings. Fixed a compile warning for GCC-4.4 (not detected by GCC-4.2). Horizontal divider bar to individually size views. Minimum height aligned to Win32 debugger. Removed stdlib.h from osdcomm.: Fixed building UNIDASM for OSD=sdl on win32.
 - 0.136u1            : Aaron Giles fixed UNIDASM fails to link when ldplayer is the specified target.
 - 0.136              : Aaron Giles allow any device memory (not just CPU's) to be accessed via debug expressions. Removed support in the expression engine for EEPROM-specific accesses.
 - 0.135u4            : Firewave fixed stack crawl is not generated anymore (Windows Debug). Aaron Giles fixed registered ram blocks registered with save state cannot be viewed with debugger.
 - 0.135u2            : Added lib\util\tagmap.c/h.
 - 0.135              : Aaron Giles added -flipped option to UNIDASM to output with disassembly first and address/data bytes afterwards in comment form.
 - 0.134u3            : Device memory spaces are now visible in the debugger [Aaron Giles].
 - 0.134u2            : Memory references can now explicitly specify logical or physical access by prepending with an 'l' or 'p'. Logical remains the default. Example: ppb@1000 = physical program space byte at address $1000. ldw@2000 = logical data space word at address $2000. Changed cheat finder to explicitly reference physical memory when writing out new cheats [Aaron Giles]. Expanded PROFILER_USERx to support up to 8 custom profiler areas (emu\profiler.c) [Christophe Jaillet].
 - 0.134              : Aaron Giles added debug_global_input_code_pressed() for use in debugging. Aaron Giles added helper function core_i64_hex_format. Replaced several printf cases in the debugger with this function to avoid runtime differences on older Windows systems. Also fixed up some error logging messages to output the correct number of characters for addresses and data, using the new function.
 - 0.133u5            : Sandro Ronco added some basic cheat search functionality to the debugger, allowing searches on various memory sizes. Aaron Gile added 'options' parameter to the CPU_DISASSEMBLE prototype. For now, the debugger always passes 0 for this. UNIDASM has been updated to accept a mode parameter, which is passed for the options. Aaron Giles fixed stupid UNIDASM bug that double-counted bytes.
 - 0.133u4            : Added src\tools\unidasm.c. Aaron Giles added infrastructure to compile universal standalone disassembler: Added UNIDASM to the tools build. Split the disassemblers out of libcpu and into new libdasm. Ensured the disassembly entry points for all disassemblers are in the source file for the disassembler (sometimes new generic versions were created).
 - 0.133u3            : Christophe Jaillet changed profiler to separate start/stop cases.
 - 0.130u4            : Aaron Giles added display of frame number to the beamx/y info in the register view in the debugger.
 - 0.129u4            : Opcode accesses are now marked debugger_access. This is important with the recent changes to automatically call the read handler if the opcode base cannot be found. Changed logging for non-RAM opcode bases so that it does not output in the case of debugger_access being set [Aaron Giles]. Aaron Giles fixed disassembler for CPUs with address bus shifts.
 - 0.129u2            : Phil Bennett stop crash/assert when trying to decrease the debugger memory window bytes per line to 0.
 - 0.129u1            : Nathan Woods added check to debug_cpu_set_dasm_override(), because callers do not know if we are in debug mode or not. Aaron Giles changed the disassembly view to call the decrypted read routines for each opcode byte/word instead of fetching from a pointer, which prevented opcodes that crossed range boundaries from working correctly, even though they would execute correctly. Aaron Giles added function video_assert_out_of_range_pixels() to help find the source of invalid pixels (generally out-of-range palette entries due to invalid data or sloppy calculations). Place this after each step in your rendering in a debug build to discover which code is generating improper pixels.
 - 0.129              : Aaron Giles added two new Windows OSD options: -debugger_font and -debugger_font_size, which control the font and size used in the debugger text Windows. These default to "Lucida Console" and 9pt, which is the same face as previously hard-coded but 1pt larger. Personally, I prefer "Consolas" 9pt, which is one of the new "C" fonts included with Windows Vista and later (also available for free download on older systems). Note that only fixed-width fonts really work here, for obvious reasons. Aaron Giles disassembled PCs are now forcibly aligned to the minimum opcode size and explicitly masked. Aaron Giles fixed auto_malloc() to randomize its memory when allocated in the debug build. This used to be the standard, but it seems to have been removed when the pool allocation was moved into the library. Also changed rand_memory() to use a fixed seed for consistent behavior. Aaron Giles fixed fatalerror with "symlist" while running game. Robiza fixed debugger crashes when exiting during "run to cursor".
 - 0.128u7            : Aaron Giles removed the old debugger register list, which was never used. Replaced it with using ordering from the cpu_state_table. Memory view fixes [Aaron Giles]: Fixed bug that computed the wrong total size if the address space was a full 32 bits. Improved display to show unmapped memory with *s. Disabled enumeration of disk and 0-length regions. Andrew Gardner fixed 'run to cursor' and 'toggle breakpoint' operations in the debugger when dealing with CPUs that have shifted address spaces.
 - 0.128u6            : Aaron Giles added logic to track OSD debugger updates separately from internal view updates. In order to get the OSD to update, a new function debug_view_flush_updates() must be called. Currently this is automatically called before osd_wait_for_debugger(), and during the periodic updates while executing. The OSD code may occasionally need to call it under other circumstances (for example, the Windows code calls it explicitly while tracking scrollbar thumbs to get live scrolling). Aaron Giles removed unnecessary address masking in disassembly view. Changed console subview computations to leave the registers portion fixed. Aaron Giles fixed resizing the debug window, the text was only in the old area.
 - 0.128u5            : R. Belmont fixed stepping in the debugger. Big debugger cleanup [Aaron Giles]: Important note for OSD ports: The get/set property functions have been retired for debug_views. Instead, there are specific functions to perform each get/set operation. In addition, the format of the update callback has changed to pass the osd private data in, and the update callback/osd private data must be passed in at view allocation time. And osd_wait_for_debugger() now gets a CPU object instead of the machine. Removed extra debugger tracking for address spaces and added some of the useful data to the address_space structure. Updated all debugger commands and views to use CPU and address space objects where appropriate. Added new memory functions for converting between bytes and addresses, and for performing translations for a given address space. Removed debugger macros that did similar things in favor of calling these functions. Rewrote most of the memory view handling. Disasm and register views still need some additional tweaking. Added the concept of 'subviews' to the debugger views. The core now creates a list of possible subviews, and the OSD can select between them. This removes code from the OSD that was previously required to find all possible memory and disassembly views. Added machine parameters to debugger console output functions. Moved globals to hang off of the machine structure. Fixed bug where the visiblecpu was not updated immediately upon a break. Fixed pressing F5 while running debugger causes access violation.
 - 0.128u4            : Oliver Stoeneberg cleaned up use of running_machine in the Windows debugger code. Debugger interfaces cleanup [Aaron Giles]: Added callback parameters to the expression engine. Improved CPU parsing so you can use a CPU tag or index in most commands that take one. Switched to passing CPU and address space objects around where appropriate. Symbol tables now have a global ref as well as a per-symbol ref. Debugcpu is now clear of active CPU references and global Machine references. Lots of other minor tweaks. Aaron Giles enhanced the runtest.cmd to use all available processors.
 - 0.127u6            : Aaron Giles added checks in the debug build to catch people who try to use PULSE_LINE for non-NMI and non-RESET input lines on CPUs that no longer support direct interrupt generation. Over time expect this list to increase.
 - 0.127u5            : Aaron Giles fixed disassembler freezes when doing a Run on any CPU other than CPU 0 in any set with multiple CPUs.
 - 0.127u4            : Aaron Giles added new built-in variable "frame" to the debugger. Aaron Giles fixed crash when hitting watchpoints on static handlers.
 - 0.127u3            : Aaron Giles fixed bug that would cause watchpoints to trigger if you had a memory window open to the watchpoint address. CPUs, sound chips, devices and ROM-regions which are specified by devices now have their tags auto-prefixed with the device's tag. This allows for multiple instances to be present. For example, the PR-8210 laserdisc player has a CPU with a tag of "pr8210". When it is included as a device by a driver, the driver may tag the device "laserdisc". The resulting final CPU tag name will be "laserdisc:pr8210". Also updated the debugger expression engine to support names with embedded colons [Aaron Giles]. Added checks to ensure that tags used for CPUs, sound chips, regions and devices follow some basic rules: They should be less than 15 characters long, be all lower-case, and only contain letters, numbers, underscores, or dots (no spaces). This is to ensure that they can be used properly in debugger expressions and don't get too long or unwieldy to type (even 15 chars is rather long). Fixed up all tags in the system that failed these checks [Aaron Giles].
 - 0.127u2            : Oliver Stoenberg updated debugger to pass running_machine around where appropriate. Added running_machine to several devices which really should eventually be converted into proper devices.
 - 0.127              : Oliver Stoenberg removed obsolete ENABLE_DEBUGGER occurance. Christophe Jaillet removed included "profiler.h" from files that do not use profiling functions.
 - 0.126u4            : Aaron Giles added word alternates for operators in expressions: +  plus, -  minus, *  times or mul, /  div, %  mod, !  not, ~  bnot, &&  and, &  band, ||  or, |  bor, ^  bxor, lt  <, le  <=, gt  >, ge  >=, eq  == and ne  !=. Aaron Giles added expression validation callback to verify names for CPUs and memory regions. Extended error codes to report incorrect memory spaces, memory names or memory sizes. Added verification callback to the debugger to validate CPU and memory region names, as well as verifying that a requested address space exists for a given CPU. Aaron Giles fixed I/O watchpoints.
 - 0.126u3            : Aaron Giles updated debugger windows to display the CPU and region tags where appropriate. Updated the expression engine's memory reference behavior. A recent update expanded the scope of memory references to allow for referencing data in non-active CPU spaces, in memory regions, and in EEPROMs. However, this previous update required an index, which is no longer appropriate for regions and will become increasingly less appropriate for CPUs over time. Instead, a new syntax is supported, of the form: "[tag.][space]size@addr", where 'tag' is an optional tag for the CPU or memory region you wish to access, followed by a period as a separator; 'space' is the memory address space or memory class you wish to access (p/d/i for program/data/I/O spaces; o for opcode space; r for direct RAM; m for memory regions; e for EEPROMs); and 'size' is the usual b/w/d/q for byte/word/dword/qword.
 - 0.126u2            : Aaron Giles robustified key behavior when the debugger is visible. Should now properly ignore the "break into debugger" keypress and not allow related characters to filter through. Removed some hacks related to making that work in the past. Aaron Giles changed osd_wait_for_debugger() to take a machine parameter and a "firsttime" parameter, which is set to 1 the first time the function is called after a break. The Windows debugger uses this to ensure that the debugger has focus when you break into it.
 - 0.126u1            : Aaron Giles changed the expression engine to use two callbacks for read/write rather than relying on externally defined functions. Expanded memory access support in the expression engine. Memory accesses can now be specified as [space][num]<size>@<address>. 'space' can be one of the following: p = program address space of CPU #num (default), d = data address space of CPU #num, i = I/O address space of CPU #num, o = opcode address space of CPU #num (R/W access to decrypted opcodes), r = direct RAM space of CPU #num (always allows writes, even for ROM), e = EEPROM index #num, c = direct REGION_CPU#num access, u = direct REGION_USER#num access, g = direct REGION_GFX#num access and s = direct REGION_SOUND#num access. The 'num' field is optional for p/d/i/o/r, where is defaults to the current CPU, and for e, where it defaults to EEPROM #0. 'num' is required for all region-related prefixes. Some examples: w@curpc = word at 'curpc' in the active CPU's program address space, dd@0 = dword at 0x0 in the active CPU's data address space, r2b@100 = byte at 0x100 from a RAM region in CPU #2's program space, ew@7f = word from EEPROM address 0x7f and u2q@40 = qword from REGION_USER2, offset 0x40. The 'size' field is always required, and can be b/w/d/q for byte, word, dword and qword accesses [Aaron Giles].
 - 0.125u9            : Aaron Giles changed how watchpoints work so that supporting them adds 0 overhead unless some are actually live. Aaron Giles fixed access violation on hardreset with -debug.
 - 0.125u8            : Aaron Giles updated config.txt to describe debugger. Turned off debugger flag by default.
 - 0.125u7            : Added src\emu\debugger.c. Aaron Giles changed debugger so it does not stop while we are waiting for a pending event to occur. This eliminates some confusion during reset and state loading. Removed DEBUGGER flag from makefile and ENABLE_DEBUGGER macro from the source code. All MAME builds now include the debugger, and it is enabled/disabled exclusively by the runtime command-line/ini settings. This is a minor speed hit for now, but will be further optimized going forward. Changed the 'd' suffix in the makefile to apply to DEBUG builds (versus DEBUGGER builds as it did before). Aaron Giles changed machine->debug_mode to machine->debug_flags. These flags now indicate several things, such as whether debugging is enabled, whether CPU cores should call the debugger on each instruction, and whether there are live watchpoints on each address space. Redesigned a significant portion of debugcpu.c around the concept of maintaining these flags globally and a similar, more complete set of flags internally for each CPU. All previous functionality should work as designed but should be more robust and faster to work with. Aaron Giles added new debugger hooks for starting/stopping CPU execution. This allows the debugger to decide whether or not a given CPU needs to call the debugger on each instruction during the coming timeslice. Also added new debugger hook for reporting exceptions. Proper exception breakpoints are not yet implemented.
 - 0.125u5            : Aaron Giles changed map command in the debugger to now perform separate read/write/fetch lookups.
 - 0.124u5            : Atari Ace removed deprecat.h from debugger.h to prevent hiding modules that really needed to include deprecat.h.
 - 0.124u2            : Roberto Zandona fixed debugger don't show correctly the decryted code if opcodes are encrypted but operands aren't encrypted.
 - 0.123u6            : The on-screen "Reset by watchdog" message only appears in debug builds now [Zsolt Vasvari]. Oliver Stoenberg fixed "garbage" (newlines) in the debugger window when debugging the SH-4 CPU.
 - 0.123              : Andrew Gardner fixed crash in debugcmt with starting with no game on the command-line. Aaron Giles fixed byte chunks format in debugger.
 - 0.122u8            : Aaron Giles changed debugger-related code to be based off a new makefile define (DEBUGGER) which sets a new compile-time define (ENABLE_DEBUGGER). This means that MAME_DEBUG no longer means "enable debugger", it simply enables debugging features such as assertions and debug code in drivers. Also removed the various levels of opbase protection in memory.h and always just turned on full bounds checking.
 - 0.122u7            : Aaron Giles fixed default debugger memory view width for CPUs with >byte-sized minimum. Made menu updating dynamic at click time, fixing issues with incorrect checkmarks.
 - 0.122u4            : Aaron Giles fixed "Close ALT+F4" in the debugger. Oliver Stoeneberg fixed memory leak when exit MAMED.
 - 0.122u3            : Oliver Stoeneberg and Aaron Giles fixed several UNICODE=1 issues in the debugger. Changed the Windows build process to always enable UNICODE=1 for 64-bit builds. Oliver Stoeneberg added ATTR_PRINTF to a number of functions that have printf semantics.
 - 0.122u1            : Aaron Giles fixed bug that would cause events to leak through to the game when the debugger was up.
 - 0.121u4            : Olivier Galibert added new option -update_in_pause which enables updating the screen bitmap while the game is paused. This is useful for debugging in some scenarios (and gets in the way in others). Christophe Jaillet fixed missing profiler call in video.c.
 - 0.121u2            : Aaron Giles changed video_frame_update() internally to accept a debug parameter which forces updates and does not meddle with synchronization/time accountiing.
 - 0.119u4            : Oliver Stoeneberg fixed the linking issues when specifying MSVC_BUILD=1 and DEBUG=1.
 - 0.119u3            : Nathan Woods changed parameters to read/write handlers from "address" to an unmodified "original_address" parameter (having the passed parameter being unmodified makes it easier to determine the original value while debugging).
 - 0.119u2            : Aaron Giles changed profiler so that it is independently selected versus the debug build. Built with MAME_PROFILER=1 to enable the profiler on a non-debug build.
 - 0.119u1            : Aaron Giles added support in the debugger memory view for 8-byte chunk sizes. Fixed long-standing bug that failed to show unmapped logical addresses as asterisks. Also added new menu items to the Windows debugger to support viewing logical or physical memory. Fixed hang when attempting to move windows with the debugger active and multithreading enabled.
 - 0.118u1            : Olivier Galibert added support in the debugger for reading/writing memory without translation.
 - 0.117u3            : Nathan Woods added new debugger commands for hardreset and softreset. Nathan Woods changed CreateWindowEx() call to be win_create_window_ex_utf8(), removing the need for a string conversion.
 - 0.117              : Aaron Giles fixed debugger and -mt (with -nomt MAME will exit cleanly. With -mt MAME will hang when you try to close the game window directly after running the second statement) and a memory leak warning after exit the debugger.
 - 0.116u3            : Aaron Giles changed a number of stderr fprintf's in the Windows OSD code to mame_printf_error and mame_printf_warning calls, as appropriate.
 - 0.115u2            : Nathan Woods fixed bug in win_get_window_text_utf8() for when a window's text is an empty string.
 - 0.113u3            : Nathan Woods introduced a video_screen_exists() call, to determine whether a given screen exists. Updated the debugger to use this so as not to crash if no screens are present.
 - 0.113u2            : Aaron Giles changed pause behavior so that on non-debug builds, we simply keep the most recent list of primitives and re-render that. Debug builds keep the current default behavior which is to run the VIDEO_UPDATE code each frame even while paused in order to help identify issues in the emulation.
 - 0.112u3            : Ville Linde fixed the crashing in debug builds.
 - 0.112u2            : Ville Linde fixed bug in debugger that caused incorrect end offsets to be computed on CPUs with an address shift.
 - 0.112              : Aaron Giles fixed assertions with -debug (namconb1.c, namcos22.c, itech32.c, wecleman.c, scobra.c).
 - 0.111u6            : Nathan Woods added win_output_debug_string_utf8(); a UTF-8 wrapper for OutputDebugString(). Changed code to use it. Aaron Giles added sliders for debugging crosshair positioning (debug build only). Changed driver_add/find/remove functions to fatalerror if they cannot find their targets.
 - 0.111u5            : Nathan Woods changed debug console code to use auto_malloc and to detect attempts at registering callbacks after initialization time.
 - 0.111u1            : Removed debug\eainfo.h. Widespread cleanup of disassemblers and CPU interfaces across the project [Giuseppe Gorgoglione]: Removed from many disassemblers the dependency on eainfo.h. The output produced by those disassemblers has been checked to be the same as before. Extensively rewrote the 6309dasm.c and 6809dasm.c disassemblers. Fixed minor bugs in the v810 and hd6309 interfaces. Removed m68000\cpudefs.h. This was used by the old assembly m68000 core. Removed from m68kmame.c and m68kmame.h as well many references to the old core (e.g A68K0, A68K2, etc.). Properly typedeffed the cpuinfo union, this affects cpuintrf.h and many, many, other files. Converted 8051dasm.c, m65ce02.c and t11dasm.c to use cpuintrf_temp_str() instead of local string pools. Moved the info.s = cpuintrf_temp_str() initialization to: activecpu_get_info_string(), cpunum_get_info_string() and cputype_get_info_string(). This allows us to remove tons of info->s = cpuintrf_temp_str() statements from the xxx_get_info() accessors of every CPU core, making them more readable. Aaron Giles fixed a few more assertions lurking with the new stricter disassembler checks.
 - 0.110u2            : Nathan Woods cleaned up disassemblers to remove stubs and ensure the disassemblers are not referenced except in debug builds. smf fixed bug in the debugger that caused watchpoints to not be active until the next context switch.
 - 0.110u1            : Aaron Giles fixed max instruction bytes for 68020+ CPUs to avoid assertion in new disassembler.
 - 0.109u5            : Aaron Giles converted the following disassemblers to the new format, and added step in/out support where it was obvious: adsp21xx, alph8201, arm, arm7, asap, ccpu, cdp1802, cop4x0, dsp32c, e132xs, g65816, h6280, h83002, i8x41, i960, i8051, i8085, jaguar, m680x, m6805, m37710, mc68hc11, pic16c5x, rsp, s2650, se3208, sh2, sharc, t11, tms32010, tms32025, tms32031, tms34010, upd7810, v60, v810, z180 and z8000. Aaron Giles changed the new disassembler and override callback prototypes to take const parameters and to remove the generally unused 'bytes' parameter. The disassemblers can now assume that the buffers contain enough bytes to hold the maximum instruction length as returned by the CPU core get_info callback. Deprecated the old disassembler interfaces in favor of the new ones. Tweaked the disassembly view to detect if the disassembly for the current instruction has changed, and if so, recompute the entire view. This provides more dynamic updating when system states change under certain CPUs. Added new symbol 'curpc' for all CPUs which represents the value of the current instruction pointer, to avoid naming conflicts with the 'pc' register in other contexts. Changed this to be the default value for the disassembly window in the Windows version of the debugger (OSD ports will need to do likewise).
 - 0.109u4            : Aaron Giles added new debugger command 'history' which dumps the most recent instructions executed. Fixed bug in displaying disassembly of CPUs whose minimum instruction size was larger than their data bus size. Cleaned up tms99xx core debugging and converted to new disassembler syntax, adding step over/out support.
 - 0.109u3            : Nathan Woods added missing InitCommonControls(), which caused the debugger UI to fail with recent updates. Aaron Giles added new output control system. This system is designed to support multiple output streams, and should replace all instances of printf in the code. You can now call one of these functions: mame_printf_error, mame_printf_warning, mame_printf_info and mame_printf_debug to output data. By default, these go to the console, but they can be overridden by the OSD layer to route wherever is appropriate.
 - 0.109u2            : Samuele Zannoli fixed crash in the Win32 debugger code with small window sizes. Nathan Woods changed comment shortcut in disassembly windows to avoid clash with Ctrl+C for "Copy". Added checking for register symbol names to ensure they aren't numeric (which prevents their identification by the expression parser). Changed the M4510 CPU symbols to avoid tripping this check. Andrew Gardner fixed "run to cursor" functionality for CPUs that had an address bus shift.
 - 0.109              : Nathan Woods changed disassembler override callbacks to match new disassembler syntax. Aaron Giles added new osd function osd_break_into_debugger() which can be hooked to cause a break into the OSD's debugger when an assertion or fatal error occurs. Hooked it up on Windows to do just that.
 - 0.108u3            : Removed src\debug\mamedbg.c/h. Aaron Giles removed support for the old debugger. Some nice improvements to the debugger [Andrew Gardner]: Added ability to tab between views in the disassembly windows. Added a 'cursor' to the DASM view and hooked up navigation keys. Added F4 'run to here' key when the disasm view has focus. Added F9 'toggle breakpoint' key when the disasm view has focus. Enhanced memory view keyboard navigation.
 - 0.108              : More debugger comments fixes [Andrew Gardner]: Adding a comment no longer redefines the disasm range. Comments properly save and load special characters (&,", etc). Aaron Giles changed debugger to default to 'on' in debug builds.
 - 0.107u4            : Aaron Giles fixed bug that caused the VIDEO_EOF to be called repeatedly while in the debugger.
 - 0.106u13           : Nathan Woods fixed uninitialized variable in the debugger commenting code. Cleaned up allocations.
 - 0.106u10           : Nathan Woods cleaned up screenshot taking code and re-connected the debugger command that created them.
 - 0.106u9            : David Haywood fixed crash in debug builds running the DECO MLC games.
 - 0.106u6            : Tim Schuerewegen fixed new debugger support for custom register lists.
 - 0.106u4            : Aaron Giles added new function mame_debug_is_active() which can be used by core code to identify when we are paused in the debugger.
 - 0.106u3            : Aaron Giles added code in the debug build to put random data in allocated memory.
 - 0.106u1            : Nathan Woods fixed a bug that caused a crash when the -debugscript command line option was used with an invalid filename.
 - 0.105u4            : Andrew Gardner added support in the debugger memory window to change the number of bytes displayed per row. Aaron Giles fixed bug in the debugger that would prevent you from typing a command line longer than what was visible.
 - 0.105u1            : Olivier Galibert fixed crash bug in old debugger introduced in the last release. Andrew Gardner fixed a bug with code comments that led to incorrect display for long comments.
 - 0.104u9            : Nathan Woods changed comment prefix in debugger command scripts from '#' to '//'. Aaron Giles fixed "do" command in the debugger. Nathan Woods cleaned up error logging so that it is callback driven, allowing more than one potential output source. Fixed the -oslog option in the Windows build.
 - 0.104u7            : Nathan Woods fixed some crashes in the debugger if you tried to set breakpoints while the game was running and there was no active CPU.
 - 0.104u6            : Andrew Gardner fixed comment display for processors which use an ADDRBUS_SHIFT. Nathan Woods added movie recording time to the internal profiler.
 - 0.104u5            : Nathan Woods added new debugger properties: logunmap, logunmapd, logunmapi which enable/disable logging of unmapped memory accesses. Updated disassembly comments support [Andrew Gardner]: Fixed a 0-length comment bug (no more "// 0, " allowed). Added comment output to the new debugger's DASM command. Changed the comment save path from \mame\comment to \mame\comments. New debugger features [Aaron Giles]: New command "print" is a simple way to display the result of one or more expressions. New command "symlist" displays all the symbols registered. All save state registered scalar globals are now available as symbols (prefixed by a '.'). All save state registered global arrays are now available for viewing/editing in the memory window. All registered memory regions are also available for viewing/editing in the memory window.
 - 0.104u4            : Moved src\debug\debugger.h to src\debugger.h. Added src\debug\debugcmt.c/h and textbuf.c/h. Andrew Gardner added comments support to the debugger. You can now dynamically add comments that are visible next to the disassembly view. Comments are saved to an XML-based .cmt file in a 'comments' directory by default upon exiting. Debugger changes/updates [Aaron Giles]: Added new streaming text buffer system. Rewrote the console window to use the streaming text buffer. Added new log window (Ctrl+L) which displays live error.log output. Added disassembly view menu to control comments versus raw or encrypted opcodes. Added disassembly menu to the main console window as well. Now detect expressions with assignment or ++/-- operators as commands, do you can just say "pc=0" to modify registers instead of needing to type "do pc=0". Fixed bug that would sometimes lock the disassembly view to the top line. Aaron Giles fixed MAME crash in all functions on New Memory Window -> Options (x byte chunks & Reverse View).
 - 0.104u3            : Added src\debug\debugger.h and eainfo.h. New file debugger.h contains abstracted debugging interfaces for both debuggers. Added new call mame_debug_break() and a new macro DEBUGGER_BREAK to make it easier to hard-code breakpoints into code. Removed all old code that directly whacked debug_key_pressed or called debug_halt_on_next_instruction and replaced them with calls to DEBUGGER_BREAK. Added a number of new properties to the debug views to allow for more flexibility in the way the views are displayed. Also added an option to the disassembly window to display encrypted opcode data on the right [Aaron Giles].
 - 0.104u2            : Aaron Giles cleaned up structs/unions in the debugger and Windows code to match the new core conventions.
 - 0.104u1            : Juergen Buchmueller updated the old debugger recognize ~ prepended registers.
 - 0.104              : Added src\debug\m0813fnt.c. Removed src\dbgfonts\m0507fnt.c, m0508fnt.c, m0609fnt.c, m0610fnt.c, m0612fnt.c, m0613fnt.c, m0713fnt.c, m0714fnt.c, m0813fnt.c, m0915fnt.c, m0918fnt.c, m1020fnt.c and m1224fnt.c. Aaron Giles removed all but the default debugger font from the source distribution. Fixed miscomputed registers view size in debugger.
 - 0.103u5            : Nathan Woods and Aaron Giles added support for registers that are not to be displayed in the register list. This is useful for registers like AX on i386, so that AX can be used in expressions but not represented on the register list. Simply precede the register name with '~' to prevent display.
 - 0.103u4            : Nathan Woods changed debug view property code to pass property values as unions rather than void pointers, in order to appease compilers that whine about strict aliasing.
 - 0.103u3            : Alex Jackson fixed in the old debugger the display of opcodes for word-addressed CPUs like the TMS32010, which was completely broken before. Nathan Woods added CPUINFO_PTR_DEBUG_SETUP_COMMANDS: a callback that is invoked to tell CPU cores to set up commands specific to a CPU core. Aaron Giles separated debugger break key from OSD display. They can now be programmed differently. Also fixed behavior in the new debugger when using the break so that text doesn't get entered onto the command line. Aaron Giles and Nathan Woods fixed the handling of address masking and display within the debugger. Aaron Giles fixed order of operations in the expression engine if functions were used (src\debug\express.c).
 - 0.103u2            : Debugger improvements [Nathan Woods]: Added a 'gtime' command; like the "go" command, but breaks after a specified delay.
 - 0.103u1            : Nathan Woods added new debugger command traceflush.
 - 0.103              : Nathan Woods added an atexit handler to ensure trace files are closed in the debugger in the event of an early exit.
 - 0.102u5            : Aaron Giles added new debugger command 'map', which tells logical -> physical mappings as well as what read/write handlers are connected to an address. Also added 'mapd' and 'mapi' for performing the same operation on data and I/O space. Alex Jackson fixed instruction alignment in the old debugger and added support for 64-bit qword display. Nathan Woods moved M6809, HD6309 and Z80 disassemblers to the new interface and did some cleanups.
 - 0.101u3            : Nathan Woods reduced how often the debugger display is refreshed if stepping and steps_until_stop is a high number. This makes commands like 'step #10000' a bit more usable. Aaron Giles added rudimentary hotspot detection to the debugger. Type "help hotspot" for details on how it works. Cleaned up the way the debugger hooks into the memory subsystem. Now, on each CPU switch, the debugger queries the memory system for callbacks to be called on every read/write. This allows more efficient watchpoint tracking and allows for non-watchpoint debugging behaviors like the hotspot detection. Fixed activecpu_dasm() and cpunum_dasm() to detect the presence of an updated disassembler and wraps the calls to that rather than crashing.
 - 0.101u2            : Aaron Giles added support for logical mapping to the CPU interfaces and debugger. CPUs that have an MMU now need to support several new interface bits, including a logical address mask and page size for each address space, as well as a new translate function. There is also a new disassembler interface that should be used going forward, which will make it much simpler to keep the disassemblers standalone and not dependent on MAME functions for opcode accesses. Converted the i386 core to use the new interfaces.
 - 0.100u4            : Changed break/watchpoints in the new debugger to display in hex [Anonymous].
 - 0.100u2            : Some under-the-hood debugger changes [Olivier Galibert]: Added an osd-private void * to debug_views. Made view sizing more dynamic.
 - 0.99u4             : Removed src\memdbg.c/h.
 - 0.98u3             : Aaron Giles changed memory display in the debugger so that it doesn't lock to where the cursor is. Also fixed it so that it can align against odd addresses.
 - 0.97u3             : Aaron Giles fixed crash in the debugger when decoding instructions that were too long.
 - 0.97u2             : Nathan Woods added code to flush error.log every time the debugger is entered. Aaron Giles added support for character constants in the expression engine.
 - 0.97u1             : Changed debug\debugexp.c/h to express.c/h. Made the expression engine in the debugger a little more generic to support its use in other tools [Aaron Giles].
 - 0.96u4             : Aaron Giles improved Windows-specific memory debugging to track file/line numbers for allocations. This required a couple of changes to the core makefile. Fixed remaining memory leaks in the new debugger code. Nathan Woods added logerror and memdump commands to the new debugger.
 - 0.96u3             : Old debugger no longer forces the memory display to 16-bit words regardless of the size specified with the M command [Andrew Church]. Aaron Giles added 'find' command to the new debugger for performing memory searches. Nathan Woods changed trace and traceover commands so they can append to existing files by placing '>>' before the filename.
 - 0.96u2             : Nathan Woods added a -debugscript command line parameter that invokes a debugger script on startup. Aaron Giles added the ability to specify internal read/write handlers for CPUs so that the new debugger can view internal RAM. Hooked this up for the TMS32025 core.
 - 0.96u1             : Brad Oliver fixed big endian issues in the old debugger (debug\mamedbg.c).
 - 0.95u6             : Nathan Woods fixed debugger to close all trace files when quitting.
 - 0.95u4             : Nathan Woods added better protection against crashing in the debugger.
 - 0.94u5             : Aaron Giles turned off debugging code in the hotspots, giving a HUGE speed improvementto the V-unit games.
 - 0.94u4             : Ville Linde fixed memory dumping problem in debugger at very high addresses.
 - 0.94u2             : Aaron Giles added sound balancing assistance display to debug builds.
 - 0.93               : Nathan Woods changed an instance of memory_get_read_ptr() to memory_get_op_ptr() in src\debug\debugcpu.c.
 - 0.92               : Nathan Woods modified debugger to use memory_get_op_ptr() to determine if opcode memory is unmapped.
 - 0.91               : Debugger enhancements [Nathan Woods]: Added a 'source' command, that reads in a set of debugger commands similar to the UNIX shell command of the same name. Added a debug_trace_printf() call, for use during debugging to emit text into a trace file. Petty compiler warning fixes.
 - 0.90u4             : Minor Debugger fix [Nathan Woods]. Removed the VK_HOME and VK_END cases for the WM_KEYDOWN event. As far as I can tell, the default action does the trick, and additionally, Shift+Home and Shift+End are also handled correctly.
 - 0.90               : Nicola Salmoria fixed memory leaking and added a check in debug builds. Angelo Salese fixed a disassembler bug with the NEC V20/V30/V33 CPU core.
 - 0.89u5             : Nathan Woods added 'TRACEOVER' support to debugger (see help). New Debugger Commands [Aaron Giles]: * snap [<filename>] - takes a snapshot and saves it to the given <filename>; if <filename> is omitted, this is equivalent to hitting F12. * gi[int] [<irqline>] - executes until the current CPU takes the interrupt line specified by <irqline>; if <irqline> is omitted, executes until any IRQ is taken on the current CPU. This has been mapped to F7 as well. * gv[blank] - executes until the next VBLANK; this is useful for stepping frame-by-frame from within the debugger. This has been mapped to F8.
 - 0.89u4             : Nathan Woods fixed a history list overrun in New Debugger when the down arrow key is pressed when the history list is empty.
 - 0.89u3             : Trace in debugger now defaults to current active CPU if non specified [Nathan Woods].
 - 0.89u2             : Aaron Giles fixed sound issue when in debugger.
 - 0.88u5             : New debugger improvements [Aaron Giles]. Improved the drawing code on the Windows side so that the background color changes align properly (mostly noticeable when using the cursor in the memory view).
 - 0.88u4             : Misc debugger updates [Aaron Giles]: * Added a "PC" register to the I386 core so that it should work in the new debugger. * Cleaned up stepping code. * Now refresh the display and all debugger windows after each step while stepping. * When running with the debugger window open (F5 or 'go'), now update the debugger views 4 times per second. * Can now break into the debugger even if you are focused on a debugger window. * Memory/disasm windows now come up with the currently active CPU selected by default. * Added a new command: focus <cpunum>, which is equivalent to ignoring all other CPUs. * Changed ignore and observe to support multiple parameters so you can say "ignore 2,3,4". * Changed ignore so that you are not allowed to ignore the last CPU. * Fixed ignore behavior so that other CPUs are truly ignored. * Fixed register window so that change hilights are maintained during scrolling and updates. * Changed debug memory accessors so they don't log on invalid memory accesses. * Tweaked the help text to indicate that help <command> works. * Added a new text attribute DCA_CURRENT, which is separate from DCA_SELECTED -- the main visible difference is that the memory view editing cursor is now hilighted red instead of yellow. In-line memory editing is now supported. To do this, I added a generic cursor concept to the view system. Each view can handle it however they want. Right now only the memory view supports a cursor. Click in the memory view to place the cursor. Type over nibbles with 0-F, or use the arrow keys to navigate around. Tab cycles between the edit box and the memory editor.
 - 0.88u3             : Moved src\mamedbg.c/h and window.c/h to src\debug. Added src\windows\debugwin.c/h, mame.man and mame.rc, src\debug\debugcmd.c/h, debugcon.c/h, debugcpu.c/h, debugexp.c/h, debughlp.c/h and debugvw.c/h. New Windows based debugger [Aaron Giles]. Note: The new debugger is enabled as the default debugger for the next few u releases (in a debug build only) to allow feedback, it can be disabled by changing the makefile. Description of 1st update: There are some new behaviors and new ways of doing things you should be aware of. By default the debugger no longer "auto hides". This was a remnant of the way the old debugger worked that I have gotten rid of. If you want to hide all the debugger windows, just close the "main" debug window. It will return if you break in the debugger at a future time. The "main" window has four panes: a register list on the left, a disassembly around the current PC at the top, a console output window in the middle, and an input line at the bottom. The input line supports full editing features, and you can also use up arrow/down arrow to cycle through recently typed commands. Hitting Enter on a blank line in the console is equivalent to single stepping once. You can also do that with F11. To run, either use the "go" command or hit F12 (or close the "main" window). To run until the next CPU, either use the "next" command or hit F6. You can bring up multiple independent memory and/or disassembly windows by using the Debug menu. Each window can look at a different address space on any CPU. You can enter any expression (including those using registers from the CPU) into the entry line at the top of these windows in order to specify which address to begin displaying at. I've implemented a number of useful commands in the console. Type "help" to navigate the extensive online documentation for a number of examples on how to use these features. You can do some really cool stuff now with the conditional watchpoints and breakpoints. This is a work-in-progress, but it's pretty good now (IMHO) and stable for common debugging operations. Let me know what you like/dislike about it and what sorts of features you feel are still lacking. Description of 2nd update: F12 now means "run and hide the debugger". I found this was too useful to get rid of entirely. F5 just means "run", keeping the debugger visible. Enabling the debugger now forces window mode and prevents you from switching to full screen mode. Description of 3rd update: * Added step over/step out functionality. F10 or "over" steps over an instruction. Shift+F11 or "out" steps out of a subroutine or exception handler. Note that this feature relies on the disassembler to produce some flags indicating which instructions which need to be stepped over (generally CALLs and TRAPs) and which instructions end a step out search (generally RETURNs). * Modified the 680x0 and MIPS3 disassemblers to support these features. * Changed the disassembly view to back up 3 instructions when resetting (that is, the current PC should appear on the 4th line instead of the 1st line). This is not perfect, but works pretty well overall and should help see the previous couple of instructions when, say, a watchpoint is hit. * Improved filtering of keypresses so that they don't leak into the game when you are typing in the debugger.
 - 0.85u1             : R. Belmont fixed a debugger crash when using F10 with the i960 core.
 - 0.85               : Nicola Salmoria fixed debugger memory access for 64-bit CPUs.
 -  3rd June      2004: Aaron Giles - I decided to take the plunge and start in on the debugger reworking I've been planning for a while. The new debugger relies on more support from the OSD layer to handle multiple windows and text-based drawing, but it allows a ton more flexibility than the old debugger. The cross-platform core is also greatly expanded in capabilities, supporting multiple breakpoints, conditional breakpoints, full-fledged watchpoints, a full expression parsing engine, and lots more. Hopefully I'll have the first pass submitted in the next few weeks, since I'm starting to close in on having enough features implemented to make it a win over the old debugger.
 - 0.82u2             : Debugger Enhancements [Nathan Woods]: Attempting to start a trace with non-existent registers will now raise a warning in the MAME debugger. Implemented mame_debug_trace_write() call, an API to allow injecting text into the trace files of the MAME debugger. smf added a patch, so you can output traces to the console ( or grep etc ) by typing: TRACE CONSOLE.
 - 0.82               : Nathan Woods fixed the MEM_DUMP debug code.
 - 0.81u5             : osd_die() messages now get sent to both logerror and console output (windows\config.c) [Nathan Woods].
 - 0.81u4             : Debugger Fixes [Aaron Giles]: This is a quick attempt to make the debugger more useable with the new memory system. The masking of addresses and data should now be working properly again. Also, you can go to any memory window and type 'P' to view program address space, or 'T' to view data address space.
 - 17th March     2004: Bryan McPhail fixed a hard crash that occurred when trying to debug HuC6280 code.
 - 14th March     2004: Sebastien Volpe submitted a bugfix for the debugger when switching window backwards.
 - 0.80u1             : Bryan McPhail fixed the opcode view which in some cases displayed too many bytes on 32 bit CPUs such as 68020 and Hyperstone.
 - 0.79u3             : Nathan Woods added a new consistency check on CPUs to check for the existence of certain get_info cases needed for debugging. This consistency check is currently only enabled for MESS. And removed NEOMAME and CPSMAME declarations.
 - 0.79               : Warning screens are now skipped if running with -ftr for less than 5 minutes [Aaron Giles].
 - 0.77               : Aaron Giles enable the OSD for non-debug builds regardless of the -debug flag.
 - 0.75               : Nathan Woods increases the size of the buffer used when logerror() output goes to OutputDebugString().
 - 22nd August    2003: Nathan Woods added an optional facility to guard against ROM/RAM address range overflows, it is only enabled in debug builds.
 - 0.72u1             : Nathan Woods cleanup and fix of set_ea_info() so that negative offsets of 8 or 16 bits do not have extraneous FF's in front of them. More proper fix to the scanline display bug that prevented registers from being edited when the scanline display was on.
 - 0.71u3             : Nathan Woods fixed register editing when scanline display is enabled in debugger (src\mamedbg.c).
 -  4th August    2003: Nathan Woods fixed a bug in the debugger that occurred when editing CPU registers.
 - 0.70u5             : Nathan Woods introduced a "debug cookie"; when in debug mode, puts a cookie value in the mame_file structure to prevent files from being closed twice without an assertion.
 - 0.70u1             : Made dbg_show_scanline the default [Bryan McPhail]. This fixes the data size parameter of the DUMP command in the debugger [smf]. This fixes the bug where SAVE only worked on 8bit cpus in the debugger [smf].
 - 0.70               : Added src\memdbg.c/h.
 - 11th June      2003: smf fixed the data size parameter of the DUMP command in the debugger, and he fixed the SAVE command that only used to work on 8-bit CPUs.
 -  1st June      2003: Pierpaolo Prazzoli added a debug sanity check for I/O ports.
 - 0.69               : Fixed a bug with -crconly which could cause options.debug_width to become corrupt (src\mame.h) [Paul Priest].
 - 14th May       2003: Nathan Woods fixed a minor bug where entering the debugger didn't work sometimes.
 - 23rd November  2002: Bryan McPhail fixed a bug when switching between 68020 and 68000 in the debugger.
 - 24th October   2002: Reip fixed a bug in the DASM command in the debugger.
 - 11th October   2002: Aaron Giles fixed the address shifting code in the debugger.
 - 10th October   2002: Nathan Woods added a current scanline and horizontal beam position display to the MAME debugger.
 -  7th September 2002: Paul Priest sent in a patch to disable frameskipping when the debugger is activated.
 - 21st July      2002: Nathan Woods submitted another patch, improving the debug output.
 - 11th February  2002: Bryan McPhail fixed the screen not updating when using the debugger or pausing the emulation.
 -  3rd December  2001: Brad Oliver added some debug code to warn about some possible mis-uses of the internal timers.
 - 19th November  2001: Aaron Giles fixed a bug where the DUMP command in the debugger caused it to crash.
 - 14th November  2001: Aaron Giles re-submitted some debugging features that haven't been included yet.
 - 24th October   2001: Aaron also added a debugging feature to help tracing the crashes.
 - 23rd October   2001: Aaron Giles added a debugging feature to the Windows version which allows catching of some memory access bugs.
 - 11th August    2001: Nicola Salmoria fixed a bug in the debugger.
 -  6th June      2001: Aaron Giles fixed a debugger bug which caused the game window not to update properly.
 - 0.37b10            : Added dbgfonts\m0507fnt.c, m0508fnt.c...m1224fnt.c.
 - 0.37b8             : The profiler also watches memory read and write handlers. They were previously cumulated with the CPU emulation. Also, the profiler is now disabled in non-debug builds because the performance hit is quite noticeable [Nicola Salmoria].
 - 0.37b6             : Removed src\msdos\osd_dbg.h. Several changes to have the debugger run in the game screen under DOS. The debugger display is now entirely rendered in the core using a standard bitmap, instead of relying on the OS dependant code to simulate a character mapped display. Changes affecting porters are: Removed osd_set_display(), osd_set_screen_size(), osd_screen_update(), osd_wait_keypress() and osd_dbg.h removed. Added osd_debugger_focus(). osd_update_video_and_audio() has extra debug_bitmap argument, osd_allocate_colors() has parameters for the debugger palette mamedbg.c no longer requires clock_t and clock(). It's entirely up to the OS dependant code what to do with the game and debug bitmaps. They can be shown one at a time (giving the user a means to switch between them), or in two separate windows. osd_debugger_focus() is used to request that one of the two bitmaps be made visible to the user. Under DOS, you can switch at any time between the game and debugger display by pressing F5 [Juergen Buchmueller].
 - 0.37b3             : Moved logerror() from mame.c to the OS dependant code, and removed errorlog from the GameOptions structure.
 - 0.37b2             : Replaced instances of "if (errorlog) fprintf(errorlog," with a call to the new function logerror().
 - 0.36b2             : [DOS] The -profiler switch is no longer needed to enable the profiler, it is automatically turned on and off when you hit Shift+F11 [Nicola Salmoria]. Moved the profiler into the core. The OS dependant code need only provide a osd_cycles() inline function/macro in osinline.h, returning a counter. The function must be as low overhead as possible since it is called thousands of times per second when the profiler is active. The counter should be as precise as possible, to provide accurate measurements; the ideal unit is the number of CPU cycles, e.g. as returned by the Pentium instruction RDTSC. The profiler display is handled by the core, so the OS code only has to make the usual profiler_mark() calls to profile different sections of the code (PROFILER_BLIT, PROFILER_SOUND and so on) [Nicola Salmoria]. Note: to avoid conflicts, the OS code must do the check for the "show fps" key this way, otherwise input will be lost: if (!keyboard_pressed(KEYCODE_LSHIFT) && !keyboard_pressed(KEYCODE_RSHIFT) && !keyboard_pressed(KEYCODE_LCONTROL) && !keyboard_pressed(KEYCODE_RCONTROL) && input_ui_pressed(IPT_UI_SHOW_FPS))
 - 0.35b11            : Removed src\unix\osd_dbg.h.
 - 0.35b10            : Changed src\osd_dbg.h to msdos\osd_dbg.h and unix\osd_dbg.h. Removed dbgrfont.c/h.
 - 0.35b9             : The debugger is almost complete [Juergen Buchmueller].
 - 0.35b8             : Added src\dbgrfont.c/h. All new, completely rewritten debugger (not finished yet) [Juergen Buchmueller].
 - 0.35b7             : Removed src\asg.c. Major overhaul to the CPU cores. Note that the debugger doesn't work in this release [Juergen Buchmueller].
 - 0.34b5             : Improved the profiler. It now REQUIRES the Pentium-class RDTSC instruction. It will not work on 486s, older Pentiums, and maybe other non-Intel CPUs [Nicola Salmoria].
 - 0.34b4             : Added src\msdos\profiler.c. Experimental profiler. To enable it, use the -profiler parameter; then, hit Left Shift + F11 to show the results on screen. I don't know how accurate the figures are; the "Sound" figure is certainly underestimated for sound chip emulators which don't use streams.c (it is computed under the CPU playing the sound instead that under Sound). Note that the sum of the percentages is much less than 100%. This is in part due to portions of the code which are not profiled, but is also caused by the massive overhead of calling uclock() (which happens very often when sound is playing) [Nicola Salmoria].
 - 0.33b2             : Ernesto Corvi added WatchPoint support to the debugger (i.e. check a RAM location and stop execution when it is changed).
 - 0.31               : Added src\mamedbg.h and asg.c. Improved debugger [Martin Scragg, Mirko Buffoni, John Butler].
 - 0.30               : Added src\mamedbg.c and osd_dbg.h. Integrated debugger [Martin Scragg, John Butler, Aaron Giles]. You must compile with MAME_DEBUG defined to activate it. Start MAME with the -debug option, then press tilde to enter the debugger.



 3.3  3RDPARTY, PYTHON, LUA AND PLUGINS

 - 0.285              : Fixed Cancel not working in input selection menus (plugins\commonui\init.lua). Added support for non-wrapping analog inputs (plugins\inputmacro\*). Removed core off-screen reload hack now that the same thing can be achieved more flexibly with plugins (emu\inputdev.cpp and emu\emuopts.cpp). Changed the "previous menu" item text to make what it does more obvious (ui\pluginopt.cpp). Better handling of options: Use "classic" locale for numeric conversions. Don't use capturing lambdas. Put integer overload of value() before float overload. Got rid of duplicated numeric options conversion code (mame\luaengine.cpp). Turn on sol's "safe numerics" (mame\luaengine.h) [Vas Crabb]. Ensuring that 'entry:default_value()' returns the correct type. 'entry:default_value()' was always returning string. A consequence of this problem is that the following LUA commands would error: manager.options.entries['beam_dot_size']:value(manager.options.entries['beam_dot_size']:default_value()) and manager.options.entries['frameskip']:value(manager.options.entries['frameskip']:default_value()). With this change, 'default_value()' will return objects of the correct type (mame\luaengine.cpp) [Nathan Woods].
 - 0.284              : Access machine.side_effects_disabled. Refactored machine:side_effects_disabled() as a method instead of property (mame\luaengine.cpp) [holub].
 - 0.282              : Allow configuring analog input adjustments from scripts (mame\luaengine_input.cpp) [Vas Crabb]. Export minvalue and maxvalue for IPT_ADJUSTER (mame\luaengine_input.cpp) [m1macrophage]. Sync AsmJit with upstream version 1.20 from https://github.com/asmjit/asmjit/commit/5134d396bd00c1b63259387acdbb12dfdf009f9b (3rdparty\asmjit) [Patrick Mackinlay].
 - 0.280              : Support driver sourcefile path (plugins\data\data_mameinfo.lua and data_messinfo.lua) [hap].
 - 0.278              : Updated expat to version 2.7.1 [holub]. Added set_speed_factor (mame\luaengine.cpp) [hap]. Small BX platform detection/usage improvements (3rdparty\bx\src\mutex.cpp, os.cpp and thread.cpp). Use BX_PLATFORM_POSIX where needed. The semaphone implementation already uses BX_PLATFORM_POSIX to include <pthread.h> on all the POSIX platforms; do the same also in other places for consistency. This is done also for <sched.h>, which is a POSIX API, and sched_yield() from it is already guarded by BX_PLATFORM_POSIX. Drop support for GNU libc older than 2.12. glibc 2.12 was released on 2010, and at this point any supported Linux distro has that version or way greather than that. Fixed BX <pthread/pthread.h> include on Hurd. <pthread/pthread.h> does not exist, the standard <pthread.h> does exist so switch to it [Pino Toscano]. Reenabling the write accessor for the LUA input_class enabled property. This is used by BletchMAME to toggle mouse capture on and off (mame\luaengine_input.cpp) [Nathan Woods]. Moved some duplicated code into the common header (osd\asio.h). Allow deleting autofire buttons or input macros without needing to use the UI Clear input (plugins\autofire and plugins\inputmacro) [Vas Crabb].
 - 0.277              : Added 3rdparty\zlib\contrib\nuget\nuget.csproj/.sln and 3rdparty\zlib\contrib\vstudio\vc17\*. Updated zlib to 1.3.1 (3rdparty\zlib) [holub]. There should be no need to force SSE2 for 64-bit builds. Re-added hack to work around GitHub CI issues. Attempt to enable SSE features explicitly specified in ARCHOPTS. It will still fall back to SSE 2 if you just use -march= to enable later SSE features (scripts\src\3rdparty.lua; Project BIMG). Proper way to detect presence of __int128 on GCC/Clang (3rdparty\softfloat3\build\MAME\platform.h). Updated ImGui to 1.91.9b. This was not straightforward, and we're now ahead of the ImGui version in upstream bgfx. Updated the bgfx-specific memory editor widget rather than just partially removing the code. Had to add an explicit template instantiation to imgui_widgets.cpp to avoid a link error in the bgfx-specific range slider widget. Got the imgconfig.h header a lot closer to the template from upstream ImGui (3rdparty\bgfx\3rdparty\dear-imgui\*) [Vas Crabb].
 - 0.276              : Added 3rdparty\expat\lib\expat_config.h and 3rdparty\lua\doc\OSIApproved_100X125.png. Removed 3rdparty\lua\doc\osi-certified-72x60.png. Updated to LUA 5.4.7 and expat 2.6.4. Added dummy expat_config.h to hopefully fix macOS buid [Vas Crabb]. Removed unused global LITTLEENDIAN/BIGENDIAN macros, as well as TRUE/FALSE macros (3rdparty\softfloat\mamesf.h and softfloat\milieu.h) [hap].
 - 0.275              : Cleaned up various stuff (mame\luaengine.cpp) [Vas Crabb].
 - 0.274              : Expose mame_ui_manager::show_menu() to LUA (mame\luaengine.cpp) [Nathan Woods]. Updated AsmJit to latest upstream (3rdparty\asmjit) [Windy Fairy].
 - 0.273              : Added actions\jcdb\_jcdb.lua, jcdb\jcdb_solution.lua, actions\xcode\xcode11.lua, xcode\xcode14.lua and xcode\xcode15.lua. Removed genie\.travis.yml, gmake.solaris\Makefile, gmake.solaris\genie.make, fastbuild\_fastbuild.lua, fastbuild\fastbuild_project.lua, fastbuild\fastbuild_solution.lua, qbs/_qbs.lua, qbs/qbs_base.lua, qbs/qbs_cpp.lua, qbs/qbs_solution.lua, vc200x\test_mfc.lua and vc2010\test_mfc.lua. Updated GENie and changed Visual Studio target to Visual Studio 2022. Updated to GENie 1181. Applied local fix for GENie resource include directory bug, sent upstream as bkaradzic/GENie#572. Set MSVC flags to use conformant preprocessor, standards conformance mode and assume UTF-8 encoding. Use MPARAM for GENie build architecture. Restore MPARAM for non-Windows OS builds (gmake.windows\genie.make). Avoid escaping issue in 3rdparty/expat (scripts\src\3rdparty.lua) [Patrick Mackinlay]. Demoted tautological-compare to a warning (scripts\genie.lua). Updated compiling instructions to refer to Visual Studio 2022 [Vas Crabb]. Exposing running_machine::phase() to LUA (mame\luaengine.cpp) [Nathan Woods]. Fixed cross-compiling bgfx for MinGW under Linux (scripts\src\3rdparty.lua) [FlykeSpice].
 - 0.272              : Exposing full build version to LUA as emu.app_build (mame\luaengine.cpp) [Nathan Woods]. Fixed build with Clang 19. sol::optional<T&>::emplace was broken and depended on the compiler not checking that members exist if the template wasn't instantiated. See ThePHD/sol2#1606 and ThePHD/sol2#1648 (3rdparty\sol2\sol\sol.hpp) [Vas Crabb].
 - 0.267              : Added 3rdparty\softfloat3\bochs_ext\extF80_scale.c, f2xm1.c, fpatan.c, fprem.c, fpu_constant.h, fsincos.c, fyl2x.c, poly.c, softfloat-extra.h, softfloat-helpers.h, softfloat-specialize.h and softfloat3_ext.h. Updated 3rdparty\softfloat3: Softfloat3 was always being built for a big-endian host, causing incorrect math on LE x64 and AArch64 machines. Fixed up Softfloat3 to build properly as part of MAME and up-ported the Bochs extensions. In latest Bochs, they were only partially up-ported and Softfloat3 had been hacked up to be more like 2; here they're fixed to work with stock Softfloat3 (3rdparty\softfloat3\*) [R. Belmont]. Fixed what looks like a copypaste error with screen_type_enum (mame\luaengine.cpp) [hap].
 - 0.266              : Updated ASIO to 1.30.2 (3rdparty\asio). Patch config.hpp to hopefully work with strict preprocessor warnings (asio\detail\config.hpp). Set Win32 API version to 0x0600 for Windows SDL builds (osd\sdl_cfg.lua and osd\asio.h). LUA engine: Work around apparent regression in Clang 18. When taking a pointer to a static member function template in a class template, Clang reports a substitution error if the noexcept specification uses an expression that depends on class template arguments. See https://github.com/llvm/llvm-project/issues/91362. Work around another place where noexcept depends on class template arguments (3rdparty\sol2\sol\sol.hpp) [Vas Crabb].
 - 0.265              : Updated AsmJit to upstream version 1.13.0 (3rdparty\asmjit) [Patrick Mackinlay].
 - 0.263              : Fixed a couple shortsights (scripts\src\video.lua) [Angelo Salese].
 - 0.262              : Updated FLAC (3rdparty\flac) to version 1.4.3, JPEG (3rdparty\libjpeg) to 9e, LZMA (3rdparty/lzma) to 23.01, utf8proc (3rdparty\utf8proc) to 2.9.0 and ZLIB (3rdparty/zlib) to 1.3.0. Enabled some more warnings for LZMA now that upstream is cleaner (scripts\src\3rdparty.lua). Removed Subversion attributes from .gitattributes. Added Zstandard compression library version 1.5.5 (3rdparty\zstd\*). Added Zstandard support for zip archives (util\unzip.cpp) and CHDs (util\chdcodec.cpp). Always define NDEBUG to avoid log spam for 3rdparty\flac [Vas Crabb].
 - 0.261              : Fixed error check in sockatmark() (3rdparty\asio\include\asio\detail\impl\socket_ops.ipp) [Chriskohlhoff, Alex Brown]. Fixed jobs waiting for frame updates sleeping forever. Restored ability for wait functions to yield values from coroutines (mame\luaengine.cpp). Made the documentation on what it's supposed to do a bit clearer [Vas Crabb].
 - 0.259              : Correct spelling of screen device xoffset and yoffset property names (mame\luaengine.cpp) [Golden Child].
 - 0.258              : Enable layout plugin by default (plugins\layout\plugin.json). Don't add library plugins to plugin.ini (mame\pluginopts.cpp). Don't write plugin.ini file if no plugins were found (mame\clifront.cpp). Fixes fresh plugin.ini via 'mame -cc' may create empty file [hap].
 - 0.255              : Re-base Nano SVG on latest upstream (3rdparty\nanosvg). This fixes some issues with abbreviate path commands, gradients and locale sensitivity when parsing percentace-style colours [Vas Crabb].
 - 0.254              : Addressed some LUA engine fallout from running things in coroutines: Don't crash accessing dead Lua thread state from callbacks. Allow returning values via yielding functions. Don't run address space tap and layout view callbacks in coroutines to save overhead. Better logging of errors from callbacks (mame\luaengine.*). Improved some LUA APIs: Moved several machine lifecycle callbacks to the notifier/subscriber model. The old callback registration model is still available for them for now, but prints a deprecation warning. Added pre-save/post-load notifications. Use a single allocated timer rather than one anonymous timer per waiter. Waiters no longer prevent saved states from being loaded. Clean up outstanding waiters on stop or state load rather than just leaking them. Started documenting parts of the emulator interface object that should be relatively stable. Code changes to notifications and waiters corresponding to the docs/plugins changes in previous commit. Dispose of notifiers before closing Sol. Allow loading PNG/JPEG/MS DIB bitmaps from LUA and cleanup. Use VirtualAlloc rather than VirtualProtect on Windows to change page protection, as the latter can cause severe performance issues with some antivirus software. Added noexcept to lots of hash- and bitmap-related things and added a little more error checking. Fixed i686 Linux GCC build (mame\luaengine.ipp) [Vas Crabb]. Support keypad Enter on Windows (3rdparty\linenoise\linenoise-win32.c) [feos].
 - 0.253              : Added 3rdparty\linenoise\linenoise-win32.c, linenoise\stringbuf.c/h and linenoise\teststringbuf.c. Various LUA updates. Compile LUA as C++. When LUA is compiled as C, it uses setjmp/longjmpfor error handling, resulting in failure to unwind intermediate stack frames. Trying to ensure no objects with non-trivial destructors are in scope when raising a LUA error is error-prone. In particular, converting an exception to a LUA error becomes convoluted, and raising a LUA error from a constructor is effectively impossible. Updated LUA to 5.4.4 - this includes a brand-new garbage collector implementation with better performance. The main thing removed is the deprecated bitlib. Updated sol2 to version 3.3.0 - this adds support for LUA 5.4 and fixes a number of issues, including not correctly handling errors when LUA is built as C++.Updated LUAFileSystem to version 1.8.0 - this adds support for symbolic links on Windows, as well as LUA 5.4 compatibility. Updated LUASQLite3 to version 0.9.5 - this fixes issues in multi-threaded environments, as well as LUA 5.4 compatibility. Fixed double-free after attempting to construct a debugger expression from LUA with an invalid string, and exposed expression error to LUA in a better way. Added warning level print function to LUA. Fixed saving cheats with shift operators in expressions, although this code isn't actually used as there's no cheat editor. Updated forked linenoise to latest upstream. This removes the need to force it to build as C++, and adds proper UTF-8 support for Windows. Since this is a fork of linenoise, there's no hope for getting LUA-linenoise to sync with it upstream. I made the bare minimum changes to keep it working, but didn't add bindings for new functionality (e.g. multi-line editing). Added a couple of things to the layout script sandbox (plugins\layout\init.lua). Fixed tab completion after linenoise update. Can now cycle through candidates by repeatedly pushing Tab (plugins\console\init.lua). Cleaned up LUA thread context object a little and made it possible to pass any LUA object as a status value. Be more strict with concurrency and multiple contexts (mame\luaengine.cpp). Better bindings for device_state_interface. This avoids creating a table every time the state property of a device is accessed, adds proper support for getting/setting floating/point state entries from Lua, calls the state entry's formatting method to convert to a string (for flags fields, etc.) and exposes more properties. This is a breaking change as the exposed properties on state entries have changed, and the value property has different semantics for floating-point state entries (mame\luaengine.cpp). Use local sqlite3 library variable, fixes "Show DATs view" (plugins\data\database.lua). Don't be so eager to create empty settings folders (plugins\autofire and plugins\inputmacro). Expose UI controls toggle state (mame\luaengine.cpp). Run everything in coroutines: This lets you use emu.wait(...) directly without mucking around creating coroutines. Allow emu.wait to accept an attotime argument. Added a couple more wait helper functions (mame\luaengine*) [Vas Crabb]. Fixed MSVC link failure due to mismatched signature (mame\luaengine.cpp) [Patrick Mackinlay].
 - 0.252              : Updated png.py to 0.0.20 (last version before Python 3.4 support dropped) (scripts\build\png.py). Save values of most BGFX sliders per-system. Back out some formatting changes to minimise conflicts (bgfx\chainmanager.cpp). Disabled SSE on all 32-bit builds - it assumes x86-64 integer ALU is available when using SSE (BIMG; src\3rdparty.lua) [Vas Crabb]. Updated BGFX, BX and BIMG. Fixed parameters for mingw build (scripts\src\3rdparty.lua) [Miodrag Milanovic]. Fixed compile error on mingw due to invalid setting for ASTCENC_SSE (scripts\src\3rdparty.lua) [Justin Kerk]. Updated RapidJson [Miodrag Milanovic, Milo Yip]. Improved NTSC parameter descriptions and ranges in OSD: Correct units of some parameters (they are MHz, not Hz) and correct one default (color carrier should be 3.57 MHz, not 35.7). Use a step size of 1/8800 MHz for the color carrier so that the NTSC value of 315/88 MHz can be exactly represented (to float precision) (bgfx\chains\hlsl.json and render\d3d\d3dhlsl.cpp) [Ben Rudiak-Gould].
 - 0.251              : Don't substitute environment variables in path options (plugins\*) [Nathan Woods]. Removed the "type" property from system driver metadata. It's effectively deprecated (mame\luaengine.cpp) [Vas Crabb].
 - 0.250              : Use clear_value to release I/O port fields (plugins\autofire\init.lua and plugins\inputmacro\init.lua) [Vas Crabb].
 - 0.249              : Use path_concat utility function (mame\pluginopts.cpp) [AJR]. Fixed input device items upper bound (mame\luaengine_input.cpp) [Golden Child].
 - 0.248              : Exposed more LUA bindings: Added low-level palette objects. Added indexed bitmap types. Added a bitmap method for extracting pixels from a rectangular area as a packed binary string. Changed screen device pixels method to return width and height in addition to the pixels [Vas Crabb].
 - 0.247              : LUA scripting enhancements: Added minimal support for manipulating bitmaps and drawing them in render containers. Y'CbCr 4:2:2, RGB and ARGB are supported. Argument order doesn't always match the underlying classes to make the Lua interface more consistent with render bounds and render containers. Added bindings for device_palette_interface. Fixed some errors in the documentation as well as documenting new functionality (mame\luaengine.cpp and luaengine_render.cpp) [Vas Crabb].
 - 0.246              : Fixed story.dat errors (data\data_story.lua) [Vas Crabb]. Fixes communication with WebSocket servers that send data immediately after the handshake (util\client_ws.hpp) [Michael Zapf].
 - 0.245              : Cleaned up data plugin a little (plugins\data\init.lua). Reworked the data plugin code substantialy: Use the plugin data folder for storing the cache. The history folder may be read-only or shared with different configurations. Don't create the cache database or surrounding folder if there's nothing to store in it. Actually use prepared queries multiple times rather than always destroying them after a single use. Added proper error checking for most database operations. Improved query performance by avoiding outer joins and table scans (plugins\data\*). Updated data plugin documentation (plugins\data.rst) [Vas Crabb].
 - 0.243              : Made I/O port manager type_seq a bit more tolerant of omitted arguments (mame\luaengine_input.cpp). Updated zlib to version 1.2.12 [Vas Crabb].
 - 0.242              : Added artwork\lut-default.png. LUA engine: Make setting analog I/O port field values user-friendly. Exposed minimum/maximum values for analog fields. Together with defvalue, they can be used to check range of values and neutral position. Previously you had to send a normalised value between -65535 and 65535 which would be scaled depending on machine specifics. You could read the scaled value from the port, but you couldn't send scaled values in. This allows scripts to set scaled values as seen by the machine (mame\luaengine_input.cpp) [feos]. Made LUA I/O port field sensitivity nil for digital fields and put in some more const (mame\luaengine_input.cpp). Started changing LUA function bindings to use set_function to avoid potential issues related to ThePhD/sol2#608, and worked out what was causing problems with symbol table read_memory/write_memory (they aren't really essential - you can do the same thing with the address space object itself, but they're easier to parameterise). Enable checks for debug builds and kill sol::buffer. LUA engine improvements: Made auto-boot script errors and plugin bootstrap errors fatal. Run auto-boot scripts in a sandbox. Globals can be accessed, but not set. The sandbox is cleared on hard reset, but not on soft reset. Added (hopefully) useful to string metafunctions to device_t and address space that show short names and tags. Fixed issues in plugins that surface when strict type checking is enabled, as this means numbers and nil are not automatically converted to strings. Plugins should be tested with debug builds to check for this. Made save item read_block raise an error on invalid arguments rather than returning an empty string, and made it use luaL_buffer directly rather than using the helper wrapper. Changed some more function bindings to use set_function to avoid issues related to ThePhD/sol2#608, and got rid of some unnecessary lambda captures [Vas Crabb]. Fixes for ASIO 1.20.0 (util\client_ws.hpp and client_wss.hpp) [Miodrag Milanovic]. Fixed Clang error: Lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture] (util\client_ws.hpp) [AJR].
 - 0.238              : Removed osd\uwp.lua, uwp_cfg.lua, osd\uwp\*, osd\modules\input\input_uwp.cpp, lib\osdlib_uwp.cpp and scripts\resources\uwp\*. Added plugins\commonui\init.lua, plugin.json, plugins\timer\timer_persist.lua, plugins\timecode\init.lua, plugin.json, docs\source\plugins\timecode.rst. Fixed flurry of bogus warning messages (bgfx\targetmanager.cpp) [hap]. Fixed crash (plugins\console\init.lua). Fixes tab completion causing segmentation fault. Fixed cheatfind menu flags and write XML cheat text to ui container so it's not sideways on rotated screens (plugins\cheat) [Carl]. Moved input selection menu and sequence polling code to a common library. Fixed the issue that prevented keyboard inputs being mapped with -steadykey on. Added next/previous group navigation to input macro edit menu (plugins\inputmacro\inputmacro_menu.lua). Moved the timecode recording functionality to a plugin (plugins\timecode\*). Gave the timecode plugin an option to count emulated frames. Simplified logic in autofire and inputmacro plugins to try and avoid leaking state across sessions (plugins\autofire and inputmacro). Ensure state is destroyed on stop (plugins\inputmacro). Reduced amnesia for autofire and inputmacro plugins. Made autofire and inputmacro plugins capable of remembering settings if the host input device for the binding is missing or if an input for a slot device that isn't present is referenced. Rewrote timer plugin fixing multiple issues. Added emulated time recording as well as wall clock time. Fixed recording time for multiple software items per system. An incorrect constraint on the database table meant that time was only being recorded for a single software item per system. Detect the "empty" driver so the time spent at the selection menu isn't recorded (you'd get multiple entries for this due to the way options leak when returning to the system selection menu). Included schema migration code to update existing timer plugin databases. Also replaced some unnecessary floating point code with integer maths, added log messages, and made the plugin unload unload its database access code during emulation. Changed other plugins' use of paths with trailing slashes as this causes stat to fail on Windows. Work around menu not remembering selection when ref is nullptr. Updated ASIO to version 1.20.0. The doc folder isn't included as it's pretty big. This required include\asio\detail\win_iocp_socket_accept_op.hpp due to mismatched order in the member declarations and initialiser list for the win_iocp_socket_accept_op class. I reversed the declaration order so it matches win_iocp_socket_move_accept_op [Vas Crabb].
 - 0.237              : Added docs\source\plugins\autofire.rst, console.rst, data.rst, discord.rst, dummy.rst, gdbstub.rst, hiscore.rst, index.rst, inputmacro.rst, layout.rst, timer.rst, plugins\inputmacro\init.lua, inputmacro_menu.lua, inputmacro_persist.lua, plugin.json and plugins\plugin.schema. Updated BGFX, BX and BIMG to latest upstream. Fixes BGFX Vulkan backend does not start and falls back to OpenGL [Julian Sikorski]. Updated mipmap support in Fighters chain. Fixes crashes on Linux using Vulkan backend (bgfx\chains\Fighters.json) [sairuk]. Added a new plugin that lets you create input macros. Besides the obvious application of cheating in Track & Field, this may be useful for making emulated games more accessible to people with disabilities or injuries that make certain input sequences difficult. To try out the attached demos (https://www.mameworld.info/ubbthreads/download.php?Number=392226), extract the archive into your plugin data directory. Included are: raiden: player 1 autofire on keyboard space bar, sf2ce: player 1 right-facing shoryuken using light punch on keyboard M, trackfld: player 1 sprint cheat on keyboard left shift and hotgmck: player 1 "punish" on keyboard Q ("pianos" the discard keys - it's actually too fast for the key matrix scan to see every input). Updated input macro plugin to select sane items when changing menus. Other plugins not updated yet, but may be at some point in the future. Documented the input macro plugin. The only undocumented plugins now are the cheat plugin, the cheat finder plugin, and the port name plugin. Beter provision for plugins with multiple menu levels. Make it possible for a plugin to specify which item should be selected on repopulate. Also allowed plugins to specify the UI heading flag for menu items. Fixed ticking when menu is left on the screen (plugins\timer\init.lua). Started documenting plugins. Added a couple of missing command-line options and added a local table of contents to the (rather long) command line options page. Use SPDX short identifiers for licenses in exports (more precise and easier to localise), use CC0 for hiscore plugin rather than CC0 [Vas Crabb]. Handle multiple blocks in dat (plugins\data\data_command.lua and load_dat.lua) [Carl].
 - 0.236              : Fixed BGFX UV rounding errors in fs_blit_palette16. Switched back to direct texture upload rather than CPU copy. Switched fs_blit_palette16 to expand bitmap_ind16 contents to R8. Fixes vertical off-by-one shift in games with an odd pixel count along X. Fixed option -bgfx_backend d3d9 not working [Ryan Holtz]. Use D32F texture format instead of D24, should fix AMD hardware (bgfx\target.cpp) [Julian Sikorski].
 - 0.235              : Updated BGFX, BX and BIMG to latest [branimirkaradzic]. BGFX fixes for various backends. Fixed palette and UYVY conversion in all backends. Fixes rendering for Laserdisc games is flawed. Fixed a typo in render\bgfx\targetmanager.cpp, thanks LN for the heads-up. Revised BGFX fs_blit_palette16 to not use pixel rounding. Fixes issues in Car Polo, Knuckle Joe and others [Ryan Holtz]. Applied srcclean to JSON files in BGFX subtree [Vas Crabb].
 - 0.232              : Save line history for the console and other minor fixes. Changed a loadstring to load, since LUA 5.3 loadstring is not available. Made sure the linenoise thread returns a string. After Ctrl+D stop reading lines (plugins\console\init.lua). Added a couple error messages to emu.thread. Also changes exit(0) when the script of the thread returns non-string to an error message instead. Exit stops the whole process not just the thread (mame\luaengine.cpp) [Szunti]. Changed "historypath" (only supposed to be used for DATs) to "homepath" (where plugin data should reside) (plugins\console\init.lua) [AJR].
 - 0.229              : Fixed softlist longname (plugins\discord\init.lua) [Carl]. BGFX: CRT-Geom and CRT-Geom-Deluxe enhancements: Added a "brightness boost" feature for the shadow mask that works by making the brightness ratio between bright and dark mask pixels closer to 1 for the brighter parts of the image. Added clamping to zero so that underscanning produces a black border. Added a "raster bloom" effect to crt-geom-deluxe that makes the image grow slightly when the average brightness of the screen is high, mimicking a common defect in CRTs [cgwg]. Added new compiled shaders for Direct3D, ESSL, Metal and SPIR-V [Vas Crabb]. BGFX: Disabled lowpass filter by default by setting it to its maximum value, since it does not account for actual monitor type. We can revisit this decision in the future if better monitor information is provided from the driver [Aaron Giles].
 - 0.227              : Added frontend\mame\luaengine.ipp, luaengine_input.cpp, luaengine_mem.cpp, luaengine_render.cpp and luaengine_debug.cpp. Use sol::lua_nil instead of sol::nil (mame\luaengine.cpp; sol::nil is an alias of it that may not always be available). Apparently sol::make_user is a recipe for dangling references, get rid of it and SOL3 needs non-const device reference to wrap (mame\luaengine.cpp). Splitted lua_engine user type registrations across a few files to make it a bit more manageable. Moved Clang warning suppression to the right file, disabled MSVC C4503 suppression for now, will see which files need it for SOL3. Tidied up compiler warning options for 3rdparty (scripts\src\3rdparty.lua). Fairly significant overhaul of LUA engine and some cleanup. The things that were previously called device iterators are not iterators in the C++ sense of the word. This is confusing for newcomers. These have been renamed to be device enumerators. Several LUA methods and properties that previously returned tables now return lightweight wrappers for the underlying objects. This means creating them is a lot faster, but you can't modify them, and the performance characteristics of different operations varies. The render manager's target list uses 1-based indexing to be more like idiomatic LUA. It's now possible to create a device enumerator on any device, and then get subdevices (or sibling devices) using a relative tag. Much more render/layout functionality has been exposed to LUA. Layout scripts now have access to the layout file and can directly set the state of an item with no bindings, or register callbacks to obtain state. Some things that were previously methods are now read-only properties. Layout files are no longer required to supply a "name". This was problematic because the same layout file could be loaded for multiple instances of the same device, and each instance of the layout file should use the correct inputs (and in the future outputs) for the device instance it's associated with. This should also fix video output with MSVC builds by avoiding delegates that return things that don't fit in a register (mame\luaengine.cpp). Work around MSVC ambiguous overload error (mame\luaengine_render.cpp). Used unchecked optional getter after explicit check (mame\luaengine.ipp and luaengine_render.cpp). Cleanup and enhancements: Changed memory manager banks, regions and shares to lightweight wrappers. Exposed tag, width and Endianness of regions and shares. Exposed memory tag and entry of banks (scripts can change entry). Modernised syntax and switched to abbreviated integer types (mame\luaengine_mem.cpp). LUA engine improvements: Added methods for enabling and disabling breakpoints and watchpoints, and made debugger views update when breakpoints/watchpoints are manipulated from LUA. Made breakpoints and watchpoints objects rather than tables. It's not possible to enable/disable a breakpoint or watchpoint from the object itself, you have to go through its owners' debug interface. Exposed more device_t members for dealing with child/sibling tags and devices. Also provided a way to get regions/shares/banks from a device using relative tags rather than going through the memory manager with absolute tags. Exposed device_t interface on screen_device, cassette_image_device and some cleanup (mame\luaengine.cpp). Exposed enough of the layout system to LUA to allow position and colour to be animated (mame\luaengine.cpp). Fixed Clang warning about unused lambda capture (mame\luaengine.cpp). LUA engine cleanup and input edition: Modernised and cleaned up LUA bindings for input classes. Exposed the input_sequence_poller class to LUA and updated the autofire and cheat plugins to use it, rather than continuing to pretend it's part of the input manager. Exposed more of the natural keyboard manager, including the ability to enable/disable individual keyboard and keypad devices like you can from the keyboard mode menu. Exposed a few more things on ioport_port and input_device (mame\luaengine.cpp). Clean up render classes and expose screen image adjustments. Started moving LUA class reference to docs. Expecting people to find the class reference material in the source isn't going to help make it approachable. The docs allow longer explanations, better formatting, and cross reference links. Added another layout scripting example to the docs (mame\luaengine.cpp). LUA cleanup and documentation migration checkpoint. Cleaned up some more of the LUA inteface. Mostly replacing methods with properties, some consistency fixes, a few renames, some more exposed functionality, and a couple of properties that have no business being set from scripts made read-only. Moved a lot more LUA documentation out of source comments into the documentation, and expanded on it in the process. Got more UI code out of the input manager. Changed input sequence poller to a polymorphic class where you specify your intention upfront. Changed the cheat plugin to use UI Clear to clear hotkey assignments and leave them unchanged if the user starts assignment but doesn't press any switches. Ported AJR's fix for over-eager double-click recognition from SDL to Windows OSD (mame\luaengine.cpp). More LUA interface cleanup, additional properties and methods, and documentation migration/expansion. Emulated switch inputs can have "not" codes applied to host input axis directions. It works the same way as host switch inputs - push twice for a "not" prefix. Input polling helpers no longer need to store state in the input device items. There's less leakage, and less chance of things interfering with each other. Allow snapshot view options to be configured through the internal UI via the video options menu. Made video options menus place initial focus on the currently selected view item. Removed some crud from the menu base class. Fixed the description of the "snapview" option. The value to get raw screen pixels was changed to "native" a long time ago but the description was never updated (mame\luaengine.cpp). Exposed the "native snapview" option on the video manager. Trying to use presence of a single view is a poor proxy that breaks with multi-screen systems. Allow rotation to be changed for native snapshot views, and disable the zoom to screen area control when it has no effect on the selected view. Treat an empty string identically to "auto" for view selectction. Previously this was being used for prefix matching so it would force the first view (this caused the bad snapshot view selection. It had been relying on "internal" not being a common view name prefix so it fell through to automatic selection, but when changed to an empty string it forced the first view). Documented "auto" as well as "native" for the -snapview option and changed the default to auto rather than an empty string for consistency with the -viewN options. Added [w]string_view handlers to the stuff that's instantiated in strformat.cpp since we'll be increasingly using them. Cleaned up and updated some documentation. More LUA interface cleanup - it's simpler with cleaner underlyng APIs. Made the sound manager mute controls readable, and got rid of system enable since it just controls system mute anyway. This was causing confusion: phantom2 was trying to use both independentlyt casuing the mute bit to be ignored. The LUA interface changes are mostly changing methods to properties, some renames to make things clearer, and some additional properties for better control over snapshots (mame\luaengine.cpp). Exposed a couple more things to LUA so the plugins can show the actual key mapped to UI clear [Vas Crabb]. Fixed constructable usertypes and changed definition for rest of usertypes (mame\luaengine.cpp). Exposed cassette image devices (mame\luaengine.cpp). Properly handle numpad enter (3rdparty\linenoise\linenoise.c) [Carl]. Exposed device_slot_interface, emu_options and slot options (mame\luaengine.cpp). Exposing image format information to LUA. Feedback from Carl. Addressing what I expect would become Vas feedback. Vas feedback, minus making image formats a container wrapper. Changed image formats to have a proper container wrapper. Now indexed by an integer index [Nathan Woods]. Replaced environment variable substitution function with core version (plugins\*). Use emu.subst_env (plugins\portname\init.lua) [AJR].
 - 0.226              : Updated to SQLite 3.33.0. Sync Nano SVG with upstream (3rdparty\nanosvg). This version is supposed to be less sensitive to the global locale. Updated 3rdparty/expat to 2.2.10 [Vas Crabb].
 - 0.225              : Added load_software, time_until_pos and ioport():type_seq to frontend\mame\luaengine.cpp. 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) [Carl].
 - 0.223              : Don't save empty configuration files file (plugins\autofire\autofire_save.lua) [kunikuni].
 - 0.222              : Consolidated code for pasing enum strings [Nathan Woods]. Fixed scripts\target\mame\dummy.lua [Frank Palazzolo]. Added rom_entry library (mame\luaengine.cpp). Expose ioport_setting to luaengine [feos]. New AsmJit library (https://asmjit.com) + Sync AsmJit with upstream [Patrick Mackinlay]. Added AsmJit to COPYIN [Vas Crabb]. Setting analog inputs don't work in LUA (emu\ioport.cpp). Fixed set_value for analog inputs [Tim Lindner].
 - 0.221              : Removed util\sha1.cpp/h and sha1.hpp. Work around deprecation warning - Removing something in 3.9 when the replacement was only added in 3.2 is typical of Python's disregard for stability (scripts\build\msgfmt.py). Re-Implemented SHA-1 and get rid of the two third-party implementations (util\hashing.cpp) [Vas Crabb]. Enhancing LUA video:begin_recording() function with optional format parameter [Nathan Woods].
 - 0.220              : Added save state to/from binary string buffer (mame\luaengine.cpp) [feos].
 - 0.219              : Fixed MM5837 entry in scripts\src\sound.lua, allows clean single driver build of beezer.cpp to complete [Osso]. Sync with GENie upstream revision [Julian Sikorski]. Exposed osd_subst_env as emu.subst_env (mame\luaengine.cpp). This is intended as a functional replacement for lfs.env_replace, but that is now used in a fair number of plugins whose code structure I don't know well enough to trust that the simple substitution is correct [AJR].
 - 0.218              : Allow reading a block of raw bytes for addr_space. Redo space:read_block() to be more rebust and flexible (mame\luaengine.cpp) [feos].
 - 0.217              : Added address_mask and endianness to addr_space library (mame\luaengine.cpp) [feos].
 - 0.216              : Sync BGFX, BX and BIMG with upstream. Fixed the hlsl fs_chroma.sc matrix transposition properly [Julian Sikorski]. Disconnect if timed out (plugins\discord\init.lua) [Carl]. The LUA engine has been updated in a way that maintains source compatibility with existing LUA scripts. This is less than ideal, but it minimises impact. Ideally someone (possibly me) will be able to expose the input sequence poller helper properly. I tested the changes with the cheat and autofire plugins and I was able to assign sequences. However I found two issues: It's seems impossible to assign a more complex sequence than a single key/button in the autofire plugin (i.e. no AND or NOT conditions, I confirmed this is pre-existing, not a regression), and in both the cheat and autofire plugins I found it a bit unwieldy trying to enter a complex sequence without live feedback of the sequence as it's built (this was also applicable to MAME's own input mapping menu until I added the live display yesterday). Only time out input sequence entry if nothing is entered (plugins\autofire and plugins\cheat) [Vas Crabb].
 - 0.215              : Added 3rdparty\bimg\3rdparty\astc-codec/* and bgfx\src\renderer_nvn.cpp. Callback after sound update has generated new samples (mame\luaengine.cpp) [feos]. Sync GENie, BGFX, BX and BIMG with latest upstream. Added astc-codec decoder and NVN stub. Build BGFX as Objective-C++ on MacOS. Enabled Direct3D12 and Vulkan BGFX rendering backends. Added and building of spirv shaders [Julian Sikorski]. Do texture format conversion for BGFX via a full-screen GPU pass [Ryan Holtz]. Fixed BGFX build on older OS X systems. The Vulkan renderer has to be disabled on Yosemite and older because its backend depends on Metal [AJR]. Unbreak building shaders in cmd shell and added support for building them in MINGW bash shell (bgfx\scripts\tools.mk) [Julian Sikorski].
 - 0.214              : Exposing running_machine::exit_pending() and running_machine::hard_reset_pending() to LUA. Fixed issue that caused most LUA callbacks to be duplicated (mame\luaengine.cpp). Fixes "autofire" plugin is not working properly [Nathan Woods].
 - 0.213              : Enabled default move vector/assignments in core_options and changed plugin_options code to use them (util\options.h and mame\pluginopts.cpp). Changed mechanisms for overriding the mandatory file manager. Removed the -skip_mandatory_fileman command line option. Created an emu.register_mandatory_file_manager_override() LUA function to allow LUA plugins to substitute the mandatory file manager. Surpressing mandatory file manager when -str (seconds to run) is on. Exposing input device classes, input devices and input device items to LUA. Changed LUA seq_poll_start to take the input_item_class as a string. This seems to work around a problem that (at least for me) caused the'sol::object seq' parameter to not properly handle a specified sol::user<input_seq>. Created emu.register_before_load_settings(), to allow LUA scripts to override default input port values before settings are loaded. New ioport_field methods/props ([set_]default_input_seq(), port). Extracting input sequence cleaning logic into an seq_clean() function and exposing to LUA. Exposing ioport_manager::type_group() and ioport_field::keyboard_codes() to LUA [Nathan Woods]. Exposed sound buffer and samplerate to luaengine [feos].
 - 0.212              : LUA engine: Added video:size(), video:pixels() and screen:refresh_attoseconds(). pixels() and size() correspond to internal game resolution covering all screens and internal pixel colors. The same values are used for bitmap dumping. Similar things available for screen_device LUA library take into account final UI resolution and colors, so they can't be used when accurate framebuffer is needed. refresh_attoseconds() allows to calculate precise numerator and denominator for framerate [feos]. Exposing sound_manager and natual_keyboard object to LUA. Making video_manager::effective_frameskip() public and exposing via LUA. Saving snapshots in LUA now supports absolute paths. Exposed various methods/properties on device_image_interface to LUA: Exposing must_be_loaded and display() on device_image_interface's LUA implementation. Exposing device_image_interface::create() to LUA. Exposed the ability to set input seqs on ioport_field in LUA. Exposed miscellaneous ioport_field methods and properties to LUA: ioport_field::type_class(), ioport_field::seq(), user values on ioport_field and writing user values on ioport_field. Exposing device_image_interface::[brief_]instance_name() to LUA. Added ui_input_manager::[set_]presses_enabled() and exposed to LUA. Created a -skip_mandatory_fileman option (skip prompting the user for any mandatory images with the file manager at startup). Added support for profiling LUA. Refactored MAME's plugin system (plugins\boot.lua, mame\clifront.cpp, luaengine.cpp, mame.cpp, pluginopts.cpp/h and ui\miscmenu.cpp). LUA boot.lua file now handles multiple paths (delimited by semicolons) on -pluginspath [Nathan Woods]. Indicate that plugin errors are now fatal [Robbbert].
 - 0.211              : Changed autofire config directory to homepath (plugins\autofire\autofire_save.lua and init.lua) [Jack Li].
 - 0.210              : Added plugins\autofire\autofire_menu.lua, autofire_save.lua, init.lua and plugin.json. Improved comments (fixes and updates). Fixed/Added comments for emu.thread(), machine:popmessage(), watch/breakpoints, debugger presence note, val for write functions, input:seq_poll*, memory_share library, explain emu.register_callback(callback, name) and emu.step(). Added machine_flags library. Make machine_flags fields of game_driver rather than a new table [feos]. Added plugin for autofire: Hardcoded autofire plugin. Changed register_frame to register_frame_done, removed pause check. Added support for multiple buttons loaded from a file. Implemented saving settings on quit. Fixed multiple keybindings for same button from overwriting each other. Replaced double-quotes with single-quotes. Refactored saving/loading into a separate module. Changed button format to use input_code rather than string token. Settings format is unchanged (still saved as string token). Rewrote table initialization in save/load. Implemented menus. Added helper messages for "on frames"/"off frames". Fixed bugs related to reloading roms. Soft resets would reload autofire settings without saving them first, causing the settings to be lost. This commit adds a check to only reload from the settings file if loading a different rom than before. Hard resets would leave bad references lying around, causing MAME to crash under certain circumstances (i.e. resetting while in the edit menu and entering the menu again). This commit makes sure to properly clean up and reinitialize menu and button states when resetting. Used set_folder to avoid hardcoding plugin name in settings path [Jack Li].
 - 0.207              : Fixed 3rdparty/ASIO to compile with libc++ 9.0 (asio\detail\config.hpp). Fixed 3rdparty\lua\src\lundump.c Clang 9 compile [Couriersud].
 - 0.205              : Updated BGFX, BIMG and BX to latest upstream [Ryan Holtz].
 - 0.204              : Added description comments for emu.item() and make render.targets table a property to match the doc (mame\luaengine.cpp) [feos]. Added background color for draw_text and added pixels() function (mame\luaengine.cpp) [Carl]. Added pixel(x,y) function (mame\luaengine.cpp) [Ryan Holtz].
 - 0.203              : Use hex values for mask (plugins\portname\init.lua). Added softlist parent loading and import tag (plugins\portname\init.lua) [Carl].
 - 0.199              : Added plugins\discord\init.lua and discord\plugin.json. Added discord presence plugin. Use domain sockets and pipes. Use explicit integer sizes rather than "native" types (plugins\cheatfind\init.lua) [Carl].
 - 0.198              : Initial import of SoftFloat release 3E. This is a pre-usage import so everyone can get things in line for various compilers. GCC/Clang should be OK on most targets as-is. MSVC may need to edit 3rdparty/softfloat3/build/MAME/build.h to conform. Please report failure/success with various compilers [R. Belmont].
 - 0.197              : Save a ref to waiting co-routine to prevent it from being gc'd (mame\luaengine.cpp). Require returns true if package returns nil (plugins\data\database.lua). Changed indentation in save file by request and sort the output file (plugins\portname\init.lua) [Carl].
 - 0.196              : Use screen_device_iterator rather than first_screen (mame\luaengine.cpp). Changed Port name to address objections, also as suggested converted the controls.ini in repo https://github.com/cracyc/portname. Removed the import but will still load parent if available + Describe revised format (plugins\portname\init.lua). Give up if the database can't be created (plugins\data\database.lua) [Carl].
 - 0.195              : Make the console behave like the docs, unlike the official LUA console if you are in a block, entering a newline on a blank line gets you out (plugins\console\init.lua) [Carl]. Fixed building using system utf8proc and portaudio. Allow using system-wide ASIO (1.11.0 or higher required), GLM and RapidJson headers. Put all ext_includedir calls together. Fixed build failure when SOURCES is defined (scripts\build\makedep.py and target\mame\arcade.lua) [Julian Sikorski].
 - 0.194              : Added plugins\portname\init.lua and plugin.json. New WIP plugin for loading translations or alt names for input port fields. Use a subdir and emu.file so they can be packaged in ZIPs. Added #import and #set tags. Note: Use plugin options to save the input port list to a gettext formatted file. The file is saved in the ctrlrpath dir. Use #import <filename.po> to load names from a different file. Use #set <set1>,<set2>,... to override names for a child set, common names should be listed at the top before any #set tag. Sort the list and print the port names and masks (plugins\portname\init.lua and plugin.json) [Carl].
 - 0.193              : Added web\layout.xsl. Updated GENie, BGFX and BX. Added BIMG since it is separated now, updated all shader binaries and MAME part of code to support new interfaces [Miodrag Milanovic]. Basic LAY to SVG XSLT filter for (MESS) Prodigy (web\layout.xsl) [Joakim Larsson Edstrom]. Raise a fatal error if LUA console is requested but the console plugin is not found (rather than crashing) (frontend\mame\mame.cpp) [Sylvain Glaize]. Fixed crlf issue (plugins\data\load_dat.lua) [smf].
 - 0.191              : Fix compile warning under Emscripten (3rdparty\asio\include\asio\detail\socket_types.hpp) [Justin Kerk]. Restore ROM directory, it's used when building packages [Vas Crabb].
 - 0.190              : LUA engine: Translation support. Plugins: Gettextify localizable strings ( "" -> _("") ) [Carl].
 - 0.189              : LUA engine: Added debugger manager support [Carl]. Added util\server_http_impl.hpp and server_ws_impl.hpp. Refactor server_{ws,http}.hpp into separate interface and implementation headers. When shutting down the HTTP server, also explicitly stop the asio::io_context (emu\http.cpp) [Christian Brunschen].
 - 0.188              : LUA engine: Safer cleanup and fixed leak [Vas Crabb]. travis.yml: Fixed QT 5.5.1 for Ubuntu 14.04 "Trusty Tahr" (allows Travis CI build to complete) [dankan1890]. Added an external panel for the (MESS) Ensoniq VFX family of keyboards, with a websocket interface and an HTML/Javascript implementation that can be served over HTTP. Better handle the case where HTTP is not enabled (emu\http.cpp) [Christian Brunschen].
 - 0.186              : LUA scripts cleanup (scripts\src\lib.lua) [dankan1890]. Replaced Linenoise-NG with a different port that is simpler and uses a different UTF8 parser. Support LUA style args for some emu.file members (mame\luaengine.cpp) [Carl]. Work around older libc (3rdparty\linenoise\linenoise.c) [Vas Crabb].
 - 0.185              : Updated BGFX, BX and GENie [Branimir Karadzic]. Updated BGFX shaders [Miodrag Milanovic]. Assume LLVM libc++ if __llvm__ is defined but __GLIBC__ is undefined (bx\platform.h). Fixed GENie linking order [Vas Crabb].
 - 0.184              : Added emu\http.cpp/h. Updated GLM to tip of stable branch (0.9.8.5 pre-release), fixes build with MacPorts Clang [Vas Crabb]. Added emu_file::write, enables the use of sockets and pipes from LUA without needing a third party library (mame\luaengine.cpp) [Carl]. Refactored HTTP handling to be easier to extend and use [Miodrag Milanovic].
 - 0.183              : Updated libjpeg to 9c [hap]. Updated BGFX, BX, Catch, GENie, GLM, LUA to 5.3.4 and Sol2. BX is now static library [Branimir Karadzic, Miodrag Milanovic]. Fixed unable to load DAT file using multiple paths (plugins\data\load_dat.lua) [Carl]. Sync with upstream (util\client_http.hpp) [Miodrag Milanovic].
 - 0.182              : Added emu\main.cpp, lib\util\base64.hpp, client_http.hpp, client_https.hpp, client_ws.hpp, client_wss.hpp, crypto.hpp, path_to_regex.cpp, path_to_regex.hpp, server_http.hp, server_https.hpp, server_ws.hpp, server_wss.hpp, sha1.hpp, web\LICENSE and README.md. Updated BGFX, BX and GENie [Branimir Karadzic]. Added initial HTTP/HTTPS webserver/websocket server support. Added websockets as well [Miodrag Milanovic]. UWP ASIO fix. Already sent pull request upstream. Fixed alt key input [Brad Hughes]. Added 'WAIT' function to LUA engine [Carl].
 - 0.181              : UWP (Universal Windows Platform): Added temporary signing key for MSBUILD support (uwp\mame_TemporaryKey.pfx) [Brad Hughes].
 - 0.180              : Added 3rdparty\lua-linenoise\linenoise.c, scripts\src\osd\uwp.lua, uwp_cfg.lua, osd\uwp\uwpcompat.cpp/h, uwp\video.cpp/h, uwp\window.cpp/h, input\input_uwp.cpp and tests\lib\util\options.cpp. Removed lib\http\connection.cpp/hpp, connection_manager.cpp/hpp, header.hpp, mime_types.cpp/hpp, reply.cpp/hpp, request.hpp, request_handler.cpp/hpp, request_parser.cpp/hpp and server.cpp/hpp. Updated BGFX and BX and recompiled shaders [Branimir Karadzic]. Fixed GLSL. Sync with GENie and addition of VS2017. Replaced LUAbridge in LUAengine with Sol2. Removed non-operational LUA console code. Updated PugiXML library, no override patches anymore. Added LUA-linenoise by Carls request. Updated Sol2, made LUA console not crash for nil data. Removing SOL_CHECK_ARGUMENTS till we figure all consequences. Added basic HTTP server (lib\http\), not active yet, based on ASIO example with small refactoring included. Readded sqlite3 and lsqlite3. Made timer plugin use sqlite3 (plugins\timer\init.lua). Make 3rdparty compile for UWP and start adding new OSD for UWP based on previous Brad work. Added video and window code to UWP. MALLOC_DEBUG part is not able to compile on UWP. Added clipboard handling for UWP. Added basic keyboard input to UWP. Enable sound for UWP. Added support to store files on Local storage for UWP. Added OPTION_HOMEPATH to point to read/write folder, for now used by LUA scripts. Copied all needed files so plugins could be started under UWP. Implemented GetFileSize and proper winrt file open. Make executable for scripts\src\tests.lua follow rules for main file. Make normal notation for require. Split properly tests. Added more applicable Catch testing framework and converted all tests to be done properly by guidelines. Still needs TESTS=1 to enable build of tests. Removed Connection Manager part since it is used for compilers check, no need for this to be in release [Miodrag Milanovic]. Updated BGFX shader path for Emscripten build (src\main.lua) [Justin Kerk]. Fixed save_item in luaengine. Hide stuff that shouldn't be touched directly in registry (mame\luaengine.cpp) [Carl]. New UWP icons/images [JacKc]. UWP: Output verbose to debug plus turn off view scaling (windows\winmain.cpp). Different default font. Tahoma not available on XBOX (font\font_dwrite.cpp). Enable gamepad support and update keyboard support. Better keyboard key names. Hotkeys for gamepad plus more time for gamepad discovery. Removed explicit links for winstore builds. Keyboard scancodes start at 1. Also thread synchronization which will be needed later when we have multiple windows [Brad Hughes]. Fixed make VERBOSE=1 not showing archive commands for static libraries (3rdparty\genie\src\host\scripts.c) [Happy].
 - 0.179              : Added ASIO networking library. Removed libuv library. Replaced code usage of libuv with ASIO library. Added more warning disable to support compile on various Clang versions. Added Sol2 header only library as future replacement for luabridge. Added Linenoise Next Generation library for CLI. Added new types, fixing LUA part (mame\luaengine.cpp). Fixed Google benchmarks build and cleanup U64 and S64 macro definition, it is now in standard (benchmarks\eminline_native.cpp, eminline_noasm.cpp and osd\osdcomm.h) [Miodrag Milanovic].
 - 0.178              : Updated BGFX and BX and updated MAME code to support new API. Generated missing shaders. Updated GLM, Google Benchmark, GoogleTest, LUA to 5.3.3, PugiXML and RapidJson [Miodrag Milanovic].
 - 0.177              : Changed 'const char *' to std::string (mame\luaengine.h) [Carl]. Updated BGFX, BX and rapidjson. Synced BGFX so it can compile with Clang 4.0 [Miodrag Milanovic]. Removed now unnecessary stuff in mame\luaengine.cpp since a copy of searchpath is made and it won't be garbage collected from underneath us [Carl].
 - 0.176              : Added plugin path expansion (plugins/boot.lua and mame\pluginopts.cpp). Fixed pluginspath in LINUX does not resolve $HOME. Fixed plugin.ini file is created in the current folder when it should be created in the "ini" path. Only load plugins in plugin path (plugins\boot.lua) [Carl].
 - 0.175              : Added drone.yml, drone.sec and hiscore\sort_hiscore.lua. Make pluginspath apply in plugins\boot.lua. This fixed pluginspath option not fully recognized (MT06221). Fixed hiscore.dat segaxbd.cpp games, improved error and fixed remaining hiscore parse error, renamed/duplicated sets and removed remaining invalid sets. Sort by source file in an effort to make it somewhat maintainable, mark entries not in mame.lst, and add script to do the sorting and comparing [Carl]. Updated BGFX, BX and GENie. travis.yml: Moved to QT5 and updated for OSX. Removed not used libraries (http-parser and lsqlite3) and commented portaudio that will be used but no need for now. Added PugiXML and used it for hashfile [Miodrag Milanovic]. Created .drone.yml and added file for Windows/Docker CI for MSYS2/MingW64. Updated tea-ci.org settings. 32-bit due to Cygwin 64-bit bug that bites occasionally. Added -validate with output on success. For the secrets, need to update the YAML to enable, the generate the secrets file, containing the hash of this YAML file once tea-ci is updated to support this. Added irc bot notification for tea-ci. Encrypted file contains secrets generated from tea-ci.org interface. Fixed channel for irc notifications - no # + example for pacman, should we never need to bring in non-default deps [Paul Priest].
 - 0.174              : Added plugins\layout\init.lua and plugin.json. Added layout embedded script helper plugin. Example layout scripts for (MESS) fidel_scc and mdndclab. Added callbacks for plugins to LUA engine. Avoid null keys (mame\luaengine.cpp) [Carl]. Updated Benchmark, BGFX, BX, GENie and rapidjson. Added GLM library. Cleanup of network output module [Miodrag Milanovic].
 - 0.173              : Moved emu\luaengine.cpp/h and pluginopts.cpp/h to frontend\mame\. Added modules\ipc\raw_tcp_connection.cpp/h, raw_tcp_server.cpp/h, rtc_tcp_connection.cpp/h, rtc_tcp_server.cpp/h, tcp_connection.cpp/h, tcp_server.cpp/h, plugins\cheat\conv_cheat.lua, init.lua, plugin.json, timer\init.lua, timer\plugin.json and xml_conv.lua. Updated BGFX, BX, GENie, Google Test and rapidjson. Updated libuv to 1.9.0. Added print_verbose, print_info, print_debug and print_error to LUA, and used it instead of print [Miodrag Milanovic]. GENie cl.exe multiprocessor build fix (genie\src\actions\vstudio\vs2010_vcxproj.lua and host\scripts.c) [Brad Hughes]. Added direct and region accessors. Added device_image_interface accessors, emu_file support and indexed items to LUA engine. Added sample plugin for game time. Added play count. Don't fail if file is corrupt (plugins\timer\init.lua). Make flags explicit in LUA engine. Save a copy of the search path so it doesn't get thrown away (emu\luaengine.cpp) [Carl]. Updated LZMA SDK to 15.14. Updated expat to 2.1.1 for security and bug fixes [Vas Crabb]. Basic TCP server based on libuv [Inaki Baz Castillo, Miodrag Milanovic].
 - 0.172              : Added emu\pluginopts.cpp/h and scripts\extlib.lua. Fixed sent upstream (bgfx\src\glcontext_ppapi.cpp). Fixed autoboot_command (emu\luaengine.cpp). Verbose enable debug data with -video bgfx (render\drawbgfx.cpp). Added/updated licenses for 3rdparty. Removed Apache 2 licensed library since it is not possible to mix with GPL2. Updated BGFX, BX, benchmark, rapidjson, Google Test and GENie. BGFX_CONFIG_DEBUG=1 for Debug builds. Now BGFX shader compile tools are built on host machine. Added parsing of plugin json files for machine_manager. Populate plugins structures and start marked plugins. Made menu for plugins [Miodrag Milanovic, Branimir Karadzic]. Fix up a few things in chain JSON loading. Merge bgfx_shader into master [MooglyGuy]. Added ability to build using system libuv (1.8.0 or higher required) [Julian Sikorski]. LUA engine: Added LUA function screen.orientation(). Return rotation_angle, flipx and flipy attributes. Example: S = manager:machine().screens[":screen"]:orientation(); print (s.rotation_angle, s.flipx, s.flipy) [Michele Fochi]. Added popmessage and logerror for LUA. Added software name getter to LUA engine [Carl]. Extend system library support (scripts\extlib.lua). Extend USE_SYSTEM_LIB_* to support providing the library name and include directory. To link against system specific lib names and header path: USE_SYSTEM_LIB_LUA=lua5.3:/usr/include/lua5.3. Multiple link and include path support (ie. USE_SYSTEM_LIB_FLAC=FLAC,ogg:/usr/include) [Jeffrey Clark]. Added data-driven shader system for BGFX renderer: Allows an arbitrary number of passes, with arbitrary connections between passes. Ships by default with three effects: default = Simple bilinear stretch, unfiltered = Simple nearest-neighbor stretch and hlsl = A close reimplementation of the Direct3D HLSL shaders. Does not currently support bloom or vectors. Select the "shader chain" you wish to use with -bgfx_screen_chains * Adjust the settings to your liking with slider controls, saving and loading settings and presets will be added in a future version. See bgfx/chains/hlsl.json and bgfx/hlsl/blit.json for JSON format rules. For additional information, see the official MAME documentation [Ryan Holtz]. Fixed LUA error message when MAME folder is in a dir containing non-English characters (MT06150).
 - 0.171              : Added scripts\build\msgfmt.py, benchmarks\eminline_native.cpp and eminline_noasm.cpp. Added Google Benchmark library. Included sample benchmark for eminline for native and NOASM. Made GoogleTest compile only if tests are compiled. Added libuv library (https://github.com/libuv/libuv). Added http-parser (https://github.com/joyent/http-parser). Added multi window support for BGFX backend. Added lua-zlib, lfs and luv support for LUA, exposed all using luaengine. Added plugins and boot.lua as startup script. Initialize LUA bit earlier to give more opportunities to scripts. Added multiple callback registration for LUA scripts. Added plugin info json files and made system automatically load available plugins and start them if flagged so. Added rapidjson. Added python replacement for msgfmt (Generate binary message catalog from textual translation description) [Miodrag Milanovic]. Initial support for BGFX [Dario Manesku, Branimir Karadzic, Miodrag Milanovic]. Extended LUA API + parameters, video, ioport and cheat [Jeffrey Clark]. Significant speed improvements to the BGFX renderer. Enabled BGFX support for SteamLink. Use RGBA instead of BGRA. Added basic JSON-based single-pass shader effect support to BGFX renderer [MooglyGuy]. GENie make targets for packager scripts [Jeffrey Clark].
 - 0.170              : Removed scripts\depfilter.awk. Finish making makedep.py python3-compatible [O. Galibert]. Synced with latest GENie. Removed FILTER_DEPS, not stable and not functional (scripts\depfilter.awk). Some cleanup in build scripts, GNU C99 for 3rdparty C files. Added latest BX and BGFX. Removed JsonCpp library's source (3rdparty\jsoncpp\*.*) [Miodrag Milanovic]. Added LUA console support back in [Jeffrey Clark].
 - 0.169              : Enabled compiling part of BGFX that required C++11 (src\3rdparty.lua). Update to LUA 5.2.3 [Miodrag Milanovic].
 - 0.168              : New MAME Build Tools (MinGW 5.2.0): http://mamedev.org/?p=412. Removed code that are not needed with official tools. Resolved issue with compile on later MinGW (3rdparty\bgfx\3rdparty\dxsdk\include\dxgitype.h). Added Clang and GCC flags needed for compilation of 3rdparty libraries and removed checking for shadowing in them (src\3rdparty.lua). Removed mongoose due to restricted license and webserver wip till code is restructured. Added cmake support to GENie. Relax dependencies for softfloat (3rdparty\softfloat\mamesf.h and 3rdparty.lua). Added h files to projects as well (mame\arcade.lua, dummy.lua, mame.lua, mess.lua, nl.lua and tiny.lua) [Miodrag Milanovic]. BGFX support for 10.6. Fixed 3rdparty\portmidi\porttime\ptmacosx_mach.c (#import is an Objective-C thing, C should use #include) [Vas Crabb]. Updated to latest BGFX and BX [Branimir Karadzic]. Added info header at the top of each .lua file [Tafoid].
 - 0.167              : Moved build\file2str.py, makedep.py, makelist.py, png.py, png2bdc.py and verinfo.py to scripts\build\. BX use pthread_setname_np(3) only with __GLIBC__ [Juergen Buchmueller]. Removed unneeded backup files (3rdparty\scintilla\gtk\makefile.orig and src\Editor.cxx.orig) [Thomas Klausner]. Added save/load state support to LUA engine [Gyunt]. Get BGFX to compile with MinGW32 headers found in GCC 4.9.3 and 5.2.1 releases (include\dxgitype.h) [Cowering]. Updated BGFX, BX, GENie and googletest/mock. Disabled DX12 on MinGW since it is not working (render\drawbgfx.c) [Miodrag Milanovic].
 - 0.166              : Added GoogleTest and converted tests to us it. Added latest BX and BGFX. Updated scripts for compile with latest BGFX. Removed not needed DirectX files. DX12 not working under MinGW so disabling it for now. Added missing file for OSX (3rdparty\bgfx\src\renderer_mtl.mm). Removed deps from 3rdparty to OSD [Miodrag Milanovic]. Fixed Emscripten compile with GoogleTest [Justin Kerk].
 - 0.165              : Added 3rdparty\genie\build\gmake.os2\Makefile and genie.make. Make all scripts Python 2/3 compatible [O. Galibert]. Added missing header for va_list (3rdparty\mongoose\mongoose.h) [Thomas Klausner]. OS/2 patches for MAME 0.164 [KO Myung-Hun].
 - 0.164              : Updated Mongoose library to latest. github version of jsoncpp with some fixes: pedantic and C++98 and others [Cowering]. Don't redefine MONGOOSE_ENABLE_THREADS on Windows [Balrog].
 - 0.163              : Update GENie and BGFX. Fixed MinGW compile (3rdparty\bgfx\src\renderer_d3d11.cpp). Added portaudio library and library for supporting unit tests with some initial tests. Added LUA script/makefile changes to support building tests and portaudio (scripts\src\tests.lua). Fixed compile for portaudio on 32bit and windows Clang (src\3rdparty.lua). Fix for unknown warning options for Clang 3.5 (src\3rdparty.lua). Updated metadata in LUA files (scripts\src\bus.lua, cpu.lua, machine.lua, sound.lua and video.lua) [Miodrag Milanovic]. Added check for nil first (src\3rdparty.lua) [Peter Ferrie].
 - 0.162              : Added scripts\target\mame\arcade.lua. Moved scripts\target\ume\dummy.lua and mess\mess.lua to scripts\target\mame\. Removed scripts\target\mess\tiny.lua, ume\tiny.lua and ume.lua.
 - 0.161              : Added scripts\depfilter.awk, scripts\src\tools.lua, scripts\target\mame\mame.lua and tiny.lua. Updated to latest 3rdparty. Moved build system to GENie. Made tools to be built with TOOLS=1 param. Added -Wno-unused-result for all GCC versions (scripts\genie.lua). Added USE_BGFX for unsupported platforms to makefile and scripts\genie.lua. Made BGFX compile on more platforms. Added GAWK script to make deps more sane. thanks to OG [Miodrag Milanovic]. Accept any LUA number type as coordinate This commit fixes a type confusion bug in all draw_*() API methods. When decimal (ie. subpixels) values were passed by user scripts, they were incorrectly casted from float to plain integers, resulting in incorrect graphical artifacts. As this may happen quite often within scripts manipulating numerical values in LUA, we now also accept decimal values as coordinates. Optional text color for LUA engine to draw_text(). draw_text() now accepts an optional fourth parameter to specify text color, in ARGB format [Luca Bruno]. Minor bugfixes and enhancements for LUA engine [O. Galibert]. Fixed build on OpenBSD [Brian Callahan].
 - 0.160              : Added docs\luaengine.md. Removed unused imports and extra semicolons (build\makelist.py and verinfo.py). Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\arcompact\arcompact_make.py, h8\h8make.py, m6502\m6502make.py, m6809\m6809make.py, mcs96\mcs96make.py and tms57002\tmsmake.py) [Mike Naberezny]. Updated 3rdparty libraries (BGFX, BX, GENie and Mongoose) to latest. Updated Mongoose with some patches sent upstream. Android fixes (luaengine.c, luaconf.h, formats\dfi_dsk.c and netlist\plists.h) [Miodrag Milanovic]. Python script cleanups based on PyCharm inspection (arcompact_make.py, file2str.py, h8make.py, jedtest.py, m6809make.py, makelist.py, mcs96make.py, png2bdc.py, tmsmake.py and verinfo.py). Set default version of DirectInput to 8 so it builds with 3rdparty/dxsdk out of the box (windows\windows.mak) [Oliver Stoeneberg]. Send error messages to stderr instead of stdout (file2str.py, makelist.py, h8make.py and chdtest.py). Open chdtest.py as binary, read in chunks to reduce memory usage. Make chdtest.py Python 3 compatible [Mike Naberezny]. Compile fix for mongoose.c propagated upstream [Firewave]. Added initial documentation for luaengine API. Use per-container pixel aspect (LUA draw_text bugfix). Do not assume ui-container aspect when drawing on other containers. This fixes LUA draw_text() in multi-screens games, where the font aspect for each screen is wrongly computed on the aggregated target. Clip screen coordinates to screen size [Luca Bruno]. Screen drawing fixes and initial docs (emu\luaengine.c) [Olivier Galibert].
 - 0.159              : Added scripts\genie.lua, src\main.lua, windows\drawbgfx.c. Converted build\makelist.c and build\verinfo.c to build\makelist.py and build\verinfo.py. Added BGFX latest code to 3rdparty. Added dxsdk since lot of things are missing in MinGW headers and libs. Renamed dxsdk .h files so they can be cross compiled on Linux. Added GENie build system source to 3rdparty. Added building of BGFX library. Added BGFX as video output. For now rendering info shown only. Added BGFX skeleton to SDL build as well (sdl\drawbgfx.c). Converted makelist and verinfo implementation to Python. Made BGFX compile for Apple GCC 4.2. Updated of BX, BGFX, GENie and mongoose. Mongoose change should fixed issue on XP. Make sqllite3 compile use CCOMFLAGS as well [Miodrag Milanovic]. Merged in BGFX changes and adapted BGFX draw to inherit from osd_renderer. Made BGFX optional for SLD builds. You have to specify USE_BGFX=1 to enable BGFX. This is a temporary measure until dynamic linking is resolved. BGFX library is set in windows.mak and sdl.mak now. This ensures the library is only build when needed. This is necessary to be able to build MAME on systems without OpenGL support. Support was added for an optional BIN location for executables. The default is still the root folder. Setting BIN=bin e.g. will put executables in bin [Couriersud]. Don't use $(DEFS) for moc (sdl\sdl.mak and windows\windows.mak) [Balrog]. Make verinfo.py capable of producing Info.plist for OSX. Re-link emulator binary if version source file changes. If verinfo.py fails don't touch the output file, so subsequent builds won't think it's up-to-date [Vas Crabb].
 - 0.158              : Changed build\png2bdc.c to build\png.py and png2bdc.py. Converted png2bcd tool to Python [Andrew Gardner]. Added HUD-like capabilities to LUA engine [O. Galibert]. Added full LuaBridge, Lua 5.3 and lsqlite3 sources in 3rdparty folder [Miodrag Milanovic]. Fixed name/tag confusion. Don't mix names and tags when exposing devices to LUA. While at it, also provide the shortname. LuaBridge Stack<UINT64> specialization. Provide a Stack<UINT64> specialization for LuaBridge, later needed by some APIs. Exposed device state entries. This commit exposes device_state_entry to LUA, providing methods to enumerate available states for a device object, as well as getting and setting their values. It is mostly usefull to inspect and manipulate registers content. Rework state getter/setter for saves. Improved state_get_value and state_set_value by using the parent device_state_interface and triggering callbacks for updates. Use visible_area for drawing. Drawing and scripts should use the actual visible_area, not the maximum declared screen size. Added memory writers. Added methods for memory writing, similarly to existing readers. Added per-screen frame_number() getter. Added method to retrieve frame counter for each machine screen [Luca Bruno]. Do not include all LuaBridge if not needed [Miodrag Milanovic]. Removed unused imports (build\file2str.py, png.py, cpu\arcompact\arcompact_make.py and cpu\m6809\m6809make.py). Fixed undefined names "logging" and "fname" (cpu\arcompact\arcompact_make.py, h8\h8make.py, mcs96\mcs96make.py and tms57002\tmsmake.py) [Mike Naberezny].
 - 0.157              : Added romname() and pause()/unpause() (emu\luaengine.c) [Miodrag Milanovic]. Added API versioning (emu\luaengine.c). Added access to devices and address spaces (emu\luaengine.c). This commit maps some more classes (device_t and address_space) to retrieve devices and address spaces out of current running machine. Proxy methods are provided to enumerate/access devices and address spaces, and to read memory content. Added memory-reading capabilities (emu\luaengine.c) [Luca Bruno].
 - 0.154              : Added lib\lua\lib\lsqlite3.c, lualibs.h, lib\sqlite3\shell.c, sqlite3.c/h, sqlite3ext.h, lua\bridge\LuaBridge.h, detail\CFunctions.h, ClassInfo.h, Constructor.h, FuncTraits.h, Iterator.h, LuaException.h, LuaHelpers.h, LuaRef.h, Namespace.h, Stack.h, TypeList.h, TypeTraits.h, Userdata.h and dump.h. Added SQLite3 for future use, not linked in main binary till proved compiling good on all platforms. Created machine_manager as singleton class that contains (for now) one running machine: Updated LUA engine to run in machine_manager instead of being initialized per machine. Added "-console" option so emulator can be started with LUA enabled console. Update LUA to version 5.2.3. Enabled SQLite3 to be compiled and added LUA module for it. Made LUA script execute in main thread, but console running in another. Need to generalize mechanism of communication between threads and do more cleanup. Added a few more commands just for fun (emu_exit and emu_start). Added LuaBridge and exposed few classes as example. Fixed LUA engine initialization. Updated mongoose and fixed initial websocket connecte to client [Miodrag Milanovic]. LUA overhaul [Olivier Galibert, Miodrag Milanovic].
 - 0.151              : Mongoose headers don't play nice with our redefined free() on persnickety compilers [Justin Kerk].
 - 0.149u1            : Make the Python scripts line ending agnostic (fixes *IX/OS X build from mamedev.org source zip) (cpu\m6502\m6502make.py, m6809\m6809make.py, mcs96\mcs96make.py and tms57002\tmsmake.py) [R. Belmont].
 - 0.148u5            : Added emu\luaengine.c/h, lib\lua\Makefile, lapi.c/h, lauxlib.c/h, lbaselib.c, lbitlib.c, lcode.c/h, lcorolib.c, lctype.c/h, ldblib.c, ldebug.c/h, ldo.c/h, ldump.c, lfunc.c/h, lgc.c/h, linit.c, liolib.c, llex.c/h, llimits.h, lmathlib.c, lmem.c/h, loadlib.c, lobject.c/h, lopcodes.c/h, loslib.c, lparser.c/h, lstate.c/h, lstring.c/h, lstrlib.c, ltable.c/h, ltablib.c, ltm.c/h, lua.c/h, lua.hpp, luac.c, luaconf.h, lualib.h, lundump.c/h, lvm.c/h, lvm.h and lzio.c/h. LUA 5.2.2 (Controls execution of the core MAME system) added to libraries, did basic hookup of LUA VM into running machine. Added -script (or -autoboot_script) command to execute LUA script after driver startup. Added emu.keypost function to lua, and made autoboot_command execute that one instead of direct execution, note that you need to add \n for new line at the end now [Miodrag Milanovic].
 - 0.147u4            : Fixed Python to use env variable as described in root makefile; fixes builds on windows with spaces in the path [Balrog, Lord Nightmare].
 - 0.147u3            : Converted jedtest script to Python [Andrew Gardner].



 4.   VIDEO RENDERING SYSTEM

 - 0.285              : Added plugins\offscreenreload.rst, offscreenreload\init.lua, offscreenreload\offscreenreload_menu.lua, offscreenreload\offscreenreload_persist.lua and offscreenreload\plugin.json. Added an off-screen reload helper plugin for people playing lightgun games with other types of controls (plugins\offscreenreload\*) [Vas Crabb]. Make warning msg more generic and brief and put it in a collection(toggle). Added red background and footnote with more verbose msg. No MAME lingo/slang in warning msg (layout\noscreens.lay) [AJR].
 - 0.284              : Fixed PowerPC build (video\rgbutil.cpp). Got rid of syntax that definitely isn't supported from layouts (emu\rendlay.cpp). Got rid of almost all remaining uses of driver_data (mame\*) and of long-obsolete driver_data (emu\machine.h) [Vas Crabb]. Improved accuracy and performance calculating text aspect ratio (emu\rendlay.cpp). Also added another text alignment option to stretch the text to fill its bounds horizontally. The current code calculating the aspect ratio for text involves looping, calculating the width of text for a variety of decreasing aspect ratios until the text's width is less than the available bounds. However, this string width calculation performs the same loop over the text each time, finally multiplying by the candidate aspect ratio. That text width calculation thus really only needs to be done once. Further, instead of trying different aspect ratios, the ratio can simply be calculated directly by dividing the width of the bounds by the string's width. This also calculates a more accurate aspect ratio, rather than always resulting in an aspect ratio of (0.95)^n. For example, when trying to fit a 101-pixel wide text into a 100-pixel wide space, the current code would result in an aspect ratio of 0.95, making the text 96 pixels wide,  leaving 4 pixels unused;  the new code will instead calculate the aspect ratio as 100/101 == 0.9900990099... , making the text use the full 100 available pixels. This in turn allows us to easily calculate the ratio also if we want to not just schrink but also stretch the text to fill the available space, so we add that as another text alignment option, number 3 (three). This PR also demonstrates this in the VFX family of layouts, where on the default Full view, the text "MUSIC PRODUCTION SYNTHESIZER" ("DYNAMIC COMPONENT SYNTHESIZER" on the VFX), the logo-like text "ensoniq", and the keyboard-specific markers "VFX", "VFX-SD", "SD-1" and "3 2 V O I C E" can now be made to fill their available space horizontally as they should, making it all look that much more like the real thing. Fixed text clipping introduced by https://github.com/mamedev/mame/pull/14550 (emu\rendlay.cpp) [Christian Brunschen]. Guard against possible divide by 0 (emu\rendlay.cpp) [hap]. Use multibyte.h helpers instead of playing fast and loose with alignments (util\png.cpp) [AJR]. Use raw string for pattern match (scripts\build\check_include_guards.py) [Angelo Salese].
 - 0.283              : Fixed signature of methods for Altivec/VMX (video\rgbutil.cpp) [Vas Crabb].
 - 0.282              : Added video\rgbutil.cpp. Removed video\rgbgen.cpp/h, video\rgbsse.cpp/h and video\rgbvmx.cpp/h. Removed most specialisations of the RGB utilities. Added an ARM NEON bilinear filtering implementation. Increased the intermediate precision of the C++ bilinear filtering implementation. Cleaned up and fully inlined the C++ implementation apart from bilinear filtering. Moved the generic C++ implementation to emu\video\rgbutil.h. Put all bilinear filtering implementations out-of-line in emu\video\rgbutil.cpp [Vas Crabb].
 - 0.281              : Make hit test priority match visual order. Also made order of parsing view element more logical (makes interation with parameter elements less confusing). Some layouts have been updated, others still need work (emu\rendlay.cpp) [Vas Crabb]. Do a 2-pass for updating artwork clickable zone input field state. Fixes Artwork held input is released after crossing overlapping clickable zone edge of same input field. No need to do std::transform here. Yoda style for loop like the surrounding source (emu\render.cpp). Changed legacy marquee UI toggle to Marquees instead of a 2nd Backdrops. Removed invert flag from 7seg element and added inverted 7seg outputs to mpu4 (the only driver that used this flag) (emu\rendlay.cpp) [hap].
 - 0.278              : Got rid of a C string pointer, avoid the need for a static string object (monitor\monitor_module.h). Fixed an object leak (monitor\monitor_dxgi.cpp). Cleaned up some use of COM and COM-like things (font\font_dwrite.cpp and monitor\monitor_dxgi.cpp) [Vas Crabb]. Fixed issue with throttling when MAME runs at slow motion (-speed lower than 0.2) (emu\video.cpp). Added optional screen update callback for svg screens (emu\screen.cpp). Re-Added support for high priority shadows (emu\drawgfx.h + drawgfxt.ipp) [hap]. 
 - 0.277              : Removed obsolete loadstate workaround (emu\screen.cpp) [hap].
 - 0.276              : Remember last partial updates reset time because of scheduler time travel issue. Fixed possible race condition at reset_origin if vblank start == vblank end (emu\screen.cpp) [hap].
 - 0.274              : Cherry-pick Wayland improvements from upstream BGFX. Properly support Wayland under EGL and Vulkan. Dynamically load libwayland-egl.so.1 when dealing with Wayland to remove dependencies at program startup. Support both X11 and Wayland in the same build: Works for both Vulkan and OpenGL. Removed --with-wayland from genie options. Vulkan loads all three extensions for surface creation instead of only one. Added width and height parameter to GlContext::createSwapChain(), which is needed for EGL to create a SwapChain with the given window size. Dirty-fix the example-22-windows to recreate the FrameBuffer by first destroying and then recreating to make sure the window is released of its swapchain. Fixed dbgText glitch in example-22-windows. Removed old X11-related dependencies for GLFW3. Adapt to latest bgfx wayland code. Fixed Vulkan swapchain invalidation issue. Always clamp render pass to frame buffer size. Fixed formatting. Hopefully fix macOS build (3rdparty\bgfx\*, osd\sdl.lua, osd\sdl_cfg.lua and render\drawbgfx.cpp) [Julian Sikorski]. Mark gfx ram dirty after load state (emu\digfx.cpp). Account for flipped tilemap in get_info_debug (emu\tilemap.cpp). Fixes tilemap viewer doesn't account for screen flipx x/y when hovering mouse cursor over tiles [hap].
 - 0.273              : Prevent race condition on drivers with vblank at y=0, causing partial updates to fail after load state (emu\screen.cpp) [hap].
 - 0.272              : Fixed apparent bug in draw_quad_palette16_add (emu\rendersw.hxx) [hap]. Support RGB multiply blending with 16bpp textures. Get rid of obsolete overly specific blend function (emu\rendersw.hxx) [Vas Crabb].
 - 0.271              : Always translate coordinates if container is found (emu\render.cpp). Fixes Touch drag gestures that leave the window do not behave correctly. The menu jumps to an unexpected position when the touch point is outside the window [Vas Crabb].
 - 0.268              : Generate cosine table at compile time (emu\rendersw.hxx) [FlykeSpice]. Made cosine table constexpr, got rid of lambda and loop. Appease complilers that don't believe in constexpr trigonometry. Don't use class template deduction with large initialiser list that upsets Clang (emu\rendersw.hxx) [Vas Crabb].
 - 0.266              : Clarified licensing (opengl\gl_shader_tool.h). Log script errors at warning level rather than verbose level (plugins\layout\init.lua). Reordered all layouts to place views after element and group definitions and scripts last. This matches how layout files are interpreted by MAME. Fixed various errors identified by validating layout files against an XSD schema [Vas Crabb].
 - 0.265              : Support pressing multiple clickable layout items simultaneously. Allow UI elements to be drawn in any window (emu\render.cpp). Added layout view events for pointer input (emu\render.cpp and mame\luaengine_render.cpp) [Vas Crabb]. Fixed possible array overflow with system name string (d3d\d3dhlsl.cpp) [hap].
 - 0.264              : Set minimum width of scaled bitmap for font chars used in .lay files to 1 if it's larger than 0.5, this prevents lowercase l and i not showing while the text label is still readable (emu\rendfont.cpp). Fixed off-by-1 error with alpha blended disk element (emu\rendlay.cpp). Increased texture hashtable size ((MESS) Chess Robot Adversary were crashing with opengl renderer) (render\drawogl.cpp) [hap].
 - 0.262              : Keep alpha channel intact when drawing text components (emu\rendlay.cpp). Improves appearance of text drawn over colors other than black [Devin Acker]. Added forward declaration for render_bounds (emu\emufwd.h) [AJR]. Added out of bounds check to 16-bit get_texel (32-bit version already has it) (emu\rendersw.hxx). Let's make noscreens layout window aspect ratio 4:3 (layout\noscreens.lay) [hap].
 - 0.261              : Added some additional layout functionality and script bindings (mame\luaengine_render.cpp). Added bitmap classes to layout sandbox (plugins\layout\init.lua) [Vas Crabb]. Use std::clamp (render\bgfx\clearreader.cpp) [AJR].
 - 0.260              : Cherry-picked upstream commits needed to support Wayland on Linux (3rdparty\bgfx\*). Added initial support for Wayland on Linux (render\drawbgfx.cpp) [Julian Sikorski]. Return an error if Wayland EGL surface can't be created for additional windows (render\drawbgfx.cpp) [Vas Crabb]. Fixed duplicate import of GL functions on Linux when using GLES 2.0. Fixes build when using GLES 2.0 and Wayland (bgfx\src\glimports.h) [Romain Tisserand]. Nuke previous scaler when releasing a render_texture in case it gets recycled later. This fixes occasional bad downcasts in debug builds when trying to bring up the tilemap viewer in certain drivers (emu\render.cpp) [AJR].
 - 0.259              : Use multibyte.h functions (emu\rendfont.cpp) [AJR].
 - 0.258              : Avoid divide-by-zero with low-resolution time source. Emscripten builds are affected as clock resolution is intentionally degraded to mitigate side channel exfiltration attacks (render\draw13.cpp) [Rob]. Catch exceptions by const reference (emu\render.cpp) [Vas Crabb]. Use std::clamp for clamping aspect ratio (emu\render.cpp). Size point primitives properly. This fixes -beam_dot_size being effectively ignored by this renderer (render\drawogl.cpp). Fixes invisible projectiles in Star Castle on OpenGL backend [AJR]. 
 - 0.256              : BGFX: Fixed glslang build with newer GNU C/C++ standard library verisons (bgfx\3rdparty\glslang\glslang\MachineIndependent\SymbolTable.h) [Vas Crabb].
 - 0.255              : Raised maximum prescale value to 20 to account for very small LCDs (windows\video.cpp). Replaced old MCFG_ references in a warning message with member function names (emu\screen.cpp) [Ryan Holtz]. D3D9: Fixed lack of post-pass application when bloom is disabled. Fixes shadow_mask does not work unless bloom scale is a non-zero value (render\d3d\d3dhlsl.cpp). Always set a default texture at scene start. Fixes pausing a game while in windowed mode causes the screen to flash grey or white (render\drawd3d.cpp). BGFX: Removed duplicate scanline_variation setting (bgfx\chains\hlsl.json) [Ryan Holtz].
 - 0.253              : Fixed regression in distortion shader (hlsl\distortion.fx). Return an alpha of 1 rather than texel alpha, fixes broken HLSL bloom since MAME 0.252 (hlsl\bloom.fx). More D3D HLSL regression fixes: Fixed double-drawing of screen data with D3D9 HLSL and screen scale/offset (hlsl\post.fx). Fixed screen-container search function fixes HLSL and Game & Watch combo causing failure to display and ACCESS VIOLATION's (render\d3d\d3dhlsl.cpp). Fixed downsample pass, fixes blocky vector bloom (render\d3d\d3dhlsl.cpp). Changed screen LUT application to be applied during the color convolution pass on raster systems (render\d3d\d3dhlsl.cpp). Swapped red and blue channels (fixes GitHub #11001) (artwork\lut-default.png). Fixed alpha value when clearing target (render\d3d\d3dhlsl.cpp) [Ryan Holtz]. Fixed various OpenGL issues, fixes -nowaitvsync not working on Windows with -video opengl. Turned shader tool/shader manager into a class so multiple screens/windows don't nuke each other. Don't try to get supported extensions without a valid GL context with Windows OSD. Use per-context GL function pointers for shader manager and for all functions when using GL dispatch. Windows doesn't guarantee extension functions from one context are valid for another. Hopefully work with more GL implementations (opengl\gl_shader_mgr.cpp). Only treat source file or more sepecific INI as higher priority than CFG file for setting screen chains (render\bgfx\chainmanager.cpp). Marked lots of things constexpr. Bitmaps don't throw exceptions on allocation failure, they just become invalid. Almost nothing in MAME actually checks for this (util\bitmap.cpp and util\palette.cpp) [Vas Crabb]. Fixed accumulated rounding error when drawing text (emu\rendlay.cpp) [hap]. Made out-of-range shift deterministic. Matches the SSE and VMX implementation. Fixes obvious rendering artefacts with the N64 RDP on AArch64 targets (emu\video\rgbgen.h and emu\validity.cpp) [Invertego].
 - 0.252              : Added render\render_module.h. Changed render\blit13.h to render\blit13.ipp. Removed render\draw13.h, render\drawgdi.h, render\drawnone.h, render\drawogl.h and render\drawsdl.h. Major D3D and BGFX code refactoring and bug fixes: BGFX - Improved clearing and blending. Added prescale support. Fixes Artwork + screen combined with multiply-blend does not work on BGFX D3D9, Artwork + multi-screen layer blending problem with BGFX and BGFX files interacting poorly with art/overlays in warpwarp.cpp games. Fixed blend and tint handling (GitHub #1953). Support non-separated blend mode specification for BGFX effects (bgfx\blendreader.cpp). Reworked how horizontally-padded screen textures are handled. Likely fixes AddressSanitizer: heap-buffer-overflow with -video bgfx and MT08505. Ensure that a texture's width margin is updated in all cases. D3D - Fixed tinting in HLSL post-processing mode. Avoid most redundant state-setting calls. Reduces D3D API calls by about 90% on fruit machine drivers. Assign SourceDims and QuadDims uniforms to only those effects that use them (d3d\d3dhlsl.cpp) [Ryan Holtz]. Got rid of a lot of unnecessary object copying during setup. Fixed texture object lifecycle issues (render\bgfx). Fixed BGFX crash on toggling fullscreen on Linux. Allow BGFX to bounce cleanly when toggling fullscreen on Windows with multiple output screens/windows (windows\window.cpp). Refined configuration handling: Fixes toggle Full Screen bgfx screen chains reset to default. Sort screen chains by none, default, then collation order (rather than whatever order the filesystem yields). Correctly persist settings across fullscreen toggle when explicit screen chains are configured. If chains are specified for a single window only, apply them to all windows. Treat empty string for screen chain as "default" rather than crashing. Changed default setting for bgfx_screen_chains to an empty string so chain selection will be saved/restored per system with mame.ini file created by -cc with no other settings. OSD: Turned video modules into actual modules, fixed various issues. Don't ignore the return status of OSD module initialisation. Attempt to fall back to an alternate module if the selected module fails to initialise. Log more useful diagnostic information at verbose level. Fixed BGFX crash on exit after toggling fullscreen. Also persist more settings than just the selected chains across toggling fullscreen. Turned video modules into OSD modules in the same sense as all the other OSD modules. They now use the same selection/fallback mechanism as all the other modules without special extra code in the OSD implementations. Untangled some object ownership mess. Windows own renderers, OSD objects own windows. Fixed a refrence loop that caused the first window object to always leak. Don't create renderer object until after underlying window has been created. Fixed issues with order of creation/destruction when toggling fullscreen or changing prescale in fullscreen with -switchres in SDL builds. Use more smart pointers in BGFX and Direct3D render modules. Most of the code now reutrns a smart pointer when handing over ownership or a naked pointer when retaining ownership. Fixed a few leaks and simplified cleanup code. Encapsulated various OSD modules better. Implemented probe for D3D module to detect lack of D3D9 sooner (render\drawd3d.cpp). Fixed render\draw13.cpp upsetting older versions of Clang. Check window manager type returned by SDL (BGFX; render\drawbgfx.cpp). Got rid of a simple_list (render\draw13.cpp). Fixed leaked/double freed texture data. The texture malloc's its own storage if the copy info doesn't have the passthrough flag set - the test was reversed (render\draw13.cpp). D3D: Fixed prescaling without HLSL - WRL COM pointer has some surprises. Also added some additional error checking (render\drawd3d.cpp) [Vas Crabb]. Avoid use of non-standard variable-length arrays (render\d3d\d3dhlsl.cpp) [Patrick Mackinlay].
 - 0.251              : Fixed a crash when toggling fullscreen, fixes numscreens 2 followed by Alt-Enter crashes MAME in windowed mode. Check for a non-null renderer before issuing a draw request to the renderer (osd\windows\window.cpp) [Ryan Holtz].
 - 0.250              : Fixed an apparent bug in what appears to be a setter member function (monitor\monitor_module.h) [Vas Crabb].
 - 0.249              : Make information overrides noexcept (device_palette_interface) [AJR].
 - 0.248              : Fixed wrapping constructors for indexed bitmaps taking the wrong parameter type (nothing was using them before) (util\bitmap.h). Fixed potential use-after-free issues with bitmap palettes (util\bitmap.cpp). Removed obsolete sample layout files (bgfx\layouts\sample\horizontal\default.lay and vertical\default.lay) and updated documentation [Vas Crabb]. Make flipscreen setters compatible with writeline (emu\driver.cpp) [hap]. Added a space before %FPS in speed text (emu\video.cpp) [kmg].
 - 0.247              : Give cloneof ext artwork priority over internal artwork (emu\render.cpp) [hap].
 - 0.246              : Fixed -aviwrite/-mngwrite with -snapview native more than two screens. Previously it would attempt to use the same file name for all screens but the first (emu\video.cpp). Improved naming of snapshots, especially when using -snapview native with -aviwrite/-mngwrite (see GitHub #10005). The automatically included screen number should come before the extension if supplied. Also, assume that users actually know what they're doing if they include a dot in a snapshot filename pattern (emu\video.cpp) [Vas Crabb]. BGFX: Increased number of taps for halation and increased maximum width (crt-geom-deluxe). Moved repeated crt-geom/crt-geom-deluxe functions into their own file (crt-geom*). Added support for sRGB output gamma ramp and made it the default (crt-geom and crt-geom-deluxe) [cgwg].
 - 0.245              : Honour antialias flag on textured quad primitives (render\drawbgfx.cpp), fixes gfx view renders blurry tiles for BGFX. Put a layout with views for common monitor aspect ratios in a place where cards can use it (layout\monitors.lay). This is especially useful for the (MESS) NuBus cards that can support portrait monitors [Vas Crabb].
 - 0.244              : Honour texture wrap flag (bgfx\chainmanager.cpp and drawbgfx.cpp) [Vas Crabb].
 - 0.243              : Draw until current hpos (not inclusive) when doing an update_now (emu\screen.cpp and emu\video.cpp). Use set_clock(x) instead of m_clock=x (emu\screen.h) [hap].
 - 0.242              : Removed vestiges of artwork dotmatrix element (emu\rendlay.h). Removed led8seg_gts1 (emu\rendlay.cpp). Fixed possible color overflow on disk element (emu\rendlay.cpp). This fixes color channels may overflow depending on its color alpha value when using the disk element in internal artwork [hap]. Added video-init fallback functionality to other OSDs (osd\mac\window.cpp, sdl\window.cpp and windows\window.cpp). Removed no-longer-needed addition of post_create() [Ryan Holtz]. (MESS) Spectrum graphics improvements (emu\screen.h) [holub]. BGFX: Added default LUT PNG and fixes LUT-effect crash. Fixed external texture loading and restoring HQx filters. Improved stability when encountering missing files and improved multi-window stability. Fixed YUV shader to have better brightness balance [Ryan Holtz]. Added error retval check for BGFX on fallback (sdl\window.cpp and windows\window.cpp) [hap].
 - 0.241              : Modest refactoring (emu\rendfont.cpp): Use ioprocs classes rather than emu_file in various helper functions. Make save_cached take an already-open file (like load_cached) rather than a filename. Make load_cached_bdf take a std::string_view. Changed some osd_printf_warnings to osd_printf_info [AJR].
 - 0.240              : Render-related cleanup: Undo inclusion of screen.h within render.h and update many source files that were stealth-including the former. Moved texture_format enum to emu\rendertypes.h. Make a few methods static (emu\rendlay.h). Use C++11-style iteration for render targets (ui\info.cpp) [AJR]. Improved scale factor selection. Fixes aspect related issues, undesired overscan, etc. (GitHub #8209, #8387 and MT08110) (emu\render.cpp and osd\windows\window.cpp). Fixes -autostretchxy causing cropping in some vertical games (dkong, pacman and 1942). Correctly adjust window size based on the computed visible area for different stretching cases (sdl\window.cpp and windows\window.cpp) [Antonio Giner]. Reset "last time" measurements when loading a state (emu\video.cpp). API cleanup + minor related OSD render cleanups (emu\render.cpp, rendutil.cpp, render\drawd3d.cpp and drawogl.cpp) [AJR].
 - 0.239              : Use simple_list instead of std::list for containers. Removed old remnants of "internal" debugger (emu\render.cpp) [AJR]. Removed old dot matrix components. Added warning message for reel components (emu\rendlay.cpp). Changed a few more fruit machines to eliminate reel components; also made the reel lamps simpler and more efficient in these layouts. Fixed incorrect clipping of untextured rectangles (emu\rendersw.hxx). Cleaning up fruit machine layouts to reduce bloat. Fixed a few miscellaneous Coverity errors (opengl\gl_shader_mgr.cpp). Get the initial view check off the hot path (emu\render.cpp) [Vas Crabb]. Expand buffer size from 15 to 16 for %t time in video_manager::open_next (emu\video.cpp) [Golden Child].
 - 0.238              : Replaced some locale-sensitive configuration parsing code (render\d3d\d3dhlsl.cpp). Fixes MAME freezes on non-English Windows OS. Added scroll support for all Layout elements (emu\render.cpp and rendlay.cpp). Fixed texture size calculation for oblong items (emu\render.cpp). Support texture wrap/clamp properly for (A)RGB formats. Also got rid of names starting with an underscore followed by an uppercase letter, as they are reserved (emu\rendersw.hxx) [Vas Crabb]. Fixed buffer overflow crash with VIDEO_VARIABLE_WIDTH screens (emu\screen.cpp). Fixes (MESS) snes ctrigger consistently causes segfault [AmatCoder].
 - 0.236              : Use I/O filter for zlib decompression, avoiding the need to use zlib directly (emu\render.cpp) [Vas Crabb]. Added rectangles operators & and | (intersection and union) from the existing &= and |= ones (lib\util\bitmap.h) [O. Galibert].
 - 0.235              : Fixed automatic sizing of snapshots/recordings (emu\render.cpp). This fixes bad scaling on snapshots and recording when using -uesx and forced scale factors [Antonio Giner].
 - 0.234              : Correctly apply -keepaspect with -unevenstretchx/y. Correctly apply -keepaspect with -unevenstretchx/y. Initialize window at the correct size when -intscalex/y is used. Get correct window size upon maximizing/minimizing with integer scaling (emu\render.cpp) [Antonio Giner]. Improved min/max for SSE4.1+ and scale+clamp operations for all (video\rgbsse.cpp). Made palette expansion constexpr and added argbexpand function (video\rgbutil.h) [Aaron Giles].
 - 0.233              : Fixed assertion failure with -D_GLIBCXX_ASSERTIONS (emu\rendlay.cpp) [AJR]. Use setjmp/longjmp for libjpeg error unwinding (emu\rendutil.cpp). Apparently Linux AArch64 has issues with throwing exceptions across C function frames [Vas Crabb].
 - 0.232              : Increased MAX_TEXTURE_SCALES a bit (emu\render.h) [hap].
 - 0.230              : BGFX: crt-geom and crt-geom-deluxe enhancements: Made spot size parameters adjustable also increased samples from 2 to 3 scanlines for crt-geom-deluxe. Made horizontal interpolation adjustable. bgfx crt-geom-deluxe: Made phosphor decay smoothly to zero at specified cutoff time. bgfx crt-geom-deluxe: Added lowpass filter [cgwg]. Fixed crt-geom{,-deluxe} shader compilation and recompiled shaders [Vas Crabb].
 - 0.229              : Use std::clamp in various core functions (emu\render.cpp). Fixed failure to load texture .png files when -artpath contains multiple directories. Fixes BFGX Shadow Mask not appearing in slider controls when more than one artpath present in mame.ini. Use platform-specific path separator more consistently (render\bgfx\chainentryreader.cpp) [AJR]. Increased precision of ellipse calculations. Also optimised drawing fully covered ellipse pixels and added a few comments (emu\rendlay.cpp) [Vas Crabb].
 - 0.228              : Added layout\generic.h. Added bgfx\chains\lcd-grid.json, effects\lcd-grid\lcd-grid.json, lcd-grid\persistence.json, shaders\glsl\chains\lcd-grid\fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin, vs_persistence.bin, osd\modules\render\bgfx\shaders\chains\lcd-grid\fs_lcd-grid.sc, lcd-grid\fs_persistence.sc, varying.def.sc, vs_lcd-grid.sc and vs_persistence.sc. Added bgfx/shaders/dx11/chains/lcd-grid/fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin, vs_persistence.bin, dx9/chains/lcd-grid/fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin, vs_persistence.bin, essl/chains/lcd-grid/fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin, vs_persistence.bin, metal/chains/lcd-grid/fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin, vs_persistence.bin, spirv/chains/lcd-grid/fs_lcd-grid.bin, fs_persistence.bin, vs_lcd-grid.bin and vs_persistence.bin. Use std::string_view instead of bare pointers in various functions (emu\rendlay.cpp). Dependency refactoring. Splitted out layout class declarations into rendlay.h, with some adjustments for the resulting incomplete types (std::reference_wrapper unfortunately does not allow these by C++17 rules) (emu\render.h). Moved old header contents to layout/generic.h (emu\rendlay.h) [AJR]. Added LCD-grid shader for BGFX. Note that this is currently only compiled for GLSL [cgwg]. Fixed BGFX overlapping register in LCD-grid shaders and compiled for Direct3D, SPIR-V, Metal etc. Fixed 'Alt-Tab' doesn't work with fullscreen opengl/bgfx/gdi video [Vas Crabb].
 - 0.227              : Added bgfx\chains\Fighters.json. Fixed drawscanline_core leftover loop, should not live inside unrolled loop (emu\drawgfxt.ipp) [Romain Tisserand]. C++17 string handling updates (without charconv so as not to break GCC 7). render.cpp and rendlay.cpp: Changed argument types for text processing functions from const char * to std::string_view. Use delegates to avoid hot conditional branches. Set initial value for bounds callback, it can be called before tags are resolved (emu\rendlay.cpp). Exposed a few information view item properties (emu\render.cpp) [Vas Crabb]. Moved some rendering code to constexpr (emu\drawgfx.cpp, rendersw.hxx and rendutil.h) [Romain Tisserand]. Added "Non-Integer Scaling" and "Keep Aspect" settings to UI video options menu and removed SDL hotkeys for same. Removed keepaspect and fullstretch members of osd_video_config [AJR]. Modified BGFX crt-geom-deluxe to track the power-law fall-off for longer (up to 1024 frames). Ensured that the intensity falls to zero afterward. Note that this is currently only compiled for GLSL (bgfx\shaders) [cgwg, Ryan Holtz].
 - 0.226              : Added emu\rendertypes.h, util\msdib.cpp/h and util\nanosvg.h. Cleaned up bitmap API: Made const-qualified pixel accessors (pix, pixt, raw_pixptr) return const-qualified references/pointers to pixesl, and added non-const versions. This makes bitmap more like standard library containers where const protects the content as well as the dimensions. Made the templated pixt accessor protected - having it public makes it too easy to inadvertently get a pointer to the wrong location. Removed the pix(8|16|32|64) accessors from the specific bitmaps. You could only use the "correct" one anyway, and having the "incorrect" ones available prevented explicit instantiations of the class template because the static assertions would fail. You can still see the pixel type in the bitmap class names, and you can't assign the result of &pix(y, x) to the wrong kind of pointer without a cast. Added fill member functions to the specific bitmap template, and added a explicit instantiations. This allows the bitmap size check to be skipped on most bitmap fills, although the clipping check is still there. Also fixed a couple of places that were trying to fill an indexed 16-bit bitmap with rgb_t::black() exposed by this (replaced with zero to get the same net effect). The explicit template instantiations in the .cpp file mean the compiler can inline the function if necessary, but don't need to generate a local out-of-line body if it chooses not to. Extended the size of the fill value parameter in the base bitmap class to 64 bits so it works correctly for 64-bit bitmaps. Fixed places where IE15 and VGM visualiser weren't accounting for row bytes potentially being larger than width. Fixed an off-by-one in an HP-DIO card where it was treating the Topcat cursor right edge as exclusive. Updated everything to work with the API changes, reduced the scope of many variables, added more const, and replaced a few fill/copy loops with stuff from <algorithm>. Consider that screens can be hidden when choosing a default view (emu\render.cpp). Pre-load image components when changing video options (emu\render.cpp and rendlay.cpp). Allow item animation to emu\rendlay.cpp. Various improvements to image file handling: Moved MS DIB parser out of ICO file reader and made it available for artwork and layout images. Added more efficient I/O and better error checking for JPEG file loading (MAME will no longer exit immediately on a bad JPEG file). Made caller responsible for opening files for loading images, to avoid decompressing images used in ZIP/7z artwork multiple times. Added support for JPEG and Windows DIB to picture_image_device. Added support for SVG image files in external artwork. Added support for using I/O port value for animation state and masking animation state values. Made bounds elements more flexible in layouts. Reworked headers to reduce dependencies. Updated layout file format documentation. Allow layout files to embed image data. Also improved symmetry of disk components, fixed positioning of components when fitting to the pixel grid, and fixed inherited color when item has no color specified. Removed the dotmatrix components from complay.py - there are more flexible ways to achieve the same thing. C99 doesn't need float-to-double-float for floor (emu\rendutil.h). Use steady clock for timing double-clicks (osd\windows\window.cpp). Load from all external artwork paths (emu\render.cpp). Made real component drawing code a bit less gross (emu\rendlay.cpp). Less screaming now that things aren't macros (debug\debugcon.cpp). Draw disk components with area-based anti-aliasing. Also fixed alpha blending within an element for rect and disk components. Fixed accumulation error causing black pixels on certain transparent colours (emu\rendlay.cpp). Got rid of an unused capture that upsets Clang (emu\rendlay.cpp). Fixed an issue reporting the full path of files found in archives that was breaking artwork (emu\fileio.cpp). Fixed issue causing elements to be clipped on bottom/right (emu\render.cpp). Tidied up and optimised ellipse drawing code a little (emu\rendlay.cpp). Reduced space between LEDs on several systems with matrix displays. Work around error accumulation issue that could cause hang with x87 floating-point (emu\rendlay.cpp). Avoid another issue with floating point error accumulation when drawing disk components. Fixed one more place where disk drawing had error accumulation issues (emu\rendlay.cpp) [Vas Crabb]. Fixed stray space char in osd_opengl.h [Miodrag Milanovic].
 - 0.225              : 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. 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. 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) [Vas Crabb]. Removed now-obsolete savestate workaround (video\pwm.cpp) [hap].
 - 0.224              : Added getter for pixeltime (emu\screen.h). Fixed overwriting last pixel of previous update and rendering whole scanline when update was called inside hblank. Fixed possible issue if update_now and update_partial are both called from driver (emu\screen.cpp) [hap]. Clean up the preprocessor glue for selecting RGB utility implementation a little and check macros are defined before doing comparisons (emu\validity.cpp, video\rgbgen.cpp, rgbsse.cpp and rgbutil.h) [Vas Crabb].
 - 0.223              : Properly clean up d3dintf (render\drawd3d.cpp). More lenient with resizing very large views in windowed mode. Reduced minimum window height (osd\windows\window.cpp). Don't add parent set external artwork if artwork found (emu\render.cpp) [hap].
 - 0.222              : Fixed prescale option does not work properly on D3D renderer. Removed old StretchRect code. All drivers these days punt it to a shader backend anyway, and it's causing issues with -prescale (render\d3d\d3dcomm.h and drawd3d.cpp). BGFX: Correct a data overrun in the D3D12 backend from allocating only enough texture data for width*height, not rowpixels*height. Don't try to invoke a frame immediately after resetting the renderer during tear-down. Fixes crash on exit with the D3D12 backend (render\drawbgfx.cpp). Correct hlsl.json to apply the intended screen tint (bgfx\chains\hlsl.json) [Ryan Holtz]. Don't do frameskip related calculations at init time (emu\video.cpp). Frameskip setting is now upper frameskip limit when autoframeskip setting was enabled (emu\emuopts.cpp and video.cpp). Show frameskip max value in speed_text (emu\video.cpp) [hap].
 - 0.221              : Initialization outer box darkened/less distracting (emu\render.cpp) [hap].
 - 0.220              : Added a missing break function to emu\screen.cpp [fasteddo]. Replaced SET_TILE_INFO_MEMBER macro with tileinfo.set helper. That macro has contributed nothing but obfuscation since we moved to C++ (emu\tilemap.h) [Vas Crabb].
 - 0.218              : Changed Direct3D renderer to call GetAncestor() in device_create() to get the root window. This is to make -attach_window work with non-root windows (render\drawd3d.cpp) [Nathan Woods]. Fixed incorrect swapping of red and blue components of screen tint (render\bgfx\chainentry.cpp) [AJR]. Clamp to edge, same as the other renderers (render\drawogl.cpp). Higher maximum prescale to 8. Note: Scale emulated video by this factor before applying filters/shaders [hap]. Cleanups (emu\rendersw.hxx) [Firewave].
 - 0.217              : Clean up render_screen_list code, replacing simple_list with std::list [AJR].
 - 0.216              : Set global locale when parsing with nanosvg (emu\screen.cpp), fixes SVG display issues when locale is not English. Be strictly POSIX compliant, reduced fragmentation and get rid of an unused member (emu\screen.cpp) [Vas Crabb]. Only clear or allocate scan bitmaps in excess of the previous height. Fixes blank portions of smw2u, possibly others (emu\screen.cpp). BGFX: Fixed 'Tetris The Grand Master' crash on resolution change (bgfx\chainmanager.cpp). Fixed broken rendering when using bgfx_screen_chains none (render\drawbgfx.cpp). Fixes 'Spider-Man: The Videogame' crash in few seconds. Fixed assertion when running LaserDisc games (e.g. Fire Fox) with any bgfx backend. Fixed MAME crashes in any driver which configures a rgb32/argb32 screen, trying to change any of the Brightness, Contrast or Gamma sliders. Fixed Laserdisc games showing four squares instead of LD video with -bgfx_backend OpenGL [Ryan Holtz]. OpenGL render: Fixed bug preventing adjustment of gamma, brightness and contrast. Starting MAME with defaults, i.e. gamma == 1.0, no RGB palette will be allocated. If gamma than is changed, a new palette will be allocated. But the texture will not be updated because the palette is not checked. This fix will check for palette changes. Note: If the palette is changed inplace, i.e. without reallocation, this will fail. The correct fix would be that the texture palette is not only a pointer to rgb_t * but to texture_palette_type. texture_palette_type would hold the pointer, the length and a sequential id which is checked in addition to pointer equality (render\drawogl.cpp). Fixed waitvsync for BGFX vulkan backend (bgfx\src\renderer_vk.cpp). Note: Currently waitvsync is broken in the BGFX vulkan backend. The option is just ignored and a mode waiting for vsync is selected. This also breaks throttle. -nothrottle doesn't work. These changes fix this. If available a non-syncing mode is used if -nowaitvsync is used. Fixed edge case around B/C/G settings. If e.g. Kid Niki is started with default gamma (1.0), changing gamma with slider doesn't work. Setting to a gamma <> 1 and restarting MAME will apply the gamma (render\drawbgfx.cpp). Apply line width provided by renderer (render\drawogl.cpp) [Couriersud]. Fixed resource leak (bgfx\chain.cpp) [Henrik Algestam].
 - 0.215              : Validate crystal values used for set_raw (emu\screen.h) [Vas Crabb].
 - 0.214              : Print a warning and continue on encountering malformed XML in a layout file (emu\render.cpp). Mark drawgfx core templates inline to prevent linker trying to coalesce them across compilation units, and hopefully encourage the compiler to specialise them when drivers call them with fixed argument values. Make wraparound parameter for ROZ drawing functions bool - it's a simple true/false value. Clean up spacing in a few places [Vas Crabb]. Added 2x2 grouped case of 16x16 gfx layouts. These are made of 4 8x8 tiles, currently 4bpp packed and 8bpp raw layout is exists. More usage of generic gfx layouts. Fix naming and spacing (video\generic.cpp) [cam900]. Eliminated extract_scanline8/16/32, replacing the scant existing usage with std::copy_n (emu\drawgfx.cpp). Make bitmap8_t, bitmap16_t, bitmap32_t and bitmap64_t specializations of one class template (util\bitmap.cpp). Renamed emu\drawgfxm.h to drawgfxt.ipp and replaced the mega-macros with template functions. Added assert to catch wrong pixclock configuration (emu\screen.h) [AJR]. Don't force throttling while paused (emu\video.cpp) [feos].
 - 0.213              : Better automatic group bounds behaviour (emu\render.h and rendlay.cpp) for layout files [Vas Crabb]. Removed tilemap.h from emu.h [AJR].
 - 0.212              : PWM Display: Fixed savestate problem (video\pwm.cpp). Additional fix to MAME slowdown on screenless view (MAME 0.207: Stop frameskipping constantly on screenless systems with frameskip=0 and don't use iter count). Render 7seg off-segments and background with alpha, this allows LCD 7segs (emu\rendlay.cpp) [hap]. Allow per-layer blend modes supplied by driver for screens, as required for Laserdisc overlays (emu\rendlay.cpp). This is a change in behaviour, and it means that games like Golly! Ghost! will need an explicit blend mode specified in the XML. I'm not entirely happy with the situation, but a better, more general solution than this would require some serious refactoring to MAME's renderer [Vas Crabb].
 - 0.211              : Added video\pwm.cpp/h. Moved additive blending function into emu\drawgfx.h. Added priority related copybitmap functions. Fixed spacings. Added priority related copybitmap and draw_scanline function is sprite like priority handling(prio_*) and tilemap like priority handling(primask_*). These are helpful for priority related bitmap/scanline drawing routines (emu\drawgfx.cpp). Added variations of priority related pixel draw functions. Fixed spacings (emu\drawgfxm.h). Added example usage for prio_copybitmap (video\realbrk.cpp). Added packed and raw case of generic gfx layouts. Added example usage to f1gp.cpp, pgm2.cpp, powerins.cpp and psikyosh.cpp [cam900]. Added PWM (strobed) display elements (devices\video\pwm.cpp/h). Use pwm_display_device for (MESS) hh_tms1k.cpp, tispeak.cpp and tispellb.cpp. Default SVG region (emu\screen.cpp). Fixed alt-tab crash in D3D mode (render\drawd3d.cpp; Launch MAME in full screen, then hit ALT+TAB which brings up a menu of other active windows but instead makes MAME assert) [hap]. Since value is unsigned, it will never be lower than zero (emu\render.cpp). Solve the quit-on-minimize problem (render\drawgdi.cpp, drawnone.cpp, drawogl.h and drawbgfx.h) [yz70s].
 - 0.210              : Converted screen update functions to RGB32 in numerous games. This is intended to expedite CRTC-based video modernization (4roses.cpp, 5clown.cpp, albazg.cpp, amaticmg.cpp, aristmk4.cpp, avt.cpp, bmcbowl.cpp, buster.cpp, calomega.cpp, carrera.cpp, chance32.cpp, coinmstr.cpp, docastle.cpp, fastinvaders.cpp, fortecar.cpp, funworld.cpp, gluck2.cpp, goldnpkr.cpp, goldstar.cpp, hitpoker.cpp, jokrwild.cpp, jubilee.cpp, kingdrby.cpp, luckgrln.cpp, magicfly.cpp, majorpkr.cpp, mpu12wbk.cpp, mpu4dealem.cpp, murogem.cpp, nibble.cpp, peplus.cpp, progolf.cpp, rgum.cpp, royalmah.cpp, sanremo.cpp, skylncr.cpp, snk6502.cpp, speedatk.cpp, summit.cpp, supercrd.cpp, tmspoker.cpp, toaplan1.cpp, truco.cpp, twincobr.cpp, usgames.cpp, vlc.cpp and wardner.cpp) [AJR]. Fixed screen_device::update_now() when drawing partial lines. Fixed pixel-access functions to use the current bitmap (emu\screen.cpp) [Enik Land].
 - 0.208              : Added constructor for SVG screens and removed a couple of macros (emu\screen.h) [Osso]. Removed MCFG_VIDEO_SET_SCREEN usage (emu\divideo.h) [cam900]. Added set_visarea_full plus some random examples (emu\screen.h). Added verbose message instead of aspect ratio helper for SVG screen (emu\screen.cpp). Added "inputraw" parameter, for use with inputtag and inputmask (emu\render.h and rendlay.cpp). It sets the element state directly to the raw input data & mask. Example uses: 8 way joystick state, multi-bitmask dipswitch state. If you don't want it to respond to layout mouse clicks, add a dummy inputtag rect under it [hap]. Improved OpenGL performance by moving calculations out of loop (render\drawogl.cpp) [Andreas Mueller].
 - 0.207              : Added constructor for monochrom screens and removed MCFG_SCREEN_ADD_MONOCHROME and MCFG_SCREEN_COLOR (emu\screen.h) [Osso]. Additive oversleeping for video throttling (emu\video.cpp) [Celelibi]. Stop frameskipping constantly on screenless systems with frameskip=0 and don't use iter count (emu\video.cpp) [hap].
 - 0.206              : Transposed transformation matrix to fix BGFX colors [Henrik Algestam].
 - 0.204              : Added a device callback to make it easier to hook the scanline timer (emu\screen.cpp) [Ryan Holtz]. Don't assert on update_partial with scanline<0, plenty drivers do update_partial(vpos-1) (emu\screen.cpp) [hap].
 - 0.203              : Added bgfx\chains\lut.json, bgfx\effects\hlsl\chroma.json, bgfx\effects\misc\lut.json, bgfx\shaders\dx11\chains\hlsl\fs_chroma.bin, vs_chroma.bin, misc\fs_lut.bin, vs_lut.bin, hlsl\fs_chroma.bin, vs_chroma.bin, misc\fs_lut.bin, vs_lut.bin, hlsl\fs_chroma.bin, vs_chroma.bin, misc\fs_lut.bin,vs_lut.bin, hlsl\fs_chroma.bin, vs_chroma.bin,misc\fs_lut.bin, vs_lut.bin, hlsl\fs_chroma.bin, vs_chroma.bin, misc\fs_lut.bin, vs_lut.bin, hlsl\chroma.fx, ini\examples\bt601-525.ini, bt601-625.ini, bt709.ini, ntscj.ini, p1.ini, p14.ini, p2.ini, p3.ini, p35.ini, p4.ini, p55.ini and p7.ini, osd\modules\render\bgfx\shaders\chains\hlsl\fs_chroma.sc, hlsl\vs_chroma.sc, misc\fs_lut.sc and misc\vs_lut.sc. Fixed BGFX not rendering in multiple windows. Internal UI is still glitchy (osd\windows\window.cpp) [Ryan Holtz]. HLSL Color Transforms and 3D LUT: * Removed broken scanline uniform from post_pass. * Added 3D LUT to HLSL. * Allow individual LUTs for screen and UI. * Added individual phosphor color conversion for HLSL: Shader for converting xyY3 to sRGB (hlsl\chroma.fx). Minor changes to emphasize idea that phosphors are color agnostic (hlsl\phosphor.fx). Conversion from signal RGB to xyY3 (hlsl\post.fx). * Added phosphor examples and update presets. * Port 3D LUT and phosphor color shaders to BGFX [anikom15]. Get rid of LCD_FRAMES_PER_SECOND (emu\video.h; (MESS) comquest.cpp, lynx.cpp and ssystem3.cpp) [hap]. Fixed compilation with libjpeg for environments where TRUE and FALSE aren't preprocessor macros (emu\rendutil.cpp) [Ryan Schmidt].
 - 0.202              : Added hlsl\scanline.fx, bgfx\effects\hlsl\scanline.json, bgfx\shaders\dx11\chains\hlsl\fs_scanline.bin/vs_scanline.bin, dx9\chains\hlsl\fs_scanline.bin/vs_scanline.bin, essl\chains\hlsl\fs_scanline.bin/vs_scanline.bin, glsl\chains\hlsl\fs_scanline.bin/vs_scanline.bin, metal\chains\hlsl\fs_scanline.bin/vs_scanline.bin and osd\modules\render\bgfx\shaders\chains\hlsl\fs_scanline.sc/vs_scanline.sc. HLSL: Apply scanline effect before defocus effect and moved scanline effect into separate shader. Port scanline modification to BGFX [anikom15]. Fixed not set default uniforms for vector pass (render\d3d\d3dhlsl.cpp) [ImJezze]. Generate layouts for dual-screen machines rather than loading dualhsxs.lay. This ensures aspect ratio is correct for non-4:3 screens (emu\render.cpp) [Vas Crabb].
 - 0.201              : Removed layout\horizont.lay, lcd.lay, lcd_rot.lay, svg.lay and vertical.lay. Better support for screen orientation/geometry: * Eliminates the need for the horizontal/vertical/LCD/SVG layout files. * Screens can now have orientation and physical aspect ratio specified. * RASTER/VECTOR defaults to 4:3, LCD/SVG defaults to square pixels at config time. * System orientation is applied on top of screen orientation. Automatically generated single-screen views and orientation flags in XML output now work correctly for systems with multiple screens in different geometries/orientations, e.g. housemnq, rocnms, stepstag or netmerc. The "core rotation options" only interact with system orientation. Allowing multi-screen systems to work well with one monitor per emulated screen is a complex topic. System orientation also affects the GFX viewer while screen orientation doesn't. The orientation displayed in the system selection menu is from the system orientation. Let me know if I've broken any systems or use cases. Also, added save state support for std::array/C array nested to any depth. Make rectangle work better with constexpr, changed many things to use designated getters/setters. Ignore SVG dimensions (emu\screen.cpp). Clean up some corner cases in layouts with repeating blocks. Make complay.py validate many more elements and attributes. Make complay.py easier to use for just validating a layout. Removed redundant view from Sega VMU layout. Make buttons visually respond to input in (MESS) whousetc.lay. Added view with LED displays as well as terminal for (MESS) aim65_40 and use repeats. Start documenting layout format. Make highlights visible on white squares in (MESS) mephisto_modena.lay. Allow <orientation> and <color> to work on group references. Fix some corner cases where group bounds could be miscalculated and MAME could incorrectly refuse to instantiate groups [Vas Crabb]. Calculated physical aspect ratio whenever required, not in device_config_complete, since the renderer caches the result anyway (emu\screen.cpp). Fixed have_screen_update(), which was broken and returned false under any valid configuration, and rename the function has_screen_update(). This fixes regressions in 'Granny and the Gators' and other drivers using custom update functions with CDP1861, CDP1864 and TMS992x VDPs (emu\screen.h) [AJR]. Improved BGFX rendering with artwork by 5-10x or more [Ryan Holtz].
 - 0.200              : Reduces blowups in render\drawbgfx.cpp. Make bgfx\chainmanager.cpp a little less crash-prone [O. Galibert]. Improved behaviour in general for systems with two screens [Vas Crabb].
 - 0.199              : Make it possible to set screen update functions without macros without syntax that looks absolutely terrible (emu\screen.h) - examples will come with DEVCB3 [Vas Crabb].
 - 0.197              : Converted MCFG_DEVICE_VBLANK_INT to MCFG_SCREEN_VBLANK_CALLBACK. Use MCFG_SCREEN_VBLANK_CALLBACK instead of MCFG_CPU_VBLANK_INT. Replaced MCFG_CPU_VBLANK_INT with line callbacks. Use MC6845 sync callback instead of MCFG_CPU_VBLANK_INT in funworld.cpp, goldnpkr.cpp and madalien.cpp. Use MC6845 for vertical interrupt generation in gluck2.cpp, mpu12wbk.cpp and ssingles.cpp. Added some plausible raw params and eliminated MCFG_CPU_VBLANK_INT in twins.cpp [AJR].
 - 0.196              : Removed emu\layout\snap.lay. Removed first_screen from D3D (render\d3d\d3dhlsl.cpp and drawd3d.cpp). Address performance concerns with previous change to screen.cpp/h [Ryan Holtz]. Fixed scaling functions for negative values (video\rgbsse.h). Fixes graphical anomalies in War: The Final Assault [Ted Green]. Better handling for arbitrary numbers of screens [Vas Crabb].
 - 0.195              : Set flip screen state without peeking into driver_data (video\decbac06.cpp, deckarn.cpp, decmxc06.cpp and decospr.cpp). Flip screen API cleanup: Make the global flipping functions of driver_device protected so as not to be accessible from within subdevices. Eliminate the flip_screen_set_no_update kludge [AJR].
 - 0.194              : Added bgfx\view.cpp/h. Use bgfx::ViewMode::Sequential fixes handheld overlays (render\drawbgfx.cpp). This fixed bitmap overlays don't display with BGFX video output. Abstracted some view-related functions into bgfx_view class [Ryan Holtz]. Fixed two issues with the GLSL Bilinear Shader: 1. Off-by-one pixel coordinates. 2. Sampling of wrong pixels at some non-integer stretch factors. Note: First was noticed while comparing screenshots of the software and OpenGL w/GLSL renderers (OpenGL output was shifted up and to the right). Fixed by subtracting a 1/2 pixel from the texture coordinates when calculating the bottom left pixel to use for interpolation. Second was apparent when running Pac-Man fullscreen on a 1920x1080 screen and allowing non-integer stretching. Manifested as irregular horizontal 'steps' in the output. Fixed by sampling from the center of all pixels which should avoid any funny business in regards to pixel coordinate rounding. Added GLSL Bicubic Shader to OpenGL backend. This shader uses the equation described by R. Keys in the paper 'Cubic Convolution Interpolation for Digital Image Processing' which is, in this case, the same as a Catmull-Rom spline. This produces a sharper upscaled image than bilinear filtering. The new shader is selected by setting gl_glsl_filter to 2. Consequently, gl_glsl_filter is now treated as an int rather than a boolean. Also fixed a variable name problem in the code guarded by GLSL_SOURCE_ON_DISK [Aaron Stover]. Fixed update_gamma_ramp (render\drawd3d.cpp). This fixed full screen Brightness/Contrast/Gamma settings not working anymore [Osso, smf]. Privatized m_screen and other variables of device_video_interface [AJR]. Fixed Blit function (binding reference to nullptr; emu\screen.cpp) [Vas Crabb]. Added artwork override and fallback options. Removed debug testing code. Allow loading of built-in layouts even if override_artwork is specified. Allow loading of fallback_artwork if only default view have been found. Fixed order of built-in layouts with regards to fallback_artwork as agreed upon the forums. Changed |= true to = true, and changed override artwork so it only checks for default.lay if the <machine name>.lay is not found (emu\render.cpp and emuopts.cpp) [phulshof].
 - 0.191              : Generated layouts for systems with three or more screens, fixes crash with four or more emulated screens (emu\render.cpp). Fixed layout files loading (emu\render.cpp) (Work around for GCC compiler bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81721) [Vas Crabb]. Rather simple performance optimization (video\rgbsse.h and validity.cpp). Optimized some SSE routines. Created a generic getter instead of having individual color operation. Allow up to 12 bits for scaling factors (video\rgbsse.h). Clamp intermediate values to u8 [Ted Green]. Fixed unused variable error compiling with MSVC (emu\render.cpp) [smf].
 - 0.190              : Make verify_header public (util\png.cpp). Detect image format(png) before loading image. No PNG error message anymore when loading JPG (emu\rendlay.cpp) [hap]. Declare scale_imm_and_clamp as inline to ensure that it compiles as fully inlined in voodoo rasterizers (video\rgbsse.cpp) [Ted Green].
 - 0.189              : 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. Get rid of forced sleep in 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 [Vas Crabb].
 - 0.188              : Don't drop an entire layout if one view fails to load - it breaks (MESS) intlc44/intlc440 with null_modem (emu\rendlay.cpp) [Vas Crabb]. Changed backslash to unicode in some layouts [hap].
 - 0.187              : Make the palette optional (emu\drawgfx.cpp). device_gfx_interface does two things: Go from a possibly weird rom layout to a one-byte-per-pixel tiled layout and draw the tiles so created. The second part requires a palette, but the first doesn't. And low-level emulations of individual graphic chips (konami tilemap or sprite generators for instance) are not supposed to care about the palette. They just output bits which are partly indexes into palettes, and partly not, and in any case become pen ids only much further in the rendering chain. But they need access to the decoding step, because one-byte-per-pixel is real nice. So now such a device, which inherits from device_gfx_interface, can call set_palette_disable(true) and no palette tag will be required. Calling the draw functions will segfault though. As a side effect, the gfx_element constructor now takes a palette pointer instead of a reference, since it's now optional. Fixed the case when a gfx element has no palette [O. Galibert]. BGFX: Fixed xBR-lv2-multipass, xBR-lv2-fast, xBR-lv2-noblend, xBR-lv2, xBR-lv3-noblend and xBR-lv3 shaders [Ryan Holtz].
 - 0.186              : Fixed HQx shaders with BGFX OpenGL backend [MooglyGuy]. Removed the minimum sleep time constraint in video_manager::throttle_until_ticks (emu\video.cpp) [rslovers, R. Belmont].
 - 0.185              : Guard against assert failure on partial updates starting from incomplete first line (emu\screen.cpp) [AJR]. Apply environment variable substitution to bgfx_path (render\bgfx\chainmanager.cpp, effectmanager.cpp and shadermanager.cpp) [Vas Crabb].
 - 0.184              : Converted screen_device VBLANK callback to devcb_write_line: WRITE_LINE callback has same functionality, except that screen is not an argument. Renamed screen_eof_xxx to screen_vblank_xxx in many drivers. No changes to externally registered vblank delegates or screen update methods [AJR].
 - 0.182              : HLSL: Changed cached texture format to floating point. Removed hacks in hlsl\phosphor.fx. Tweak presets for ini\presets\raster.ini, vector-mono.ini and vector.ini. Changed cache texture format to floating point for precise for phosphor and ghosting shaders (render\d3d\d3dcomm.h, d3dhlsl.cpp and drawd3d.cpp) [ImJezze].
 - 0.181              : Make hlsl\phosphor.fx persistence independent of frame rate [ImJezze].
 - 0.180              : Fixed the D3D9 issues people are having (d3d\d3dcomm.h and drawd3d.cpp) [MooglyGuy]. Fixed games with off-screen backdrop artworks (e.g. Atari Football and Bowling Alley) that white out the screen when you enable HLSL. Correct HLSL documentation: Removed -antialias option (does not exist anymore). Added missing -vector_beam_smooth option. Fixed suggested default values for -bloom_lvl_weights options (were messed up in the last update) [ImJezze].
 - 0.179              : Fixed several small issues in HLSL/BGFX: Fixed target texture dimension when -intoverscan is used (this fixes the appereance of scanline and shadow mask). Added target_scale and screen_count uniforms. Rounded corners now remain aligned with screen bounds when -intoverscan is used (single screen only). Fixed OSX build: Use fabsf rather than abs for float->float (emu\render.h). Fixed aspect ratio of rounded corners. Refactored d3d_render_target: Removed cashe_target class. Moved cashe texture and surface to d3d_render_target class. Render targets are now created per screen not per screen texture. Removed useless creation of render targets for ui textures (render\d3d\d3dcomm.h, d3dhlsl.cpp/h and drawd3d.cpp). Fixed null reference exception (D3D/HLSL), when toggling from fullscreen to window mode. Disabled clearing of render targets in several passes (HLSL). Which was quite a performance overhead and not necessary because the shaders fill every texel of a target without blending. Reduced defocus effect to one pass (HLSL/BGFX). Removed second defocus pass. Limited defocus stength to a maximum of 2.0 [ImJezze]. Use floorf rather than floor for float->float (bgfx\chain.cpp, chainmanager.cpp and d3d\d3dhlsl.cpp) [Vas Crabb]. Fixed crash in ui\selgame.cpp [Carl]. Fixed use of uninitialized stack memory in render\drawd3d.cpp [Brad Hughes]. Make D3D9 a little more discerning in what level of bad hardware it will allow (render\drawd3d.cpp) [MooglyGuy].
 - 0.178              : Added osd\modules\monitor\monitor_common.cpp/h, monitor_dxgi.cpp, monitor_module.h, monitor_sdl.cpp and monitor_win32.cpp. Fixed GH#1364 (bgfx/chains/crt-geom-deluxe.json and crt-geom.json) [tabbycat12]. Converted OSD monitor info to modules plus added DXGI implementation. Converted the monitor information code from video.cpp in SDL and Windows to modules [Brad Hughes].
 - 0.177              : Fixed benchmarking by adding additive-blend YUY16 support to emu\rendersw.hxx [MooglyGuy]. intscalex, intscaley and unevenstretchx now consider the system orientation and screen rotation. Updated BGFX shader binaries which have changed after the last BGFX update. Fixed scanline issue also applied for swapped orientation [ImJezze]. Implement new option -unevenstretchy (complementary to -unevenstretchx). Implemented new option -autostretchxy, to automatically apply -unevenstretchx or -unevenstretchy based on source native orientation. Consistently apply -intscalex to the long dimension of the target monitor and -intscaley to the short dimension [Antonio Giner].
 - 0.176              : Polymorphize layout_element::component (emu\render.h and rendlay.cpp) [AJR]. Misc code cleanups for Direct3D code. Removed unused methods, unused function parameters, redundant casts, doubly linked lists made into singly linked lists, etc. Converted linked lists into vectors of unique pointers. simple_list to vector in emu\rendlay.cpp. No need to build all BGFX tools, just shaderc (makefile). Documented BGFX shaders compile [Miodrag Milanovic]. Make monitor list a list of shared_ptr like window_list [Brad Hughes]. Use std::map for mapping XML tag name to layout component creation function - makes the code simpler and easier to read as well as being more scalable. Fixed problem using layout_element::texture in vector - destructor frees resources but generated copy/assignment operators don't release them, leading to a problem any time vector expands or element is added/removed anywhere but end [Vas Crabb]. Added crt-geom and crt-geom-deluxe shaders for BGFX. This includes several aperture grille / shadow mask patterns. Note that these are all designed to be used on a display with RGB subpixel order, and may thus suffer if rotated or used with a BGR display [Jeremy Green]. Fixed crash when BGFX effect folder is not present or incomplete. BGFX renderer requires some effects also when post-processing is disabled. If they are not available, MAME complains about missing effect files, but then goes on and crashes soon after printing the backtrace. This fix just exits gracefully when effect files are incomplete and falls back to a different renderer if the BGFX folder is missing at all, warning the user in advance [Giuseppe Gorgoglione].
 - 0.175              : Removed render\d3d\d3d9intf.cpp and d3dintf.h. Fixed debug crash with BGFX screen chains (chains\hlsl.json, render\bgfx\chain.cpp). Fixed crash when using pillarbox shaders. Fixed potential crash when using pillarbox default.lay but not specifying 3 shader chains [MooglyGuy]. Fixed -resolution and -switchres (modules\osdwindow.h, sdl\window.cpp and osd\windows\window.cpp). This fixed MAME can't set window size anymore (eg. -window -resolution 640x480) [Brad Hughes]. Fixed offset of vector lines and clipping rectangle when vector primitives are prepared to be rendered into a texture (HLSL) instead of directly on the screen (GDI, D3D) (emu\render.cpp). Removed dead D3D code: Removed not functional vector texture code. Removed unused D3DTOP_MODULATE2X/4X code. Removed unused antialiasing code for UI lines. Removed usage of vector_time_period which does not exist anymore. Cleanup vector batch in D3D. Vector line width is now applied by BGFX. Procedural texture for vectors in HLSL: Added simple procedural texture for vectors with rounded line ends and beam smoothness. Added optional -vector_beam_smooth option. Removed -antialias option, antialiasing is now always applied, except for plain D3D. Fixed scanlines if the screen output is less than twice the size of the host source. Fixed crash of D3D when sliders menu is openend and resizing the window or switching between window and full screen mode. Small shader corrections (HLSL) [ImJezze]. Fixed handling VIDEO_NONE on windows [Miodrag Milanovic]. Introduced dynamic_module (lib\osdlib.h). This is a central cross-platform facility to dynamically bind functions from shared libraries. Updated all OSD modules to use it. Removed Direct3D abstraction layer (d3d\d3d9intf.cpp and d3dintf.h) [Giuseppe Gorgoglione]. Rearrange shaderc arguments (bgfx\shaders\shader.mk) [Logan B]. Dynamic_module: The calling convention goes inside the brackets of pointers to functions. Allows compiling with MSVC [smf]. Improved doxygen-style comments for some defs in emu\screen.h, thumbs down for the class [Angelo Salese].
 - 0.174              : Changed emu\rendersw.inc to rendersw.hxx. Layout tag external handler support (emu\render.cpp) [Carl]. Fix up BGFX NTSC shader. More BGFX settings refinement [MooglyGuy]. Equalized options of HLSL and BGFX HLSL chain. Removed POT texture size from shadow mask in HLSL, U/V size is now simply the percentage of the actual texture size. Adjusted display names of options. Fixed half texel offset of 'source' shadow mask tile mode. Fixed window is always on top after ALT+ENTER from fullscreen in Direct3D (render\drawd3d.cpp). When deleting the D3D device, it was reset before with outdate presentation information. Fixed several HLSL problems when running machines without screen. Small changes to creation of render targest in HLSL: Removed unessesary recreations of non-screen-quad texture targets. Removed creation of cached targets for non-screen-quad texture. Small tweaks to raster.ini settings - less blurry and less glowing. Fixed half pixel offset of vectors in D3D, appearance should be identical to GDI and BGFX (render\drawd3d.cpp). Fixed bloom target size for vector screens in full-screen mode, this also improves the performance slightly (d3d\d3dhlsl.cpp). Normalized vector attenuation settings: vector_length_ratio is now independent from screen size. Changed vector_length_ratio range from [0.0, 1000.0] to [0.0, 1.0]. Updated display name and description of vector_length_scale vector_length_ratio. Moved extension of vector lines to where it belongs [ImJezze]. Added STEP2_INV / STEP4_INV (emu\digfx.h) [Angelo Salese].
 - 0.173              : Added render\aviwrite.cpp/h. Removed render\d3dtarget.h. BGFX: Fixed render target dimension swap for BGFX. Removed not used part of code. Moved texture flags to proper place (render\drawbgfx.cpp). Removed empty header file (render\d3dtarget.h). Updated makefile to support shaders in multiple dirs and added sample shader. Simplify include for shaders [Miodrag Milanovic]. Make overscan on integer scaled targets optional (add option -intoverscan) [Antonio Giner]. Pull a bunch of screen chain code from drawbgfx to chainmanager where it belongs (render\bgfxutil.cpp/h). Added runtime screen chain selection. Added dividing line to BGFX slider list where applicable. Added BGFX data-driven render target clearing. Added pillarboxing shaders and layout for BGFX. Added AVI writing to BGFX. Added SuperEagle shader to BGFX. Fixed preservation of settings when changing screen chain selection with multiple screens in BGFX [MooglyGuy]. Added render.h no longer indirectly supplied via emu.h <- ui\ui.h (render\bgfxutil.cpp) [Vas Crabb]. Removed hacks for vector screens from shaders: Added handling of texture coordinates for vector screens to core render. Added handling of orientation/rotation for vector screens to D3D renderer. Fixed texture coordinates for vector screen quad. Solved conflicts in render\d3d\d3dhlsl.cpp. Added reasonable texcoord handling without known examples (emu\render.cpp). HLSL settings are reset now, when a new machine is selected. Refactored distortion pass: Separated curvature parameter into distortion, cubic_distortion and distort_corner. Distortion and cubic_distortion can be negative, to compensate each other. Distort_corner is intependent from the image distortion. Refactored BGFX distortion pass. Removed vector hack. Implemented handling for u_screen_scale and u_screen_offset in BGFX. Fixed HLSL not used u_humbar_hertz_rate parameter. Fixed HLSL half pixel shift of the shadow mask along the screen diagonal. Simplified BGFX min, max, default and step value handling for chain configuration. min, max, default and step are now floating points without an addition scale factor. Added BGFX "selection" parameter to chain input sampler. If specified all textures (.png) within the same directoy of the given texture will be selectable via slider in the UI. Also added slider for "shadow mask tile mode" to HLSL chain [ImJezze]. Fixed alpha handling, (MESS) Donkey Kong (Coleco) looks good now (emu\screen.cpp) [O. Galibert]. Added HQ2x, HQ3x and HQ4x shaders [MooglyGuy, Jules Blok, Cameron Zemek, Maxim Stepin]. Ported xBR shaders from libretro [MooglyGuy, Hyllian].
 - 0.172              : Added ini\presets\lcd.ini, lcd-matrix.ini, raster.ini, vector.ini and vector-mono.ini. Changed artwork\adapture-grill.png to perture-grille.png. Removed hlsl/artwork_support/distortion.fx and post.fx. HLSL refactoring: Bloom refactoring: Calculation of bloom dimensions is now done only once, when render target is created. Reduced blur width for non-vector screens. Implemented shadow u/v option for source tile mode. Cleanup primary.fx: Split into primary.fx into 3 techniques for vector buffer, screen and UI pass. Moved register_texture() for shaders outside of texture_info creation. Added render_primitive parameter to register_texture(); currently unused. Removed other unused register_texture() definition. HLSL presets: Added general presets for LCD, raster and vector screens. Added special presets for Game Boy (monochrome LCD) and Game Boy Advance (color LCD). Refactoring of render targes and vector texture coordinates: Implemented proper texture coordinates for vector quad primitive. Vector screen is now processed in texture coordinates. Revered workaround for raster screen, which is again processed in texture coordinates. Known issue: cocktail mode for vector screen looks wrong. Cleanup: Options are reset to loaded preset when game is closed. Changed default values of options to result in no effects activated. init_slider_list() does not returns but sets g_slider_list directly. Removed unnecessary oriented_vector_texcoords. Fixed infinite loop while building slider list, when more than one window was created. Added option for scanline variation. Added oversampling option and some cleanup. Bloom refactoring:Reduced raster bloom level to 8. Extended vector bloom level to 15. Changed vector bloom to be less blocky. Removed bloom_lvl9_weight and bloom_lvl10_weight options [ImJezze]. Cleaned up sliders a bit in render\d3d\d3dhlsl.cpp Added screen-specific shader chain support. Added per-screen sliders. Get NTSC working in both BGFX and D3D [MooglyGuy]. Added support to adjust the screen color. This is now used for monochrome screens instead of creating custom palettes (8080bw.cpp, ace.cpp, blockade.cpp, circus.cpp, copsnrob.cpp, fastinvaders.cpp, galgame.cpp, headonb.cpp, hitme.cpp, meadows.cpp, nitedrvr.cpp, orbit.cpp, sbrkout.cpp, sshot.cpp, starcrus.cpp, videopin.cppand MESS drivers) [Dirk Best]. Fixed BDC loading and fullpath TTF loading [Vas Crabb]. Implemented integer scaling in core renderer: Moved -unevenstretch option to core renderer (-unevenstretch = fractional stretching (default) and -nounevenstretch = integer scaling). Added new options to core renderer: -unevenstretchx = Fractional stretching on horizontal axis, integer scaling on vertical axis, -intscalex = Horizontal integer scale factor, default is 0 (auto) and -intscaley = Vertical integer scale factor, default is 0 (auto) [Calamity]. Moved emu\ui\util render_load_jpeg to emu\rendutil. This also adds simple support for loading JPG in external artwork [hap].
 - 0.171              : HLSL: Fixed skip of phosphor pass (render\d3d\d3dhlsl.cpp). Improved scanline simulation: Changed the amount of scanline darkness, a setting of 1.0 now becomes fully black (to get the same result as before half your current setting). Scanline height now depends on the brightness of the underlying color. The amount of the scanline brightness and overdrive now depends on the scanline darkness. Renamed 'Scanline Screen Height' to 'Scanline Screen Scale' and 'Scanline Indiv. Height' to 'Scanline Height'. Fixed Bloom level alignment: Fixed target dimensions of bloom levels, which results in a much better alignment especially for game with very low resolution (therefore current bloom settings might look a little less intense than before). Small cleanups. Quality and performance improvements: HLSL now uses NPOT sized target surfaces (breaks compatibility with graphics cards based on R300/R400/NV30 and older). HLSL target surfaces now have the size of the screen canvas. Removed HLSL pre-scale factor. HLSL now uses a sharp bilinear interpolation to pre-scale textures to screen canvas size, based on [Themaister's] implementation. Improved overall performance (based on the previously required pre-scale factor, you might notice a 5-50% speed-up depending on your graphics card, more if you used a higher pre-scale factor). Improved shadow mask quality (pixel-perfect) in screen-mode. Fixed half source texel offset of bloom level alignment. Removed ./hlsl/artwork_support folder. All shaders after pre-scale are now based on screen coordinate (workaground, till both raster and vector pass can work on texture coordinates). Disabled distortion shader for more than one screen and for artworks in full mode, does not affect artworks in copped mode (workaground, till both raster and vector pass can work on texture coordinates). Moved compute_texture_size() from texture_info to texture_manager. Resolved conflicts in render\d3d\d3dhlsl.cpp/h, drawd3d.cpp/h and winmain.cpp [ImJezze]. Dropped DirectDraw renderer (render\drawdd.cpp and drawdd.cpp) [Miodrag Milanovic]. Fixed -window -r -nokeepaspect behavior on Windows OSD and nounevenstretch (windows\window.cpp) [MooglyGuy].
 - 0.170              : Added artwork\monochrome-chessboard.png, slot-mask-aligned.png and hlsl\ntsc.fx. Removed hlsl\pincushion.fx, yiq_decode.fx and yiq_encode.fx. Cleanup HLSL: Removed unused pincushion.fx. Refactoring: Replaced shader parameters OrientationSwapXY xor RotationSwapXY by SwapXY. Made shader parameters SourceDims, SourceRect, TargetDims, ScreenDims, QuadDims and SwapXY available for all shaders. Color convolution, defocus and phosphor pass will now be skipped if all influencing parameters are 0. Removed unused bloom_texture and bloom_target arrays from cache_target class. Fixed half texel offset in prescale.fx. Restructured bloom level size and weight uniforms. Refactored color convergence: Color convergence is now independent from ratio. The radial convergence now "translates" the most outer pixel as thay would be translated by the linar convergence with the same amount. Color convergence is now limited to a maximum of 10. Added color convergence pass to vector rendering. Fixed YIQ passes: Fixed half texel offset. Readded usage of A value in encode/decode pass. Readded jitter of B value in encode/decode pass. Readded usage of P value in encode pass. Fixed not set O value uniform for decode pass. Removed duplicate YIQ option definition. Changed default of O value back to 1.0. NTSC Refactoring and Options: Merged YIQ encode and decode pass into one NTSC pass. Added options for most NTSC settings. Reduced sample count to 64. Changed default O value to 0. Fit NTSC signal jitter between a reasonable limit of 0 and 1. Fit A and B value between a reasonable limit of -1 and 1. Fit scanline jitter between a reasonable limit of 0 and 1. Added hum bar simulation based on MooglyGuy's GLSL port of the MAME shader pipeline. Added monochrome-chessboard.png. Added slot-mask-aligned.png (to simulate a TFT LCD) [ImJezze].
 - 0.169              : Added artwork\monochrome-matrix.png. Made defocus strength equal for x/y and independent from screen size: Defocus is now independent from screen size and ratio. Horizontal and vertical defocus now have the same strength. Replaced asymmetric defocus kernel by a symmetric kernel. Defocus is now limited to a maximum of 10. Added shader uniforms for orientation and rotation settings. Fixed HLSL for LCD screen type: Fixed wrong detection of vector screen, which meant that a LCD screen was also detected as vector screen. Re-enabled scan-line and other CRT related sliders for LCD screens. Extended Shadow Mask and Bloom functionality: Added shadow mask option to choose between "Screen" and "Source" tile mode ("Screen" is the default as before). Added bloom type option to choose between "Addition" and "Darken" blend mode ("Addition" is the default as before). The alpha channel of a shadow mask is now filled with the background color of the screen by the amount of the inverted alpha value. Added monochrome-matrix.png which can be used in combination with "Source" tile mode and "Darken" blend mode to simulate a STN LCD, for example. Cleanup: Renamed shadow_mask_type to shadow_mask_tile_mode. Renamed bloom_type to bloom_blend_mode. Implemented "Source" shadow mask tile mode for artwork_support\post.fx [ImJezze].
 - 0.168              : Cleanup HLSL: Removed duplicate prescale fields. Made visibility of HLSL options depending on screen type. Disabled scanlines for LCD screen type. Fixed reset of HLSL settings: Fixed bug that resets the HLSL settings when the screen size has changed. Removed hardcoded HLSL presets. Updates HLSL readme. Fixed missing shadow mask texture when enabling HLSL via shortcut keys: Fixed creation order of D3D and HLSL resources. Fixed HLSL visibility when toggling off/on: Sliders will be hidden when toggled off and will be shown when toggled on again. Changed screen adjustment for HLSL: Screen adjustment (scale, offset) can now be handled by the respective render API itself (default behavior is as before). D3D (if HLSL) is activated handles screen adjustment by itself within the shader, which fixes the odd behavior of some effects (e.g. round corners) when screen scale and offset is used. Fixed bug that resets the HLSL settings when switching between window mode and fullscreen. Fixed changed screen adjustment for multi screens. The vector renderer now tries to detect a invariabel vector intensity and disables the calculation of a dynamic beam width. Cleanup: Fixed not used HLSL settings from <custom>.ini if MAME was started without driver parameter. Removed default values from HLSL sliders, the defaults here are more like null values to hint when an effect would be disable. Slightly changed default HLSL settings. Fixed missing shadow mask texture when switching between window mode and full screen (render\d3d\d3dhlsl.cpp and drawd3d.cpp) [ImJezze].
 - 0.167              : Small HLSL fixes: Fixed defocus strength with difference prescales. Removed default screen ratio of 4:3, ratio is now based on the screen quad size. Smooth Borders: Enabled smooth border effect and added option, its amount is limited by the amount of rounded corners. Added raster.ini to parse_standard_inis(). Merged vector and raster bloom options, use vector.ini or raster.ini to distinguish. Bloom Overdrive: Added experimental bloom overdrive effect and options, this effect allows to overdrive pure colors like red, green and blue to become more brighter. Added lcd.ini to parse_standard_inis(). Cleanup: Changed default values of curvature, vignetting, reflection, round corner and smooth border to 0. Reverted compute_size_subroutine() back to non static Removed some test code. Added special post.fx and distortion.fx shader, which support enabled artworks, but they cannot apply some of the previously implemented corrections (e.g. bloom staircase artifacts when screen is curved, elliptic rounded corners when aspect ratio is not 4:3). Fixed aspect ratios in special post.fx shader for artwork support. Fixed position of reflection effect for vector graphics. Fixed size of rounded corners. Fixed very small black border. Unified HLSL render pipline for raster and vector graphics: Simplified draw call of render pass functions. Reduced number of used render targets from 7 to 4 (2 native and 2 pre-scaled). Made render pass functions (nearly) independent from each other. Unified render pipeline for raster and vector graphics, which means that all effects are now also available for vector graphics (except scan-lines). Removed/replaced simple.fx by primary.fx. Removed CU_PHOSPHOR_IGNORE uniform, which was only used in phosphor pass function and is now directly set. Added CU_TARGET_DIMS uniform based on the current render target. Added CU_QUAD_DIMS uniform based on the current full screen polygon quad. Removed pre-scale knowledge from shaders. Fixed DX9 related half pixel offset in most shaders. Reduced shadow mask color bleeding. Fixed defocus strength with different pre-scales. Added slight noise to bloom effect to reduce the color banding of lower bloom levels. Fixed position of reflection effect when screen is rotated or flipped. Fixed roundness and size of rounded corners in any aspect ratio. Added distortion pass, which is applied after the bloom pass and moved curvature, vignetting, rounded corners and reflection effect to this pass. Fixed bloom stair-step artifacts when screen is curved. Added smooth border effect and option, its amount is limited by the amount of rounded corners. Added bloom overdrive effect and options, this effect allows to overdrive pure colors like red, green and blue to become more brighter. Merged vector and raster bloom options, use vector.ini or raster.ini to distinguish. Added raster.ini and lcd.ini to parse_standard_inis(). Added bounds() and screen_bounds() getter to layout_view. Added current_view() getter to render_target. Many other small changes and refactoring. Fixed Vector Intensity and Flicker: Fixed vector intensity in vector.fx. Fixed vector flicker in vector.c. Changed range of vector flicker option from 0 - 100 to 0.00 - 1.00. Experimental Dynamic Beam Width: Replaced beam width by beam min. and beam max. width, this makes it possible to create a linear dynamic beam width by the amount of intensity of the beam. Added beam intensity weight, this adds an exponential factor to the dynamic beam width (values greater than 0 will push larger intensities more than smaller intensities). Fixed displayed ratio of vector points (zero-length lines). Fixed beam width min. and max. could not be set higher than 1.0 in UI [ImJezze]. Added scanline partial update (emu\screen.c). This isn't working right yet with my test case, but I'm fairly certain the actual core part is generally correct, just the (MESS) Apple II video rendering and/or floating-bus reading isn't quite right [R. Belmont]. Fixed horizontal partial updates in beathead, gardiab (glitchy sprites and broken scroll) and gardiaj (glitchy sprites). Was causing glitching in qix, merit and some others too, I guess they don't all fetch data during the scanline but rather at a fixed point, keep old behavior in MAME drivers for now. I would be interested in seeing if supporting proper horizontal updates could fix some of the TMS34010 issues with flickering in megaphoenix / little robin tho (drivers\cardline.c, cubeqst.c, firefox.c, galaxian.c, merit.c, segas24.c, slotcarn.c and vicdual.c; video\btoads.c, cloak.c, dkong.c, galaxian.c, gyruss.c, itech8.c, meadows.c, qix.c, spacefb.c and tp84.c) [David Haywood].
 - 0.166              : HLSL refactoring, fixes and cleanup: Added distortion pass, which is applied after the bloom pass. Moved vignetting, curvature, round corners and reflection effect to distortion pass. Disabled distortion pass for multi screens and activated artworks due to not yet fixed misalignments. Disabled scanlines for vector rendering in post pass shader. Removed prescale knowledge from downsample, bloom and post pass shader. Fixed half pixel offset in most shaders. Fixed position of reflection effect when screen is rotated or flipped. Fixed roundness of round corners in any aspect ratio. Fixed shadow mask bleeding (nearly completly). Added bounds() and screen_bounds() getter to layout_view. Added current_view() getter to render_target. Some cleanup and refactoring [ImJezze]. Fixed OpenGL overly-strict requirement on SCREEN shaders to match docs [cgwg].
 - 0.165              : HLSL refactoring and Fixes: Removed position offset in post.fx. Fixed texture offset caused by 0th level of bloom.fx. Fixed texture offset caused by focus.fx. Changed Passthrough parameter in phosphor.fx to boolean. Simplified defocus pass function and calling it twice. Removed CU_PHOSPHOR_IGNORE (Passthrough) uniform, which was only used in phosphor pass function and is now directly set. Added CU_TARGET_DIMS (TargetDims) uniform based on the current render target. Fixed missing Prescal parameter in downsample pass function. Some code cleanup [ImJezze]. Reduced tagmap lookups in emu\render.c and rendlay.c [Wilbert Pol]. Added an adjustable global brightness (emu\screen.c) [Dirk Best]. Increased MAX_TEXTURE_SCALES to 16 (emu\render.h). Reverted wav output fix from MAME 0.149u1 ("emu\video.c: recompute_speed even if we skip frame, makes wav's output same for any frameskip"). This broke auto-frameskipping. MAME was unable to correct itself after a hickup and would continue frameskipping and fluctuate speed between 95 and 105% [hap].
 - 0.164              : HLSL refactoring and fixes: Reduced number of used render textures/targets from 7 to 4. Some code cleanup. Made most render pass functions independent from each other. Resused phosphor and bloom pass function for vector rendering. Separated downsample pass and bloom pass into two function calls. Removed/replaced simple.fx by using primary.fx to render on screen. Changed PostPass parameter of primary.fx to boolean. Simplified bloom.fx and downsample.fx, prescale parameter is now set correctly from outside depending on raster/vector rendering. Post Pass effects for Vector rendering: Added support for post pass effects for vector rendering (does not work properly in full screen mode, yet). Made texture_info::compute_size_subroutine() function public static. Correct vector curvature on x-axis when screen dims and render target dims differ (there is still a difference on y-axis) [ImJezze]. Added a bunch of doxygen style comments in screen.h, regarding MCFG_SCREEN_* functions (emu\screen.h) [Angelo Salese].
 - 0.163              : Changed vignetting and fixed rounded corners (hlsl\post.fx). Fixed misaligned scanline with odd resolutions caused by centered coordinates. Refactoring: Simplified render pass functions. Some code cleanup [ImJezze]. Unlimit shader file size. Fix off-by-one (opengl\gl_shader_tool.c) [R. Belmont, Vas Crabb].
 - 0.162              : Added artwork\adapture-grill.png, shadow-mask.png, slot-mask.png and hlsl\simple.fx. HLSL shader improvements: Changed shadow mask implementation, shadow count XY now represent the number of pixel the shadow UV sized tiles will take on the screen. Implemented rotation of the shadow mask texture depending on the default landscape or portrait view of the screen. Removed prescale and pixel border of the shadow mask texture. Added option to change the shadow UV offset, to reduce the color bleeding of the shadow mask. Adjusted presets to work with the changed mask implementation. Reduced defocus offset. Improved downsampling for better blurring. Improved alignment of bloom layers (raster and vector). Applied bloom effect to the render output of screenshot and AVI recording. Changed curvature effect to fit screen size. Changed scanlines to be not rendered into bloom layers. Changed shadow mask to be not rendered into bloom layers. Changed color floor to not light the bloom layers. Changed shadow mask to not dark the color floor. Added image vignetting simulation and option. Added round screen corner simulation and option. Added screen light reflection simulation and option. Made usage of unused brightness offset (additive). Removed unused pincushion option. Removed duplicate shadow count Y options. Removed artwork/adapture.png. Added artwork/adapture-grill.png. Added artwork/shadow-mask.png. Added artwork/slot-mask.png. Added hlsl/simple.fx. Removed unused shaders::blit() function. Added shaders::screen_pass() function, which handles the (raster-)rendering on screen, into screenshot and AVI recording. Added effect:set_bool() function. Fixed automatic Shadow Mask rotation: Fixed usage of OrientationSwapXY shader parameter. Added RotationSwapXY shader parameters to consider the user defined screen rotation. Fixed automatic Shadow Mask rotation: Added missing RotationSwapXY shader paramter. Fixed curvature zoom to fit the screen size in any aspect ratio. Fixed black border on the right and bottom side of the screen, caused by the previously added rounded corners. Changed vignetting simulation: Removed screen ratio influence. Changed radius, blur and intensity. Fixed roundness of rouned corners:. Fixed roundness of rounded corners; the default aspect ratio of 4:3 should not be stretched anymore when the source has another ratio. Disabled blurring of rounded corners. Some cleanup [ImJezze].
 - 0.161              : Documentation fix for docs\hlsl.txt, hlsl_write is incorrectly documented as a boolean [Ange, Tafoid]. Fixed YUV texture conversion for OpenGL (render\drawogl.c) [O. Galibert].
 - 0.160              : Moved osd\windows\d3d9intf.c, d3dcomm.h, d3dhlsl.c/h, d3dintf.h, drawbgfx.c, drawd3d.c/h, drawdd.c, drawgdi.c and drawnone.c to osd\modules\render\ and osd\modules\render\d3d. Enabled OpenGL renderer on Windows. By default, run-time function resolution is enabled. To resolve addresses, the code now first tries GetProcAddress followed by wglGetProcAddress. Moved OpenGL related stuff to modules\opengl. Introduced osd_rect and osd_dim to allow for more code alignment. Fixed resizing on windows (sdl/window.c and windows\window.c). Moved all renderers to osd\modules\render. Merged sdl_video_config and win_video_config. OpenGL on Windows now supports GLSL options. This worked out of the box with Wine64 and on Virtualbox Windows7 (64bit) (Example: mametiny.exe gridlee -video opengl -gl_glsl -glsl_shader_mame0 shader/glsl_plain -glsl_shader_mame1 shader/TV/tv -now -gl_forcepow2texture -keepaspect). Fixed MAME restart in builtin game selector (render\draw13.c). Fixed detecting rotation for "-video accel" for quadratic screen bitmaps (render\draw13.c). Fixed clipping bug (e.g. apparent in NeoGeo) for video accel (render\draw13.c). Minor code changes (windows\video.c). Avoid members having the same names as wgl* functions. Renamed those to pfn_wgl. If any windows headers do some macro magic, this should work around it (render\drawogl.c). Swapped interval for baseline OpenGL. I can't test this. Neither VirtualBox nor Wine seem to support WGL extensions (render\drawogl.c) [Couriersud].
 - 0.159              : Introduced a comparable "osd_renderer" interface like it now exists for SDL to mainline. Ultimately, this will allow renderers to be placed in modules\renderer and e.g. allow the OpenGL renderer to be used in mainline or the D3D renderer to be used in SDLMAME. Added a pointer to the render_container to quad_primitives. This can be used to pick up user_settings for gamma, brightness and contrast in case they will ever be supported by the OSD layer (emu\render.c and sdl\drawogl.c). HDC is passed differently to GDI renderer (the only one using it). Merged sdl_window_config and win_window_config into osd_window_config. Use osd_window_config instead of replicating individual member variables in osd_window. WM_DESTROY may be send multiple times (windows\window.c). This also fixes MAME -bench X crashes. render_containers now always make their own copy of the emulation palette for paletted textures, whether or not there are custom brightness/contrast/gamma settings. Fixes -mt color issues in driftout, raphero, etc. without the additional complexity introduced in MAME 0.158 (which has been reverted) [Couriersud].
 - 0.158              : Added zeroing of texcoords to reset() of render_primitve. The omission of doing so may have cause strange drawing issues in case the code assumes these to be 0.0f (emu\render.c) [Couriersud].
 - 0.157              : Fixed crash on fatalerror from winwindow_video_window_create() (windows\drawd3d.c and input.c) [Ramiro Polla].
 - 0.156              : Only calculate m_aspect and m_srcaspect in layout_view::recompute() when they are actually used (emu\rendlay.c). Only normalize component bounds in layout_element::layout_element() when components exist. Avoids division by zero for sets using layout\vertical.lay (emu\rendlay.c) [Oliver Stoeneberg]. Long-overdue documentation about how to use priority-masked drawing (aka pdrawgfx); add some useful constants (emu\drawgfx.h). Fixed drivers\prehisle.c issues introduced by pdrawgfx conversion; use required_region_ptr instead of runtime tag lookup; give gfx regions more meaningful names; remove superfluous "prehisle"'s and "16"'s from member names (it's been many years since you could accidentally plug a handler of the wrong width into an address map and not have the core catch you at compile time) [Alex Jackson].
 - 0.155              : render_screen_list::contains - instead of false/true, return number of same indices found in view (emu\render.c) [hap]. Make some members protected instead of private to be less fascistic and more consistent with other device_interfaces (emu\digfx.h) [Alex Jackson]. Changing #includes for headers that are part of toolchain and not part of any source/external library (analog\nld_solver.c, emu\rendfont.c, lib\util\hashing.c, windows\mame.rc and windows\ume.rc) [Osso].
 - 0.154              : Avoid more unnecessary UINT32<->rgb_t conversions (emu\rendersw.inc and video\rgbgen.h). Avoid some more unnecessary rgb_t <-> UINT32 conversions (emu\rendersw.inc and video\rgbsse.h). Added asserts in device_gfx_interface::decode_gfx() to detect stack-buffer-overflows (emu\digfx.c) [Oliver Stoeneberg]. device_gfx_interface and memory system improvements: Added macros to facilitate declaring gfxdecode info arrays as members of a device class. AM_SHAREs in a device's internal address map or its default address map are now tagmapped as children of that device rather than siblings (analogous to how handlers in internal/default address maps are scoped). Converted the Namco C45 to device_gfx_interface. Fixed stack-buffer-overflow in device_gfx_interface::decode_gfx() with extended offsets (emu\digfx.c). Don't do unneeded processing or allocate unneeded memory for RAW gfx layouts; added -valid check that extxoffs/extyoffs info are present when the layout size demands them (digfx.c and drawgfx.c). Make it possible to reset the total elements of a gfx_element (emu\drawgfx.c). Removed redundant checks from update_partial() (emu\screen.c). Ensure the vblank timer and the partial-update-reset timer always fire in the correct order when vblank starts on scanline 0 (emu\screen.c) [Alex Jackson]. Fixed bloom misalignment with HLSL [MooglyGuy]. Updated video\ramdac.c to use inline configs (emu\digfx.c and drawgfx.c) [Fabio Priuli]. Save screen pixelclock (emu\screen.c). Call reset_partial_updates() at the end of vblank instead of at the end of the visible display. Fixed an issue in screen->configure() to always recalculate the vblank timing on screen changes (emu\screen.c and video.c) [Dirk Best].
 - 0.153              : Added emu\digfx.c/h. Massive architectural change: There is no longer a single, global array of decoded graphics. Decoded graphics are now owned by devices using a new device interface, called, unsurprisingly, device_gfx_interface. A "gfxdecode" device (which does nothing but inherit this interface) provides the old, driver-level decoding functionality for drivers with video emulation not based on devices and for devices that haven't been updated to the new interface (which is currently most of them). Also, graphics layouts can now reference shared RAM regions by tag the same way as ROM regions, eliminating the need to set up RAM-based graphics manually (note that drivers/devices are still responsible for marking gfx elements dirty when the RAM they are decoded from is written to) [Miodrag Milanovic, Alex Jackson]. Changed emu\rendersw.c to rendersw.inc [Oliver Stoeneberg]. Reverted fix for pixel gaps between multi-screen games in HLSL mode, fixes the regression of missing graphics for vector games using HLSL [MooglyGuy]. Adding support for variable throttle (emu\video.c) [Nathan Woods]. Stop the flipping insanity [Alex Jackson]: Tilemap flipping is now calculated relative to the center of the visible area rather than to the total screen size, and the generic flip screen functions no longer reconfigure the actual screen. These changes ensure that in most cases flipping should Just Work for drivers that use MCFG_RAW_PARAMs, games that have a programmable CRTC, and games that have raster effects, and should fix many longstanding flip/cocktail-related regressions. Unfortunately, it also means that all the thankless work that Osso and hap have been doing over the last few months fixing flipscreen regressions will have to be reverted now. I've also undoubtedly caused new regressions in drivers that handle flipscreen in unusual ways. But now we can share video device implementations between drivers that have been updated to RAW_PARAMs and drivers that haven't without kludges all over the place. And now I can hook up the programmable CRTC in toaplan1.c without abandoning all hope of flipscreen ever working again in that driver. Added savestate registration for the generic soundlatches, which seemed like a good idea. Any particular reason why these weren't being saved? Fixed flipscreen after core changes (bagman.c, baraduke.c, bking.c, bublbobl.c, chance32.c, dkong.c, docastle.c, galaga.c, galaxian.c, gottlieb.c, kyugo.c, madalien.c, m10.c, mappy.c, mario.c, namcos1.c, namcos86.c, pacland.c, pacman.c, rallyx.c, taito_b.c, toypop.c, twincobr.c, zaxxon.c and zodiack.c) [Alex Jackson]. Changed how NULL callbacks are specified on win_draw_callbacks (windows\drawd3d.c, drawdd.c, drawgdi.c and drawnone.c) [Nathan Woods]. Moved drawgfx functions to gfx_element. Created gfxdecode_device instead of using machine fixed gfxdecode. Updated all devices and drivers for using it. Note that it is made to work same as before, in some cases it can be more logic to move gfxdevice into subdevice itself then to keep it in main driver. Moved optional_device<gfxdecode_device> to specific drivers state classes [Miodrag Milanovic]. Fixed crash in drivers with NULL gfxdecode entries [Alex Jackson]. Switched rgb_t to a class, replacing macros with methods. Mappings are as follows: MAKE_RGB(r,g,b) == rgb_t(r,g,b), MAKE_ARGB(a,r,g,b) == rgb_t(a,r,g,b), RGB_ALPHA(data) == data.a(), RGB_RED(data) == data.r(), RGB_GREEN(data) == data.g(), RGB_BLUE(data) == data.b(), RGB_BLACK == rgb_t::black and RGB_WHITE == rgb_t::white. Implicit conversions to/from UINT32 are built in as well as simple addition, subtraction and scaling (with clamping). As a result of being a class, some stricter typing was needed in a few places but overall not too much [Aaron Giles]. Fixed gfxdecode_device crash (bfm_sc1.c, bfm_sc2.c, bmcpokr.c, m10.c, namcoic.c, namcos2.c, taito_b.c, tceptor.c) [Alex Jackson, Miodrag Milanovic]. Fixed gfxdecode_device regression (dfruit.c, lastbank.c and taito_b.c) [Osso]. Fixed loading of cached BDF fonts (emu\rendfont.c) [Couriersud]. Moved optional_device<screen_device> m_screen and optional_device<palette_device> m_palette out of driver. Video attributes are now per screen. Removed some of machine().first_screen() users [Miodrag Milanovic]. The UI graphics viewer can now display multiple palettes and multiple gfx decoders in games that have them (ui\viewgfx.c). You now specify a gfxdecode device once when you create a tilemap, rather than each time in the tile info callback. Updated all drivers accordingly. gfx_elements now have a pointer to a palette_device (which is not actually initialized or used yet), and no longer have an unneeded pointer to the running_machine. Removed some gfx_element getter methods described in comments (by Aaron?) as 'a bit gross', and fixed the tiny handful of drivers that were using them. gfxdecode devices must now be assigned a palette in MCFG. Added palette devices to several MESS drivers and devices to comply with this requirement. This palette is assigned as a default to the gfx_elements created by the device (but still not used for drawing yet, except in the UI graphics viewer). Tilemaps now have a pointer to a palette device and use that palette for rgb32 drawing, rather than the palette of the screen or bitmap they are drawing to (since rgb32 screens don't have palettes now). When a tilemap is created, it takes its palette from the gfxdecode device it was created with, but you can change a tilemap's palette device with set_palette() at any time (doing this does not mark the tilemap dirty, since all tilemaps use indexed bitmaps internally). Added device_start dependency on gfxdecode to all devices that create tilemaps. Made gfx_element::decode() private; fixed drivers that were calling it directly. Clean out dead (emu\render.c), broken code accidentally revived by palette rewrite. Allocate brightness/contrast/gamma-adjusted palettes on first use, since we can't allocate them at startup anymore due to init order issues. Refactor UI graphics viewer to handle 'empty' gfx decoders. gfx_elements now have a xor mask that is applied to each source bit offset when decoding. This can be used to deal with endianness when decoding gfx from RAM or from program ROMs, or to reverse the bit order sense when this is useful (e.g. pgm.c). This is test/checkpoint right now, final goal is to automatically determine the appropriate xor at startup when the gfxdecode info is processed (e.g. based on the width and endianness of the ROM region). New device_gfx_interface [Alex Jackson]: Moved graphics decoding to a new device interface class: device_gfx_interface. The gfxdecode device is now a device that simply inherits this interface and does nothing else. Devices that draw tilemaps or sprites using gfx_elements should in time be updated to use this interface rather than connect to a machine-global gfxdecode device. Updated toaplan_scu.c as an example (also fixed off-by-one sprite alignment in twincobr and rallybik while I was at it). gfx_elements are normally created in interface_post_start(), making it possible to dynamically create or modify the graphics decoding info during device_start() if you need to. On the other hand, if you need the gfx_elements during device_start(), you can directly call decode_gfx() to create them early. This interface also provides a standard and init-order-safe way to connect to a palette device (similarly to how device_video_interface helps devices connect to a screen), so it's handy for any device that does palettized drawing even if it doesn't use gfx_elements. Updated k053250.c as an example of this usage. gfxdecode info entries can now reference shared RAM regions by tag as well as ROM regions, automatically handle endianness, and have some other new capabilities. Updated nemesis.c and pgm.c to showcase the new features. Removed validate_display() (it was just a commented out stub already) since its only function, checking that drivers don't have an ind16 screen without a palette, is now done by screen_device::device_validity_check(). Updated obsolete comments about GFXLAYOUT_RAW (cps1.c hasn't used raw gfx for years, and "to save memory" is no longer a good reason to use it). Use owner()->subdevice instead of siblingdevice() like DEVCB2 does [Alex Jackson]. There is also machine().primary_screen that we should replace with m_screen, and most is in devices (drivers\turrett.c and hng64.c) [Miodrag Milanovic]. Disabled some Visual Studio analysis warnings / fixed some obvious errors based on analysis output (-video gdi works again) [Oliver Stoeneberg]. Updated docs\hlsl.txt to mirror fact that some commands are no longer valid [Tafoid].
 - 0.152              : Reduced smearing on HLSL prescale (hlsl\prescale.fx: Mip/Min/MagFilter = LINEAR to NONE) [MooglyGuy].
 - 0.151              : Fixed HLSL bloom drawing onto the prev frame if artwork backdrop is used (note: Bug effect was not visible due to MT05332 bug). Reverted attempted fix for color overlays not working on vector games, this fixes MT05324 issue (cubeqst, mach3, usvsthem and clones: There's a blank screen in certain places in the video) and MT05332 (Multiple Systems: Backdrop displayed in front of screen in multiple drivers), and breaks MT05214 again. This fixed also many systems that use multiple screens: Only one screen shown when using multi-screen games with an overlay effect enabled in Game Propertie [hap].
 - 0.150              : Added emu\divideo.c/h. Created new device_video_interface [Aaron Giles]: Right now its sole purpose is to house a screen tag and to find the screen at startup, providing an m_screen object that can be used. One nice feature is that if there is only one screen and no screen has been specified, it will auto configure to that screen. This removes the need to explicitly specify a screen in the configuration for a large chunk of drivers (though doing so never hurts). A new macro MCFG_VIDEO_SET_SCREEN is provided, though devices are encouraged to define their own that maps there so it is obvious which device is being targeted. The device_video_interface's validation function will error if an invalid screen is specified or if no screen is provided but there are multiple screens present. Updated all devices that currently had an m_screen in them to use the device_video_interface instead. This also has the nice benefit of flagging video-related devices for categorization purposes. It also means all these devices inherit the same screen-finding behaviors. For devices that had interfaces that specified a screen tag, those have been removed and all existing structs updated. Added an optional_device<screen_device> m_screen to the base driver_device. If you name your screen "screen" (as most drivers do), you will have free access to your screen this way. Future updates include: * Updating all devices referencing machine.primary_screen to use the device_video_interface instead. * Updating all drivers referencing machine.primary_screen to use the m_screen instead. * Removing machine.primary_screen entirely. Now setting NULL explicitly for the screen tag will prevent the video interface from auto-finding the target screen (emu\divideo.c). Bulk removal of machine().primary_screen references from MAME drivers, in favor of using the common m_screen. This is 98% reliable except for cases where there were multiple screens or where the screens were not named 'screen' like everywhere else. Those cases will need to be revisited but should reveal themselves in the next round of regression tests. Eventual plan is primary_screen will go away. Devices that need to know the screen should have a device_video_interface. Drivers should find the screen device like any other, or use the pre-found m_screen for the common single-screen case. Some cleanups of remaining machine->primary_screen references in drivers. Mostly minor except for the megadriv stuff, where I made a first pass at removing some of the legacy cruft (drivers\cobra.c, deco_mlc.c, dynax.c, esripsys.c, itech8.c, m10.c, segac2.c, segas18.c, taitotz.c, tickee.c, machine\irobot.c, megadriv.c, megavdp.c/h, emu\video\polynew.h, machine\namcos2.c, segamsys.c, snes.c, video\amiga.c and amigaaga.c) [Aaron Giles]. Removed unused legacy macro SCREEN_UPDATE16_CALL (emu\scrlegcy.h). Removed unused legacy macro VIDEO_RESET (emu\driver.h). Small VIDEO_START and MACHINE_RESET cleanup (several drivers). Some SCREEN_UPDATE_* cleanups (emu\screen.h, drivers\ddenlovr.c, raiden2.c, snowbros.c, video\kan_panb.c/h, namcos21.c, toaplan2.c and vectrex.c). Simpler implementation of MCFG_DEVICE_{VBLANK|PRIODIC}_INT_REMOVE. Removed unused private member from osd\windows\d3dcomm.h [Oliver Stoeneberg]. HLSL updates [MooglyGuy]: * Removed hlsl_read and hlsl_write options now that all slider options are plumbed and have values matching the INI settings. * Added more surface release calls in order to fix device resetting. * Fixed draw order for quads, overlays now appear on top of vectors in non-HLSL mode. * Moved aperture.png loading into create_resources/delete_resources so that it is correctly reloaded when HLSL is toggled on and off. This fixed toggling HLSL off then on with ctrl-alt-F5 will drop its use of aperture.png, Battle Zone displays black and white, crashed when hlsl_read is set to 1 and you can't alt-tab and back with HLSL enabled and in 148 you could. Restructured NTSC encode/decode shaders for better readability. Splitted HLSL pases into separate functions. General code cleanup in HLSL (windows\d3d9intf.c, d3dhlsl.c/h and winmain.c). Minor HLSL shader cleanup and uniform consolidation. Started re-architecting the HLSL system to be data-driven [MooglyGuy].
 - 0.149u1            : Added emu\scrlegcy.h. Removed unnecessary (and bogus) setting of a variable in screen_device::update_partial (emu\screen.c). Moved some legacy stuff from screen.h to scrlegcy.h [Oliver Stoeneberg]. recompute_speed even if we skip frame, makes wav's output same for any frameskip (emu\video.c) [Miodrag Milanovic]. Resolved devices specified for vblank/periodic interrupts relative to the owner device, not the device itself, to make it consistent with DEVCB2 patterns. This change is mostly hidden since most drivers use MCFG_DEVICE_VBLANK_INT_DRIVER and MCFG_DEVICE_PERIODIC_INT_DRIVER. But for those few cases where a device was explicitly specified, it reduces the awkwardness. We should probably standardize this when using device_delegates for consistency (emu\diexec.c/h, audio\atarijsa.c, midway.c, drivers\atarisy2.c and cyberbal.c) [Aaron Giles].
 - 0.149              : HLSL changes: Upped vertex buffer size to 64k verts, fixes assert in starwars and alphaone, please include the printed error message in any subsequent encounterings of the assert. Improved vector rendering (beam width 1.5 suggested). Ducked raster bloom default to 0.225 to reduce washout. This fixed various vector games crashed/freezed in MAME 0.148u5. Fixed composite ntsc shaders (hlsl\bloom.fx, yiq_decode.fx, yiq_encode.fx and windows\d3dhlsl.c). Fixed raster_bloom_scale and vector_bloom_scale (hlsl\downsample.fx). Increase vertex buffer size a bit more (bwidow requested up to over 140,000) (windows\drawd3d.h). Added better .ini defaults for HLSL and hooked up bloom sliders [MooglyGuy]. Fixed build (vector_time_period in windows\winmain.h) [David Haywood]. Cast error in windows\d3dhlsl.c found by MinGW 4.7.4 [Miodrag Milanovic]. Updating of DOCS/hlsl.txt for cover new command additions [Tafoid].
 - 0.148u5            : Removed windows\d3d8intf.c. Enabled vector bloom and associated .ini controls. Added raster bloom and associated .ini controls, each bloom "level" is the linear weight of successively half-sized render targets. Removed D3D8 mode. Mass renaming in D3D renderer to use namespaces, initial planning step to HAL-based renderer implementation on Windows (i.e., GL on Windows). Converted d3d_info, d3d_poly_info, and d3d_texture_info into classes. Added batching of vectors for possible speed increase. Minor cleanup of shader state setting. Reset D3D device before destroying device. Fixes crash when selecting games from internal menu with HLSL enabled [MooglyGuy]. Fixed some initialization and cleanup issues with new D3D code. Fixed DFJustin's crash (windows\drawd3d.c) [Oliver Stoeneberg].
 - 0.148u4            : Removed not needed screen device references (drivers\backfire.c, darius.c, fromanc2.c, ninjaw.c, warriorb.c and xmen.c) [Miodrag Milanovic].
 - 0.148u3            : Attempt to fix -burnin option (does not produce a burnin image - MT05173) [Fabio Priuli]. Fixed performance issues with YIQ enabled and prescale_x/prescale_y changes no longer impacts colors (windows\drawd3d.c) [Just Desserts, Robert Tuccitto].
 - 0.148u2            : Fixed sliders and phosphor offset (windows/d3dhlsl.c and hlsl/phosphor.fx) [MooglyGuy].
 - 0.148u1            : Made HLSL switchable at runtime, Ctrl+Alt+F5 (windows\d3dhlsl.c). Added preliminary vector post-processing (windows\d3dhlsl.c). Fixed raster games with HLSL. Silence some debug spam and turn off bloom target allocation on cache targets (windows\d3dhlsl.c and drawd3d.c) [MooglyGuy]. Temp patch to fixed D3D crash at start (windows\d3dhlsl.c) [Robbbert]. Revert r20364: "Screenless systems (like synths) tend to be latency-sensitive in their outputs. Increase their osd refresh rate to 1kHz". The solution needs to be rethought, this one made (most?)screenless drivers slow down to a crawl [hap]. Added highlighted white monochrome RGB (video\generic.c/h) [Curt Coder].
 - 0.148              : Added bounds-checking on presets to HLSL. Cleaned up HLSL render target management. May provide better behavior in games that use multiple resolutions, e.g. tekken3 and stv. Fixes HLSL bugs with Rocket Knight Adventures (osd\windows\d3dhlsl.c/h, drawd3d.c/h and winmain.c). Fixed crash when using presets. Restored old HLSL prescale behavior, with 0 being auto-detect. Added new PRIMFLAG macros pertaining to vectors, to be used by the OSD (emu\render.c). Began laying the groundwork for vector post-processing, disabled by default (windows\d3dhlsl.c). Clamp hlsl_prescale_x/y to a minimum of 1 (windows\d3dhlsl.c). Fixes crashes when using -nomaximize switch. Free HLSL resources on device reset. Fixes hang when alt-tabbing away from a fullscreen window and back (windows\d3dhlsl.c). Move default_texture creation into device_create_resources. Should fix intermittent crashes when alt-tabbing back to a full-screen instance of MAME (windows\drawd3d.c) [MooglyGuy].
 - 0.147u4            : Mark the display for screenless systems as changed whenever an output has changed (emu\video.c) [Wilbert Pol]. Added highlighted green monochrome palette (video\generic.c) [Curt Coder].
 - 0.147u1            : Modernized screen update calls. Changed most of screen.machine() to machine(). Clean some newly introduce macros since, calls already have full names (emu\screen.h, drivers\jollyjgr.c, machine\slikshot.c, video\cinemat.c, dynax.c, kaneko16.c, m62.c, playch10.c, seta.c, ssv.c, taitojc.c, tceptor.c, tmnt.c, toaplan2.c, vicdual.c and mz700.c). Some more cleanup (drivers\cps2.c, ddenlovr.c, nbmj8991.c, pipedrm.c, powerbal.c, segas16a.c, segas16b.c, segas18.c and includes\dynax.h) [Miodrag Milanovic].
 - 0.147              : gfx_element is now a class. Accessors are provided for all necessary elements. Updated some of the more, ah, creative uses/abuses of the gfx_elements. Fixed gfx_element behaviors for dynamically created single-element raw objects used in offbeat drivers like metro.c [Aaron Giles]. Wrong file mod (mame\etc\template_device.h) [Angelo Salese].
 - 0.146u4            : Quick bug-fix, otherwise old style vblank time will never work (mame\etc\template_driver.c) [Angelo Salese].
 - 0.146u1            : Allow image loading outside of layout zip [Miodrag Milanovic].
 - 0.146              : Fix for PORT_VBLANK multi bit (emu\screen.c). Fix for -video ddraw causing crash on 16bit video output (windows\drawdd.c) [Miodrag Milanovic].
 - 0.145u8            : Started adding support for scrolling reel displays, currently text only, but should be pretty easy to get graphics in there and add different direction scrolling - updating bfm_sc4 code to use these new types [David Haywood].
 - 0.145u7            : Moved video/generic flip screen management into the base driver_device class and updated all callers. Added templates to software renderer [Aaron Giles].
 - 0.145u4            : Aaron Giles fixed specifying device-based VBLANK callbacks (emu\screen.h).
 - 0.144u7            : Change in minimum -STR before results are shown (emu\video.c) [Tafoid]. Move screen update to happen prior to calling the vblank callbacks [Aaron Giles]. Solves missing foreground layer in Wheels & Fire and probably a lot more issues. In fact, most of hap's recent changes to handling things on the falling edge are unnecessary now. Permit visarea to exceed width/height, and allocate screen bitmaps based on the larger of the two. hap fixed drivers that changed from SCREEN_EOF to SCREEN_VBLANK.
 - 0.144u5            : Change 'screen' parameter in SCREEN_UPDATE and SCREEN_EOF callbacks to a reference. Remove redundant machine parameter from SCREEN_EOF. Remove old vestiges of driver_device video_eof override since it wasn't being used. Update all multi-screen games to use separate functions for each screen (calling into common code where appropriate) [Aaron Giles]. Bulk converted cliprect * to cliprect & across the system. This makes cliprects mandatory everywhere. In general, cliprects were being correctly passed through the video side of most drivers already, so it is mostly a semantic change. Note that with my previous change, bitmaps have cliprects, so if you just want to clip to the bitmap's boundaries, pass bitmap->cliprect() instead of NULL (which is no longer permitted) [Aaron Giles].
 - 0.144u2            : Added emu\video\ramdac.c/h, mame\etc\template_device.c/h and template_driver.c.
 - 0.144u1            : Fixed HLSL memory leak and crash on exit on 32-bit targets [Ryan Holtz, Bat Country Entertainment]. Aaron Giles removed explicit freeing of HLSL shadow_texture, since it is allocated by texture_create() which does its own tracking and freeing.
 - 0.143u7            : Fixed all HLSL stability issues except visible crease [Ryan Holtz, Bat Country Entertainment].
 - 0.143u5            : Various HLSL fixes [Ryan Holtz, Bat Country Entertainment]: Created two flags, -hlsl_ini_write and -hlsl_ini_read. The former enables custom HLSL INI writing explicitly, the other enables loading of the same. Fixed disappearing aperture effect when using custom INI files. Fixed diagonal seam on some games, for serious real this time. Fixed phosphor simulation, now works as expected. MooglyGuy fixed MAME freezes with a hlsl .ini file.
 - 0.143u3            : Fix for the HLSL scanline jitter effect and HLSL phosphor decay [nimitz].
 - 0.143u2            : Fixed double-free of D3D->hlsl [Oliver Stoeneberg].
 - 0.142u6            : HLSL Updates [Ryan Holtz, Bat Country Entertainment, austere]: Reworked default shadow mask settings, eliminating rainbow banding and matching reference shots more closely. Moved color power to occur after shadow mask, as it is intended to simulate nonlinear phosphor response. Added a variable-width notch filter to the Y channel in NTSC post-processing, eliminating luma banding on e.g. CoCo 2 and Apple II. MAME will now save an HLSL INI file on the first run of a game that doesn't already have an INI file. HLSL INI files must have their parameters left in the order in which they are saved out. Fixed a diagonal 'crease' visible on the screen in HLSL mode.
 - 0.142u5            : Added hlsl\prescale.fx and windows\d3dcomm.h, d3dhlsl.c/h and drawd3d.h. Internal HLSL cleanup [Ryan Holtz, Ashura-X]: Removed aux texcoords, restored software vertex processing due to low-end cards not doing hardware vertex processing, removed unnecessary tristrip->trilist splitting. Restores D3D functionality on integrated chipsets and marginal cards. HLSL Updates [Ryan Holtz, Bat Country Entertainment]: Switched to point-sampling through most of the shader chain to avoid non-intentional pixel smearing. Correct alignment and scaling on the shadow mask and scanlines; dramatically reduces rainbow banding at non-oversampled resolutions. HLSL Updates [Ryan Holtz, Bat Country Entertainment, austere, SoltanGris42]: Added the ability to render screenshots at arbitrary resolutions. Added the ability to record AVI videos (albeit with no audio) at arbitrary resolutions. Added a 43-tap-wide FIR-based NTSC filter with tunable Y, I and Q frequency response. Updated scanlines to have a user-tunable pixel-height ratio in addition to the current screen-height ratio. Fixed a VRAM leak that was causing many dynamic-resolution drivers to run out of memory mid-run. Split HLSL code into a separate file, d3dhlsl.c/h. Also split drawd3d.c into a couple of headers [Ryan Holtz, Bat Country Entertainment]. MooglyGuy fixed incorrect screen size when using HLSL.
 - 0.142u4            : Implemented experimental HLSL post-processing support on Direct3D 9 targets [Ryan Holtz, Bat Country Entertainment]: 5-pass post-processing: Upscale, Post-Process, Store Last Frame, Defocus 1 and Defocus 2. Many tunable effects including: Scanlines, defocus, linear deconvergence, radial deconvergence, pincushion, RGB colorspace convolution, YIQ colorspace convolution, saturation, simulated dot crawl, simulated chroma subsampling, aperture masking, and more. Requires a GPU that supports Shader Model 3.0 to be enabled and a powerful GPU, the entire pipeline consists of approximately 30 texel fetches and approximately 230 arthimetic ops. Will supersample the framebuffer up to 9x in both X and Y, but this requires an enormously powerful GPU that has not been invented; users with Radeon 5000-class cards should limit themselves to 3x, Radeon 4000 to 1.5x. The default configuration will NOT appear to do anything; it requires tuning to the user's liking. Should nicely fall back in all cases except missing shaders, and it might fall back correctly in that case as well. Report any anomalies. For obvious reasons, the Direct3D8 renderer cannont support this. HLSL Updates [Ryan Holtz, Bat Country Entertainment]: Split color convolution and deconvergence into separate shaders for potential GPU savings down the line. Added light and heavy variants of the color convolution shader, the former with YIQ colorspace removed. Re-worked defocus to occur prior to shadow mask application, as it would be on a real monitor. Split "pincushion" into "Pincushion" and "Screen Curvature", the former affecting the only the displayed image and the latter only affecting the shadow mask. Made major fixes to CVBS simulation, significantly increasing color saturation. Added magnet deconvergence via a shader uniform. Improved phosphorescence. Improved YIQ codec. Added adjustable color carrier in YIQ processing mode. Fixed resolution-change crash and likely D3D performance regression with -nohlsl on low-spec cards. Created a new OSD function, osd_get_slider_list, which allows OS-specific slider controls. HLSL Post-Processing Updates: [Ryan Holtz, Bat Country Entertainment, cgwg]: The defocus pass is now switched off when defocus_x and defocus_y are zero, allowing finer-grained performance tuning. Removed YIQ convolution from the main color-convolution shader and replaced it with a full composite encode/decode pass. This is slower, but looks amazing(ly like a terrible TV) and can be turned off. More authentic NTSC dot crawl and bandwidth limiting.
 - 0.142u1            : Oliver Stoeneberg added "Mandatory artwork is missing" error.
 - 0.141u3            : Modified video update system [Miodrag Milanovic]: Screen update function is now per screen device (it was before but was attached to machine driver): MCFG_VIDEO_UPDATE -> MCFG_SCREEN_UPDATE and MCFG_VIDEO_EOF -> MCFG_SCREEN_EOF. EOF is now executed for all screens, so for all existing it is defined just for one screen. This part will be updated in future.
 - 0.141u1            : Added layout\lcd.lay and lcd_rot.lay.
 - 0.140u2            : Added emu\screen.c/h. Aaron Giles split the screen device into a separate module. Converted global video routines into a video_manager. Moved video manager initialization earlier in startup.
 - 0.140u1            : Aaron Giles converted rendfont to C++.
 - 0.140              : Aaron Giles fixed crash when -effect is used. Aaron Giles moved -effect implementation out of OSD code and into core since the implementations were identical across Windows/SDL and implemented in the core itself.
 - 0.139u4            : Aaron Giles converted render.c objects into C++ objects. Updated all callers.
 - 0.139u3            : Atari Ace removed generic.videoram and generic.videoram_size. These generics have no core use, they are simply there for the convenience of drivers. Now that drivers are required to have devices, the data should move there.
 - 0.138u2            : Added lib\util\opresolv.c/h.
 - 0.137u2            : Bryan Ischo fixed double-free error in render.c. Harmony removed texture_rectangle_32bit and fill_rectangle_32bit to hopefully generate a bug report which indicates any games using the modes.
 - 0.135u4            : Aaron Giles moved machine->gfx initialization out of the video module and into drawgfx. We now call this before devices are initialized, so that devices can dynamically append to the machine->gfx as needed. Christophe Jaillet removed deprecated core function decodegfx().
 - 0.135u3            : Aaron Giles added tilemap_create_device() function which lets you create a tilemap from within a device, and be passed that device in your callback.
 - 0.135u2            : Atari Ace removed limited use of spriteram_3 global.
 - 0.133u1            : Angelo Salese improved hblank duration behaviour.
 - 0.132u4            : Aaron Giles removed PREDECODE_GFX compile flag, as the on-the-fly decoding seems to be working reliably. Deprecated the ROMREGION_DISPOSE flag, as 98% of the use of it no longer is applicable with on-the-fly decoding, and the remaining cases are difficult to identify among the others.
 - 0.131u3            : Krick added support for parsing horizont.ini or vertical.ini based on the game's orientation.
 - 0.129u1            : Aaron Giles added function video_assert_out_of_range_pixels() to help find the source of invalid pixels (generally out-of-range palette entries due to invalid data or sloppy calculations). Place this after each step in your rendering in a debug build to discover which code is generating improper pixels.
 - 0.128u6            : Fixed Altivec RGB primitives on newer GCCs [budge, Vas Crabb].
 - 0.128u5            : Atari Ace removed fillbitmap() macro in favor of direct calls to bitmap_fill(). Note that the parameters to the latter are in a different order (bitmap, clip, color).
 - 0.127u6            : Aaron Giles changed MAKE_RGB macro to set the alpha to 255 instead of 0. Updated palette.c to preserve the alpha when transforming palette values. These changes should be transparent to almost all drivers and rendering (ha-ha), but there may be an occasional instance where a driver relied on the alpha being 0 in the system palette. This also means that the palette_set_color() function preserves any alpha value that is set. Aaron Giles plumbed machine parameters through the renderer. Removed need for deprecat.h. Aaron Giles changed render_texture_set_bitmap() to accept a palette object instead of a palette index. The renderer remains optimized for the system palette but will work if objects have their own palette as well. Aaron Giles changed renderer to permit palettes for RGB and YUY textures. If specified, these palettes specify a 32-entry (RGB15) or 256-entry (others) lookup for applying additional brightness/contrast/gamma on a per-texture basis. Aaron Giles removed rescale notification. It never really worked that well and violated proper layering. Aaron Giles renamed palette_set_brightness() to palette_set_pen_contrast() for clarity. Aaron Giles removed render_container_set_palette_alpha() hack. Now the alpha value can be set directly in the palette entry and will be respected for laserdisc overlays.
 - 0.127u5            : Wilbert Pol changed rescale_notifier() to always allow rescaling for screenless drivers.
 - 0.127u3            : Aaron Giles added parameter to the VBLANK callbacks supported in emu\video.c. Updated all callers to provide a callback value.
 - 0.127u1            : Couriersud optimized ycc_to_rgb conversion code.
 - 0.127              : Aaron Giles fixed rendering 16bpp with alpha using bilinear filters (fixes screenshots of laserdisc games with overlays).
 - 0.126u1            : Aaron Giles replaced the crazy number of get/set functions for render containers with a single get/set of a user settings struct.
 - 0.125u7            : Aaron Giles fixed core video handling of save states with dynamic screen resolutions.
 - 0.125u6            : Aaron Giles cleaned up software bilinear filtering code. Added bounds checking. Enabled by default for snapshots and movie rendering.
 - 0.125u5            : Aaron Giles added bilinear filter option to software rendering. Not hooked up to anything yet.
 - 0.124u2            : Actually fixed -refreshspeed [Aaron Giles].
 - 0.124              : Dirk Best removed unnecessary assert in video.c that broke screenless games. Zsolt Vasvari added PALETTE_INIT functions for common 16-bit RGB patterns (video\generic.c).
 - 0.123u6            : Aaron Giles added return value to video_screen_update_partial() indicating whether or not the VIDEO_UPDATE was called as a result. Renamed *_vbl_cb to *_vblank_callback. Moved per-screen initialization into DEVICE_START and per-screen cleanup into DEVICE_STOP in the core video implementation. Fixed render_target_get_minimum_size() to return nominal values if no screens are found.
 - 0.123u5            : A number of changes to remove references to screens by index and make the video system based strictly upon the screen devices [Zsolt Vasvari]: Changed vblank_state_changed_func to now have a device_config argument. Removed runnning_machine as the first parameter of a VBLANK callback. Removed video_data from running_machine. Private state screen information now hangs off the public one, instead of the other way around. Combined video_global and video_private into a single structure. Moved populating screen_state from mame.c to video.c. Removed defstate; the default screen parameters live in screen_config directly. Moved 'refresh' from public to internal video state and renamed it to 'frame_period'. Changed all drivers that previously accessed 'refresh' to use video_screen_get_frame_period(). Changed VIDEO_UPDATE signature to pass the screen device. Added const device_config *primary_screen to running_machine. Changed first argument of video_screen_* functions to take a device_config; all callers that used 0 for the screen number now use machine->primary_screen. Changed game info screen and overlay UI to display the screen tag instead of screen number. Added video_screen_get_visible_area(). Changed render.c to use screen devices. Removed direct driver access to machine->screen[] array. Added video_screen_auto_bitmap_alloc(screen). The Dynax/Don Den Lover games now do their updating in VIDEO_UPDATE instead of VIDEO_EOF. Seems to have fixed the palette problems. Hooked up swapped videoram in Karnov properly -- same idea as Burger Time. Removed the public screen_state object -- all access is via functions. Removed screen[] object from running_machine. Removed MAX_SCREENS constant -- there is no longer a hardcoded upper bound. Zsolt Vasvari fixed VBLANK end time computation and video_screen_get_vblank(), they weren't taking into account games that use MDRV_SCREEN_VBLANK_TIME.
 - 0.123u4            : Changed the way VBLANK_INTs are handled: Defined a new MDRV_CPU_VBLANK_INT_HACK() (in deprecat.h) which is a copy of the current MDRV_CPU_VBLANK_INT(). Found all the places where VBLANK_INT is used with something other than 1 interrupt per frame and changed it to the new macro. Removed the "# per frame" parameter from MDRV_SCREEN_VBLANK_INT() and added a screen tag in its place; updated all callers appropriately. Added some validation of the interrupt setup to validate.c. Added video_screen_get_time_until_vblank_end() and video_screen_get_time_until_update() [Aaron Giles]. Zsolt Vasvari moved all video timing logic from cpuexec.c to video.c. Added a video_screen_register_vbl_cb() function for registering VBLANK callbanks. Changed inptport.c and debugcpu.c to make use the VBLANK callbacks. Added video_screen_get_time_until_vblank_start(). He did some fairly extensive testing, but this is a very signficant internal change, so some things may have broke. Zsolt Vasvari removed cpu_getcurrentframe() and replaced it with video_screen_get_frame_number(int scrnum). Updated all callers.
 - 0.123u3            : Zsolt Vasvari removed VIDEO_START(generic) - no longer used. Improved the global "flip_screen" macros and variables [Couriersud]: Fixed issues related to flip_screen being a define. Added "int flip_screen_get(void)". Clean up drivers with collisions. Removed flip_screen macro. flip_screen_x and flip_screen_y made static. Added flip_screen_x_get() and flip_screen_y_get(). Changed writes to flip_screen_x to flip_screen_set_no_update(). Added save state calls for flip_screen_x and flip_screen_y.
 - 0.123u2            : Deprecated the following constants because global constants that pretend to document things but which are only guesses are dumb: DEFAULT_60HZ_VBLANK_DURATION, DEFAULT_30HZ_VBLANK_DURATION, DEFAULT_REAL_60HZ_VBLANK_DURATION, DEFAULT_REAL_30HZ_VBLANK_DURATION, DEFAULT_60HZ_3S_VBLANK_WATCHDOG and DEFAULT_30HZ_3S_VBLANK_WATCHDOG. Updated all drivers to explicitly specify the equivalent bogus times. Added comments for the "REAL" VBLANK durations to indicate that they are not accurate [Aaron Giles]. Zsolt Vasvari added video_screen_update_now(int scrnum) to force a screen update up to the current beam position. Defined a new device type VIDEO_SCREEN. Currently this has no live functionality, but merely serves as a placeholder/identifier for video screens. Eventually some of the screen management code may move into the start/stop/reset functions [Aaron Giles]. Changed MDRV_SCREEN_ADD to specify a screen type (RASTER, VECTOR, LCD for the moment). Removed the older VIDEO_TYPE_RASTER and VIDEO_TYPE_VECTOR; this information is now determined by walking the screen list [Aaron Giles]. Changed MDRV_SCREEN_* macros to build up VIDEO_SCREEN devices rather than storing values in the screen[] array. Removed the screen[] array from machine_config. Modified all code referencing Machine->config->screen[] and changed it to iterate over the devices using the new video_screen_first() and video_screen_next() functions [Aaron Giles]. Removed implicit screen #0. This means that ALL DRIVERS MUSTEXPLICITLY DECLARE THEIR SCREENS. Updated all drivers to do so. While there, grouped all MDRV_SCREEN_* parameters together. Also removed unnecessary VIDEO_TYPE_RASTER and VIDEO_TYPE_VECTOR. Also removed VBLANK and bitmap format information from vector games. This was painful and very tedious [Aaron Giles].
 - 0.122u6            : Zsolt Vasvari removed dirtybuffer from video\generic.c and all drivers still using it. Removed videoram_w, colorram_w and spriteram_w and changed all drivers using it to access RAM directly. Removed videoram_r, colorram_r, spriteram_r, spriteram16_r and spriteram16_w from video\generic.c and changed all games to use (possibly shared) RAM.
 - 0.122u5            : Minor bugfixes to the gfxlayout cleanups included in u4 [Atari Ace].
 - 0.122u4            : Atari Ace cleaned up graphics layouts in preparation for new format. Added new GFXLAYOUT_RAW() macro to normalize definition. Added new validation code. Made all remaining instances of gfx_layouts const.
 - 0.121u2            : Aaron Giles changed video_frame_update() internally to accept a debug parameter which forces updates and does not meddle with synchronization/time accountiing.
 - 0.119              : Aaron Giles added intelligence around the UPDATE_HAS_NOT_CHANGED flag, which is returned from VIDEO_UPDATE. If all screens in the game return UPDATE_HAS_NOT_CHANGED, then that frame is effectively skipped (up to 3 frames in a row) in terms of throttling. This allows games that render every other frame to not throttle during their "off frames". Updated the midvunit driver to return UPDATE_HAS_NOT_CHANGED. You should see an improvement in framerate with throttling enabled for these games. Note that this only kicks in if frameskip is set to 0.
 - 0.118u5            : Aaron Giles added new function render_target_set_max_update_rate() which allows the OSD layer to inform MAME of the target's refresh rate (or 0 if there is no maximum). This is used to allow for the dynamic speed adjustment parameter.
 - 0.118u1            : Atari Ace fixed divide-by-zero when running with -video none in some cases.
 - 0.115u3            : Nathan Woods cleaned up vec_mult implementation.
 - 0.115u2            : Aaron Giles added support for controlling the default scale/offset for screens at the driver level. This allows us to properly describe the screen width/height and blanking in the driver independent of specifying a good default size to crop the image to.
 - 0.114u3            : Zsolt Vasvari changed all plot_pixel and read_pixel calls to BITMAP_ADDRXX macros. Removed the now-obsolete functions.
 - 0.114u1            : Couriersud fixed crash with multithreaded rendering and the graphics viewer.
 - 0.113u4            : Aaron Giles changed behavior of extra one-pixel border on Direct3D textures so that the edge pixel is smeared into the border rather than leaving the border black. This should eliminate a few oddities at the edges of texture rendering. Updated video code to double buffer texture objects to reduce contention of render primitive lists. Also changed rendering code to explicitly alternate between primitive lists to prevent throwing away old lists prematurely.
 - 0.113u2            : Aaron Giles added new driver flag VIDEO_SELF_RENDER which indicates that the driver will talk to the renderer on its own in its VIDEO_UPDATE callback. Added the flag to all the laserdisc game drivers. Changed the logic in the core video to only empty screen containers when doing the final render, rather than emptying them at the start of each frame. Changed throttling behavior to only throttle on non-skipped frames. This should give a little better performance on games where frameskipping is necessary.
 - 0.113u1            : Zsolt Vasvari began converting drivers over to the new more accurate video timing functions (video_screen_* functions instead of cpu_*). This first batch includes all the games using the TMS34010 chip and the Atari games that use atarigen.c. Updates drivers from C-E to use the newer video timing system.
 - 0.113              : Zsolt Vasvari removed cpu_gethorzbeampos() and replaced it with calls to video_screen_get_hpos().
 - 0.112u4            : Aaron Giles modified the raster position calculations to round to the nearest pixel which produces more consistent results.
 - 0.112u2            : Removed src\osd\windows\blit.c/h.
 - 0.112u1            : Added src\lib\util\bitmap.c/h. Created new generic bitmap management code with fewer dependencies on the rest of MAME so that it can be used by utility code. Changed bitmap_alloc to always take a format parameter. Deprecated bitmap_alloc_format. Updated all drivers to pass an explicit format when allocating a bitmap. Changed auto_bitmap_alloc in the same fashion. Turned ENABLE_BORDER_PIX back on, since so many people seem to be having trouble without it [Aaron Giles].
 - 0.112              : Aaron Giles changed alpha blending code to use multiplies instead of table lookups to simplify it. Fixed colors are bad when an effect overlay is specified with DirectDraw mode enabled.
 - 0.111u6            : Aaron Giles fixed time H/V position reporting during the first frame of execution using the new video routines.
 - 0.111u5            : Cleaned up usage of auto_bitmap_alloc() now that it is guaranteed not to fail [Aaron Giles, Atari Ace].
 - 0.111u4            : Aaron Giles removed hacky use of the 'depth' field of mame_bitmaps. Bitmaps are now allocated with an enumerated 'format' instead. This is internally translated into bits-per-pixel in a normalized way. Also removed Machine->color_depth, which was often misused. Added new macro BITMAP_ADDR that can be used for addressing into bitmaps. Removed the use of bitmap->line[] in the core code. The line[] array will eventually be obsoleted, so stop using it. Changed operation of plot_pixel, read_pixel and plot_box. The first two are now inline functions and the latter just maps to fillbitmap via another inline function. Added new required machine driver entry MDRV_SCREEN_FORMAT() which specifies the bitmap format for the screen. Removed the VIDEO_RGB_DIRECT and VIDEO_NEEDS_6BITS_PER_GUN flags that used to determine the bitmap format implicity. Deprecated the following obsolete machine driver entries: MDRV_FRAMES_PER_SECOND -> MDRV_SCREEN_REFRESH_RATE, MDRV_VBLANK_DURATION -> MDRV_SCREEN_VBLANK_TIME(TIME_IN_USEC(x)) and MDRV_VISIBLE_AREA -> MDRV_SCREEN_VISIBLE_AREA.
 - 0.110u5            : Aaron Giles added new render texture format TEXFORMAT_YUY16, which is used to hold 4:2:2 Y/Cb/Cr format pixels. Updated the Windows Direct3D code and the software renderers to use this format directly. Added new render texture fromat TEXFORMAT_PALETTEA16, which is the same as TEXFORMAT_PALETTE16 but respects the alpha component of the palette entry. Updated the Windows Direct3D code and the software renderers to use this format. Changed the render system to respect blendmodes for screen elements rather than hard-coding them. This allows individual VIDEO_UPDATE routines to do their own compositing. Removed the illusion from the rendering system that you could pass in arbitrary palettes. The system palette is all that is supported.
 - 0.109u2            : Removed windows\pattern.h. Aaron Giles fixed bug in the bilinear software scaler that would read out of bounds on a bitmap.
 - 26th September 2006: Aaron Giles - There are really two ways to use the new renderer. (Well, there are really an infinite number, but these two ways were what motivated the feature set as it exists today). Both ways will produce similar results, and both have their uses. The first thing to understand is the concept of a render_target. A render_target is really a rendering context. It is an object that holds all the information about how you would like the renderer to assemble the primitives that make up the final result. From the OSD perspective, this is really the only object you need to talk to. You can allocate as many render_targets as you like; in the Windows OSD code, I allocate one per window. The MAME core also allocates one internally for taking snapshots. There are a number of knobs you can twiddle on each render_target. You can enumerate all of the views available for each target, find out which game screens are present on each view, and select which one to use. You can specify the orientation of the target, which rotates all of the primitives in the appropriate direction. You can specify flags that control which types of artwork are visible. You can tell the renderer what the maximum texture size is. You can ask it to compute the smallest size that will ensure each game screen pixel maps to at least one output pixel. And most importantly, you can specify the size or bounds of the target. How you specify the bounds of a render_target fundamentally determines how you are using the renderer. And here is where the two approaches differ. The first approach is to tell the render_target the absolute truth about what it is drawing to. This entails calling render_target_set_bounds with the actual width, height and pixel aspect ratio of the screen you are drawing to. Thus, if the output is a 1600x1200 monitor with square pixels, you would call render_target_set_bounds(1600, 1200, 1.0). This works well if your final result will be hardware accelerated. Under the covers, the renderer will assemble all the pieces to be placed within the 1600x1200 area you specified, and - here's the key - it will perform a high-quality resampling of any artwork to the final output resolution. This is much better quality and much more efficient than simply uploading the entire artwork as a giant texture and letting your video card filter it. Because it's not expected that you will change this size too often, the expensive overhead of resampling the artwork is usually just taken once. In contrast, the game screen textures are not resampled in this way; rather, they are always uploaded at their native resolution and your video card is expected to do the resampling. This first approach is what you get when you run the Windows build with -video d3d or -video gdi. This is also why -video gdi is incredibly slow unless it's in a tiny window: all of that pixel pushing at full resolution is being done in software, and it ain't cheap. The second approach is to lie to the render_target about what it is drawing to. The usual way to do this is to compute the minimum size via the render_target_get_minimum_size function, and then pass that width and height (or some integral multiple of such) into render_target_set_bounds as the target size. What happens in this case is that, as far as the renderer knows, you are drawing to a low resolution output device. It will still do high quality artwork resampling, but just to a much lower resolution. Why would you do this? The main motivation is to support limited or non-existent hardware acceleration cases. Consider a situation where you can use your graphics hardware to accelerate only a final bitmap scaling operation, but none of the more advanced blending features required to assemble a full image. In this case, you could fall back to drawing everything in software at full resolution, but it is going to be very slow. The alternative is to lie about the actual resolution. Instead, allocate a buffer at the render_target's minimum size, draw to that buffer, and then use the graphics hardware to scale that buffer to full screen. This second approach is what you get when you run with Windows build with -video ddraw. And in fact, the second approach produces output that is almost identical to what MAME produced before the new renderer went in, with the addition of more flexible features. One thing you'll notice if you look at the Windows code is that it ends up calling render_target_set_bounds each frame, immediately before calling render_target_get_primitives. The main reason for this is that the Windows system lives in a dynamic environment. We support live resizing of windows in windowed mode, which means the output resolution can change at any time when using the first method. Furthermore, games in MAME can dynamically change their resolution, and users are free to change the currently selected view, meaning that the minimum size can change from frame to frame within a game when we use the second method. For these reasons, it is just simpler to update the output size each frame before requesting the primitives so that we ensure we're in sync.
 - 0.108u5            : smf fixed bug in software renderer that prevented lower-resolution targets from being properly supported.
 - 0.108u2            : Aaron Giles added new option -multithreading (-mt) which enables the previous multithreaded rendering code. This code has had problems on some systems, especially pre-XP systems, so consider it experimental. If you want to help debug issues, enable LOG_THREADS in windows\window.c and post them to MAMETesters.org with a description of your problem and your system. If you don't have hyperthreading, dual core, or a multi-CPU system, don't bother turning this flag on.
 - 0.108u1            : Aaron Giles added new flag: VIDEO_ALWAYS_UPDATE, which causes the VIDEO_UPDATE callback to be called even on skipped frames. This should be used for games where the process of rendering has side effects such as collision detection that need to always be present.
 - 0.107u4            : Added src\rendlay.c/h, rendutil.c/h and layout\snap.lay. Aaron Giles changed render_target_alloc() to take a bitmask of flags. In addition to loading a single file, targets can also be marked "hidden", and only non-artwork views can be made visible. Added new render target layer config flag to disable screen overlays. Normalized the naming of several functions in video.c, most importantly [Aaron Giles]: force_partial_update -> video_screen_update_partial, configure_screen -> video_screen_configure and set_visible_area -> video_screen_set_visarea. Added new functions that do accurate per-screen timing based on video parameters [Aaron Giles]: video_screen_get_hpos, video_screen_get_vpos, video_screen_get_hblank, video_screen_get_vblank and video_screen_get_time_until_pos. Split render.c into rendutil.c, rendlay.c and render.c to keep the code more organized.
 - 16th August    2006: Aaron Giles - Upcoming Changes, part 1: One of the side-effects of the new video system is that drivers aren't allowed to write to the UI layer directly. They can call popmessage() to display a popup at the bottom of the screen, but that's about it in the new system. The problem is that a few drivers were displaying important game-related information using the UI font. Specifically, Atari Football was using it to show which plays had been selected, and the Exidy Max-a-Flex system was using it to draw the status of the lamps and timer. It retrospect, it is actually good that these cases broke because the way it was being done before was a big hack. For one thing, it meant that the game screen area was artificially increased to make room for the text. And second, the state of these lamps was not being properly exposed to the outside world (or in the case of Football, it was being changed via the rendering system in addition to being displayed on screen). Ideally, the state of these indicators should be made visible via the rendering system. This is great, except that in the absence of an external artwork file, there would be no visible indication at all. This is one of the reasons why it's good to have built-in layouts in the MAME code - even if they are crude approximations of the original artwork, they at least can reflect important functional information. The problem is, built-in layouts can't really reference image files. All they can do is draw rectangles and disks, which is sufficient for basic overlays on top of old black & white games, but isn't really enough to provide textual information. In order to solve this problem, I've added a couple of new primitives to the layouts. In addition to rect and disk primitives, there are two new primitives: text and led7seg. The text primitive lets you add text anywhere within the artwork area. You can specify color and bounds just like the other primitives. The text is drawn using the built-in fixed-width MAME font (even if you have a different UI font), and is centered within the bounds. If there is too much text to fit in the area provided, the font will be squashed horizontally to fit. Here's an example that positions the text "GAME OVER" in red centered within the given rectangle: <text string="GAME OVER">; <bounds x="0" y="0" height="10" width="200" />; <color red="1.0" green="0.0" blue="0.0" />; </text>. The led7seg primitive lets you position a standard 7-segment LED somewhere in the artwork. The LEDs are drawn a high resolution and oversampled down so they look nice. Typically these are used to specify a digit from 0-9. Turbo is one example. To use this, you would typically create an element with multiple states, each state reflecting the corresponding digit. Here's an example that positions a red LED with the number "2" that is only visible with the containing element is in state "2": <led7seg pattern="10111010" state="2">; <color red="1.0" green="0.0" blue="0.0" />; </text>. The pattern attribute specifies which of the segments is visible. A 1 means "on", and a 0 means "off". They are specified in the following order: 1. Top horizontal segment, 2.Upper left vertical segment, 3. Upper right vertical segment, 4. Middle horizontal segment, 5. Lower left vertical segment, 6. Lower right vertical segment, 7. Bottom horizontal segment and 8. Decimal point. Using these two new primitives, I've created built-in layouts for the Atari sports games (Football and Baseball), the Sega Z80 scaling games (Turbo, Subroc 3D, Buck Rogers), Taito's Super Speed Race, and the Exidy Max-a-Flex system that display all the essential lamps and score/timing information. Of course, you can continue to use the externally-provided artwork for a better visual appearance, but now it's possible to provide vital lamps and LEDs via the new built-in layouts without affecting the core game screen or abusing the UI system.
 - 0.107u3            : Aaron Giles renamed "Native" views to "Pixel Aspect" views to avoid the confusion that they are anything but artificial aspect ratios. Added several common generic graphics layouts to vidhrdw\generic.c, for use by multiple drivers. Fixed remaining crashes in GDI/ddraw mode when drawing vector games.
 - 0.107u2            : Aaron Giles added MDRV_SCREEN_RAW_PARAMS() which lets you specify a pixel clock, horizontal and vertical video timing values in place of the usual screen size, visible area, refresh rate, and VBLANK timing values. Changed mode selection logic so that refresh is weighted more strongly when picking a mode. This allows you to specify -resolution 0x0@60 to force MAME to pick a 60Hz screen refresh while allowing it to choose the best resolution.
 - 0.107u1            : Removed src\windows\videoold.c/h, wind3old.c/h, wind4old.c/h, winddold.c/h and windold.c/h. Aaron Giles removed NEW_RENDER definition and all support for the old rendering system from the core. Cleaned up a bunch of useless and deprecated code as a result. Added new function configure_screen() which can control the width, height, visible area and refresh rate of each screen. This function allows for widths and heights larger than what were specified in the game driver, so you no longer have to specify the maximum width and height in the driver, but can instead specify a typical width and height. This function supercedes the old set_visible_area() and set_refresh_rate() functions. The former has been rewritten to call configure_screen(), while the latter has been removed entirely. Changed the behavior for supporting overscan and other effects. The width and height of a screen control the overall bitmap size. The visible area of a screen specify its non-blanked boundaries (and default visible area, as before). Moved line-to-quad conversion routine into the core render.c as another utility function. Consolidated live screen parameters into a screen_state structure. Machine->visible_area[num] is now Machine->screen[num].visarea. Machine->refresh_rate[num] is now Machine->screen[num].refresh.
 - 26th July      2006: Aaron Giles - Side-Effects: The problem with a project as huge as MAME is that you really can't change anything without breaking something else. Such is the case with the new feature I added late in the 0.106 cycle that lets you control the horizontal/vertical positioning and stretching of the screen. This feature is intended so that MAME can more accurately output video that corresponds to the real arcade screen. On many real arcade PCBs (and especially on older PCBs), the video system actually generates signals beyond the immediate area of the screen where the gameplay is. What would happen is that arcade operators would use the horizontal and vertical scaling/positioning knobs to expand the gameplay area of the screen to fill the screen and thus cropping out anything that wasn't intended to be seen. The way MAME has handled this in the past is to have a screen bitmap where pixels are placed (this is equivalent to the video signal), and then game drivers would provide a "visible area", which is the cropped area where the gameplay is focused. This generally works well, but doesn't allow you (the operator) to control the positioning and scaling of the image. When I decided to add these controls, it meant that I needed to dynamically adjust this "visible area" to display a different subset of the pixels in the screen bitmap. This sounded pretty straightforward. But it appears to have some side effects. The first issue is that some games are showing a pixel or two worth of garbage at the edges of the screen. If you bring up the sliders in the UI and adjust the horizontal or vertical scaling, you should see that this garbage is actually extra pixels that are right on the edge of the screen. The reason they are visible at all is thanks to bilinear filtering on your video card. Even though MAME is correctly computing how to position the screen so that those pixels aren't visible, the bilinear filter is grabbing color data from those pixels as it scales up the image. You can work around this by simply adjusting the horizontal/vertical scale and position controls until those pixels are gone. The second issue is that some games got really slow as a result. Previously, MAME used to only copy the pixels from the visible area to your video card for rendering. But in order to have access to all of the video signal information, the current code will copy all of the screen bitmap pixels to your video card. For most games, the screen bitmap is only slightly larger than the visible area, so this didn't really hurt anything. But several drivers have huge screen bitmaps and small visible areas. robokid, for an extreme example, has a 2048x512 screen bitmap even though it is only displaying 256x192 pixels. Other games with this problem include games that switch resolutions, because the screen bitmap has to be big enough to accommodate the largest resolution that will ever be switched to, which is often much larger than the actual resolutions used in the game. I'm trying to come up with a non-gross way of fixing both of these problems. The first problem probably needs the introduction of the concept of blanking areas. On a lot of actual PCBs, you won't actually see this garbage because they have set up a blanking signal that turns off the video signal after a certain point. The visible area used to sort of account for that, but didn't allow for the possibility of adjustment. By having support for a separate blanking area in addition to the visible area, some of these problems can be eliminated. The second problem is more severe and in the end more straightforward to fix. The core is already computing the effective visible area of the screen and only asking the driver's video update to draw just those pixels. It just needs a way of communicating that information to the rendering code so that it doesn't waste time copying pixel data that will never be seen.
 - 0.107              : Added docs\newvideo.txt. NOTE: This is the first full release of MAME with the new rendering system. Before freaking out that things don't work the way you expected, please read the docs\newvideo.txt file that gives some suggestions for how to set up your base configuration. If you still encounter issues, then run your system with the -v option and post about your problem at http://mametesters.org. Aaron Giles fixed assertion when the MAME window was minimized. Fixed bug that prevented resizing of secondary windows.
 - 21st July      2006: Aaron Giles - A Peek Inside the New Renderer (part 2): In Part 1 of this article, I explained all about the three core objects in the new renderer: the render_target, the render_container, and the layout_view. In this part, I'll tackle how the final collection of things to render is arrived at, based on all of this information. As I mentioned before, the layout_view is essentially a description of how to position the various render_containers amongst external artwork elements within the confines of the render_target. In order to do this, we need to introduce the concept of an object_transform. In a fully 3D world, a transformation is usually a matrix, and can describe rotation, translation and scaling. Although the new renderer handles all three parts of a 3D transformation, it is still strictly a 2D engine. So to keep things simple, an object_transform describes a simple 2D translation (2 parameters: X and Y offset), a simple 2D scaling (2 parameters: X and Y scaling), and basic rotation (orientation described via X flip, Y flip, and X/Y swap). In addition, an object_transform also contains a color factor (4 parameters: red, green, blue and alpha). In order to assemble the list of items to render, the OSD layer calls render_target_get_primitive_list(). This is different compared to the old way of operating. In the old model, when MAME had something that needed to be drawn, it called to the OS-dependent code (OSD layer) and handed it everything it needed to update the video. In the new system, it is the OSD layer who is responsible for calling back to the renderer for the list of items to render for a target. Usually this is done in response to the more generic osd_update() call which is used as a signal to indicate that something interesting has happened. Anyway, render_target_get_primitive_list() returns a list of render_primitive objects, which constitute a description of what to render. Each render_primitive object specifies a type, a set of coordinates, a color, and a set of flags, along with some additional type-specific data. At this time there are only two types of primitives that will ever be returned: lines and quads. A line primitive is simply two points that should be rendered with a line drawn between them, using the color, alpha and width specified. Points can be drawn by specifying a line with equal start and end points. Lines are used mostly for drawing the user interface and for vector games (though that may change in the future). A quad primitive is also specified by two points: a top, left coordinate and a bottom, right coordinate. This limits MAME to specifying rectilinear quads, so there is currently no way to do anything fancy or 3D with the system. (Believe it or not, this is intentional). Quads can be either textured or non-textured. Non-textured quads are rendered as a solid color using the specified color and alpha values. Textured quads are rendered using the specified texture, with the color and alpha values providing modulation of the texture data. Common to both primitives is a set of rendering flags. These flags control how the primitive is to be blended against previously-rendered graphics on the screen, among other details. The important thing to keep in mind is that the primitives are provided in back-to-front rendering order. This means that the system that does the final rendering should turn off all Z buffering and simply render each primitive in order. Another interesting tidbit is that the screen does not need to be explicitly cleared before drawing because the primitive list contains non-textured quads that erase any relevant areas of the screen before drawing them. The easiest way to understand how it all comes together is to walk through an example. Let's say you're running Space Invaders, and you have selected a layout_view that includes a backdrop, an overlay, and a bezel, as well as the screen. Let's also say that you've configured MAME to draw a special effect overlay on top of the screen graphics, just to throw everything in together. Nowwhat?Well, internally, MAME has examined the layout_view and grouped all of its elements into one of four categories: backdrop, overlay, screen and bezel. Once that is done, it then starts with an empty list of primitives, and goes through each layer one at a time, adding primitives to the end of the list. The trick is that ordering is very important to get all of the effects to mesh together. The first thing that gets drawn is the screen layer. I know you're asking, what? Why aren't you drawing the backdrop layer first? It's in back! Well, the screen layer needs to be rendered first in order to apply overlay effects before the screens are added to the backdrop; otherwise, you get ugly results as the overlay effects are applied to the backdrop graphics as well. In order to draw the screen layer, the renderer loops over all the screen elements that were specified in the layout, and copies the render_container contents for that screen to the end of the primitive list. A couple of notes about this. First, what does a render_container actually contain? Well, it contains objects that are called container_items. These items are kind of like primitives, but they are less primitive than the render_primitives that we've been looking at so far. Container_items can be lines, quads, or characters. Another important thing to understand about render_containers is that they have an internal coordinate system that goes from 0.0-1.0 along both axes. This is where the object_transforms that I mentioned above come in. Since a screen element in a layout_view can position the actual contents of the screen anywhere within the view, we need to know how to transform the container_items from their basic coordinate system to the final screen coordinates. To do this, we build an object_transform describing that mapping, and apply the object_transform to each line, quad, or character we encounter in the screen's render_container. Note that during this process, characters get translated into quad render_pritimives. As container_items within a render_container are being converted into render_primitives, they are added to the end of current working list of primitives. Along the way, they are set to render with an additive blending mode. This means that the RGB values of the lines/quads/characters are added to the RGB values of what is already there. In most cases, what is already there is just black, so it doesn't make much of a difference. Once each screen's render_container has been added to the working list, the special effect overlay is applied. This is simply a replicated copy of a texture that is rendered on top of the screen area using a multiplicative RGB blend. This means that the RGB values of the overlay texture are multiplied by the RGB values of what has already been rendered. This allows the overlay texture to control how much red, green, or blue from the final screen is actually shown. Having added the screens' containers to the render list, the next step is to add the graphical overlays that are specified by the layout_view. These are simply bitmaps that are described by the layout XML, which I covered in a previous article. Like the effect overlays, these are rendered with multiplicative RGB blending. The easiest way to think about it is with vector games. Black and white vector games only drew white lines. White is R=G=B=1.0, while black is R=G=B=0.0. When you multiply the pixels of an overlay by these values, you will get black in the areas where nothing is drawn, and the overlay color in the areas where what was drawn. Now that we have the screens and overlays assembled, it is time to add the backdrops. Backdrops and screen data are combined using additive RGB blending again. This is why you can draw the backdrops after the screens. If you remember in school, addition is commutative (a+b = b+a), so it doesn't matter which you draw first, and whichyou add on top of it. The main issue to be aware of is if there are overlapping backdrop elements, they will be added to each other. Right now, Golly Ghost uses overlapping backdrop elements, so as a workaround, if we find multiple backdrop elements, we draw the backdrop first and add the screens second. Finally, we add the bezels. Bezels are drawn using a standard alpha blend, which means each pixel has an alpha component that controls how much of the previously rendered stuff shows through. Now we have an ordered list of everything to draw. The OSD layer runs through this list and draws things in order, displaying the final result. And I think that's enough for one article. Thanks for hanging in there!
 - 0.106u13           : Nathan Woods improved multisession support with the new renderer. Aaron Giles fixed bug that caused -prescale in Direct3D mode to fail in the last release.
 - 0.106u12           : Aaron Giles removed 1 pixel border now that the Direct3D code is properly setting texture clamping. This should get rid of the gaps in the Darius layout, which were caused by bilinear filtering the last pixel on the screen with the black pixel border. Removed the VIDEO_PIXEL_ASPECT_RATIO_* flags for drivers. These flags were used inconsistently, and can be effectively computed if necessary from the screen width/height and orientation. Aaron Giles removed the VIDEO_PIXEL_ASPECT_RATIO_* flags for drivers. These flags were used inconsistently, and can be effectively computed if necessary from the screen width/height and orientation.
 - 0.106u11           : Aaron Giles fixed the rendering order so that overlays mixed with backdrops work as expected. Note that over-rendering backdrop pieces (like gollygho does) may not be supported in the future. Changed DirectDraw behavior so that it will render to an offscreen system memory buffer if any blending is required, thus providing access to all the effects with a bit of slowdown in those cases. Changed logic so that no rendering apart from the UI happens before MAME is in a running state. Until that time, a single pixel border will be displayed around the edges of each screen. Changed behavior of secondary windows so that they are not created as children of the primary window. Please re-verify that multiple screens still work with this change on your setup. Moved clipping into the core, rather than relying on the OSD layer to do the work. Removed the PUSH_CLIP and POP_CLIP primitives as they are no longer necessary. Added U/V coordinates to the primitives.
 - 10th July      2006: Aaron Giles - A Peek Inside the New Renderer (part 1): The new rendering system to be introduced at the start of the 0.107 development cycle represents a whole new way of thinking about video in MAME. This article is the first in an attempt to explain what's really going on behind the scenes. The new system is generally rather object oriented, even though it is still written in straight C. There are a number of fundamental rendering objects that are used to describe what gets rendered to the screen. We'll first go over the objects, and then talk about how it all comes together. One concept to keep in mind while reading this article is that the rendering system serves as a bridge between the MAME core and the OS-dependent code (the OSD layer). There are some objects that are primarily outward facing (i.e., operated on primarily by the OSD layer), and some objects that are primarily inward facing (i.e., operated on by other core components). The core outward-facing object in the new rendering system is the render_target. A render_target is an object that communicates to the core exactly how the OSD layer would like the final video to look. The OSD layer is responsible at startup time (in the osd_init callback) for allocating one or more render_targets. In the most common case, there will be just one render_target allocated (though in the Windows code if you request more than one screen, then one render_target will be allocated per screen). Each render_target contains information about the width, height, orientation and pixel aspect ratio of the destination. For example, if you were running full screen on a 640x480 display, the OSD layer would allocate a render target and configure it with a width of 640, a height of 480, a standard orientation (no rotation), and a pixel aspect ratio of 1.0 (assuming your 640x480 was being displayed on a 4:3 screen). This information is used later by the MAME core when it is time to actually provide the data necessary to draw the final output. On the opposite side of the fence, the core inward-facing object in the new system is the render_container. A render_container is an object that contains a list of items (lines, quads, or characters) to draw. There can be any number of render_containers in the system, but the current system simply allocates one render_container per screen in the game, and an extra render_container for the user interface. Code in the core is responsible for adding items to each render_container. For example, at video update time, the video.c module adds the bitmap for each screen to the render_container for that screen. In contrast, vector games don't have a bitmap, and so their update routines add a bunch of lines to the render_container to describe what should be displayed on its screen. In addition to holding a list of items to draw, each render_container also holds several additional rendering parameters, including brightness, contrast and gamma controls, as well as scaling and offsetting functions. When applied to screen-specific render_containers, these controls give most of the common adjustments present on an actual arcade screen. These controls are now (as of MAME 0.106u11) all available from the on-screen display menu, and work independently for each screen in the system. So, given what's been described so far, there are two separate sets of objects for rendering. The first set is the collection of render_targets, which are allocated and managed by the OSD layer. The second set is the collection of render_containers, which are allocated and managed by the core. The obvious question is: how to these two sets of objects map to each other? That is, how do we get the contents of the render_containers to show up on the render_targets? The answer is the layout_view. Each render_target object has an associated layout_view, which describes exactly how the video system should position and orient all the elements that go to make up the final video output. These elements can be items from one of four classes: backdrops, overlays, bezels, or screens. The first three types of elements are artwork pieces which are static, preloaded and pre-scaled graphics that are intended to be intermixed with the screen elements. The screen elements specify the location and orientation of the render_container that holds the screen items. There are several important implications of this setup. First, each render_target has its own layout_view, completely independent of any other render_targets. This means that you can have multiple render_targets active at a time, each with the same layout_view, or completely different layout_views. Second, there is only one render_container per screen in the system, but multiple layout_views can reference each screen. In fact, a single layout_view can even include multiple references to the same screen; this is how the "Cocktail" view works in the current system. Where do layout_views come from? From layout (.lay) files. Layout files are fundamentally just XML descriptions of layout_views, and each layout file can contain descriptions of multiple layout_views. At startup, MAME will attempt to load layout files from multiple sources. All layout files that are found are effectively concatenated together into one big list of layout_views, which you can dynamically select at runtime in the new "Video Options" menu. So, in summary: at startup, the rendering system creates render_containers for each game screen, and the OSD layer creates render_targets for each output screen. When a render_target is created, the selected layout files are loaded in order to create a list of layout_views. These layout_views describe how to intermix the render_containers for each game screen with artwork and other adornments to produce the final output in the render_target. In the next part of this article, I'll talk a bit about how the graphics actually get assembled and what the mixing rules are.
 - 0.106u10           : The renderer no longer displays non-UI elements prior to initialization [Aaron Giles].
 -  3rd July      2006: Aaron Giles - The New Video Landscape: A whole pile of stuff has changed during the 0.106 development cycle, and though we are a few weeks away from a real 0.107 release, it's probably time to sit down and have a little heart-to-heart about the video options. Since its inception 9 years ago, MAME's video system has defaulted to a mode where it tries to change resolutions on you. And since the first port of the core to Windows 5 years ago, it has defaulted to using your graphics card to stretch the video to that resolution. I'm sure a lot of you out there have taken a lot of time to tweak the current set of video options to make them work the way you like. But every once in a while, you need to take a step back and re-evaluate the situation. The current video system has been in place for 5 years now without much substantial change. And with the recent rewrite, you're almost certainly going to want to rethink the way you have things configured. At the highest level, there are really three different ways you can configure the new system. Placing yourself into one of these three categories will help you get the initial settings right. From there, you can tweak with the settings to figure out what works best. Category 1: Bells and whistles. People who fall into this category would include anyone with a modern system and a decent video card (decent in this context means at least 16MB of VRAM and built in the last 5 years or so - we're not talking cutting edge here). Any decent video card will be able to render the simple MAME graphics at pretty much any resolution without breaking a sweat. Configure your desktop to the video mode you want (preferably something high like 1024x768 or greater with a high refresh rate, unless you are running on a fixed-mode LCD, in which case just match what your LCD panel is), and tell MAME to leave the resolution alone. In this day and age, there is little reason to switch resolutions at all, unless you fall into Category 3, below. In this mode, you will have full access to artwork options, and you'll get your artwork scaled to full resolution and with full alpha blending effects. Vector games will look crisp, you can use decent fonts, and you can see a whole lot more of the world when using the graphics/tilemap viewer. This mode uses Direct3D, so you should configure yourself like this: -video d3d -noswitchres [-triplebuffer] [-nofilter]. The -noswitchres option tells MAME to just run at the current resolution. Although you can let MAME pick a resolution for you, it doesn't really make much sense in D3D mode, and in fact I may even remove that feature altogether. To avoid tearing artifacts, I recommend using the -triplebuffer option as well. Just make sure your monitor's refresh rate is higher than the game you are running. If you dislike the blurry look of the graphics, you can specify the -nofilter option to disable bilinear filtering, though that will produce blocky artifacts. Alternatively, you can use the -prescale option which is described at the end of this article. Category 2: Like the old days. I really didn't even want to support this mode at all, but certain vocal MAMEdevs would have skinned me alive otherwise. People who fall into this category include those who have weak systems that worked fine with previous versions of MAME, but who don't run well with Direct3D rendering. (Note that just because Space Invaders runs unthrottled at 2000fps with DirectDraw and 1000fps with Direct3D doesn't mean that Direct3D is going to be a serious issue when playing at a regular 60fps, so if you're unsure, give the Direct3D route a try for a while). In this mode, MAME will draw the game screen and artwork at the game's resolution, just like it did in MAME 0.106 and earlier; however, some artwork options, such as -artcrop, won't work as you might expect, and some alpha blending artwork modes (specifically overlays) won't work. MAME will then use your video card to stretch the video to the proper aspect ratio. -video ddraw -hwstretch [-switchres] [-triplebuffer]. The -switchres is optional here. If your video card is really ancient and struggles expanding the screen to fit your desktop resolution, you might want to turn it on. Again, to avoid tearing artifacts, I recommend using the -triplebuffer option as well, but make sure your monitor's refresh rate is higher than the game you are running (-switchres will do that for you if you use it). If your video card produces blurry pixels which you don't like, try the -prescale option described at the end of this article. Category 3: Anal video mode types. These are the guys who have generally built their own cabinets and set them up with a CRT display where they have several dozen carefully hand-tweaked video modes that approximate the original video modes the games ran at. They want MAME to pick that hand-tweaked mode and use it, drawing one pixel on the screen for each pixel in the original game. They don't give a whit about artwork or anything other than the raw pixels going to the right place. Fortunately, you can still configure MAME for this case as well: -video ddraw -nohwstretch -switchres [-triplebuffer]. Obviously in this case, the -switchres is required. You also want to disable hardware stretching, otherwise you won't get that "perfect" 1:1 pixel mapping. Triple buffering may or may not help. So, I recommend starting with these initial options and then tweaking from there. One additional option you might want to try in combination with the above is the -prescale option. -prescale takes an integer parameter from 1 to 8, and specifies a magnification amount by which the screen pixels are expanded before they are drawn to the screen. Why is this useful? And how much of a performance impact does it have? Well, that depends on the mode you are running in. If you are running in Category 1 (-video d3d), then -prescale will use your video card to scale the game graphics up before rendering them to the screen. Depending on the video card, this is usually a small performance hit, but not too significant. The benefit is that each prescale factor reduces the blurriness of the pixels. -prescale 1 is the default, which does no scaling. -prescale 2 will double each pixel, -prescale 3 will triple each pixel, etc. For my money, -prescale 2 is sufficient, but people with super high resolution displays claim that larger -prescale factors work even better. If you are running in Category 2 (-video ddraw -hwstretch), then -prescale will cause MAME to compose the screen graphics at the specified scale factor. This is unfortunately done in software, but carries the benefit that artwork, fonts and the graphics viewer can take advantage of the additional resolution to produce nicer results. The end effect is that you will get less blurry pixels, just like the Category 1 case, plus higher quality artwork, fonts and more visible area in the graphics viewer. If you are running in Category 3 (-video ddraw -nohwstretch), then -prescale will cause MAME to pick a video mode that is the prescale factor times the raw screen resolution, and then MAME will, in software, compose the screen graphics at the specified scale factor. This has all the advantages of the Category 2 case, except that since there wasn't any pixel blurring to begin with, there is no additional crispness that comes about as a result. Finally, you may be wondering about effects (and yes, scanlines are an "effect"). Well, let's take the band-aid off quickly: Effects are not currently present in the video system and are not planned in the short term. Ouch. Are they gone forever? It's too early to say for sure. They present some unique problems. It's possible that if they do come back, they will only be available in Direct3D (Category 1) mode. For the next few versions of MAME, try living without them. Certainly, I want the video system as it currently stands to stabilize before even considering it. I'll try to post a binary for u10 when it's available to let everyone play with the options a bit.
 - 0.106u9            : Nathan Woods changed VIDEO_UPDATE to return a set of flags. Only one flag is currently defined, indicating that video has not changed at all since the previous update. Most drivers should just return 0. Fixed bug when clipping quads in Direct3D mode. Fixed edge case where the extra pixel on non-wrapping textures would sometimes lead to exceeding the maximum texture size. Added concept of maximum texture size to the core renderer to prevent giant textures from being requested if the OSD layer can't handle them.
 - 0.106u8            : Added layout\horizont.lay and vertical.lay. Aaron Giles added 16-bit color support for the DirectDraw renderer (only used if switchres is off or in a window). Fixed 16-bit line rendering in the software rasterizer. Fixed ddraw bug where switching views sometimes didn't clear out the edges of the screen. Improved scaling calculations when running with -video ddraw and no hardware stretch to better approximate the real aspect ratio. Added more internal texture reference tracking to ensure that stale data is not being referenced if the OSD layer holds onto a render list. Removed screen aspect ratio specification from the machine driver. This information is now provided by the render/view system. Games with odd aspect ratios should include a game-specific layout to position the screens. Changed logic so that trying to run more screens than you physically have in full screen mode will just display as many as will fit rather than fighting to put multiple full screen displays on a single monitor. Added optimizations to figure out the minimal set of screen areas to clear, even with complicated views and multiple screens.
 - 0.106u7            : Replaced src\windows\rendsoft.c/h, drawd3d.h, drawgdi.h with drawdd.c. Aaron Giles added back support for DirectDraw. Unlike the old support, this requires DirectX 7 or later. There is now a new option to control what video system is being used for rendering. Use -video d3d to use Direct3D. Use -video ddraw to use DirectDraw. And use -video gdi to force the use of GDI for rendering. Also added back the -hwstretch option to control whether or not DirectDraw does stretching. Added support for the -prescale option when using DirectDraw as well. It should also work ok with multiple screens. Added a compile-time option to rendersw.c to prevent reads from the destination. This removes the ability to do a number of blends and effects, but allows you to point the software renderer at a video memory target and not kill performance. It also improves performance of software rendering in general by avoiding expensive alpha blending operations. Improved font logic so that small fonts are scaled more appropriately at low resolutions. It's not perfect, but works well for most games when running with the new DirectDraw option, which always renders games at minimum resolution. Fixed bug that messed up partial updating. Hopefully it all should be back to normal again.
 - 0.106u6            : Aaron Giles added support for "stretch to fit" when configuring a render target. Added back the "-keepaspect" option as a result. Added clamping to the prescale effect so that it doesn't try to create excessively large textures. Explicitly reset render states so that the prescale step is not filtered. Fixed StretchRect usage so that it doesn't filter on some video cards. Fixed behavior of pixel aspect ratio when configuring render targets (was correcting in the wrong direction).
 - 0.106u5            : More rendering changes/fixes [Aaron Giles]: Added new render_view_item_get_state() function to return the state of a given item. Changed render_target_get_primitives to return a new structure render_primitive_list, which contains the list of primitives along with an osd_lock which must be held while the list is being traversed. Added "Rotate View" option to the video menu for dynamic in-game rotation. Moved window creation and management to a separate thread; this means all software rendering and all Direct3D calls are done on a separate thread from the main game, and will take advantage of multiple CPUs/dual cores. Changed throttling behavior to skip rendering if we are already pending; this makes for a better "fast forward" effect. Added -prescale option to pre-scale the game bitmaps before rendering to the screen; this helps get rid of the "fuzzy" look when running with -filter enabled, at the expense of some speed. Note that only integral values are currently supported (no "auto").
 - 0.106u4            : Removed src\windows\misc.c/h. Added src\windows\d3d8intf.c, d3d9intf.c, d3dintf.h and winmain.h. More renderer updates [Aaron Giles]: Fixed feature detection bug that led to false-positive warnings when starting up. Removed extra vertex padding since some graphics cards could not cope with it. Added shims to support both Direct3D 9 and Direct3D 8; D3D9 is the default, with an automatic fallback to d3d8 if not available. New option -d3dversion can be used to specify preferred version for testing. Added 1 pixel black border around all textures to ensure filtering on some cards doesn't result in garbage at the edge of the screen. Enabled "do not wait" feature when unthrottled and using D3D9; this greatly speeds up unthrottled games, but seems to only work in full screen mode. Switched from triangle fans to triangle strips. Ensured that render states are only being set minimally. Added code to reset the device if lost, allowing application switching out of full screen mode and fixing multi-monitor mode with resolution switching.
 - 0.106u3            : WARNING: As of this build, the new rendering system is enabled by default. The primary focus at this point is compatibility, not performance. Compared to the old -ddraw system, it will appear slower when fully unthrottled because there is not a good mechanism to skip the render if the graphics hardware is still busy like we used to do. If you have any trouble getting a correct display or if you get warning messages printed out when starting MAME, please post about them on http://mametesters.org. SECONDARY WARNING: The command line and INI parsing code was rewritten. If you notice any problems with handling of parameters in either case, please report the bugs on http://mametesters.org. Nathan Woods fixed blitters to work with 15-bit direct RGB modes. Fixes to the new rendering system [Aaron Giles]: * Enabled new renderer by default. * Fixed crash at startup due to uninitialized memory. * Fixed crash at shutdown due to incorrect shutdown order. * Fixed rendering of 15-bit direct RGB games. * Fixed weird frameskipping issues. * Fixed off-by-one error on visible area. * Added proper clipping of quad primitives. * Optimized the clearing step to avoid redundant drawing. * Brought software-only case up to support all major blending types. * Added support for -filter option. * Reconnected snapshots, though they are unrotated and screen 0 only. * Fixed several UI problems with new video options menu. * More strongly defined the blending modes to produce correct effects. * Added a flag to indicate textures that are of screen bitmaps. * Download updated layout files for Space Invaders (http://aarongiles.com/invaders.zip) and Turbo (http://aarongiles.com/turbo.zip). * Rewrote the options parsing code to be more flexible and generic. A new core source file options.c provides the ability to add and maintain a database of key/value pairs, which can be queried at runtime. Reconnected all existing frontend options through this code. Bounds checking on options for the old renderer is pretty loose, and several more complicated options have been disconnected as a result. If you are still running with the old renderer, be careful. * New options to control multiple screens in the new renderer: -numscreens (specifies how many windows to create), -screen0/screen1/... (specifies the name of the screen for each window), -resolution0/resolution1/... (specifies resolution for each window), -aspect0/aspect1/... (specifies aspect ratio for each screen), -view0/view1/... (specifies starting view for each screen). * Deprecated osd_skip_this_frame() with the new renderer. osd_update() now returns TRUE if it wants to skip the following frame. * At higher resolutions, the standard MAME font is kind of fuzzy and chunky. You can use pretty much any .BDF font for the main font now, renaming it to ui.bdf and placing it in the same directory as the MAME executable. MAME will scale it to whatever resolution you're running at. Use this BDF font (http://aarongiles.com/ui.zip) for testing, which is a 40pt rendering of one of the sans-serif Free UCS Outline Fonts (http://www.nongnu.org/freefont/).
 - 0.106u2            : IMPORTANT NOTE: The video system in this version has been completely upended and redesigned. The old video system is still the default; however, some features may be broken. These are not bug-worthy reports, as the old system will soon be deprecated. The new system can be compiled by setting the NEW_RENDER flag on in the makefile. THE NEW SYSTEM IS STILL WORK-IN-PROGRESS! Apart from video card-related issues (like it doesn't work on particular hardware or has an incorrect display), bugs are not being tracked at this time. There is already a laundry list of things that are broken at the top of render.c, and there are many other things that still need to be looked at. In order to run the new video system with hardware acceleration, your machine will require DirectX 8 or later. Added new video rendering system [Aaron Giles]: * To enable it, you need to enable the NEW_RENDER makefile flag and recompile the entire project. * If you previously configured MAME to use DirectDraw (which was the previous default), then you will get software-only rendering by default. You need to explicitly enable Direct3D rendering (-d3d) in order to get hardware acceleration. Software rendering is not very fast, especially at high resolutions. * A new file render.c contains the bulk of the logic. * The OSD layer is now responsible for allocating one or more render_targets at osd_init time. The old osd_create_display and osd_close_display calls are not used with the new system, so initialization must take place at osd_init time. * The old osd_update_video_and_audio call has now been replaced with a simple osd_update call. This update call passes a mame_time to the OSD layer, which is the current emulated time. Throttling and speed calculations should use this time instead of the framerate. * osd_update is responsible for calling the render system to request a list of primitives to be drawn on each render_target for the current frame. The primitives are simple and include clipping rectangles, lines and rectilinear quads only. * If it wishes, the OSD layer can call back to a software rasterizer in MAME. The rasterizer code is provided as an include module so it can be tuned and optimized for platform-specific video modes. See windows\rendsoft.c for a usage example. * There is a new layout file format .lay, which is XML-based and which replaces the old .art files. The .lay files describe how to render to a render_target. Each layout file can contain multiple "views", which describe one of many ways the various elements can be drawn. These views can be selected at runtime via the new "Video Options" menu. * The built-in UI font can be overridden with any .BDF font. Simply name the .BDF file "ui.bdf" and place it in the MAME directory. If you run at decent resolutions, you should choose a large point size for this font so that the scaled results look nice. * The windows implementation uses Direct3D 8 as the preferred mechanism for rendering. By default, it will render at the current resolution, rather than switching resolutions as before. This can be changed by adding -switchres to the command line. * There are still a number of imperfect/incomplete features with the new renderer, which is why it is not on by default. An incomplete list is given in render.c. * Read 'Layouts and Rendering' for more informations at http://aarongiles.com/?p=161#more-161
 - 0.106u1            : Removed windows\wind3d.c/h, wind3dfx.c/h and winddraw.c/h. Added src\render.c/h, rendersw.c, rendfont.c/h, windows\drawd3d.c/h, drawgdi.c/h, rendsoft.c/h, videoold.c/h, wind3old.c/h, wind4old.c/h, winddold.c/h and windold.c/h. IMPORTANT NOTE: Major video-related changes are beginning in the system. Attempts will be made to keep the existing video code working to a large degree, but some features may be broken or working improperly until the video changes are complete. Most notably, in this release, RGB effects are broken for non-Direct3D blitting. For the moment, do not report anomalies or problems in the video system. If you like a nice, stable MAME, please stick with the 0.106 release. You have been warned. Some preparations for proper multiple screen support. The visible_area and refresh_rate values in the Machine structure are now defined as arrays (1 per screen). The machine_config structure has been altered as well, removing the following fields: frames_per_second, aspect_x, aspect_y, screen_width, screen_height, default_visible_area and vblank_duration. These are all stored per-screen in a new screen_config structure [Aaron Giles].
 - 0.105u5            : Extended the gfxlayout structure to support "extended" arrays of x and y offsets. These are used for layouts that are larger than 32x32. This enables the standard structure to be smaller for the vast majority of games that don't require huge graphics decodes. The end result is that the MAME .exe is ~3MB smaller [Atari Ace, Aaron Giles].
 - 0.105u3            : Fixed a number of issues in the Windows rendering code [Giuseppe Gorgoglione]: Fixed blit_vectors so it used the dirty pixel array in D3D mode. Fixed blit_vectors rotation issue for dirty pixels as well. Changed -full_screen_brightness to -full_screen_gamma (which is a more correct description). Changed -d3dfilter to be a boolean, since the other filtering modes are either obsolete or not applicable to MAME. Removed limitations on windowing position so you no longer need to be aligned on an 8-pixel boundary. Cleaned up a number of unused global variables. Improved multi-monitor support to work in GDI mode as well as in non-full-screen modes. Added missing documentation for the -screen parameter.
 - 0.104u3            : Added src\video.c/h. Removed VIDEO_DUAL_MONITOR flag [Aaron Giles].
 - 0.104u2            : Derrick Renaud fixed Windows rendering code bug where -waitvsync had no effect when using -nohws -nod3d -notb.
 - 0.100u2            : Aaron Giles fixed bug that caused VIDEO_EOF routines to be called while paused (mame.c). This led to weird graphics and out of timers messages in some games.
 - 0.99u9             : Aaron Giles removed tilemap_dispose call and fixed the two drivers that were using it. This fixes improper save state registrations in megasys1 and ygv608 games.
 - 0.99u4             : Removed src\mameblit.c and blitgen.c.
 - 0.98u2             : Aaron Giles added new 'screen' parameter to the VIDEO_UPDATE callbacks. It is not currently used but is a placeholder for the future.
 - 0.78u1             : Update to allow drivers to dynamically change the refresh rate during execution [Aaron Giles].
 - 0.71u3             : Olivier Galibert fixed drawgfx 1:1 optimization.
 - 0.70u1             : D3D Code fixes / Improvements [Leon van Rooij].
 - 0.70               : Some D3D updates / fixes [Leon van Rooij].
 - 0.69u3             : Direct 3D update to change the way cleanstretch is handled [Leon van Rooij].
 - 0.69a              : Leon van Rooij fixed bug causing timings to be broken when using D3D.
 - 0.69               : Improvements and bug fixes to the Direct 3D blitting [Leon van Rooij].
 - 0.68               : Added src\blitgen.c, src\mameblit.c and windows\wind3d.c/h. MAME Blitter Generation Code [Phil Stroffolino]. Basic Direct3D blitting support [Leon van Rooij]. You need DirectX7 headers and libs to compile it, I'm using the set from http://caesar.logiqx.com/html/tools/compilers/mingw.shtml which has the original MS headers (the same set is used for Allegro and FB Alpha) and I've made a minor update to the ddraw code so that it compiles with this set of headers (VC++ should still be fine as well). The code manually imports the DirectDrawCreateEx() function so MAME compiled with d3d support will (or rather should, I've not actually tested that yet) still run on PC's with older versions of DirectX. It should work with pretty much any 3D hardware (except perhaps older Voodoo-based cards), and the speed should be similar to the DirectDraw blit (a bit faster for some older cards). -direct3d or -d3d: use Direct3D (default is off, overrides -dd); -filter or -flt: use bi-linear filtering (default is on); -texture_management: use DirectX texture management (default is off, but some 3D cards need this (however, there's a small-ish speed-penalty)).
 - 0.62               : Screen rotation is now entirely handled at blit time by the OS layer. The core no longer prerotates the bitmap [Aaron Giles].
 - 0.58               : In preparation for partial updating support, the parameters to video_update have changed. A new parameter 'cliprect' has been added, which should be honored. In the future, the parameter will contain the subset of the screen to render; for now, it just contains Machine->visible_area. In addition, the 'full_refresh' parameter is gone; update functions must always redraw the requested portion of the bitmap. Some drivers have been updated to fully support the cliprect; others still need to be updated. New function force_partial_update(), call this to force a partial update to occur up to and including the specified scanline [Aaron Giles].
 - 0.53               : Added windows\winddraw.c/h. New flags VIDEO_HAS_SHADOWS and VIDEO_HAS_HIGHLIGHTS that automatically extend the palette creating a darker(brighter copy for shadows handling. palette_set_shadow_factor() and palette_set_highlight_factor() allow to control the adjustment to apply (shadow can be > 1.0, making it an highlight, and highlight can be < 1.0 making it a shadow - the names are just conventional) [Nicola Salmoria].
 - 0.37b16            : New command line parameter: -effect <string>, -effect none: no blitting effects, -effect scan25: 25% scanlines, -effect scan50: 50% scanlines, -effect scan75: 75% scanlines, -effect rgb3, -effect rgb4, -effect rgb6, -effect rgb16, -effect rgbtiny, -effect rgb4v and -effect scan75v [Aaron Giles].
 - 0.37b13            : Removed TRANSPARENCY_THROUGH mode for drawgfx().
 - 0.37b12            : All new set of functions for alpha blending support, used in Xexex. Porters: You have to support direct mapped 15 and 32 bits video modes. Remember to update osd_alloc_bitmap() too! See osdepend.h for the changes in osd_create_display() and osd_allocate_colors() [Olivier Galibert].
 - 0.37b10            : New functions draw_scanline8() and draw_scanline16() to help bitmap based games in supporting display rotation and 16-bit video modes. Converted a number of drivers to this new system [Aaron Giles].
 - 0.37b8             : Removed the "ui" parameter from osd_mark_dirty() [Nicola Salmoria].
 - 0.37b7             : Important for porters: Changes to the dirty marking system. The blitting code was previously required to support two types of dirty marking: A "correct" one, used for vector games, where only the screen portions marked dirty during the current frame should be copied to the video card; and a "wrong" one, relying on a hack, where the blitter was also required to remember the dirty regions from *previous* frame, and copy those as well. Only the "correct" one is left, which should somewhat simplify dirty handling in the OS dependant code. Moreover, the code must not check for VIDEO_TYPE_VECTOR to know whether to use dirty marking: it must check only VIDEO_SUPPORTS_DIRTY, which is set for vector games. Added VIDEO_PIXEL_ASPECT_RATIO_2_1, this should be honored by the OS dependant code just like VIDEO_PIXEL_ASPECT_RATIO_1_2.
 - 0.37b4             : The meaning of the full_refresh parameter to vh_screenrefresh() has been slightly extend. It usually means "don't make incremental updates to the screen bitmap, redraw it completely", however if the driver wants it can also mean "redraw all temporary bitmaps". This happens when using the functions below. This way, drivers doing lots of memset(dirtybuffer,1) can be simplified and schedule it just at the beginning of vh_screenrefresh. * Added some functions that make flip screen handling a little more eloquent: flip_screen_x_w(), flip_screen_y_w(), flip_screen_w() to set the flip_screen bits, and 3 variables flip_screen_x, flip_screen_y, flip_screen to read them back. If the flipscreen changes, the funtions automatically set full_refresh to true for the next call of vh_screenrefresh. The functions also call tilemap_set_flip(ALL_TILEMAPS), so no further operations are required when using TileMaps. Finally, the functions also adjust the visible area, mirroring it, in case it is asymmetrical. For example, rockola.c relies on this. * Also added 2 helper functions: void set_vh_global_attribute( data_t *addr, data_t data ): This takes a pointer to any variable and a value, and sets the variable to the value. In addition, if the value has changed, it sets full_refresh to true by calling the next function. void schedule_full_refresh(void): This just sets full_refresh to true for the next screenrefresh. See vidhrdw\galaxian.c for examples on this and set_vh_global_attribute [Zsolt Vasvari].
 - 0.36b12            : PORTERS BEWARE: The OS dependant code is now required to support a palettized 16-bit display, where osd_modify_pen() can be called and the palette lookup is done during the final blit. A non palettized display can still optionally be used in special cases, see the comment about osd_allocate_colors() in osdepend.h. Also note that osd_allocate_colors() now can fail and returns a value; and the special case for 32768 pens has been removed, a valid palette is always passed to the function.
 - 0.36b10            : Zsolt Vasvari fixed lots of drivers for -depth 16 support.
 - 0.36b9             : [DOS] Changed the -depth option behaviour, now it can be either 8, 16, or auto. The default is auto, which uses the color depth appropriate for the game. 8 forces use of a 256 colors display (faster but less accurate), 16 forces use of a 16-bit display (not suggested, doesn't work with all games). MAKE SURE TO SET depth = auto IN MAME.CFG, OR YOU'LL USE 16-BIT IN ALL GAMES. Replaced MachineDriver->video_attributes VIDEO_SUPPORTS_16BIT with GameDriver->flags GAME_REQUIRES_16BIT. Added color_depth to struct RunningMachine and struct GameOptions. OS dependant code may set it to force a specific depth. Added depth parameter to osd_create_display(). The OS dependant code MUST respect it - if it has special requirements, it must set the GameOptions flag beforehand.
 - 0.36b7             : VIDEO_UPDATE_BEFORE_VBLANK is now the default. If you want your driver to redraw the screen after vblank, use VIDEO_UPDATE_AFTER_VBLANK.
 - 0.35b6             : New -stretch option to optionally stretch low resolution games to fill the screen. The default is -stretch off, which is the same behaviour as before. -stretch 1024x768 automatically uses the "quadra" mode for horizontal games whose resolution is less or equal to 256x256. -stretch 800x600 uses the "triple" mode. The -quadra and -triple options are no longer needed and have been removed. 1024x768 will be perfect (for 256x256 games) or almost perfect (for 256x240 and 256x224 games) without monitor adjustment, so it is indicated for LCD displays. However, it is slower than 800x600. 800x600 is faster but the games are stretched to resolutions from 768x448 to 768x512, so they don't fill the screen and are squashed vertically. Here's the tip: if your monitor is good enough, you can use the controls to expand the picture and make it fit perfectly in the screen. Note that this tip  applies not only to stretched modes, but also to med-res games like Lode Runner (384x256) and the CPS1 games (384x224). The CPS1 games in particular are unbearably squashed unless you adjust the monitor [Nicola Salmoria].
 - 0.35b1             : New function cpu_getcurrentframe() which returns the number of the video frame currently being played. It can be used by drivers to control effects which spawn over multiple frames (e.g. blinking) without using static internal counter (which would require a custom interrupt handler to avoid problems when the game is paused) [Nicola Salmoria].
 - 0.33b7             : The (*vh_update)() call has an additional parameter, full_refresh. When it is 0, the driver may assume that the screen has not been altered by the main engine since the last call, and do an incremental update instead of redrawing the full screen [Brad Oliver].
 - 0.29               : Formalized support for dirty rectangles, via the function osd_mark_dirty() [Aaron Giles]. It is mostly used by MacMAME, limited DOS support added by Bernd Wiebelt.
 - 0.28               : All-new handling of rotation [Nicola Salmoria]: The GameDriver structure now has a "orientation" field which allows driver writers to handle fairly easily games which run on the same hardware but with different orientations. Crazy Climber/Crazy Kong, Lady Bug/Snap Jack/Cosmic Avenger and the Gottlieb games are examples of drivers using this feature. Rotation is handled automatically by gfxdecode(), which creates a prerotated charset, and drawgfx(), which swaps the arguments appropriately. Drivers which use only the standard functions to render their display will automatically handle the "orientation" field. If a driver writes directly to the bitmap, it must handle the rotation itself. IMPORTANT NOTE: osd_create_bitmap() swaps width and height when a rotation is requested. Take that into account or you'll risk trashing memory. IMPORTANT NOTE TO PORTERS: remember to update osd_create_bitmap() and osd_create_display() to take into account the rotation. Check msdos.c to see how this must be done.
 - 0.27               : 'TRANSPARENCY_PEN' and 'TRANSPARENCY_COLOR' mode were speeded up (for X/Y dual scroll games) [Tatsuyuki Satoh]. When using TRANSPARENCY_COLOR and TRANSPARENCY_THROUGH with drawgfx(), the argument must now be the pen code instead of the remapped pen number, e.g. instead of Machine->background_pen (= machine->pens[0]) you just specify 0. I also removed the background_pen field from Machine: use Machine->pens[0] instead [Nicola Salmoria]. generic_vh_start() now checks that videoram_size has been initialized and fails otherwise [Nicola Salmoria].
 - 0.26               : Valerio Verrando provided a new tweaked mode 256x232 for Crystal Castles. He also provided a new tweaked video mode to get vsynced 60Hz (perfect speed) with 256x256 games. It has horizontal clock recover (thus video is less mashed vertically, without having to modify monitor settings, and it doesn't be confused with 224x288 by monitors that remember settings. Really nice on scrolling games: Try it with "-noscanlines -vsync -vgafreq 1". Tatsuyuki Satoh optimized DrawGfx() function in case TRANSPARENCY_PEN and TRANSPARENCY_COLOR without remap, producing a speed increment of 22-25% (try yourself with Elevator Action!).
 - 0.14               : The change in video modes suggested by ue303ey@sunmail.lrz-muenchen.de didn't work on some systems, so I reverted to the previous one [Nicola Salmoria].
 - 0.13               : ue303ey@sunmail.lrz-muenchen.de reports that changing the horizontal total register of the custom video modes (0x3d4, 0x00) from 0x5f to 0x61 makes them work on his monitor. I experimentally made the change. IF THE CUSTOM MODES WORKED FOR YOU IN VERSION 0.12 AND THEY DON'T WORK ANY MORE, PLEASE NOTIFY ME AND I WILL REVERT TO THE PREVIOUS SETTING. Keith Smethers suggested to add -vgafreq n command line parameters, to select the VGA clock frequency. This may reduce flicker, especially in the 224x288noscanlines mode. WARNING: THE FREQUENCIES USED MIGHT BE WAY OUTSIDE OF YOUR MONITOR RANGE, AND COULD EVEN DAMAGE IT. USE THESE OPTIONS AT YOUR OWN RISK.
 - 0.12               : Valerio Verrando provided 288x224 video modes to be used with Rally X. WARNING: these video modes might be unstable (the noscanlines one hangs my system). Any help to make them better would be appreciated. As usual, if the default mode doesn't work on your system, try -noscanlines. If that doesn't work as well, use -vesa. Bernd Wiebelt suggested to add a new option: "-vesascan". It uses a VESA 800x600 screen to simulate scanlines. It is much slower than the other video modes. Use this if you want scanlines and the default video mode doesn't work.
 - 0.10               : Thanks to Valerio Verrando, now -noscanlines works on Pac Man and the other games using a 224x288 screen. If you have problems with the default video mode try this one, it will hopefully solve them.
 - 0.08               : Nicola Salmoria added visible_area to the MachineDriver definition. It was used in all video drivers, so it's better to keep it centralized. Long-awaited function clearbitmap(), which correctly initializes a bitmap using background_pen. Note for people porting MAME to other systems: osd_create_bitmap() must call this function, the video drivers rely on that.
 - 0.04               : Optimizations in drawgfx(), Mr. Do!'s title screen and intermissions now run faster, Crazy Climber and Crazy Kong benefit as well.
 - 0.01               : Video mode created using Tweak 1.6b by Robert Schmidt, who also wrote TwkUser.c.



 4.1  TILEMAP SYSTEM, SPRITES & TEXTURES

 - 0.279              : Removed unused (and not working) TILE_LINE_DISABLED flag, just use cliprect for something like that. Added col+rowscroll. Added callback for custom scrolling (emu\tilemap.cpp). Small optimization to scroll cache (emu\tilemap.cpp) [hap].
 - 0.277              : Got rid of simple_list and fixed_allocator (video\sprite.cpp) [Vas Crabb].
 - 0.276              : Bulk replace screen_update suffixes and m_rotatingsprites -> m_sprites (tatsumi\*) [Angelo Salese].
 - 0.250              : Don't access invalid gfxnum in tilemap.get_info_debug (emu\tilemap.cpp). Removed problem with nullptr math in tilemap_t::draw_instance and added another safety check for priority bitmap (emu\tilemap.cpp) [hap].
 - 0.223              : Added default flags parameter in draw function (TILEMAP_DRAW_ALL_CATEGORIES; emu\tilemap.h) [hap].
 - 0.215              : Added some sanity checks to video\sprite.cpp. Relax assert and do some sanity checks (fixes mtrain and strain with DEBUG=1) (emu\tilemap.cpp) [AJR].
 - 0.214              : Improved contains assert in emu\tilemap.cpp, fixing tilemap viewer in debug build [AJR].
 - 0.213              : Correct calculation of visible area height and width (emu\tilemap.cpp) [Vas Crabb]. Added debug assert to validate cliprect (emu\tilemap.cpp) [AJR].
 - 0.210              : Simplified handlers (emu\tilemap.cpp) [cam900].
 - 0.185              : Moved "optional" basemem and extmem arrays out of tilemap_t. This is intended as a first step towards divorcing tilemap_t and tilemap_device. Disallow a negative number of palette entries by changing some types (emu\dipalette.cpp) [AJR].
 - 0.173              : Moved emu\sprite.cpp/h to devices\video\sprite.cpp/h.
 - 0.156              : Respect gfx_element::colors() just like drawgfx.c does. Added temporary assert to catch regressions (i.e. drivers that didn't define their gfx elements correctly) (emu\tilemap.h). Removed temporary assert (emu\tilemap.h). Tilemap assert fix (ampoker2.c, batman.c, cninja.c, coinmstr.c, deco32.c, legionna.c, pipedrm.c, sbugger.c, tattack.c and video\k054156_k054157_k056832.c). Taito device tilemap assert fixes, and clean up of obsolete stuff (drivers\darius.c, ninjaw.c, opwolf.c, rainbow.c, rastan.c, slapshot.c, taito_f2.c, topspeed.c, warriorb.c, video\tc0080vco.c, tc0100scn.c and tc0480scp.c). Internal tilemap documentation update; dooyong.c cleanups; prehisle.c pdrawgfx conversion [Alex Jackson].
 - 0.154              : Emupal/Tilemap refactoring: configure_tilemap_groups is now a tilemap_t method rather than a palette_device method (emu\emupal.c, tilemap.c, drivers\panicr.c, video\1943.c, bankp.c, bosco.c, clshroad.c, equites.c, exedexes.c, galaga.c, gaplus.c, gberet.c, gunsmoke.c, mappy.c, polepos.c, retofinv.c, sprcros2.c, stfight.c, tceptor.c and vulgus.c)
 - 0.153              : Fixed F4 graphics viewer fails to show tilemaps in games that use a colortable (emu\emupal.c). Merged memarray improvements from palette branch into trunk (emu\memarray.c). Make memarray word/dword/qword writers take a mem_mask, and update the tilemap device to use them. Removed some unused junk (emu\tilemap.c) [Alex Jackson].
 - 0.152              : In sprite_device (emu\sprite.h), when no shared memory region can be found don't save state the m_buffer member; assume the owner will take care of save stating the spriteram itself. This fixes all Atari System 2 sets have assert at initialization in debug build [Wilbert Pol].
 - 0.150              : Removed emu\tilelgcy.h. Added emu\memarray.c/h. Made MCFG_DEVICE_VBLANK_INT_DEVICE param order more logic (emu\diexec.c). Updated evice_execute_interface::interface_post_reset so screen is searched from same context (emu\diexec.c). Removed tilelgcy.h since no more users exist [Miodrag Milanovic]. Fixed long-standing architectural wart: The priority bitmap is no longer owned by the tilemap system, and no longer exists globally in the machine. Instead it is allocated per-screen for all systems. This has several side-effects: 1. Previously, the pdrawgfx* functions were already changed to take the priority bitmap as a parameter. Now all other hand-crafted functions that mess with the priority bitmap generally must do so as well, and have been updated. 2. Calls to the tilemap system now need to provide a screen_device. This is not just for the priority_bitmap, but also for screen flipping, which previously always assumed the "primary screen" when doing flipping calculations. 3. All devices that implemented tilemap-like functionality have been updated to follow the same pattern, since they largely tend to call through to the core tilemap system at some point. Moved tilemap_memory into a generic memory_array class, since it is more generally useful than just in tilemaps. Code is now in memarray.*. Converted the Atari RLE motion objects device from a half-assed device into a full-assed device, leveraging the memory_array class [Aaron Giles]. Added missing initialization in emu\memarray.c [Oliver Stoeneberg].
 - 0.149u1            : Added emu\tilelgcy.h. Moved some legacy code from tilemap.h to tilelgcy.h. Added some comments to tilemap.h [Oliver Stoeneberg]. Tilemap system (numerous changes) [Aaron Giles]: * Moved remaining legacy macros and typedefs to tilelgcy.h. This revealed a few drivers mixing and matching modern & legcy, which have now been fixed. * Changed get info callback signature to no longer pass the user_data pointer, but instead pass a reference to the tilemap object itself. Updated those few drivers using user_data to pull it out of the tilemap object with the new user_data() getter method. * Changed get info and mapping callbacks to be device_delegates so that they can be described at config time. * Added tilemap_memory object that is used internally for reading/writing to memory that backs a tilemap. This object is used to track a memory pointer that backs tilemap memory, and also is designed to transparently handle all bus width and endianness associated with reading and writing data in a tilemap. * Incorporated two tilemap_memory objects (basemem and extmem) into the tilemap object and added accessors to them, as well as read/write handlers for reading/writing to entries stored in the memory. This means that tilemap get info callbacks can now easily read data out of the tilemap in a generic way. * Rejiggered the initialization sequence for tilemap objects so that the tilemap_manager is not required to be present at instantiation. * Created a new tilemap_device, which can be used to declare a tilemap in the machine config, and which also is a tilemap object itself. The tilemap device will look for shared memory regions called "<tag>" and "<tag>_ext" and automatically plug them into the tilemap. The device also provides write handlers that can be used to write to the tilemap memory and mark tiles dirty, saving the need for each driver to write their own. Atari drivers: Removed all playfield and alpha memory and tilemap variables, apart from those needed by atarivc-using games (this will become a device in a future update). Updated all Atari 16-bit drivers to use the new tilemap_device instead, which provides all the needed functionality in a more generic way [Aaron Giles].
 - 0.148              : Oliver Stoeneberg added missing initializations in default rectangle constructor (src\lib\util\bitmap.h).
 - 0.147              : Added emu\sprite.c/h and video\sega16sp.h. Created new sprite device base class, which manages a bitmap and a sparse bitmap for tracking which areas got updated. This allows sprites to be rendered independently to their own bitmap and then mixed in a final step. Converted the Sega sprite device over to this new model, and moved the mixing steps out of the sprite implementations and into the driver-specific video updates where it belongs. Added some further methods and helpers to the bitmap_t and rectangle classes. Created a sega_16bit_common_base class which handles thecommon Sega palette RAM mappings and open bus reads [Aaron Giles]. TILE/TILEMAP modernization part 1-3. tilemap_create_device users modernized (src\emu\tilemap.h, video\decbac06.c/h, deco16ic.c/h, gp9001.c/h, kaneko_tmap.c/h, konicdev.c/h, segaic24.c/h and taitoic.c/h) [Miodrag Milanovic].
 - 0.145u4            : Added video\bufsprite.c/h. Create new devices buffered_spriteram<n>_device, which manage buffered spriteram. Removed core support for legacy buffered spriteram, and updated all drivers to use the new devices instead [Aaron Giles]. Removed required/optional_shared_size helpers. Instead the existing required/optional_shared_ptr helpers now have a bytes() method that can be used to query the size of the shared region. Death to generic spriteram [Aaron Giles].
 - 0.145              : Aaron Giles fixed tilemap viewer. Tilemaps now use the bitmap's raw palette instead of machine->pens to lookup RGB32 values if the palette is present (it is on all screen bitmaps). Today these are identical, but it's part of a long-term effort to move away from a global palette and allowing each bitmap or screen to have their own if that is preferred.
 - 0.144u7            : Rewrote tilemap.c as a C++ class [Aaron Giles]. For now kept the global functions and just inline mapped them to the class. Will do a pass soon to actually update drivers to use the C++ methods directly. Also, the tilemap callbacks are now delegates which should make for cleaner integrating into modern devices and drivers going forward. Fixed several rendering issues with artwork, introduced in the recent changes. Also, did a pass through the code to take advantage of new methods available on rectangles. Bulk converted most of the tilemap_* calls into method calls. Only thing left is tilemap_create. Fixed disk artwork rendering. Removed support for 4bpp packed graphics. These only manifested for drivers that used GFX_RAW support for 4bpp systems, and yet we had a bunch of extra code to support it. Updated these drivers to do without it and removed all the extra code for supporting it [Aaron Giles].
 - 0.144u6            : Major bitmap-related changes throughout the system [Aaron Giles]: There are almost certainly some regressions lurking. Let me know if something seems busted. Bitmaps are now strongly typed based on format. bitmap_t still exists as an abstract base class, but it is almost never used. Instead, format-specific bitmap classes are provided: bitmap_ind8 == 8bpp indexed bitmap_ind16 == 16bpp indexed bitmap_ind32 == 32bpp indexed bitmap_ind64 == 64bpp indexed bitmap_rgb32 == 32bpp and RGB bitmap_argb32 == 32bpp ARGB bitmap_yuy16 == 16bpp YUY. For each format, a generic pix() method is provided which references pixels of the correct type. The old pix8/pix16/pix32/ pix64 methods still exist in the short term, but the only one available is the one that matches the bitmap's pixel size. Note also that the old RGB15 format bitmaps are no longer supported at all. Converted model1, megadriv and stv drivers away from the RGB15 format bitmaps. New auto_bitmap_<type>_alloc() macros are provided for allocating the appropriate type of bitmap. Screen update functions now must specify the correct bitmap type as their input parameters. For static update functions the SCREEN_UPDATE macro is now replaced with SCREEN_UPDATE_RGB32 and SCREEN_UPDATE_IND16 macros. All existing drivers have been updated to use the correct macros. Screen update functions are now required for all screens; there is no longer any default behavior of copying a "default" bitmap to the screen (in fact the default bitmap has been deprecated). Use one of the following to specify your screen_update callback: MCFG_SCREEN_UPDATE_STATIC(name) - static functions, MCFG_SCREEN_UPDATE_DRIVER(class, func) - driver members and MCFG_SCREEN_UPDATE_DEVICE(tag, class, func) - device members. Because the target bitmap format can now be deduced from the screen update function itself, the MCFG_SCREEN_FORMAT macro is no longer necessary, and has been removed. If you specify a screen update callback that takes a bitmap_ind16, then the screen will be configured to use a 16bpp indexed bitmap, and if you specify a callback that takes a bitmap_rgb32, then a 32bpp RGB bitmap will be provided. Extended the bitmap classes to support wrapping a subregion of another bitmap, and cleaner allocation/resetting. The preferred use of bitmaps now is to define them directly in drivers/devices and use allocate() or wrap() to set them up, rather than allocating them via auto_bitmap_*_alloc(). Several common devices needed overhauls or changes as a result of the above changes: * Reorganized the laserdisc base driver and all the laserdisc drivers as modern C++ devices, cleaning the code up considerably. Merged ldsound device into the laserdsc device since modern devices are flexible enough to handle it. * Reorganized the v9938 device as a modern C++ device. Removed v9938mod.c in favor of template functions in v9938.c directly. * Added independent ind16 and rgb32 callbacks for TMS340x0 devices. * All video devices are now hard-coded to either ind16 or rgb32 bitmaps. The most notable is the mc6845 which is rgb32, and required changes to a number of consumers. * Added screen_update methods to most video devices so they can be directly called via MCFG_SCREEN_UPDATE_DEVICE instead of creating tons of stub functions. Added new template device_delegate which wraps a regular delegate and includes a string pointer to a device tag, which can be simply resolved later. Converted the screen_update delegates to be based on this. Changed the mechanism by which screen formats are auto-deduced. Converted SCREEN_EOF to use these delegates as well, so now there is MCFG_SCREEN_EOF_STATIC/ DRIVER/DEVICE just like MCFG_SCREEN_UPDATE. Death to SCREEN_EOF, which was ambiguously called either at the start or end of VBLANK depending on the video flag VIDEO_UPDATE_AFTER_VBLANK. Replaced with SCREEN_VBLANK callbacks which are called both at the start and end of VBLANK, so you can operate either way, and be explicit about it. Updated all callers. Also updated screen_device to use device timers and some other minor cleanups. Cleanup of bitmap classes now that formats and bpp are dictated strictly by the type. Also added code to more aggressively align the bitmap base and rowbytes, and create a resize method which attempts to re-use existing memory rather than always reallocating. Added new method screen_device::register_screen_bitmap which allocates a given bitmap to match the screen size and resizes it as appropriate when the screen size changes. Updated all the obvious spots in the code where this could be leveraged. Move allocate/resize methods in the bitmap classes down into bitmap_t because they no longer have any dependency on the bitmap format or type. Ensured that the bitmap's palette remains set across a resize call (it is lost doing an allocate).
 - 0.144u5            : Converted bitmap_t and rectangle into proper classes. Replaced BITMAP_ADDR* macros with bitmap->pix* functions, and moved bitmap_fill() to bitmap->fill() among other similar changes. Bitmap fields now only available via accessors. Replaced sect_rect with &= and union_rect with |= operators for rectangle classes. Some general cleanup as a result of these changes. Bulk conversion of bitmap_t * to bitmap_t & . With this change the parameters for the global SCREEN_UPDATE callback match the parameters for the driver_device version. Added allocate() and deallocate() methods to bitmap_t to permit cleaner handling of bitmaps in drivers and modern devices. Removed machine.generic.tmpbitmap, VIDEO_START(generic_bitmapped), and SCREEN_UPDATE(generic_bitmapped). In their place, each screen_device now maintains a default bitmap which is automatically copied to the screen on each update if no SCREEN_UPDATE function is provided and if no driver_device::video_update override is present. This bitmap can be found by querying the screen's new default_bitmap() method [Aaron Giles].
 - 0.141u4            : Move non-buffered spriteram drivers away from using the generic spriteram in favor of using spriteram in their own driver_device classes [Atari Ace]. Atari Ace convert a number of drivers to use their own private spriteram instead of the generic one. Only drivers needing buffered spriteram should use the shared generic version for now.
 - 0.140              : Correctly free textures when screen size dynamically changes. Fixes texture assert when exiting on a number of games. Convert rendlay objects into C++, reduce the number of unused textures allocated [Aaron Giles].
 - 0.136              : Aaron Giles renamed tilemap -> tilemap_t, as the name 'tilemap' is too commonly used for statics and structure members, and some compilers (esp. C++ compilers) don't allow that.
 - 0.135u4            : Aaron Giles fixed tilemaps so they can be initialized at device start time. Aaron Giles fixed crash on exit for systems with no tilemaps. Fabio Priuli added TILE_GET_INFO_DEVICE and SET_TILE_INFO_DEVICE macros to tilemap.c.
 - 0.133u2            : Atari Ace converted the tilemap lists to be private information held by the running_machine instead of global variables. Added new APIs to the tilemap code to handle the "ALL_TILEMAPS" cases, and removed the old ALL_TILEMAPS definition.
 - 0.132u5            : Aaron Giles added basic support in bitmap.c for 64-bit indexed bitmaps. As a result, you will need a full recompile with this change, since the bitmap formats enum was altered.
 - 0.132u3            : Atari Ace and Aaron Giles removed old drawgfx APIs after converting the remaining drivers to the new ones.
 - 0.132u2            : Atari Ace normalized driver-specific drawing code to use the standard parameter ordering: bitmap, cliprect, gfx, ... Updated most video drivers to use the more modern drawgfx_* variants. Eventually the generic drawgfx will be deprecated, so please use the newer functions.
 - 0.129u1            : Added emu\drawgfxm.h. Major drawgfx cleanup, global removal and feature enhancements [Aaron Giles]: * Added built-in dirty tile tracking to the gfx_element. This removes the need for all drivers that had dynamically populated graphics to do their own dirty tracking. Tiles are marked dirty via the new function gfx_element_mark_dirty(). Any driver that needs access to the decoded data must call gfx_element_get_data() in order to ensure that the referenced tile is clean before proceeding. * In order to support dirty tracking, the gfx_element was enhanced to keep track of the original source pointer, so that it can go back and regenerate tiles on demand. For systems that set NULL for the region in the gfxdecode, they must use gfx_element_set_source() to specify a pointer to the raw data before drawing anything. * Changed allocgfx() to gfx_element_alloc(), and added parameters to specify the source data pointer, base color index, and total colors. Many drivers had to whack these values in after the fact, so this allowed for some minor additional cleanup. * Added a dirtyseq member to the gfx_element struct. This is incremented on each tile dirty, and can be used to sniff if something has changed. * Added logic in the tilemap engine to track which gfx_elements are used for a given tilemap, and automatically detect changes to the tiles so that drivers no longer have to explicitly invalidate the tilemap when tiles change. In the future, this may grow smarter to only invalidate the affected tiles, but for now it invalidates the entire tilemap. * Updated a number of drivers to remove their own dirty handling and leverage the new internal dirty marking. * Because the source data must always be present, updated the atarigen zwackery and mystwarr graphics handing code to support this. * Thanks to the dirty tracking, this actually allows all gfx decoding to happen on the fly instead of all at once up front. Since there was some concern that this would cause undesirable behavior due to decoding lots of tiles on the fly, it is controlled with a compile-time constant in mame.h (PREDECODE_GFX). Set this to 1 to get the old behavior back. * Moved decodechar() and decodegfx() to deprecat.h. All drivers in MAME have been updated to simply mark tiles dirty and let the rendering system decode them as needed, so these functions may go away in the future. * Rewrote entirely the rendering code in drawgfx. This code previously used extensive recursive #includes and tricks to build, and was very difficult to understand. The new code is based off of a set of macros defined in drawgfxm.h. These new macros separate the core rendering logic from the per-pixel operation, allowing the operation to be easily "plugged" into any of the renderers. These macros are also available to any driver that wants custom rendering behavior that is similar to existing core behavior, without needing to populate the core with esoteric one-off rendering behaviors. * Added a set of new functions for [p]drawgfx[zoom], one for each transparency type. The old [p]drawgfx[zoom] functions are still present, but now switch off the transparency type and call through to one of these new transparency-specific functions. The old functions are also now reduced to only supporting TRANSPARENCY_NONE, TRANSPARENCY_PEN, and TRANSPARENCY_PENS. All other rendering types must use the new functions. * All new rendering functions have extensive asserts to catch improper clipping rectangles and other common errors. * All new rendering functions automatically downgrade to optimized versions where appropriate. For example, calling drawgfx_transpen with an out-of-range pen automatically falls back to drawgfx_opaque. And drawgfxzoom_* with xscale=yscale=1.0 automatically falls back to drawgfx_*. And many other examples. In general, this relieves drivers from needing to make these sorts of decisions. * All new rendering functions have a consistent parameter order that is a bit different from the existing functions. The cliprect parameter is now specified immediately after the destination bitmap, to match the convention used throughout the rest of the system. The core parameters are followed by the scale parameters (for the zoom functions), and then followed by the priority parameters (for the pdrawgfx* functions), finally followed by any PIXEL_OP*-specific parameters (such as transparent pen, alpha, drawing tables, etc.). * Removed drawgfx_alpha_cache, alpha_set_level(), and the inline functions alpha_blend16() and alpha_blend32(). To render graphics with alpha, use the new [p]drawgfx[zoom]_alpha functions, which take an explicit alpha value. To render tilemaps with alpha, the TILEMAP_DRAW_ALPHA option now takes an explicit alpha parameter. And to do you own alpha blending, use the alpha_blend_r16() and alpha_blend_r32() functions, which take an explicit alpha. * Updated a number of drivers as a result of removing the implicit alpha in the drawgfx_alpha_cache. * Removed drawgfx_pen_table and TRANSPARENCY_PEN_TABLE. To achieve the same effect, build your own table and pass it to [p]drawgfx[zoom]_transtable, along with a pointer to the machine->shadow_table to use for shadows. Eventually machine->shadow_table is likely to go away, and drivers will need to fetch the shadow table from the palette directly. * Updated a number of drivers to remove use of drawgfx_pen_table. * Removed TRANSPARENCY_ALPHARANGE; it was only used by the psikyosh driver, so it is now moved locally into that driver and built using the macros in drawgfxm.h. * Removed TRANSPARENCY_PEN_RAW; to achieve the same effect, call the new [p]drawgfx[zoom]_transpen_raw() functions. Updated drivers to make this change. * Removed the unused mdrawgfx* functions entirely. * Added new function gfx_element_set_source_clip() to specify a source clipping rectangle for any element. This replaces the nasty hacks that were being used in bnstars, ms32, namcos86, and namcos1 to achieve similar behaviors. * Added new function gfx_element_build_temporary() to safely build a temporary gfx_element. Updated the drivers that did this to use the new function. * Simplified the copyrozbitmap() functions to match the copybitmap() functions in having separate opaque and transparent versions. Also removed the 'priority' parameter which was only used by one driver, and moved that logic into a custom renderer built using macros in drawgfxm.h. Updated copyrozbitmap* to use the destbitmap, cliprect parameter ordering convention as well. * Simplified the draw_scanline*() functions to always render opaque. Only one driver was doing otherwise, and it now does its work internally (draw_scanline is dead-simple ever since we moved rotation to the OSD code; I almost just removed it entirely). Aaron Giles added a cliprect to the bitmap_t type, which describes the full bitmap. Aaron Giles removed tilemap_set_pen_data_offset; unfortunately, this adds a random tile offset behind the scenes and goes against the dirty tile detection and invalidation. Updated the mainsnk, snk and snk68 drivers to use old fashioned tile banking. Aaron Giles added function video_assert_out_of_range_pixels() to help find the source of invalid pixels (generally out-of-range palette entries due to invalid data or sloppy calculations). Place this after each step in your rendering in a debug build to discover which code is generating improper pixels.
 - 0.128u6            : Atari Ace eliminated the #include "deprecat.h" from tilemap.c. The main change is to require callers of tilemap_create to provide a machine pointer. This pointer is then attached to the tilemap and used when needed inside tilemap.c. Atari Ace eliminated the #include "deprecat.h" from drawgfx.h. It does so in a fashion similar to my recent tilemap patch, adding the machine pointer to gfx_element, changing allocgfx to take a machine, and then adjusting the internals to use the machine field as needed.
 - 0.127u6            : Nicola Salmoria added pen_mask tile attribute to the tilemap system. Implemented dynamic tile & sprite bit depth in the Taito F3 driver.
 - 0.127u5            : Minor optimization to fillbitmap when non-zero fills are done [Christophe Jaillet].
 - 0.127u1            : Nicola Salmoria added new function tilemap_set_pen_data_offset(). While this isn't 'free' as tilemap_set_palette_offset() is (when the offset changes, the pixmap cache needs to be invalidated), it helps removing some redundant code from drivers. Updated snk.c and snk68.c to take advantage of the new function.
 - 0.125u4            : Nicola Salmoria optimised tilemap_draw rowscroll case to avoid overhead when used with clip rects smaller than the tilemap. This reduces by an order of magnitude the time taken to render the bg in Gunnail stage 5.
 - 0.124u2            : Aaron Giles removed unnecessary postload callbacks which only marked all tiles dirty, since this is done automatically by the tilemap engine.
 - 0.124u1            : Nicola Salmoria fixed tilemap viewer to draw the whole tilemap when categories are used. Added new option TILEMAP_DRAW_ALL_CATEGORIES to do this efficiently. Updated several drivers to use this instead of rendering each category independently where appropriate.
 - 0.123u6            : Zsolt Vasvari removed unneeded pen lookups in drawgfx. Did some code formatting clean-up.
 - 0.123u4            : Zsolt Vasvari removed use of tmpbitmap from some drivers. Replaced mame_bitmap with direct use of bitmap_t. Removed mame_bitmap typedef.
 - 0.123u3            : drawgfx.c improvments [Zsolt Vasvari]: Added some asserts to drawgfx and drawgfxzoom. Moved some variable declarations so that they are only visible where they are actually used. Removed 8bpp bitmap support from drawgfx.
 - 0.123u1            : Zsolt Vasvari removed 'type' parameter from tilemap_create.
 - 0.122u8            : drawgfx changes [Zsolt Vasvari]: Removed copybitmap_remap and copyscrollbitmap_remap, neither which was used by anybody. Removed some obsolete commented out code. Fixed up some comments. Removed TRANSPARENCY_NONE case from copybitmap_core, which can never happen. Removed TRANSPARENCY_BLEND completely and TRANSPARENCY_BLEND_RAW as an option to copybitmap. Source tree needs to be recompiled as the transparancy mode enum has changed. Removed TRANSPARENCY_NONE_RAW, TRANSPARENCY_PENS_RAW and TRANSPARENCY_PEN_TABLE_RAW as they were no longer used. Changed copybitmap and copyscrollbitmap. There are now 2 versions of each, one without and with transparency.
 - 0.122u7            : Nicola Salmoria added tilemap_get_scrollx / tilemap_get_scrolly.
 - 0.119u2            : Atari Ace changed gfx_decode structures so that they are defined abstractly by macros rather than directly specifying the structures. Added new macros GFXDECODE_START/GFXDECODE_ENTRY/GFXDECODE_END to describe the gfx_decode information. Converted all drivers over to using the new macros. Aaron Giles renamed old gfx_decode structure to gfx_decode_entry in order to catch remaining/new drivers that aren't using the new macros.
 - 0.119u1            : Aaron Giles removed limitation that tilemap tile widths must be divisible by 2, except in the 4bpp case, where an assert now catches this case.
 - 0.118u1            : Aaron Giles significantly revamped the tilemap rendering code. There are now only two tilemap types, based on whether or not you want transparency based on pen or color. All existing tilemap effects are built on top of these two modes. The internal tilemap handling code has been reorganized and simplified in a number of cases. For most games, this change is transparent (har har), apart from the change in tilemap type values. Several concepts within the tilemap system now have different terminology for clarity and to remove some ambiguous naming ('priority', for example, was overloaded). A small tutorial and better documentation is now present at the top of tilemap.h and provides more details of the changes.
 - 0.117u3            : Aaron Giles did some cleanup of the tilemap interfaces. Changed tilemap type constants to be an enum prefixed by TILEMAP_TYPE_* instead of simply TILEMAP_*. Removed unused members from the tile_info structure.
 - 0.117u2            : Aaron Giles changed render_textures to allocate in a pool model, to avoid high memory overhead when allocating large numbers of textures (for example in the 14- and 16-segment LED displays).
 - 0.115u3            : Cleaned up the tilemap get_info callbacks [Atari Ace]: Regularized and clean up the existing callbacks. Changed some callbacks to use int tile_index as the parameter so that all callbacks use consistent naming. Folded some direct uses of tile_info.flags into calls to SET_TILE_INFO(). Changed the Konami drivers to manipulate the tile_info global only within the tile_get_info callbacks. Replaced all the callback declarations with TILE_GET_INFO() wrappers. Changed the interface to pass tile_info as a parameter and made tile_info a static variable only accessible inside tilemap.c.
 - 0.112u4            : Bitmaps are now cleared to 0 by default. This fixes a number of random crashes in games [Aaron Giles].
 - 0.111u6            : Atari Ace and Aaron Giles changed the contract of the tilemap_create() call so that it is guaranteed to succeed or die trying. Cleaned up code paths that checked the result of this operation to be simpler as a result. Aaron Giles removed line array from mame_bitmap. Converted dozens of drivers over to using BITMAP_ADDR macros instead.
 - 0.106u10           : Aaron Giles added support for +/- keys in the palette view. Added "tick marks" when a large number of palette or gfx entires are displayed to indicate which row/column the header refers to. Made the UI keys for navigating the graphics/palette viewer configurable.
 - 0.106u9            : Aaron Giles added support for pausing/unpausing while showing graphics and tilemaps.
 - 0.106u8            : Reimplemented the palette/graphics/tilemap viewer [Aaron Giles]: It is still connected to F4, but works differently. To switch between modes, press the ENTER key. Here are the new keys in each mode: * Palette/colortable mode: [ ] - switch between palette and colortable modes; up/down - scroll up/down one line at a time; pgup/pgdn - scroll up/down one page at a time; home/end - move to top/bottom of list; enter - switch to graphics viewer. * Graphics mode: [ ] - switch between different graphics sets; up/down - scroll up/down one line at a time; pgup/pgdn - scroll up/down one page at a time; home/end - move to top/bottom of list; left/right - change color displayed; r - rotate tiles 90 degrees clockwise; - + - increase/decrease the number of tiles displayed per row; enter - switch to tilemap viewer. * Tilemap mode: [ ] - switch between different tilemaps; up/down/left/right - scroll 8 pixels at a time; shift+up/down/left/right - scroll 1 pixel at a time; control+up/down/left/right - scroll 64 pixels at a time; r - rotate tilemap view 90 degrees clockwise; - + - increase/decrease the zoom factor; enter - switch to palette/colortable mode. Note that both graphics and tilemap modes only display data at an integral scale factor so you are limited based on the resolution of your render target. For -video ddraw, you can get more pixels by using -prescale to scale the screen. For -video d3d, the render target is at your screen's native resolution already.
 - 0.99u8             : Aaron Giles added save/restore of tilemap parameters.
 - 0.94u2             : Fixed some bad GfxLayouts [Atari Ace] (battlera.c, dcon.c, decocass.c, funkybee.c, jedi.c, merit.c, ojankohs.c, omegaf.c and srumbler.c)
 - 0.90u4             : Aaron Giles added a user_data field for tilemaps. You can call tilemap_set_user_data() to set this field internally in the tilemaps. Before rendering, this value will be copied into the (new) global tile_info.user_data field, so that your tilemap callback can use it.
 - 0.87u1             : Andrew Gardner modified tilemap.c so ROZ and RGB_DIRECT can be used together.
 - 0.79u1             : Nicola Salmoria converted all 80s Namco drivers to tilemaps, and made gfx emulation more accurate according to schematics. Curt Coder converted Jackal to tilemaps and fixed problems created when pacland was converted to tilemaps.
 -  1st February  2004: Curt Coder converted Gun Smoke, '1943' and Jackal to tilemaps and fixed other stuff in them.
 - 22nd December  2003: Curt Coder converted the Prehistoric Isle, Psychic 5 and Tunnel Hunt drivers to use the tilemap system, adding flipscreen/cocktail mode in the first two.
 - 0.77u3             : Brad Oliver made sure each bitmap is aligned on a 16-bit boundary (src\common.c).
 - 17th November  2003: Curt Coder submitted cleanups and tilemap conversions for Cloak & Dagger, Jail Break, Pac-Land and Omega Fighter.
 - 0.72               : Various Conversions to Tilemaps [Curt Coder]. Some were left out as they need checking, or devs didn't like them.
 - 26th July      2003: Olivier Galibert fixed a slight bug in the drawgfx functions, caused by some recent optimization.
 - 11th July      2003: Converted another few drivers to the tilemap system.
 - 0.71u1             : Acho A. Tang added tilemap_get_transparency_data() for transparency cache manipulation. Converted more drivers to use tilemaps.
 - 0.71               : Converted a bunch of drivers to tilemaps, fixed dipswitches etc.
 - 0.70u4             : Tilemap viewer now displays a more logical ordering for "tilemap#1", "tilemap#2", etc [Phil Stroffolino]. Broadened support for palette_offset, and made it work in tilemap viewer [Phil Stroffolino].
 - 20th May       2003: Phil Stroffolino sent in a preliminary version of the new mixgfx graphics system, which allows some drivers to emulate their graphics priorities perfectly.
 - 11th April     2003: Eabair fixed a potential crash bug in the tilemap disposing code.
 -  9th April     2003: Phil Stroffolino sent in an update to drawgfx with preliminary zdrawgfx support and other fixes.
 - 31st March     2003: Paul Priest integrated the drawgfx updates and Acho's shadows/highlights updates.
 - 30th March     2003: Phil Stroffolino sent in a beta version of drawgfx with z-buffer support.
 - 25th March     2003: Acho A. Tang added support for 32bpp shadows and highlights in the core, improving the quality of some graphical effects in Mystic Warriors.
 -  4th March     2003: David Haywood converted the Super Qix driver to the tilemap system.
 -  2nd March     2003: Bryan McPhail fixed a crash in the tilemap viewer.
 - 18th November  2002: Olivier Galibert ported tilemap naming and pause brightness updates to 0.62.
 - 29th July      2002: Olivier Galibert added support for naming tilemaps and seeing the names in the tilemap view.
 - 0.70               : Various dipswitch fixes / conversion of drivers to tilemaps [Curt Coder].
 -  7th June      2002: Aaron Giles fixed a problem with the tilemaps which could cause crashes.
 - 12th April     2002: Aaron Giles converted all the Atari drivers for the tilemap system and added some protection workarounds for Primal Rage and Road Riot's Revenge, but neither of them is perfect.
 - 23rd March     2002: Aaron Giles fixed the corrupt vertical lines in the tilemap graphics in several games.
 - 21st March     2002: Aaron Giles fixed a crash in the tilemap system.
 - 20th March     2002: Aaron Giles re-added Andrea Mazzoleni's MMX optimizations to the latest tilemap changes.
 - 15th March     2002: Aaron Giles did a minor update on the tilemap system, adding some minor speedups.
 - 11th March     2002: Aaron Giles fixed a bug in the tilemap routines which caused problems with asymmetric tilemaps and rotation.
 - 19th February  2002: Farfetch'd optimized the tilemap functions without having to use MMX.
 - 17th February  2002: Andrea Mazzoleni optimized a few tilemap functions with MMX, gaining about 5% to 10% more speed.
 - 0.58               : New functions auto_bitmap_alloc() and auto_bitmap_alloc_depth() are now available to create automatically managed bitmaps. Combined with auto_malloc(), there is no need for a video_stop function in most cases. All existing drivers have been modified to take advantage of these features. The function tilemap_set_clip() has been removed. In its place, there is a new 'cliprect' parameter to tilemap_draw(). All existing drivers have been updated to support this change.
 - 0.57               : New function get_black_pen() which allows to fillbitmap() the background with black without relying on a palette entry.
 -  9th December  2001: David Haywood sent in a Psikyo driver which allocates tilemaps during startup instead of during the emulation.
 - 30th November  2001: Uki converted the Fairyland Story / Onna Sanshirou driver to tilemaps and fixed some palette and sound problems.
 - 23rd November  2001: William Kucharski and Phil Stroffolino fixed the tilemap crashing, hopefully for good.
 - 22nd November  2001: Stefan Jokisch partially fixed another tilemap crash bug.
 -  2nd November  2001: Olivier Galibert resubmitted the OS dependant keys and tilemap viewing support.
 - 31st October   2001: Aaron Giles moved bitmap allocation to the core code as opposed to being in the OS-dependant code.
 - 29th October   2001: Olivier Galibert added tilemap viewing with the F4 key.
 - 12th October   2001: Phil Stroffolino fixed the tilemap bug which caused the Green Beret cocktail mode problem.
 -  1st October   2001: Insideoutboy fixed a tilemap bug which occurred when screen size didn't match the tilemap size.
 -  6th September 2001: David Haywood converted the Car Jamboree driver for tilemaps.
 - 19th August    2001: Olivier Galibert fixed bugs in the tilemap and drawgfx routines which affected Xexex graphics.
 - 0.53               : tilemap_update() is gone. Everything is handled by tilemap_draw(). New function tilemap_draw_roz() [Phil Stroffolino]. osd_bitmap.line is now a void ** to prevent confusion.
 - 11th August    2001: David Graves fixed Taito TC0480SCP and TC0080VCO chips' emulation to work with the new tilemap system. Phil Stroffolino did initial optimizations to the new tilemap system and cleaned up some obsolete definitions.
 -  8th August    2001: Bryan McPhail updated the Taito F3 driver to work with the new tilemap system.
 -  7th August    2001: Aaron Giles converted Pipe Dream and Tetris to the tilemap system. Nicola Salmoria adjusted the tilemap system to work better with Chequered Flag.
 -  6th August    2001: Phil Stroffolino sent in an update to the tilemap system, adding support for larger tile sizes and improving the rotation and zooming support.
 -  4th August    2001: Zsolt Vasvari converted D-Day to tilemap system and added shadow support to it.
 - 23rd July      2001: Nicola Salmoria added general support for shadows and highlights and used it for some Konami games.
 - 22nd July      2001: Phil Stroffolino added rotation and zoom support to the tilemap system
 - 19th July      2001: Phil Stroffolino updated the Nemesis graphics emulation, converting it to tilemaps.
 - 14th July      2001: Nicola Salmoria converted the CPS video hardware for tilemap system.
 - 12th July      2001: Nicola Salmoria decrypted the sprite graphics in both, so they are now fully playable.
 - 11th July      2001: Tatsuyuki Satoh fixed a long-standing bug in the tilemap system and converted Appooh to the tilemap system. Phil Stroffolino sent in another tilemap system update.
 - 0.37b16            : Support for GFX_RAW in GfxLayout (see drawgfx.h) [Nicola Salmoria]. Added new flags for the tilemap subsystem: TILE_SWAXY and TILE_4BPP. Also added tile_info.skip. SET_TILE_INFO() now has a third parameter (flags), tilemap_set_transmask() sets independently the transparency masks for the front and back layer, and tilemap_draw() can be called with a NULL tilemap (in that case, only the priority bitmap is updated) [Phil Stroffolino].
 - 28th June      2001: Phil Stroffolino updated the tilemap system, changing the set_transmask function to require specifying the front and back layer masks.
 - 26th June      2001: Phil Stroffolino added internal support for 4 bpp tilemaps to the tilemap system. Nicola Salmoria fixed a small bug in the new tilemap system.
 - 20th June      2001: David Graves converted the Cabal driver for tilemaps and fixed a few graphics problems.
 -  2nd April     2001: Olivier Galibert fixed a bug in the tilemap system which caused crashes under certain conditions.
 - 28th March     2001: Nicola Salmoria fixed a drawgfx.c bug that caused missing sprites in CVS games.
 - 11th March     2001: Nicola Salmoria fixed a drawgfx bug that caused missing sprites in Asterix.
 -  9th March     2001: Nicola Salmoria added 4bpp packed graphics support to the core.
 - 17th February  2001: Juergen Buchmueller managed to get the background tiles partially working in the DECO Cassette system driver, but the graphics are still not perfect.
 - 16th February  2001: David Graves added sprite/tile priority to the Darius driver.
 - 11th February  2001: Quench sent in a Toaplan2 update which fixed disappearing sprites in the Raizing games. Phil Stroffolino sent in a tilemap system update which fixes a few bugs and is faster. Olivier Galibert re-merged his alpha blending functions into Phil's new tilemap system and fixed a few bugs in drawgfx functions.
 -  1st February  2001: Phil Stroffolino sent in the first version of the new tilemap system implementation, while better inside, it still lacks optimizations.
 - 18th January   2001: David Graves added proper sprite flipping support to Top Speed, fixing the round tunnel entrance graphics.
 - 14th January   2001: David Graves added double width tilemap support to the TC0480SCP chip emulation.
 - 0.37b8             : Removed osd_clearbitmap(). The correct way to black the screen in drivers is, and has always been, fillbitmap(). osd_alloc_bitmap() no longer has to clear the bitmap (it isn't necessary since it's cleared by the drivers anyway). extern int need_to_clear_bitmap removed as well; use schedule_full_refresh() instead (clearing the bitmap is not necessary because drivers are required to redraw the whole screen when full_refresh is 1) [Nicola Salmoria].
 - 0.37b8             : Changes to the tilemap API: * tilemap_render() is obsolete. * struct tilemap is private - can't be accessed directly. * tilemap_set_transparent_pen() and tilemap_set_transmask() replace direct poking in the tilemap. * tilemap_mark_all_pixels_dirty() is obsolete (replaced by tilemap_dirty_palette() which is automatically called by palette_recalc()). * Additional parameter to tilemap_draw() to specify the priority mask to be stored in the priority buffer [Phil Stroffolino].
 - 0.37b5             : New graphic primitive copyrozbitmap(). This replaces copybitmapzoom() which was a special case. A side effect is that, thanks to the better precision, the boxer on the Punch Out hall of fame looks much better [Nicola Salmoria].
 - 0.37b3             : New modes for drawgfx(): TRANSPARENCY_NONE_RAW, TRANSPARENCY_PEN_RAW, TRANSPARENCY_PENS_RAW, TRANSPARENCY_THROUGH_RAW. The purpose of these is to allow you to work in "raw" colorspace (that is, unremapped pens) and then perform the palette lookup at the end. This is useful for a number of games that do collision detection or foreground/background blends (e.g., the palette index is ((fgpen << 4) | bgpen)). When you use these modes, the "color" parameter doesn't refer to the palette any longer. Instead, it is just a value that is added to the raw pen value of the graphics you are drawing. That way, if your background layer uses pens 0-63 and your foreground layer uses pens 64-127, you can pass in a color of 0 when drawing the background layer and 64 when drawing the foreground. Also added copybitmap_remap() and copyscrollbitmap_remap(). These take the same parameters as the originals, but don't make the assumption that TRANSPARENCY_NONE means TRANSPARENCY_NONE_RAW (which, if you think about it, is the way they work). This means that you can do all your work with raw palette indexes until the very end, and then do a copybitmap_remap(TRANSPARENCY_NONE) to copy the result and do the remap step in the end. Finally, there's a new pair of modes that are only supported in copybitmap(): TRANSPARENCY_BLEND and TRANSPARENCY_BLEND_RAW. For these modes, the source bitmap is shifted left by the "color" parameter and then ORed into the destination bitmap. This lets you compute the palette indexes (and optionally do the lookup) for games that look up the palette by combining forground and background pen indices [Aaron Giles].
 - 0.37b1             : Support for a priority buffer, updated by tilemap.c, which can be used to draw sprites using the new function pdrawgfx(). This allowed to fix many tile/sprite priority bugs e.g. in Ajax, Lightning Thunder, Simpsons, Vendetta, Punk Shot, Gradius III and others [Phil Stroffolino, Nicola Salmoria]. Change the API for tilemap_mark_tile_dirty() and the get_tile_info hooks, now a single parameter tile_index is used instead of (col,row). A function passed to tilemap_create() does the (col,row)->tile_index mapping, two standard functions are provided for the common cases. All drivers have been converted to the new API except for namcos2.c, which is therefore broken at the moment [Phil Stroffolino].
 - 0.36RC1            : Struct GfxLayout can now be parametric on the size of the memory region it refers to. This way the same gfx definition can be used for games with the same layout but different number of tiles. See drivers\m72.c, drivers\dec0.c for usage examples [Nicola Salmoria].
 - 0.36b9             : Removed src\tmapdraw.c, tmapmvis.c and tmapdrao.c. 16 bit support in the tilemap manager, so the Namco System 2 games no longer require -depth 8 [Phil Stroffolino].
 - 0.36b6             : Removed src\drawgfxl.c.
 - 0.36b3             : Took the gfx drawing functions out of common.c into the new dragfx.c. Abstracted the low level data copying and used macros to generate 8-bit and 16-bit versions. The gfxdata field of the GfxElement structure is no longer a osd_bitmap *; it is instead a simple unsigned char *, pointing to a continuous stream of pixel data. The new line_modulo and char_modulo fields are helpers to find the offset in the array [Nicola Salmoria].
 - 0.36b1             : Added src\drawgfx.c/h and drawgfxl.c. Took the gfx drawing functions out of common.c into the new dragfx.c. In preparation for further changes to the data structures, abstracted the low level data copying and used macros to generate 8-bit and 16-bit versions [Nicola Salmoria].
 - 0.35RC2            : IMPORTANT FOR PORTERS: the "safety area" allocated by osd_new_bitmap() must now be 16 pixels instead of 8. This is required by the NeoGeo driver.
 - 0.35b10            : Added src\tmapdrao.c.
 - 0.35b5             : The TileMap code is now mature enough to be used in new drivers. For examples, look into gng, gaiden, travrusa [Phil Stroffolino].
 - 0.35b3             : Added src\tilemap.c/h, tmapdraw.c and tmapmvis.c. New experimental TileMap code, used by Ninja Gaiden and Ghosts and Goblins. This makes the driver code cleaner and gives a major performance boost in the video rendering. DON'T USE IN NEW CODE UNTIL FURTHER NOTICE!! [Phil Stroffolino].
 - 0.34b7             : Removed src\gfxlayer.c/h.
 - 0.33b1             : For drivers using the GfxLayer system, dirty rectangle support is partially built-in into the core. The OS dependent rendering functions must use Machine->dirtylayer to know which portions of the screen need to be refreshed. Drivers which use the GfxLayer system no longer need the VIDEO_SUPPORTS_DIRTY flag in the MachineDriver structure - it must be turned on automatically by the OS dependent code.
 - 0.31               : Added src\gfxlayer.c/h. 16 bit color support for games which need it (e.g. Rastan, Gauntlet, Black Tiger, and many others). It is on by default, since it looks much better; of course it's also slower, so you can turn it off and revert to the previous 8 bit downgraded palette using (in the DOS version) the -depth 8 command line option [Aaron Giles]. There is some new graphics code, handling abstracted layers and optimized refresh. It is used only by a few drivers, and is still work in progress - don't use it in new code until further notice [Phil Stroffolino, Nicola Salmoria].
 - 0.30               : Vince Mayo fixed bug in drawgfx() which caused Crazy Climber's big sprites to be corrupted when horizontally flipped.
 - 0.26               : Opcode decode and graphic decode are now done by a single function in one step.
 - 0.24               : Nicola added a new mode in drawgfx: TRANSPARENCY_THROUGH. When background has a higher priority of sprites, it's a lot faster using this option than draw sprites and then apply a bitmap with TRASPARENT_COLOR.
 - 0.21.5             : Changes in COMMON.C to copyscrollbitmap(). Fixed 224x288 noscanline video mode. It's centered again now.
 - 0.19               : Added copyscrollbitmap() to COMMON.C, that simplifies programming for those games that use scroll.
 - 0.12               : Nicola Salmoria fixed bug in drawgfx() which sometimes allowed transparent non remapped copies to be drawn outside of the clip region.
 - 0.11               : Increased the maximum size of the graphic elements that can be handled by decodegfx() from 32x32 to 64x64 [Nicola Salmoria]. Actually I would have needed 256x64 to do Moon Patrol backgrounds, but that seemed slightly overkill.
 - 0.10               : New function in common.c: decodechar() [Nicola Salmoria]. It was originally part of decodegfx(), and is used to convert one single char from the machine format to the one used by the emulator. This function was needed by the Nibbler driver to dynamically convert the graphics at runtime.
 - 0.08               : Long-awaited function clearbitmap(), which correctly initializes a bitmap using background_pen. Note for people porting MAME to other systems: osd_create_bitmap() must call this function, the video drivers rely on that.
 - 0.05               : New function copybitmap() in common.c. Limited for now, will change in the future [Nicola Salmoria].
 - 0.03               : struct GfxLayout now contains a planeoffset array instead of planeincrement, to better support more than 2 bitplanes [Nicola Salmoria]. I also fixed (I hope) all the code which assumed 2 bitplanes. struct GfxDecodeInfo had to be changed as well.
 - 0.01               : Function to convert the information stored in the graphic roms into a more usable format (common.c) [Nicola Salmoria]: Back in the early '80s, arcade machines didn't have the memory or the speed to handle bitmaps like we do today. They used "character maps", instead: they had one or more sets of characters (usually 8x8 pixels), which would be placed on the screen in order to form a picture. This was very fast: updating a character mapped display is, rougly speaking, 64 times faster than updating an equivalent bitmap display, since you only modify groups of 8x8 pixels and not the single pixels. However, it was also much less versatile than a bitmap screen, since with only 256 characters you had to do all of your graphics. To overcome this limitation, some special hardware graphics were used: "sprites". A sprite is essentially a bitmap, usually larger than a character, which can be placed anywhere on the screen (not limited to character boundaries) by just telling the hardware the coordinates. Moreover, sprites can be flipped along the major axis just by setting the appropriate bit (some machines can flip characters as well). This saves precious memory, since you need only one copy of the image instead of four. What about colors? Well, the early machines had a limited palette (let's say 16-32 colors) and each character or sprite could not use all of them at the same time. Characters and sprites data would use a limited amount of bits per pixel (typically 2, which allowed them to address only four different colors). You then needed some way to tell to the hardware which, among the available colors, were the four colors. This was done using a "color attribute", which typically was an index for a lookup table. OK, after this brief and incomplete introduction, let's come to the purpose of this section: how to interpret the data which is stored in the graphic roms. Unfortunately, there is no easy answer: it depends on the hardware. The easiest way to find how data is encoded, is to start by making a bit by bit dump of the rom. You will usually be able to immediately recognize some pattern: if you are lucky, you will see letters and numbers right away, otherwise you will see something which looks like letters and numbers, but with halves switched, dilated, or something like that. You'll then have to find a way to put it all together to obtain our standard one byte per pixel representation. Two things to remember: - keep in mind that every pixel has typically two (or more) bits associated with it, and they are not necessarily near to each other. - characters might be rotated 90 degrees. That's because many games used a tube rotated 90 degrees. Think how your monitor would look like if you put it on its side. After you have successfully decoded the characters, you have to decode the sprites. This is usually more difficult, because sprites are larger, maybe have more colors, and are more difficult to recognize when they are messed up, since they are pure graphics without letters and numbers. However, with some work you'll hopefully be able to work them out as well. As a rule of thumb, the sprites should be encoded in a way not too dissimilar from the characters.



 4.2  COLOR PALETTE

 - 0.280              : Do assert() check before accessing array (util\palette.cpp) [hap].
 - 0.278              : Added xGRB format for skeleton\boramz80.cpp (emu\emupal.cpp) [Osso]. Added shadow config to savestates and might as well rename hilight to highlight (emu\dipalette.cpp) [hap].
 - 0.276              : Make 'Qiji 6 (V118CN)' show the attract demo (emu\emupal.cpp) [David Haywood].
 - 0.268              : Added decoder for xxxxxBBBxGGGxRRR format (emu\emupal.cpp) [hap].
 - 0.267              : Added helper for GGGGRRRRBBBBxxxx format (emu\emupal.cpp) [cam900].
 - 0.254              : Fixed some corner cases (video\rgbvmx.cpp) (GitHub #11051). Allow loading PNG/JPEG/MS DIB bitmaps from LUA and cleanup. Use VirtualAlloc rather than VirtualProtect on Windows to change page protection, as the latter can cause severe performance issues with some antivirus software. Added noexcept to lots of hash- and bitmap-related things and added a little more error checking [Vas Crabb].
 - 0.229              : Fixed assertion failure in some GCC builds (util\palette.cpp) [AJR].
 - 0.228              : Use std::fill instead of memset for dirty vector. Added range check (util\palette.cpp) [AJR].
 - 0.209              : Removed MCFGs macros. Simplified handlers. Added xBGRBBBBGGGGRRRR case of palette format (emu\emupal.cpp) [cam900].
 - 0.206              : Start cleaning up palette configuration: Basically, initialisers go in the constructor arguments, and things for setting format go in set_format. Initialisation patterns can be specified with an enum discriminator or with a FUNC and optionally a tag. Formats can be specified with an enum discriminator or a size and function pointer. You must always supply the number of entries when setting the format. When initislising with a paletter initialisation member, you can specify the entries and indirecte entries together. The palette_device now has a standard constructor, so use .set_entries if you are specifying entry count with no format/initialisation. Also killed an overload on delegates that wasn't being useful (emu\emupal.cpp) [Vas Crabb].
 - 0.202              : Replaced a fail-safe in util\palette.cpp with an assert. Expect regressions, so better to get it out of the way now [Ryan Holtz]. Added read functions for paletteram_ext (emu\emupal.cpp) [cam900].
 - 0.198              : Fixed faulty assertion that was breaking (MESS) nes_vt.cpp in debug builds (emu\dipalette.cpp) [AJR].
 - 0.192              : Various palette and screen improvements. Use device_resolve_objects to removed the need for resolve_palette. Palette format no longer depends on configuration of first screen (emu\dipalette.cpp, divideo.cpp and screen.cpp) [AJR].
 - 0.187              : Make the palette optional (emu\drawgfx.cpp). device_gfx_interface does two things: Go from a possibly weird rom layout to a one-byte-per-pixel tiled layout and draw the tiles so created. The second part requires a palette, but the first doesn't. And low-level emulations of individual graphic chips (konami tilemap or sprite generators for instance) are not supposed to care about the palette. They just output bits which are partly indexes into palettes, and partly not, and in any case become pen ids only much further in the rendering chain. But they need access to the decoding step, because one-byte-per-pixel is real nice. So now such a device, which inherits from device_gfx_interface, can call set_palette_disable(true) and no palette tag will be required. Calling the draw functions will segfault though. As a side effect, the gfx_element constructor now takes a palette pointer instead of a reference, since it's now optional. Fixed the case when a gfx element has no palette (ui\viewgfx.cpp) [O. Galibert].
 - 0.186              : Don't hardcode color PROM region name and added error handling (emu\emupal.cpp; drivers\aeroboto.cpp, arkanoid.cpp, chinsan.cpp, commando.cpp, exprraid.cpp, exzisus.cpp, flower.cpp, freekick.cpp, goindol.cpp, hexion.cpp, hnayayoi.cpp, holeland.cpp, ichiban.cpp, kyugo.cpp, lasso.cpp, lsasquad.cpp, m63.cpp, mexico86.cpp, mjkjidai.cpp, mjsister.cpp, ppmast93.cpp, pturn.cpp, rmhaihai.cpp, sauro.cpp, shangkid.cpp, slapfght.cpp, snk.cpp, tsamurai.cpp and vastar.cpp). Replaced some custom palette inits with the appropriate standard callback (drivers\40love.cpp, gluck2.cpp, istellar.cpp, lvcards.cpp and mustache.cpp) [Dirk Best].
 - 0.185              : 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 [AJR].
 - 0.183              : Added video\rgbutil.cpp. Added RGB unit testing [Miodrag Milanovic].
 - 0.179              : Improvements to rgb_t: Make most class methods constexpr. Make color constants (white, black, etc.) into constexpr factory methods, in order to fix a static initialization problem discussed on the MAMEWorld forums. Note that while C++14 allows constexpr member variables to be initialized outside classes, current compilers' support for C++14 constexpr rules has proven to be lamentably deficient. Created bitmap_rgb32::erase to simplify syntax in update handlers. Erased bitmap_rgb32::erase [AJR].
 - 0.177              : Show color values in palette viewer: On the UI graphics viewer's palette screen, moving the mouse over a color rectangle will show the index of the entry and its RGB values in hexadecimal. For indirect pens, the index of the corresponding color will also be shown. For colors in normal RAM-based palettes, the raw (i.e. undecoded) value stored in memory will also be shown. This does not currently work with most buffered palettes (though the Seibu SPI driver has been updated for this purpose), and is totally incompatible with PROM-based or RAMDAC-based palettes. The changes made to the core while implementing this feature may look more substantial than they really are. A whole batch of read methods have been made const, and palette_device now has a generic read_entry function that is used both internally and externally. Added missing_dependencies check to video\airraid_dev.cpp (fixes segfault in tilemap viewer). Added assert to device_gfx_interface::palette() to help catch dependency mistakes like the above (emu\digfx.h) [AJR].
 - 0.176              : Introduced validity checks for RGB utilities and fixed uncovered bugs. Added several missing functions to rgbgen. Fixed logical shift right in rgbgen. Fixed sra that should be sra_imm in rdptpipe. Added some simple SSE4.1 optimisations in rgbsse. Re-organised rgbsse, rgbvmx and rgbgen to be in more logical order. Fixed return on some modifying operators. Made some more reference parameters const. Removed inline qualifier from a number of methods as it's implied when body is present at declaration. Mark some constructors explicit. Check a bunch more RGB operations in validity. Implemented the missing ones in rgbgen. Format similar one-liners in a more tabular way. Use default copy construct/assign [Vas Crabb].
 - 0.173              : Reduced the incidence of required_device<palette_device> in subdevices. Any device implementing device_gfx_interface will require a palette and, once it has started (which many video devices already check for), allow other devices to access it through a getter. This makes it unnecessary in most cases for devices to require both a gfxdecode and a palette; indeed, many devices went on to not use the palette at all. Most cases have been solved in one of two contrasting ways: Removed the palette finder and associated macros for configuring it, or implemented device_gfx_interface and removed the gfxdecode finder. The latter solution, generally adopted for devices that decoded their own graphics internally or through their own subdevice, has doubled the number of implementations of device_gfx_interface and eliminated the need for Konami games to provide empty gfxdecodes [AJR].
 - 0.170              : Pass and return palette devices by reference, not as pointers. Added screen_device::has_palette(). Require device_gfx_interface::gfx() and palette() to access members [AJR].
 - 0.167              : Updated VMX/Altivec RGB implementation (fixes PowerPC) [Vas Crabb].
 - 0.165              : Added the rest of the 3-bit palette variants (emu\emupal.c) and added the possiblity to set individual R/G/B levels for pens. Added support for inverted data palette ram and added more formats (emu\emupal.h). Misc palette cleanups in mame\drivers\ and mame\includes\. Added support for the IIBBGGRR format, only apply intensity bit if there is a color defined (emu\emupal.c). Moved rgbi formats out of emupal.h [Dirk Best].
 - 0.164              : Moved video\rgbutil.c to rgbsse.c. Fixed Clang compile (video\rgbgen.h, rgbsse.h, rgbvmx.h and rdptpipe.c). Fixed completly wrong colours in Gauntlet Dark Legacy, Gradius 4 and NBA Play By Play (video\rgbgen.c, rgbsse.c, rgbvmx.c and vooddefs.h). Fixed remaining N64 issues on 32-bit (video\rgbgen.h). Fixed broken Namcos22 graphics (video\rgbsse.c). Fixed most N64 visual bugs from new RDP SSE code (video\rgbgen.h, rgbsse.h, rgbvmx.h) [MooglyGuy]. Sync with latest rgbsse fixes and use of signed types (video\rgbvmx.c). Make the SSE tables a static inside the SSE implementation class. Also encapsulate the pointer casting used to access it in static functions. Changed to multiply primitive (video\rgbvmx.h) [Vas Crabb]. Added andnot_reg, clamp_to_uint8 and bilinear_filter_rgbaint member functions (video\rgbgen.h). Added andnot_reg, clamp_to_uint8, bilinear_filter_rgbaint and += functions (video\rgbsse.h). Fixed some rgbaint_t functions. Added some optimizations to rgbaint_t [Ted Green]. Defined a standard 3-bit RGB palette (emu\emupal.c) and use it for mmagic, nyny and spiders. Added a 3-bit BGR variant and use it for dorachan, enigma2 and unkhorse [Dirk Best].
 - 0.163              : Added video\rgbgen.c, rgbsse.c and rgbvmx.c. Converted rgbint and rgbaint globals to a class (video\vooddefs.h, drivers\cobra.c, includes\namcos22.h, video\gaelco3d.c, midzeus.c, midzeus2.c, model3.c, namcos22.c and powervr2.c) [MooglyGuy]. Implemented most of MooglyGuy's new RGB intrinsics for VMX/Altivec. Still need to do blend, bilinear filter and merge alpha [Vas Crabb].
 - 0.158              : Palettes are now copied during get_primlist. This should fix multithreading related palette issues. Along the way also added constructors to SDL osd structs. Changed related malloc to global_alloc. Added a copyfrom routine to dynamic_array. Minor code simplifications [Couriersud].
 - 0.157              : Added Super Duck palette type to emu\emupal.c and use that [David Haywood].
 - 0.154              : Small rgb_bilinear_filter() optimization (video\rgbgen.h) [Oliver Stoeneberg]. Added support for RAM-based palettes with indirect lookups (emu\emupal.c). Update various drivers to use it. Fixed generic_paletteram regression in various Atari drivers. Support palette RAM less than the full width of the data bus it's on, without the need for per-driver trampolines (emu\emupal.c). Started removing said trampolines. This fixes generic_paletteram regressions in simpl156.c and tmnt.c. Just a couple left now. Changed another emupal.c assert to assert_always. Added some more friendly macros to help define custom palette formats (emu\emupal.h). Convert some drivers to core palette handling (arcadecl.c, badlands.c, klax.c, rampart.c, vegaeo.c, machine\atarigen.c/h) [Alex Jackson]. Removed unused helpers, leftover from conversion to new palette (emu\driver.h). Moved m_generic_paletteram_* into drivers/device state objects so they are not global anymore. Removed few not anymore used legacy macros (emu\emupal.h and screen.h) [Miodrag Milanovic]. Emupal/Tilemap refactoring: configure_tilemap_groups is now a tilemap_t method rather than a palette_device method (emu\emupal.c, tilemap.c, drivers\panicr.c, video\1943.c, bankp.c, bosco.c, clshroad.c, equites.c, exedexes.c, galaga.c, gaplus.c, gberet.c, gunsmoke.c, mappy.c, polepos.c, retofinv.c, sprcros2.c, stfight.c, tceptor.c and vulgus.c) [Alex Jackson].
 - 0.153              : Massive architectural change: There is no longer a single, global palette. Instead, palettes are now devices, and drivers and devices can have as many independent palettes as needed. This update required extensive changes to many parts of the core, UI, OSD layers, drivers and devices [Aaron Giles, Miodrag Milanovic, Alex Jackson]. Converted palette_t and palette_client to classes. General palette.c cleanup. Changed palette_t allocation so that it uses matching new/delete operators [Aaron Giles]. Palette is now device (huge update). In case there is driver init available, we update palettes after it. Placed hack in driver_init hacks (emu\driver.c, drivers\calomega.c, dec8.c, dkong.c, goldnpkr.c, kingobox.c, m58.c and trackfld.c). Fixed decoding for PALETTE_FORMAT_BBGGRRII. This fixes drivers in xxmissio, superqix and nova2001 [Miodrag Milanovic]. Fixed indirect colors to actually work, uninitialized variables and split palette RAM (emu\emupal.c). Support palette RAM formats that are byteswapped relative to CPU endianness (see flkatck.c). Fixed ambiguous and confusing use of "entry" in palette device member names related to indirection. Array m_indirect_entry is now m_indirect_pens. Getter indirect_entries() now returns the number of indirect colors, which is more useful than the number of indirect pens (the latter is always either zero or equal to the palette size, depending on whether indirection is being used at all). Fixed debug assert: rgb_t isn't POD according to GCC 4.8, so we can't use resize_and_clear. Use append() instead to dynamically expand m_indirect_colors. This change also ensures that indirect_entries() returns the actual number of indirect colors, not rounded up to the next multiple of 256. Thanks to these changes, the OSD palette viewer now displays the indirect colors correctly once again. Added MCFG_PALETTE_INDIRECT_ENTRIES to all games using indirection in seta.c. This change should fix all color regressions in that driver (emu\emupal.c). All MAME and MESS drivers using indirect colors now explicitly declare them in MACHINE_CONFIG. Declaring indirect colors in MCFG is now mandatory. Removed dynamic creation and resizing of indirection tables (emu\emupal.c, drivers\cop01.c, gberet.c, video\taito_b.c and toobin.c). Fixed the SSE2 versions of the RGB utility functions (video\rgbsse.h, rgbutil.c and rgbvmx.h), which are currently only used by 64-bit builds. This fixed all screenshots from 64-bit builds have off-by-1 color errors and incorrect alpha (green boxes around trees) in Mt. Shasta stage in California Speed [Alex Jackson]. The multi-screen Taito games now use multiple palettes (ninjaw.c and warriorb.c) [David Haywood]. Allow specifying PALETTE_INDIRECT_ENTRIES to preallocate indirection tables. When this is done, the indirection tables are saved in save states and pre-initialized. At the moment it is not a requirement to do so, but will provide closer to previous behaviors for games that need it. Enable saving dynamic_arrays of all fundamental types. Also fixed emupal to save the indirection arrays properly when indirect color count is provided up front [Aaron Giles]. Moved optional_device<screen_device> m_screen and optional_device<palette_device> m_palette out of driver. MCFG_DEVICE_REMOVE("palette") replaced with proper MCFG_PALETTE_MODIFY. Made palette settings for screen explicit and mandatory for ind16 mode [Miodrag Milanovic]. Removed some redundant in-driver palette handlers (dreamwld.c, feversoc.c, missb2.c and ultrsprt.c). Modernize/cleanup some older palette handlers (airbustr.c, astrcorp.c, bnstars.c, cischeat.c, fresh.c, fuukifg3.c, gstream.c, lemmings.c, limenko.c, powerins.c, rabbit.c, srmp5.c, sslam.c, tmmjprd.c, vamphalf.c and vegaeo.c) [David Haywood]. Virtual void palette_init() doesnt exist anymore (cswat.c) [hap]. Eliminate the need for a dummy 1:1 lookup table when drawing to ind16 bitmaps (emu\drawgfx.c). The UI graphics viewer can now display multiple palettes and multiple gfx decoders in games that have them (ui\viewgfx.c). Removed pseudo-palettes from video\generic.c. All drivers that were using them now have an actual palette. gfxdecode devices must now be assigned a palette in MCFG. Added palette devices to several MESS drivers and devices to comply with this requirement. This palette is assigned as a default to the gfx_elements created by the device (but still not used for drawing yet, except in the UI graphics viewer). Tilemaps now have a pointer to a palette device and use that palette for rgb32 drawing, rather than the palette of the screen or bitmap they are drawing to (since rgb32 screens don't have palettes now). When a tilemap is created, it takes its palette from the gfxdecode device it was created with, but you can change a tilemap's palette device with set_palette() at any time (doing this does not mark the tilemap dirty, since all tilemaps use indexed bitmaps internally). Removed palette_device parameter from gfx draw methods. All draw methods now use m_palette [Alex Jackson]. Fixed all bitmap.palette() users to use m_palette instead. Changed primary_screen -> first_screen() [Miodrag Milanovic].
 - 0.150              : More PALETTE_INIT modernizations (emu\video\315_5124.c/h, huc6260.c/h, v9938.c/h, drivers\big10.c, cave.c, csplayh5.c, ggconnie.c, kas89.c, kingdrby.c, kurukuru.c, megatech.c, meritm.c, sangho.c, segae.c, sfkick.c, sothello.c, tonton.c, tourtabl.c and video\tia.c/h). Removed unused legacy macro PALETTE_INIT_CALL (drivlgcy.h) [Oliver Stoeneberg].
 - 0.149u1            : Modernized generic palette initializations [Oliver Stoeneberg]. Fixed palette viewer clamp (emu\uigfx.c) [hap].
 - 0.145u8            : Implemented new paletteram_xGGGGGRRRRRBBBBB_byte_le_w() function, used by Chance 32 [Angelo Salese].
 - 0.145u7            : Templatized the palette generators and made naming consistent. Removed color_prom parameter from PALETTE_INIT. Added code where necessary to fetch the color_prom directly. Made PALETTE_INIT into just another basic callback with an overridable palette_init() in the driver_device, and support for arbitrary member functions via MCFG_PALETTE_INIT_OVERRIDE [Aaron Giles].
 - 0.145u6            : Aaron Giles moved all drivers to using the paletteram helpers defined in the driver_device base class. The palette base is now specified via an AM_SHARE of "paletteram" or "paletteram2". The driver_device base class now finds these pointers and places them in m_generic_paletteram_8/_16/_32 and m_generic_paletteram2_8/_16/_32. Removed machine.generic.paletteram*, and machine.generic entirely. Removed AM_BASE_GENERIC/AM_SIZE_GENERIC as they don't apply anymore. Changed required_/optional_shared_ptr to support set_target with base and size for manually configuring a shared pointer, and a new allocate method for dynamically allocating (and registering the memory for save states). A few subsequent cleanups are coming related to this, but wanted to get this in before the next modern push.
 - 0.135u4            : Atari Ace eliminated the use of generic.colorram and generic.videoram in several drivers.
 - 0.134u2            : Mamesick centralized color definitions and made some colors more specific.
 - 0.133u3            : Aaron Giles added rgb[a]int_sh[l|r] operations to the rgbutils. rgbvmx needs to be updated (nobody is using them yet).
 - 0.130u3            : Added video\rgbutil.c. Put tables used for RGB utilities in a single object file rather than compiling them as statics in every object that uses them [Vas Crabb].
 - 0.127u6            : Aaron Giles changed MAKE_RGB macro to set the alpha to 255 instead of 0. Updated palette.c to preserve the alpha when transforming palette values. These changes should be transparent to almost all drivers and rendering (ha-ha), but there may be an occasional instance where a driver relied on the alpha being 0 in the system palette. This also means that the palette_set_color() function preserves any alpha value that is set. Aaron Giles removed render_container_set_palette_alpha() hack. Now the alpha value can be set directly in the palette entry and will be respected for laserdisc overlays. Aaron Giles changed palette objects to support global brightness/contrast/gamma in addition to per-group and per-entry controls.
 - 0.124u1            : Minor cleanup and simplification in the video and palette code. Removed palette_config() [Aaron Giles].
 - 0.123u3            : Zsolt Vasvari removed unnecessary machine->pens[] lookups in a large number of drivers.
 - 0.123u2            : Zsolt Vasvari completed old-style colortable removal. Removed MDRV_COLORTABLE_LENGTH macro. Updated uigfx to display new-style color tables if present. Added colortable_palette_get_size() to emupal. Added some more asserts to catch errors. Pulled remaining vestiges of old-style colortables [Aaron Giles]: PALETTE_INIT no longer has a colortable parameter. Removed game_colortable and remapped_colortable from machine_config. Updated a few stragglers that still referenced these fields. Removed tile_draw_colortable from tilemap.c. Aaron Giles removed the per-screen palette_base. This was an idea that never really worked out, nor have we really needed it.
 - 0.123u1            : Zsolt Vasvari changed the use of machine->remapped_colortable to machine->pens where the drivers weren't using color tables. Removed no longer used TRANSPARENCY_COLOR.
 - 0.122u7            : Zsolt Vasvari removed all palette_X_r functions in favor of direct RAM reads.
 - 0.121u1            : Aaron Giles renamed colortable to colortable_t. Added a Machine->colortable entry to hold the global colortable for games that use it. Updated several more drivers to just use palettes directly rather than hacking colortables.
 - 0.120u2            : Added video\rgbutil.h, rgbsse.h and rgbgen.h. Aaron Giles created new rgbutil module which consists of inline functions for common RGB manipulation. This module can be accelerated with SSE2 or other SIMD operations. By default, only 64-bit Intel builds make use of SSE, since it can be assumed on those platforms. Reimplemented the namcos22 rasterizer in terms of these inline functions. Also updated the gaelco3d rasterizer to use this module for faster bilinear filtering.
 - 0.118u5            : Changed emu\palette.c/h to emu\emupal.c/h and lib\util\palette.c/h. Aaron Giles added new core library utility module palette.c for managing palettes. Renamed emulator-specific palette code to emupal.c and restructured to live on top of the core library code. Aaron Giles added support for attaching palettes to bitmaps in the core. Removed support for the 16-pixel bitmap "safety" zone by default, since most drivers do not need it. Added new function bitmap_alloc_slop() which supports creating bitmaps with caller-specified slop values. Aaron Giles removed the gfx_element.colortable element and replaced it with a new element color_base which specifies the global color offset. This breaks an awkward dependency between the palette and graphics code, and removes a lot of odd pointer arithmetic in the system. Aaron Giles tagged Machine->pens, Machine->colortable, and Machine->remapped_colortable as const to prevent their abuse. Fixed several abusing drivers, and tagged the remainder for future cleanup. Aaron Giles added new colortable management functions in emupal.c. These functions can be used to manage a colortable on top of the core palette in cases where TRANSPARENCY_COLOR is currently used (essentially mapping to a pen mask for TRANSPARENCY_PENS). Updated pacman, mappy, toypop and several other drivers to use the new functions.
 - 0.116              : Aaron Giles renamed palette_set_color() to palette_set_color_rgb(). palette_set_color() now matches palette_get_color() and deals in rgb_t data only. Also changed palette_set_colors() to deal with rgb_t data instead of R,G,B triples.
 - 0.115u4            : Aaron Giles removed colortables from a number of drivers that didn't need them. Also converted pacman and mappy drivers to collapse the colortable and palette.
 -  5th June      2007: Aaron Giles - Slaying the Beast: It is a thing of legend, known for years, and yet never confronted. It has grown out of control ever since the earliest days of 1997. It has branched and forked, taking over dozens of source files. Years have passed and many features have been added to ease its burdens. And yet, this code remained largely as it was since its inception. Occasional brave adventurers have stepped in from time to time, seeking to add yet another game to its hideous bloat. But they all quickly recognized the horror and fultilty, frantically ignoring similarities to other games, instead just focusing on getting in and getting out as quickly as possible. And so the behemoth grew. But something stirred within me. I noticed many games using colortables needlessly. And that included every single game intertwined with this terrible monster. The thought occurred to me to fix up the video timing as well. Just a simple change, really. And then I saw stars. And they looked like of like the stars of Astrocade, except done badly. Consulting the schematics revealed fundamental flaws in the driver's video design. The potential impact was too great! What should I do? Turn away yet again? Leave it for a distant future, or another soul braver than I? No. Not this time. Schematics in hand, years of history against me, I stand now to face this beast. And I will make it clean. Yes, the foul galaxianscramblefroggeramidarscobra beast will be tamed. Or I will die trying. Wish me luck.
 - 0.108u4            : Altered most of the mame.c and palette.c interfaces to take a running_machine parameter. Hung private data for these modules off of the running_machine structure instead of using global variables. Did some cleanup and de-Achoization of the palette code. Since I had to visit all call sites of palette_set_color to add the running_machine parameter, I also updated quite a lot of them to use the nice palnbit() inlines in palette.h, which cleaned up the code in many cases. Since this was a manual process, I probably messed up one or two cases, so if you notice odd colors, please report them to the http://mametesters.org site [Aaron Giles].
 - 0.107              : Aaron Giles fixed scrolling in the palette view.
 - 0.106u11           : Aaron Giles added generic pen changing notification callbacks to the palette system.
 - 0.106u8            : Aaron Giles fixed palette for games which were using palette_set_brightness.
 - 0.91               : Nicola Salmoria fixed a problem in palette_get_color() causing an incorrect value to be returned in some specific cases (pointed out by Angelo Salese).
 -  4th August    2003: Acho A. Tang submitted an improvement to the highlight calculation in the palette functions.
 - 17th November  2002: Olivier Galibert fixed the palette regeneration when reloading a saved state.
 - 0.59               : New function tilemap_set_palette_offset() to set a global palette offset without having to use tilemap_mark_all_tiles_dirty() [Aaron Giles].
 - 30th April     2002: Aaron Giles replaced the palette array in palette initialization functions with a function that changes the colors.
 - 21st January   2002: Jarek Burczynski fixed a long-standing (almost five years) color PROM decoding bug, which resulted in a slightly too low blue component of the color in about 60 drivers.
 - 0.55               : New data type pen_t, use it instead of UINT32 when dealing with pens and colortables.
 - 0.54               : New core function palette_get_pen() replaces the removed osd_get_pen(). Renamed palette_change_color() to palette_set_color().
 - 0.53               : Big changes to the palette system. 8-bit modes are no longer supported, only 16-bit ones are used. 8-bit support may be removed from the OS dependant code; the core will never ask for an 8-bit deep screen. 8-bit bitmaps could still be used though. Palette compression has been removed. palette_recalc(), palette_transparent_pen and palette_used_colors[] are not available anymore. Drivers that relied on PALETTE_COLOR_TRANSPARENT for transparency effects must be rewritten to implement them differently. As a result of this, all games using the Taito TC0480SCP video chip, and all Taito F3 games, are broken in this release. Removed VIDEO_MODIFIES_PALETTE and the "modifiable" parameter from osd_allocate_colors(). New flags VIDEO_HAS_SHADOWS and VIDEO_HAS_HIGHLIGHTS that automatically extend the palette creating a darker(brighter copy for shadows handling. palette_set_shadow_factor() and palette_set_highlight_factor() allow to control the adjustment to apply (shadow can be > 1.0, making it an highlight, and highlight can be < 1.0 making it a shadow - the names are just conventional) [Nicola Salmoria]. New function palette_set_brightness(), allowing selective control of palette brightness independently of the palette RAM contents [Nicola Salmoria]. MachineDriver.color_table_len can now be 0, meaning that the colortable is a 1:1 mapping from the palette. Note that you CANNOT use this feature if you use TRANSPARENCY_COLOR; but of course, if you need TRANSPARENCY_COLOR you'll not have a 1:1 colortable.
 - 13th July      2001: Nicola Salmoria completely removed 8bpp modes and updated a lot of files.
 -  4th July      2001: Olivier Galibert simplified color mapping in 16bpp modes to make it easier to add shadow handling.
 - 16th June      2001: Shiriru fixed sprite priority and added sprite transparency in the CPS-2 games.
 -  7th May       2001: Bryan McPhail added pixel layer color emulation to the Taito F3 driver, fixing a few color problems.
 - 25th April     2001: Aaron fixed the palette problems in Cyberball.
 - 22nd April     2001: Zsolt Vasvari fixed the colors in Dark Planet.
 - 14th March     2001: Nicola Salmoria fixed the color palette in Luca's SunA 8-bit driver.
 - 13th March     2001: Bryan McPhail added correct color palette emulation to Hard Head.
 - 16th February  2001: Olivier Galibert fixed a bug in palette.c which affected the alpha blending games.
 - 0.37b8             : Removed palette_transparent_color which is no longer needed by any driver [Nicola Salmoria].
 - 0.37b5             : New video flag VIDEO_NEEDS_6BITS_PER_GUN to indicate to the OS dependant layer that a 16-bit display is not enough to reproduce the whole game's palette and a 24-bit display is preferred.
 - 0.36b9             : Calling palette_recalc() is now *MANDATORY* in all drivers that modify the palette. The palette will not be updated otherwise. Important: Due to changes in the palette system, there might be games that had correct colors before, and wrong now. Please let us know if you find any.
 - 0.35RC1            : Added a palette viewer to the gfx viewer (F4) [Nicola Salmoria].
 - 0.35b5             : Added the ability to show the total number of colors on screen. This is useful during development to know if a game can be shrinked to 256 colors or it requires a 16-bit display. Press CTRL+F11 to toggle the display. This is only available in debug builds [Nicola Salmoria].
 - 0.35b4             : Improved palette compression with color fades [Nicola Salmoria].
 - 0.33b7             : For convenience, added some commonly used palette read/write functions to palette.c [Nicola Salmoria].
 - 0.33b6             : To help drivers in better optimizing video refreshes, palette_recalc() now returns a pointer to an array indicating which colors have been remapped and need a refresh. If you don't need it, you can still consider it a boolean value (0 = no need to redraw) [Nicola Salmoria]. Drivers using the VIDEO_SUPPORTS_16BIT mode can use the same API as VIDEO_MODIFIES_PALETTE ones (palette_change_color(), palette_recalc()). The old setgfxcolorentry() method is still supported but discontinued, and will be removed when all the existing drivers are converted to the new system. To use the new API, you must set BOTH the VIDEO_SUPPORTS_16BIT and the VIDEO_MODIFIES_PALETTE flags. Removing the _16BIT flag is all it takes to switch from 16-bit to dynamic mode, so you can quickly test if the palette can be compressed (_16BIT is much slower, so don't use it unless absolutely necessary) [Nicola Salmoria].
 - 0.33b5             : IMPORTANT: drawgfx(...,TRANSPARENCY_THROUGH) now requires the caller to do the mapping with Machine->pens[]. This was necessary to allow for TRANSPARENCY_THROUGH, palette_transparent_color in dynamic palette games.
 - 0.33b4             : Dynamic palette support for games with >256 colors, not complete yet but good for many cases. Drivers who want to use it must first of all set up like the static palette ones (put the real number of colors in MachineDriver->total_colors, etc.), and call palette_recalc() in vh_screenrefresh() before drawing anything. A color usage table must be passed to palette_recalc() so that the function knows which colors are needed. Drivers which use the new system, and therefore no longer run in 16-bit video modes: Black Tiger, City Connection, Gun Dealer and Ninja Gai Den [Nicola Salmoria]. Color PROMs no longer have to be included in the source. They can be loaded from disk just like the other ROMs. You just have to replace the color_prom pointer with the PROM_MEMORY_REGION() macro, to tell the core where the PROMs have been loaded. Example driver: Karnov/Chelnov [Nicola Salmoria].
 - 0.33b3             : All drivers with a handcrafted palette got broken in beta 2. They are now fixed.
 - 0.33b2             : Added palette.c/h. Further changes to the palette handling code: - osd_create_display() no longer takes the total_colors, palette, pens arguments. They are handled by osd_allocate_colors(), which is called after osd_create_display(). - The convert_color_prom() functions now take a unsigned short *colortable parameter instead of unsigned char *. - Drivers for games which have a FIXED palette (i.e. they don't call osd_modify_pen()) of more than 256 colors are now allowed to declare it as such in the MachineDriver. The palette will be automatically shrinked to fit in 256 colors. Note: this assumes that the palette is actually composed of no more than 256 unique colors. This is currently the case in all the games. Examples: Kung Fu Master, Lode Runner, Arkanoid and Popeye. - Instead of calling osd_modify_pen(Machine->pens[color],r,g,b), drivers should call palette_change_color(color,r,g,b). Note that the function does the Machine->pens[] mapping for you.
 - 0.33b1             : Drivers which dynamically change the palette are no longer required to initialize it in convert_color_prom(); they also can avoid initializing the color table, if the default layout for it (a 1:1 mapping) fits their needs. This is also useful when starting new drivers: you don't need to provide a fake palette or prom conversion function, the graphics will be visible somehow (but badly, so you had better change the defaults soon). Also, games using PROMs don't need to initialize the colortable if the GfxDecodeInfo structure is properly initialized to make the correspondence 1:1.
 - 0.29               : Removed osd_obtain_pen(), the palette is passed to osd_create_display() instead. Also moved clearbitmap() to osd_clearbitmap(), which does a slightly different thing from what clearbitmap() did: it sets the bitmap to be generically "black", which doesn't necessarily imply filling it with Machine->pens[0]. Avoid using osd_clearbitmmap() in drivers: use the new fillbitmap(), instead, which accepts a pen number and a clip region [Nicola Salmoria].
 - 0.28               : New osd_modify_pen() function, proposed by Aaron Giles. It allows drivers to dynamically modify the palette. WARNING: Since this feature can severely reduce performance on some systems, it must only be used when necessary - that is, when the emulated game dynamically modifies the palette. The other games should continue to use the static palette as before. Many games already use this feature (e.g. Crystal Castles, the Gottlieb games, Tapper, Bubble Bobble, and many others). There's also osd_get_pen(), which is used by usrintf.c to dynamically pick the pens used to render menus.



 4.3  SCANLINES/BLITTERS

 - 0.122u8            : Aaron Giles added new option VIDEO_UPDATE_SCANLINE, which cases VIDEO_UPDATE to be called for every visible scanline. Removed manual implementation of this in timeplt, in favor of using the new flag. There are probably many more drivers that can leverage this.
 - 0.75               : Aaron Giles changed scanline timing to use floor() to get consistent results and fixed bug in time computation if requesting a scanline in the next frame.
 - 24th October   2001: Aaron Giles fixed a bug in scanline rendering which affected Turbo, and he fixed Hard Drivin' from crashing randomly.
 - 24th June      2001: Aaron Giles added RGB blitter effects to the Win32 version from AdvanceMAME.
 - 22nd June      2001: Aaron Giles added several MMX blitters and optimized the old ones too.
 - 20th June      2001: Aaron Giles optimized the new blitters a little.
 - 19th June      2001: Aaron Giles added 25%, 50%, 75% scanlines thanks to the blitter effects support.
 - 18th February  2001: Bernd Wiebelt fixed the 32-bit MMX blitting routines.



 5.   VECTOR

 - 0.235              : Support XY flip (video\avgdvg.cpp) for 'Major Havoc - The Promised End' (HBMAME) cocktail mode [Jess Askey].
 - 0.233              : Don't interfere with the slapstic on 'The Empire Strikes Back' (video\avgdvg.cpp) [O. Galibert].
 - 0.230              : Fixed wrong variable (video\avgdvg.cpp) detected by Coverity Static Analysis (software) [Robbbert].
 - 0.227              : Modernised code (video\avgdvg.cpp and emu\save.cpp). This fixes many vector games do not return stably from save state. Fixed bwidow.cpp games, tidied up code some more [Vas Crabb]. Fixed a bug (pre-dating the recent conversion to bitswap) in the sparkle LFSR preset load value (video\avgdvg.cpp), and added a comment explaining what the source is for bits 4, 5 and 6 of the preset load value [Lord Nightmare].
 - 0.224              : Documentation update for vector options (docs\source\commandline\commandline-all.rst) [Aaron Giles].
 - 0.223              : Added new option beam_dot_size that controls the rendered size of 'dots' in vector games [Aaron Giles].
 - 0.210              : Atari AVG/DVG: Removed hardcoded tags and runtime tag lookups. Simplified handlers. Reduced unnecessary lines. Fixed spacings, some code styles and namings. Use shorter/correct type values (video\avgdvg.cpp) [cam900].
 - 0.174              : Moved clipping to video\avgdvg.cpp, the only user. Simplify video\vector.cpp and avgdvg.cpp [O. Galibert]. Fixed default clip size which fixes vector output regression [Sarayan].
 - 0.173              : Changed emu\video\vector.cpp/h to devices\video\vector.cpp.
 - 0.172              : Improved junction points of vector lines and fixed size of vector points. Fixed direction of vector extension [ImJezze].
 - 0.168              : Fixed obvious error (xratio to yratio) (video\vector.cpp) [Miodrag Milanovic]. Fixed dynamic beam width for invariabel vector intensity. The vector renderer now tries to detect a invariabel vector intensity and disables the calculation of a dynamic beam width [ImJezze]. The AVG/DVG vector device now inherits device_execute_interface, and is executed and scheduled by the default machine scheduler [Andrew Gardner].
 - 0.167              : Vector rendering fixes and improvements [ImJezze].
 - 0.153              : Added 'Atari DVG' device. AVGDVG is now device [Miodrag Milanovic]. Fixed vector rendering (emu\rendersw.c) [Aaron Giles]. Derive (fake) refresh rate from CPU IRQ frequency in various Atari vector games to reduce juddering [Alex Jackson].
 - 0.152              : Renamed vector to vector_device due to a name conflict with game named vector (video\vector.c) [Miodrag Milanovic]. Batch vectors at the right time in queue (windows\drawd3d.c). This fixed graphics remains imprinted even when exit the game in all vector games (MT05207 reopened) and vector games with color overlay show in B&W on Windows D3D render when HLSL is disabled (MT05214 reopened) [hap].
 - 0.151              : Fixed vector games black screen with HLSL [hap]. Device-ified vector.c [Osso].
 - 0.150              : MooglyGuy fixed all vector games, graphics remains imprinted even when exit the game.
 - 0.148u5            : Enabled vector bloom and associated .ini controls. Added raster bloom and associated .ini controls, each bloom "level" is the linear weight of successively half-sized render targets. Removed D3D8 mode. Mass renaming in D3D renderer to use namespaces, initial planning step to HAL-based renderer implementation on Windows (i.e., GL on Windows). Converted d3d_info, d3d_poly_info, and d3d_texture_info into classes. Added batching of vectors for possible speed increase. Minor cleanup of shader state setting [MooglyGuy].
 - 0.145u8            : Aaron Giles fixed vector rendering when using software rasterizer.
 - 0.139              : Atari Ace fixed -burnin option causes crash in vector games.
 - 0.126u5            : Fabio Priuli converted most of the games checking avgdvg_done() in inputs to use a CUSTOM_INPUT (defined in video\avgdvg.c).
 - 0.123u6            : Fixed debug assertion in most vector-based drivers.
 - 0.123u3            : Couriersud removed MDRV_PALETTE_LENGTH from vector games, which would trigger an assert in emupal.c (debug build).
 - 0.115u1            : Move Atari vector PROMs into separate regions [Mathis Rosenhauer].
 - 0.113u3            : "Fixed" analog controls in some vector games by adding back a faux VBLANK timing [Derrick Renaud].
 - 0.107u3            : Aaron Giles added beam width control to the UI sliders. Fixed remaining crashes in GDI/ddraw mode when drawing vector games.
 - 0.107u1            : Aaron Giles fixed vector game crashes with DirectDraw rendering.
 - 0.107              : Aaron Giles fixed default flicker value to 0.
 - 0.106u13           : Aaron Giles removed the background brightness in vector games by default. If you want to see the overlays faintly on vector games, increase the brightness a bit.
 - 0.106u12           : Aaron Giles fixed bug that prevented the contrast from pushing vector games to their maximum brightness.
 - 0.106u11           : Aaron Giles removed vector intensity controls as they are redundant with the new contrast controls.
 -  2nd March     2004: Alex Eddy fixed a vector clipping bug in the core vector functions.
 -  5th December  2003: Brad Oliver sent in a small change to align bitmap lines to 16-byte boundaries for vector optimizations.
 - 0.71u3             : Vector cleanups / improvements [Frank Palazzolo]: Removed VEC_SHIFT and "magic numbers" stuff from all drivers, vector.c: All fixed point stuff is now always 16.16. Removed "bad trench vectors hack" from Star Wars which I created in 1997. Appears not to be necessary any more. Moved flipping and swapping API stuff from vector.c to avgdvg.c, this is specific to tempest and quantum only. Added clipping to Sega games per the schematics. Using floating point in vector.c to do scaling. Removed dead code using Machine->orientation from vector.c. Added capability to register an external vector renderer. Fixed some problems with vector patch [Frank Palazzolo].
 - 24th July      2003: Frank Palazzolo sent in yet another fix for the positioning in some vector games.
 - 23rd July      2003: Frank Palazzolo fixed some positioning and clipping bugs that occurred in some vector games after the cleanups and fixes.
 - 20th July      2003: Frank Palazzolo cleaned up the vector graphics emulation and added capability to use an external vector renderer (for example a real vector monitor).
 - 15th February  2003: smf fixed a resolution selecting problem when rotating vector games with hardware stretch.
 - 21st January   2003: Bryan McPhail fixed an infinite loop in the Atari vector generators.
 -  2nd August    2002: Ken Reneris added phosphorescent persistence emulation to the vector graphics drawing code, possibly improving the look & feel of vector games.
 -  1st June      2002: Bernd Wiebelt added configurable vector intensity.
 - 29th May       2002: Aaron Giles fixed a bug in resizing the screen with vector games.
 - 30th January   2002: Aaron Giles added better vector sparkle effect emulation as used in Major Havoc and Tempest. Zsolt Vasvari made the artwork functions a bit faster, added the blue overlay for Phantom II and re-added the yellow overlay for Gunfight and the backdrop for Boot Hill.
 - 0.56               : Mathis Rosenhauer fixed the bug which caused vector games to save incorrect screenshots.
 - 0.55               : Mathis Rosenhauer changed vector games to use direct RGB modes.
 -  4th September 2001: Mathis Rosenhauer converted all vector games to use the direct RGB modes.
 -  3rd September 2001: Mathis Rosenhauer added support for direct RGB modes in the vector graphics functions.
 - 28th June      2001: Olivier Galibert fixed the vector games' resolution override setting.
 -  7th April     2001: Bernd Wiebelt fixed some problems in the screen flip / rotate support in the vector routines.
 -  5th April     2001: Nicola Salmoria added screen flip / rotate support to the vector routines, but the changes are not yet complete.
 - 18th March     2001: MASH submitted an adjustable vector flicker added to the on screen display.
 -  1st February  2001: Mathis Rosenhauer fixed a crash that occurred when vector games were rotated.
 - 0.37b4             : Removed msdos\vector.c.
 - 0.36b16            : Added vector intensity control to the On Screen Display (for vector games) [Mathis Rosenhauer].
 - 0.36b13            : 16-bit support in the vector games [Mathis Rosenhauer].
 - 0.34b2             : Vector translucency can be turned off with -notranslucency [Valerio Verrando].
 - 0.33b7             : Inspired by Retrocade and Vector Dream, changed the vector games to use translucent vectors. Color intensities had to be lowered, if it feels to dark for you now, increase the gamma correction value [Bernd Wiebelt].
 - 0.33b4             : Some fiddling with the Atari vector games frame rates [Nicola Salmoria].
 - 0.33b2             : Bernd Wiebelt adjusted timing in the vector games.
 - 0.31               : Added vidhrdw\vector.c/h. Improved handling of vector games. Battlezone and Major Havoc now do correct clipping [Aaron Giles, Bernd Wiebelt]. New antialiasing code for the vector games. A bit slower than before, but it looks terrific. You can turn it off with -noantialias. Also two new options: -beam # (# in the range of 1.00 through 16.00 and # is float) and -flicker % (% is optional and % is float, no number sets default flicker valid range is 0.00 to 100.00 (0=none 100=maximum)). -beam sets the width in pixels of the vectors, while -flicker makes them flicker to simulate the behaviour of a real monitor [Andrew Caldwell].
 - 0.30               : Framerates in the Atari vector games should now be correct [Neil Bradley].
 - 0.29               : Added vidhrdw\avgdvg.c/h. "-vg" removed. It is on by default now [Bernd Wiebelt].
 - 0.27               : Lot of work on the Atari Vector games (Brad Oliver & Bernd Wiebelt): Quite a few bugs hunted down. Thanks to Aaron Giles, the Atari vector games do correct scaling now and we can do cycle counting on the vector CPU. Aaron also fixed the scaling in the Sega vektor games. Tempest does no longer crash after level 13, has better colors (colorram emulation) and is overall a bit faster. Highscore saving for all games except Black Widow and Starwars. Trackball support for Tempest and Red Baron. Red Baron tries to calibrate its analog joystick at the start, so you'll have to move the "joystick" a bit before you can fly in all four directions. Thanks to baloo@kaiwan.com for his suggestions. Mauro Minenna made Battlezone playable with one joystick. Changes to game resolutions. On MSDOS, they now use tweaked VGA modes. REMEMBER TO DELETE EVERY *.CFG AND .HI FILE FOR VECTOR GAMES, OTHERWISE THE GAMES MIGHT NOT WORK CORRECTLY. Bernd Wiebelt implemented a new option for vector games: "-vg". This adapts the Vector games to a given screen resolution (default 800x600).
 - 0.26a              : Some credits that were left out last time: Thanks to Al Kossow, Hedley Rainnie and Eric Smith for the code to their vecsim emulator which had emulated these games previously on the unix and the mac, and thanks to Neil Bradley for pointing out the critical bug in the vector generator engine which prevented Tempest from working.
 - 0.26               : Thanks to the outstanding combined efforts of Brad Oliver, Bernd Wiebelt and Allard van der Bas, MAME entered in vectorial emulation world! All in a time, we have support for Asteroids, Asteroids Deluxe, Black Widow, Battlezone, Gravitar, Lunar Lander, Red Baron, Spaceduel and Tempest. Thanks to Al Kossow, Hedley Rainnie and Eric Smith for the code to their VECSIM emulator which had emulated these games previously on the UNIX and MAC.



 6.   MEMORY SYSTEM

 - 0.285              : Better support for external MMUs (emu\dimemory.cpp, emu\machine.cpp, debug\debugbuf.cpp, debug\debugcmd.cpp, debug\debugcon.cpp, debug\debugcpu.cpp, debug\dvdisasm.cpp, debug\dvmemory.cpp, debugger\osx\disassemblyview.mm, debugger\osx\disassemblyviewer.mm, debugger\osx\memoryview.mm, debugger\osx\memoryviewer.mm, debugger\qt\memorywindow.cpp, debugger\win\memoryviewinfo.cpp amd m68000\m68000.cpp) [O. Galibert].
 - 0.284              : Allocate memory region storage with suitable alignment for any type, added length accessor to and removed machine from memory region (emu\emumem.cpp) [Vas Crabb].
 - 0.282              : Fixed debugger's memdump command. Changed memdump to properly report overlapping views (emu\emumem.cpp, emu\emumem_hedr.ipp, emu\emumem_hedw.ipp) [Tim Lindner].
 - 0.281              : Optimize a specific but useful case (emu\emumem.cpp). Added forgotten range checks (emu\emumem_mview.cpp). Avoid splitting handlers on dup-ing, avoiding tons of extra allocations (emu\emumem_hedr.ipp and emumem_hedw.ipp). Fixes MAME crashes with "Caught unhandled St9bad_alloc exception: std::bad_alloc" message in all quizdna.cpp sets. Short-term fix to some crashes, need more thinking though (emu\emumem_mud.cpp) [O. Galibert]. Count references correctly for de-duplicated handlers (emu\emumem_hedr.ipp and emumem_hedw.ipp). Restrict 'check_optimize_all' to very short ranges (fixes crash in cave/cv1k.cpp games) and optimized the optimization further (emu\emumem.cpp). Work around regression in gaelco3d.cpp games by disabling optimization when address select is enabled (emu\emumem.cpp). Prevent subunit offsets from being masked out in handlers (emu\emumem_mud.cpp). Fixes sound in Super Kaneko Nova System [AJR]. 
 - 0.278              : Correct shifting direction on masks when importing a map with active umask (emu\addrmap.cpp) [O. Galibert].
 - 0.277              : Optimized cache line detection. Use EXPECTED macro instead (emu\emumem.h) [holub]. Fixed some range computation issues with some weird views (emu\emumem_hedr.h, emumem_hedr.ipp, emumem_hedw.* and emumem_mview.cpp) [O. Galibert].
 - 0.275              : Got rid of static accessors structure and added a helper for obtaining info for dispatching specific accessors (emu\emumem.h and emu\emumem_aspace.cpp). Moved some member function pointer manipulation stuff into the library. Gives another slight reduction in the size of libemu (emu\emumem_aspace.cpp) [Vas Crabb].
 - 0.271              : Allow ioport finders in portr/w/rw. Converted a number of drivers to use ioport finders in the memory map. This is not entirely gratuitous. The idea is to ensure all the ports are in the class, so that eventually ioport finders become ioport creators. The ultimate aim is to C++-ify port descriptions which would be made way nicer by getting rid of the need for PORT_START (emu\addrmap.h) [O. Galibert].
 - 0.270              : Added support for passing mem_mask parameter on 8-bit handlers (emu\emumem.h and emumem_aspace.cpp) [hap].
 - 0.269              : Fixed possible nullptr crash. Added exists() getter (emu\emumem.h and emu\emumem_mview.cpp) [hap].
 - 0.263              : Fixed little Endian byte read/write to 64-bit areas. Apparent copy/paste error was causing big Endian semantics to be used (emu\memarray.cpp) [amameuser].
 - 0.261              : Added some parentheses on ternary conditional operators for clarity. Added a raw read function for memory regions (mame\luaengine_mem.cpp) [Vas Crabb].
 - 0.254              : Encourage use of read/write delegate creator helpers (Demo on (MESS) Game Boy cartridges). This makes it simpler to install read-write handlers, as you don't need to think about the "smo" suffixes (emu\emumem*). Allow emu::rw_delegate to work with device finders (emu\emumem.h) [Vas Crabb].
 - 0.253              : Added emu\emumem_hws.cpp/h. First try at wait states (emu\emumem*). Fixed delegates on delay methods (emu\emumem.cpp). Implemented the passthrough handler priority ordering, fixes a number of 68000 interrupt problems (emu\emumem.cpp). Added the target address space to translate and wrap the constants (emu\dimemory.cpp). Added the forgotten key, allows to distinguish ram zones at the same address in different views, including recursively (emu\emumem_mview.cpp) [O. Galibert].
 - 0.251              : Fixed MAME 0.250 (Fixed range tracking when creating a subdispatch) broken memdump (emu\emumem_hedr.ipp and emumem_hedw.ipp) [O. Galibert].
 - 0.250              : Fixed range tracking when creating a subdispatch (emu\emumem_hedr.ipp and emumem_hedw.ipp). Don't forget to select the correct page when installing handlers, especially dynamically (emu\emumem_mview.cpp) [O. Galibert].
 - 0.248              : Added the bank tag to a fatal error message where it was missing (emu\emumem.cpp) [Vas Crabb].
 - 0.247              : Added accessors lookup_{read,write]_*_flags to lookup flags without actually doing the access (emu\emumem*.*). Removed the flags interface from address_space (still available through specific and cache), may make ld less cranky (emu\emumem.h and emumem_aspace.cpp) [O. Galibert].
 - 0.246              : Fixed issues with memory views and snapshot naming. Include device tag in memory view save item registration names. Without this, instantiating two of the same device (or two devices with identically named memory views) causes a fatal error on start (emu\emumem_mview.cpp) [Vas Crabb].
 - 0.243              : Reduced make_unique_clear to a single variant for POD arrays (util\corealloc.h) [Vas Crabb].
 - 0.241              : Added util\notifier.h. Removed unused initialization method taking address_space parameter (emu\memarray.cpp) [AJR]. Exposed memory pass-through handlers (address space taps) to LUA (mame\luaengine_mem.cpp and debug\points.cpp). Addressed some LUA scripting pitfalls: Addressed pure virtual function call crash on end of emulation session if you haven't explicitly removed all address space taps, memory corruption on end of emulation session if you haven't explicitly removed all address space change notifiers, and symbol being garbage-collected out from under you while you have parsed expressions or other symbol tables that depend on them. Removed the copy constructor for parsed expressions as the underlying C++ copy constructor appears to be broken, and simplified symbol table constructors. Also made symbol table add methods return the new entry to avoid the need for an extra lookup. Fixed breakpoint/watchpoint objects being inappropriately copied into the tables returned by bplist() and wplist(), allowing the enabled property to be modifiable for breakpoint and watchpoint objects in LUA. Fixed drivers and devices causing a new memory pass-through handler to be allocated on each soft reset, and fixed multiple instances of taps being installed in the event the machine is reset before the tap is removed. Added classes for managing broadcast subscriptions, and adapted address spaces to use this for change notifications. Hold onto memory cache handler change subscriptions (emu\emumem.h) [Vas Crabb].
 - 0.239              : Unref the root dispatch when destroying the address space (emu\emumem_aspace.cpp). Fixes memory leak after MAME hard reset. Allows handlers to have user-defined flags set on them, which can them be picked up on access with the {read,write}_*_flags variants of the accessors. Example use with the i960 and its burstable ROM/RAM (emu\addrmap.cpp and emu\emumem.*) [O. Galibert].
 - 0.236              : Fixed a number of problems with specific boundaries (emu\emumem*). Take into account the pre-offsetting when expanding handlers (emu\emumem_hedr.ipp and emumem_hedw.ipp) [O. Galibert].
 - 0.234              : Removed endianness template parameter from handler_entry_read, handler_entry_write and closely related classes (emu\emumem.*). This appears to substantially reduce compilation time and binary size without too much impact on critical paths. The only critical-path parts really touched by this are probably handler_entry_read_units<Width, AddrShift, Endian>::read and handler_entry_write_units<Width, AddrShift, Endian>::write, which no longer need a branch on descriptor endianness for the downcast. The other instances of where the endianness now needs to be fetched from the address space are practically all in constructors, which probably don't get called too often except in drivers where the memory map is regularly rewritten (e.g. segas16b.cpp); even then the performance impact probably isn't huge [AJR].
 - 0.233              : Allow to know the currently selected entry (emu\emumem.h) [O. Galibert]. Correct logic in populate_mismatched_nomirror and populate_passthrough_nomirror. This fixes a bug causing watchpoints set on portions of the address space exceeding 16K to sometimes not fully cover the range (emu\emumem_hedr.ipp and emumem_hedw.ipp) [AJR]. Initialized m_config in all situations (emu\addrmap.cpp) [Aaron Giles].
 - 0.232              : Get rid of the dummy space device (emu\machine.cpp) [Vas Crabb]. Fixed missing import of submaps in views. Need to fix more about import_submap vs. prepare_map vs. populate_from_map though (emu\emumem_mview.cpp) [O. Galibert].
 - 0.231              : Invalidate the caches on bank selection change (emu\emumem_mview.cpp) [O. Galibert].
 - 0.230              : Allow creators in the memory map (emu\addrmap.h). Fixed init_handlers in specific cases and mapping ioports in views (emu\emumem_hedr.ipp, emumem_hedw.ipp and emumem_mview.cpp). Keep a reference to the handlers so that installs overlapping them don't kill them (emu\emumem_mview.cpp). Ensure alternatives are always created (emu\emumem_mview.cpp) [O. Galibert]. Use count_leading_zeros to simplify awidth calculation (emu\emumem_mview.cpp) [AJR].
 - 0.229              : Fixed regions and shares on dynamically-installed device maps (emu\emumem*). Disabled the unmap-value-in-device-map test for now (emu\emumem_aspace.cpp and emumem_mview.cpp) [O. Galibert].
 - 0.228              : More idiomatic way to access members inherited from argument-dependent base templates (may or may not work around GCC11 bug) (emu\emumem_*.cpp) [Vas Crabb]. Fixed some issue when the view does nor span an exact power-of-two block (emu\emumem_hedr.ipp and emumem_hedw.ipp) [O. Galibert].
 - 0.227              : Added emu\emumem_aspace.cpp, emumem_mview.cpp docs\source\techspecs\memory.rst. Simplify memory management (emu\emumem.cpp). API impact: install_ram/rom/writeonly now requires a non-null pointer. If you want automatically managed ram, add it to a memory map, not in machine_start. install_*_bank now requires a memory_bank *, not a string. One can create memory banks outside of memory maps with memory_bank_creator. One can create memory shares outside of memory maps with memory_share_creator. Memory maps impact: RAM ranges with overlapping addresses are not shared anymore. Use .share(). RAM ranges touching each other are not merged anymore. Stay in your range. Extra note: There is no need to create a bank just to dynamically map some memory/rom. Just use install_rom/ram/writeonly. Fixed memory leak on address_space_specific destruction (emu\emumem.cpp). Don't reject re-loading an unused bank (emu\emumem.cpp). Implemented views, which are essentially bankdevs integrated into the memory map system. Fixed recursion on views dup and lookup (emu\emumem_aspace.cpp). Save view register state (emu\emumem_mview.cpp). Removed the lambdas, seems to make the compiler usage resources less catastrophic and pre-inline h_make_1, reduces the memory a little more (emu\emumem.h and emumem_mview.cpp) [O. Galibert]. Clean-up and consistency fixes after memory system changes. Use if constexpr to make code clearer (emu\emumem.cpp). Clean up docs a little. Includes typo fixes from Alexander Miller [Vas Crabb].
 - 0.224              : Removed unsupported setter, emumem enforces unmapval 0 or ~0 (emu\addrmap.h) [hap].
 - 0.222              : Slight emu\emumem.cpp speedup. Implemented on the 680x0 for now. memory_access_specific is declared and used exactly like memory_access_cache, but does not cache. It does, however, shortcut the virtual call into address_space, so that's one layer of call less. Gives another nice speedup for accesses with bad locality (e.g. anything that's not opcodes), at the expense of having a specifically typed object in the class. Should do well for cpus in general, drivers can keep using the address_space access calls for easier logistics. Masking before dispatch at top level is not needed because it's already done at the global mask level. Cache and specific change syntax, and are not pointers anymore (emu\emumem.*): Added a template parameter to everything (theoretically the address space width, in practice a level derived from it to keep as much compatibility between widths as possible) so that the shift size becomes a constant. Changed the syntax of declaring and initializing the caches and specifics so that they're embedded in the owner device. Solves lifetime issues and also removes one indirection (looking up the base dispatch pointer through the cache/specific pointer). Protect against savage memsets (emu\emumem.h). Fixed bad destruction order by not removing the notifier on cache destruction, they're supposed to be long-lived anyway (emu\emumem.h) [O. Galibert]. Mask address where absolutely necessary (emu\emumem.cpp). This change fixes the edge case of an unaligned accesses to the top of the space not wrapping around, which was causing at least one driver (Alpine Surfer) to crash [AJR].
 - 0.221              : Fixed memdump command causes MAME crash (MAME 0.209: Removed obsolete alignment limit (emu\emumem.cpp) and correct start/end on big endian (emu\emumem_mud.cpp)). Removed obsolete logging (emu\emumem_hedw.ipp) [O. Galibert].
 - 0.216              : Moved some stuff to an anonymous namespace (emu\emumem.cpp), and fully specialise templates that are no longer member classes [Vas Crabb].
 - 0.215              : Added rudimentary validity checking for address_space_config objects (emu\dimemory.cpp). Added emu_fatalerror in case subdevice fails to find things (emu\addrmap.h) [AJR]. Added ref count in flight calls and when a tap is installed (emu\emumem_heu.cpp), plus fix for less permissive compilers. Fixes segmentation fault in E-Swat [O. Galibert, smf]. Disabled VALIDATE_REFCOUNTS, due to (MESS) nforcepc installing a device map while a handler is being temporarily ref counted to prevent it being deleted [smf].
 - 0.211              : Fixed subtle memory subsystem bug (emu\emumem_mud.cpp) [O. Galibert]. Make submaps work with address-shifted spaces. Note that submaps are now assumed to use an address shift of 0. It is possible, though unlikely, for this to cause some breakage (emu\addrmap.cpp and emumem.cpp) [AJR].
 - 0.210              : RAM auto-sharing is going away, so fix drivers relying on it (drivers\ambush.cpp, amiga.cpp, appoooh.cpp, armedf.cpp, astrocde.cpp, atarig1.cpp, atarig42.cpp, atarigt.cpp, atarigx2.cpp, bagman.cpp, banctec.cpp, batman.cpp, bingor.cpp, by68701.cpp, cball.cpp, ccastles.cpp, cclimber.cpp, contra.cpp, coolridr.cpp, cps2.cpp, crystal.cpp, ddragon.cpp, deadang.cpp, eprom.cpp, equites.cpp, expro02.cpp, feversoc.cpp, fitfight.cpp, gaelco2.cpp, gaelco3d.cpp, galaxian.cpp, galaxold.cpp, gamepock.cpp, goindol.cpp, hvyunit.cpp, ironhors.cpp, legionna.cpp, liberate.cpp, liberatr.cpp, ltd.cpp, m62.cpp, maygayep.cpp, maygayv1.cpp, mgolf.cpp, midvunit.cpp, mps1230.cpp, namcos12.cpp, namcos23.cpp, nemesis.cpp, nmk16.cpp, o2.cpp, olibochu.cpp, punchout.cpp, realbrk.cpp, rocnrope.cpp, rohga.cpp, scv.cpp, senjyo.cpp, seta.cpp, skimaxx.cpp, ssv.cpp, stfight.cpp, subs.cpp, subsino2.cpp, tagteam.cpp, tankbust.cpp, taxidriv.cpp, tbowl.cpp, wecleman.cpp, wiping.cpp, yiear.cpp, zaccaria.cpp, audio\cage.cpp) [O. Galibert].
 - 0.209              : Removed obsolete alignment limit (emu\emumem.cpp). Correct start/end on big endian (emu\emumem_mud.cpp) [O. Galibert].
 - 0.208              : Allow an address shift of 1 (to the right) for 8-bit spaces (emu\emumem.cpp) [AJR].
 - 0.207              : Eliminated the default address map member of address_space_config. Since all device address maps are now class methods defined in ordinary C++, default RAM maps can be provided more simply with an explicit has_configured_map check in an internal map definition. A number of default address maps that probably weren't meant to be overridden have also been changed to ordinary internal maps [AJR].
 - 0.206              : Removed address_space argument from read/write handlers (machine\bankdev.cpp; drivers\pengadvb.cpp and cedar_magnet.cpp) [AJR].
 - 0.205              : Removed m_baseptr, may fix the save state issues (MT07116: Memory banking not restored correctly when loading save states in numerous drivers) (emu\emumem.cpp/h) [O. Galibert].
 - 0.203              : Invalidate memory access caches when removing watchpoints to prevent crashes on subsequent accesses to the same memory areas (emu\emumem.cpp) [AJR].
 - 0.202              : Fixed ioports/membanks in internal maps (emu\device.cpp and emumem.cpp) [O. Galibert]. Fixed unmapped values with subunits (emu\emumem_heu.cpp) [smf].
 - 0.201              : Allow simplified versions of handlers. Note: A standard memory handler has as a prototype (where uX = u8, u16, u32 or u64): uX device::read(address_space &space, offs_t offset, uX mem_mask) and void device::write(address_space &space, offs_t offset, uX data, uX mem_mask). We now allow simplified versions which are: uX device::read(offs_t offset, uX mem_mask), void device::write(offs_t offset, uX data, uX mem_mask), uX device::read(offs_t offset), void device::write(offs_t offset, uX data), uX device::read() and void device::write(uX data). Use them at will. Also consider (DECLARE_)(READ|WRITE)(8|16|32|64)_MEMBER on the way out, use the explicit prototypes. Same for lambdas in the memory map, the parameters are now optional following the same combinations. Examples: bloodbro.cpp, cabal.cpp, dcon.cpp, legionna.cpp, pntnpuzl.cpp, r2dx_v33.cpp, raiden2.cpp, machine\6522via.cpp and audio\seibu.cpp. Put capabilities at parity (emu\addrmap.cpp, devcb.cpp and emumem.cpp) [O. Galibert]. Default input clock for 'Address Map Bank' (machine\bankdev.h) [AJR]. Removed ADDRESS_MAP_BANK MCFG macros (machine\bankdev.h) [Ryan Holtz].
 - 0.200              : Added emu\emumem_hea.h, emumem_hedp.cpp/h, emumem_hedr.ipp/h, emumem_hedr0.cpp, emumem_hedr1.cpp, emumem_hedr2.cpp, emumem_hedr3.cpp, emumem_hedw.ipp/h, emumem_hedw0.cpp, emumem_hedw1.cpp, emumem_hedw2.cpp, emumem_hedw3.cpp, emumem_hem.cpp/h, emumem_hep.cpp/h, emumem_het.cpp/h, emumem_heu.cpp/h, emumem_heun.cpp/h and emumem_mud.cpp/h. Backend modernization (emu\emumem.cpp). Ensure split accesses are always done in increasing addresses order [O. Galibert].
 - 0.199              : Reduced code duplication and added support for device finders in more places in memory maps (emu\addrmap.h). Make address map config look like Next-gen. Added streamline templates in addrmap.h. Get rid of overloads on read/write member names - this will become even more important in the near future. Lift some stuff needed by DEVCB3 out of address map entry. Get rid of some overloaded names - a lot of these will become unnecessary after new memory and DEVCB are ready [Vas Crabb].
 - 0.198              : Renamed direct_read_handler to memory_access_cache. Parametrize the template on more information (data width, endianness) to make it possible to turn it into an handler cache eventually, and not just a memory block cache. Make it capable of large and unaligned accesses (emu\emumem.cpp) [O. Galibert]
 - 0.197              : Allow for an address shift (machine\bankdev.cpp). Fixed changing_bits < default_lowbits_mask (emu\emumem.cpp) [O. Galibert]. Fixed fencepost in memory_manager::region_containing, which caused regions to be registered for state saving (emu\emumem.cpp) [smf]. Relaxed constraints on address mirroring/global mask combinations. Mirror bits are now allowed to fall outside the driver-specified global mask, though memory map validation requires that they cover the entire masked-out portions of the address space if any do. This change is intended to expedite debugging of software written for the TMPZ84C015 or similar Z80-based controllers which use 8-bit I/O addressing for the on-chip peripherals but may use either 8-bit or 16-bit addressing externally (emu\addrmap.cpp) [AJR]. Completely eliminated address map macros [O. Galibert, Robbbert].
 - 0.196              : Renamed some memory stuff (emu\addrmap.cpp). Address maps macros removal [O. Galibert].
 - 0.195              : Fixed renju regression (emu\emumem.cpp) [O. Galibert].
 - 0.193              : API change (emu\emumem.cpp): * direct_read_data is now a template which takes the address bus shift as a parameter. * address_space::direct<shift>() is now a template method that takes the shift as a parameter and returns a pointer instead of a reference. * The address to give to {read|write}_* on address_space or direct_read_data is now the address one wants to access. Longer explanation: Up until now, the {read|write}_* methods required the caller to give the byte offset instead of the actual address. That's the same on byte-addressing CPUs, e.g. the ones everyone knows, but it's different on the word/long/quad addressing ones (TMS, Sharc, etc...) or the bit-addressing one (TMS340x0). Changing that required templatizing the direct access interface on the bus addressing granularity, historically called address bus shift. Also, since everybody was taking the address of the reference returned by direct(), and structurally didn't have much choice in the matter, it got changed to return a pointer directly. Longest historical explanation: In a cpu core, the hottest memory access, by far, is the opcode fetching. It's also an access with very good locality (doesn't move much, tends to stay in the same rom/ram zone even when jumping around, tends not to hit handlers), which makes efficient caching worthwhile (as in, 30-50% faster core iirc on something like the 6502, but that was 20 years ago and a number of things changed since then). In fact, opcode fetching was, in the distant past, just an array lookup indexed by pc on an offset pointer, which was updated on branches. It didn't stay that way because more elaborate access is often needed (handlers, banking with instructions crossing a bank...) but it still ends up with a frontend of "if the address is still in the current range read from pointer+address otherwise do the slowpath", e.g. two usually correctly predicted branches plus the read most of the time. Then the >8 bits cpus arrived. That was ok, it just required to do the add to a u8 *, then convert to a u16/u32 * and do the read. At the asm level, it was all identical except for the final read, and read_byte/word/long being separate there was no test (and associated overhead) added in the path. Then the word-addressing CPUs arrived with, iirc, the tms cpus used in atari games. They require, to read from the pointer, to shift the address, either explicitely, or implicitely through indexing a u16 *. There were three possibilities: 1. Create a new read_* method for each size and granularity. That amounts to a lot of copy/paste in the end, and functions with identical prototypes so the compiler can't detect you're using the wrong one. 2. Put a variable shift in the read path. That was too expensive especially since the most critical cpus are byte-addressing (68000 at the time was the key). Having bit-adressing cpus which means the shift can either be right or left depending on the variable makes things even worse. 3. Require the caller to do the shift himself when needed. The last solution was chosen, and starting that day the address was a byte offset and not the real address. Which is, actually, quite surprising when writing a new cpu core or, worse, when using the read/write methods from the driver code. But since then, C++ happened. And, in particular, templates with non-type parameters. Suddendly, solution 1 can be done without the copy/paste and with different types allowing to detect (at runtime, but systematically and at startup) if you got it wrong, while still generating optimal code. So it was time to switch to that solution and makes the address parameter sane again. Especially since it makes mucking in the rest of the memory subsystem code a lot more understandable [O. Galibert]. Constexpr implies inline, generalise iabs, work around lack of C++14 constexpr in VS2015 (emu\emucore.h and emumem.cpp/h) [Vas Crabb]. Replaced space.machine() with machine() (emu\emumem.cpp) [Olivier Galibert, smf]. Eliminated remaining uses of address_space::machine() outside of emumem (debug\debugbuf.cpp, debugcmd.cpp and machine\seibucop\seibucop_cmd.hxx). Removed machine member of address_space [AJR].
 - 0.188              : Lift the cap on the number of address spaces per device (emu\dimemory.cpp). Initialization ordering fixes (emu\emumem.cpp/h and machine.cpp) [O. Galibert]. Make device_memory_interface slightly less of a special case, use a typedef to avoid nested templates everywhere. Made device_memory_interface own its address space objects. Kill a trampoline (memory.dump(); debug\debugcmd.cpp and emu\emumem.cpp) [Vas Crabb].
 - 0.187              : Fixed address_map configure (emu\addrmap.cpp) [Olivier Galibert]. Changed 'enum read_or_write' to be 'enum class' (debug\debugcmd.cpp, emu\emumem.cpp and machine\fddebug.cpp) [AJR].
 - 0.186              : Better detection of bad -ramsize strings, move some private code to anonymous namespace. There was a longstanding bug where '-ramsize 16kfoo' would be treated as '-ramsize 16k'. Changed parse_string() to explicitly look for the suffixes "[k|m][|b|ib]" (machine\ram.cpp) [Nathan Woods].
 - 0.186              : Cleanups to ram_device (machine\ram.cpp): 1. Changed ram_device to expose specific options, removing the burden for clients to parse RAM strings. 2. Moved validation of command line arguments out of device_validity_check(); that method is only intended for checking the device itself. 3. Miscellaneous polishing [Nathan Woods].
 - 0.185              : Removed direct_update from the core (emu\emumem.cpp) [O. Galibert, AJR].
 - 0.184              : Memory unit masking and address mirroring fixes: Fixed a bug which effectively treated AM_MIRROR as AM_SELECT when applied to a single-address range mirrored into a contiguous block. The automatic expansion of zero address masks now only applies to those stemming from (default) configuration, not from optimization (This allows the assertion in latch8_device to be reinstated). Fixed a bug where AM_SELECT applied to narrow-width handlers with a submaximal number of subunits would select the wrong address bits or none at all (This allows rpunch_gga_w to be WRITE8 as intended). Added more stringent appropriateness checking of unit masks for narrow-width handlers [AJR].
 - 0.181              : Removed the magic bypass in emu\dimemory.cpp [O. Galibert]. Replaced a few debug asserts with friendlier error messages (makes validation less dangerous in debug builds) (emu\addrmap.cpp) [AJR].
 - 0.180              : Moved device_memory_interface from driver_device to dummy_space_device. Exposed the dummy_space_device as machine().dummy_space(), with a trampoline in driver_device for existing callers. Debugger no longer needs to special case root_device() to avoid showing the dummy address space. Replaced machine().driver_data()->generic_space() with machine().dummy_space(). Removed some driver_data<> calls [smf]. Address map refactoring: Removed device parameter. De-hand-templatized address_map_entry, removed then unneeded entry parameter. Simplified constructor, thanks Micko. Changed setters into passthroughs. Stream it. Changed to use dot syntax rather than -> syntax for chaining. Made obvious renames and added helpers. Eliminated attaching memory maps to driver_device [O. Galibert].
 - 0.177              : Make address maps complain when entry bounds lie outside the global mask. Alter a bunch of address maps so all validity checks pass. These includes global address masks in Hexaa and the (MESS) Newbrain FDC (regression testing should be done here) [AJR].
 - 0.176              : Pass through the debugger flag from the incoming space argument (machine\bankdev.cpp) [R. Belmont].
 - 0.175              : Added AM_SELECT/addrselect field. Replaces the old AM_MIRROR/AM_MASK combo used to mirror a handler and get the mirrored bits in the offset. Removed mask and/or mirror from where it didn't belong. Simplified a lot of instances of mask that just weren't needed, especially in bus handlers. Used the short forms of install handlers where possible. Replaced the range parameter handling in map_range that tried to guess what was meant when the values passed were not entirely sensible, by a cranky, diner waitress-turned IRS auditor curmudgeon. Main control function has a series of 14 tests just to find a reason to fatalerror out your requests. Some drivers, hopefully not many, will fail the gate-guarding bureaucrat trials. Should be easy to fix actually, I worked on the error messages. A full regression test would be welcome. Handlers on different subunits of the same address with different address masks are now supported (emu\emumem.cpp). Fixed some issues in emumem. Note: It's actually a very old bug that was uncovered. Direct access update mistaked the per-handler mask and the global mask. As it happened the per-handler mask was often the global mask, but I made the frontend *way* more agressive w.r.t masks now. So the bug became way more visible [O. Galibert]. Validity checking for AM_MASK/AM_MIRROR/AM_SELECT in 8080bw.cpp, unkhorse.cpp and many others [AJR, hap, O. Galibert]. Added tagged_list to unordered_map in emumem. Removed simple_list from emumem [Miodrag Milanovic]. Use unshifted addrmask (not bytemask) in check_optimize_foo (emu\emumem.cpp) [AJR].
 - 0.174              : Get rid of the install_* return value (emu\emumem.cpp) [Olivier Galibert]. Fixed accessing base() when there is empty buffer (emu\emumem.h) [Miodrag Milanovic].
 - 0.173              : Renamed emu\memory.cpp/h to emu\emumem.cpp/h [Miodrag Milanovic].
 - 0.171              : Make octal flag part of address_space/address_space_config, not (illogically) device_execute_interface [AJR].
 - 0.164              : Removed support for decrypted bases, use an address space instead (emu\memory.c and dimemory.h). Updated/Fixed cabal.c, cbasebal.c, desertbr (fd1094.c), mitchell.c, mustache.c, pengo.c, segas16b.c, suna8.c, suprloco.c, turbo.c, zaxxon.c and audio\seibu.c [O. Galibert, Osso].
 - 0.158              : Fixed -fsanitize=null error in address_space::prepare_map() (emu\memory.c) [O. Galibert].
 - 0.156              : Fixed signed integer overflow in address_table::subtable_open() (emu\memory.c) and address_map::uplift_submaps() (emu\addrmap.c) [O. Galibert]. Fixed an annoying inconsistency between memory_share and memory_region: The width() method of the former returned the width in bits (8, 16, 32 or 64) while the width() method of the latter returned the width in bytes (1, 2, 4 or 8). Now both classes have a bitwidth() method and a bytewidth() method. Updated all callers to use whichever one was more appropriate. Removed the implicit-cast-to-any-integer-pointer ability of memory_regions, which was rather unsafe (if you weren't careful with your * operators and casts it was easy to accidentally get a pointer to the memory_region object itself instead of to the data, with no warning from the compiler... or at least I kept doing it) Updated all devices and drivers that were accessing regions that way to use a region_ptr_finder when possible, and otherwise to call base() explicitly [Alex Jackson].
 - 0.155              : Increased static handler limit, so that having a larger number of address map bank devices don't hit it (emu\memory.c) [Barry Rodewald]. Fixed memdump output for nop/unmapped/watchpoint entries (emu\memory.c), broken by r31731. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one). And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? Only install the default device address map if the owner didn't provide one (emu\addrmap.c) [Alex Jackson].
 - 0.154              : Stop the watchpoints from messing with the opcode decryption (emu\memory.c) [O. Galibert]. Removed some unused AM_*_LEGACY macros (emu\addrmap.h). Disable logging of unmapped memory accesses when neither -log nor -debug is specified (emu\memory.c) [Oliver Stoeneberg]. Removed some not used macros (emu\addrmap.h). Removed lot of legacy code in memory system and removed corresponding macros (emu\addrmap.c/h, devcb.h, device.h and memory.c/h) [Miodrag Milanovic]. Hooked up fastram to coolridr.c, cps3.c, deco_mlc.c (avengrgs), feversoc.c, mega32x.c (MESS), psikyo4.c, psikyosh.c, saturn.c (MESS), stv.c and suprnova.c [R. Belmont].
 - 0.153              : Don't change the current bank on reset, because another device might have already changed the bank when it was reset (machine\bankdev.c) [smf].
 - 0.151              : New AM_(DEV)SETOFFSET feature for address maps (Specifies a handler for a 'set address' operation. The intended use case for this operation is to emulate a split-phase memory access: The caller (usually a CPU) sets the address bus lines using set_address. Some component may then react, for instance, by asserting a control line like WAIT before delivering the data on the data bus. The data bits are then sampled on the read operation or delivered on the write operation that must be called subsequently. It is not checked whether the address of the set_address operation matches the address of the subsequent read/write operation. The address map translates the address to a bucket and an offset, hence the name of the macro. If no handler is specified for a bucket, a set_address operation hitting that bucket returns silently). Application of the set_address (AM_SETOFFSET) feature to TMS9900 CPU [Michael Zapf].
 - 0.150              : Fixed comment in emu\dimemory.c. Removed unused macro AM_DEVREAD8_LEGACY (emu\addrmap.h). Removed unused AM_DEVWRITE8_LEGACY macro (emu\addrmap.h) [Oliver Stoeneberg].
 - 0.149u1            : Fixed memory subunit reconfiguration. To hit this bug you need to have two subsized handlers on the same address with a different starting address. Something like, in a 64-bits address map: AM_RANGE(0x00, 0x1f) AM_READ32(r1_r, 0xffffffff00000000) and AM_RANGE(0x10, 0x1f) AM_READ32(r2_r, 0x00000000ffffffff). Then r2_r (last entry) was called with an incorrect offset. To say that this configuration does not happen often is an understatement. Need moar tables in emu\memory.c [O. Galibert]. Removed unused AM_RAM_DEVWRITE_LEGACY and AM_RAM_WRITE_LEGACY macro (emu\addrmap.h) [Oliver Stoeneberg]. Reduced AM_RAM_WRITE_LEGACY users (drivers\segahang.c, segaorun.c, segas16a.c, segas16b.c, segas18.c, segaxbd.c, segaybd.c and video\sega16sp.c and segaic16.c) [David Haywood]. Added endianness to the memory_share class (emu\memory.c) [Aaron Giles].
 - 0.149              : Added machine\bankdev.c/h. Fixed address_space_specific::get_write_ptr() (emu\memory.c) [Phil Bennett]. Fixed clipping of device address maps if the size of the map caused the end address to wrap. Added a proof of concept implementation of a address map bank device, which allows you to bank memory maps (emu\addrmap.c and emu.mak). Hooked it up to Taito GNET as an example. Allow AM_NOP in device address maps, there may be others that should be allowed [smf]. Added macros for read/write delegates (emu\memory.h). Cleanup emu\memory.h [Curt Coder].
 - 0.148u2            : Added another missing 32->64 bits conversion when building the invsubmask (emu\memory.c). Use proper free function for address_space.m_direct (emu\memory.c) [Oliver Stoeneberg].
 - 0.148u1            : Replaced bogus memcpy in handler_entry_{read|write}. Fixes Visual Studio-only issues/crashes in (MESS) paso1600, multi16, x68030 and t1000* sets (MT05124,MT05110,MT05112). Added missing 32->64 bits conversion when building the invsubmask (emu\memory.c) [Oliver Stoeneberg].
 - 0.148              : Oliver Stoeneberg added missing initialization of memory_share.m_next (emu\memory.h). Removed some unused AM_*_LEGACY macros (emu\addrmap.h) [Oliver Stoeneberg].
 - 0.147u2            : Fixed dynamic recursive device mapping (emu\addrmap.c/h and memory.c/h). Situation: * You have a device (pc-fdc) with a memory map on it. * You map it dynamically into a cpu (maincpu) address space with install_device (isa-fdc does that). * The device pc-fdc has a subdevice (upd765). * The subdevice upd765 has its own memory map. * The pc-fdc memory map includes the upd765 memory map through AM_DEVICE("upd765", ...). Before the fix, the code would search for upd765 as a subdevice of maincpu and not of pc-fdc. Map from the cpu's owner, not the root device, otherwise siblings of cpus coming from config fragments aren't happy (emu\memory.c). We can have a map for 8bits on 8bits (emu\addrmap.c). Avoid a collision between address_map the type and the method of the device_memory_interface class (emu\addrmap.h) [O. Galibert].
 - 0.147u1            : Memory handler normalization, part 1. READ/WRITE_DEVICE*_HANDLERs are now passed an address_space &, and the 8-bit variants get a mem_mask as well. This means they are now directly compatible with the member function delegates. Added a generic address space to the driver_device that can be used when no specific address space is available. Also added DECLARE_READ/WRITE_DEVICE*_HANDLER macros to declare device callbacks with default mem_mask parameters. Memory handler normalization, part 2. Change legacy read/write handlers to take an address_space & insteadof an address_space *. Also update pretty much all other functions to take a reference where appropriate. Memory handler cleanup 3. Add mem_mask parameter to 8-bit handlers to match the others. To ease pain, added DECLARE_READ/WRITE_HANDLER macros that set up a default parameter. Also updated DEVCB so that the handlers can be called with or without the mem_mask. Removed all traces of read/write*_device_func from memory.c. All legacy device callbacks are now promoted to delegates and handed off to the modern read/write handler managers. Fixed ibm5150 and surely many other broken systems. Make device_memory_interface::space() assert against NULL and return a reference, and pushed references throughout all address space usage in the system. Added a has_space() method to check for those rare case when it is ambiguous. Also reinstated the generic space and added fatal error handlers if anyone tries to actually read/write from it [Aaron Giles]. Fixed DEVCB_MEMORY_HANDLER regression. Removed device_memory_interface from driver_device, fixes issues with dkong clones, and various others [Miodrag Milanovic].
 - 0.147              : Added ambiguous execute() and memory() methods to the device_execute/memory_interfaces respectively in order to catch unnecessary usage of the corresponding device_t methods. Removed all existing redundant usage [Aaron Giles].
 - 0.146u5            : Added support for dynamically mapping devices (emu\addrmap.c and emu\memory.c) [O. Galibert]: Just call install_device on the space with as parameters: Start and end of the mapping zone, device (not pointer to the device), map method and optionally, if the device data width is not the same than the space data width: device data width (for consistency checking) and unit mask. For instance, the static mapping: AM_RANGE(0x02114100, 0x02114107) AM_DEVICE8("fdc", n82077aa_device, amap, 0xffffffff). Can be converted to a dynamic mapping (where fdc is a pointer to the device): machine().device("maincpu")->memory().space(AS_PROGRAM)-> install_device(0x02114100, 0x02114107, *fdc, &n82077aa_device::amap, 8, 0xffffffff). Some memset() underflow fixes (drivers\bfm_sc2.c, malzak.c, megatech.c, nycaptor.c...) [Oliver Stoeneberg]. Added mask() function to RAM device (machine\ram.h) [Curt Coder].
 - 0.146u3            : Fix for profiler memory leaks [Miodrag Milanovic].
 - 0.146              : Miodrag Milanovic fixed ram size validation regression (emu\machine\ram.c).
 - 0.145u8            : Use a tagged_list for memory_banks [Aaron Giles].
 - 0.145u7            : Now that memory_bank is exposed as an object, removed all the global bank manipulation APIs from memory_manager, and instead added a memory_manager::bank("tag") function which will return a pointer to the representative memory_bank. Operations can then be performed as expected directly on the memory_bank. Most code did not need an update yet, as I haven't done the search/replace to move away from global functions (which still exist for now). Added device_t::subbank("tag") to return a bank that is owned by the given device. Switched YM2151 interfaces over to DEVCB callbacks. Created proper sound devices for the Williams NARC, CVSD and ADPCM sound boards. Updated midyunit, midtunit, williams(joust2), and mcr68(archrivl/pigskin/trisport) to use the new devices. Removed global memory banking functions in favor of referencing subbanks of a device and directly acting on them. Memory banks are now device-relative only. Global lookups are private. Renamed device_t::subbank to device_t::membank and updated a few remaining users of the global lookup. Changed device->subregion to device->memregion. Moved memory_region management into the memory manager instead of directly in the machine. Hid the global region method; now all regions must be looked up relative to a device. If you're a member function, you can just use memregion("tag") directly. If you're a global function or a device referencing global regions, use machine().root_device().memregion("tag") to look up regions relative to the root. Cleaned up required_/optional_<object> templates. Added new ones for memory banks and memory regions. Removed debugging verbose printfs. Make memory shares follow the same pattern as memory regions and memory banks, accessible only via the device [Aaron Giles].
 - 0.145u6            : Aaron Giles converted memory_private to memory_manager and moved global memory operations into methods on it. Converted the less-popular cases over in drivers that used them, leaving the bank management APIs global for now. Added logic to ensure that shared pointers are checked to be of the right width. The primary upshot is that if you declare AM_SHARE("paletteram") in an 8-bit memory map, then only m_generic_paletteram_8 will be populated, and m_generic_paletteram_16 will be NULL. But it applies to all required_/optional_shared_ptrs declared, so make sure they are of the right type. The required_/optional_shared_ptr mechanism should be used to replace AM_BASE_MEMBER and AM_SIZE_MEMBER, which are technically dangerous and illegal in C++ but work today through some trickery.
 - 0.143u3            : hap fixed memory unmap if mirror/mask was used. O. Galibert fixed an endianness issue when doing a device mapping on a big endian bus (memory.c).
 - 0.143              : Curt Coder added device-relative functions for memory banking.
 - 0.142u6            : Stop being stupid and call the extremely well written populate_range_mirrored code through map_range when appropriate, which is most of the time [O. Galibert]. Oliver Stoeneberg fixed some potential memory leaks and NULL pointer deferences as well as removing some redundant checks.
 - 0.142u5            : O. Galibert stored legacy object and handler together in the same structure. Pass the legacy object/handler as a set_delegate parameter. Merged width-conversion functions together from the same source width. Build a structure with all possible delegate sizes. Separate delegates for the main access and the subaccesses. Split the subaccesses delegation information per-slot. Make the memdump file include a description of every subunit. Added utility methods to clean up colliding subunit masks and testing if any are remaining. Combined the map_range and handler_read/write() operations into one. Proxy the handler entry access when adding handlers. Tuck the unitmask into the proxy. Split the map_range function into a fixed entry mapping one and a dynamically allocating entry one. Make the proxy manage a list of handlers instead of a unique one. Added a handler copy function which works on subunits-only handlers. Finally allow different handlers on different subunits of the same address. Implemented depopulate_unused(). Changed the gc into a refcounter, for speed reasons.
 - 0.142              : Deprecate the old memory_install_* macros. Dynamic installation is now handled directly by calling methods on the address_space, which have been expanded with aliases to cover all previous situations. In addition, variants with no mirror or mask value are provided to cover the common cases [Aaron Giles]: memory_install_read*_handler(space, begin, end, mirror, mask, handler) ==> space->install_legacy_read_handler(begin, end [, mirror, mask], FUNC(handler)), memory_install_write*_handler(space, begin, end, mirror, mask, handler) ==> space->install_legacy_write_handler(begin, end [, mirror, mask], FUNC(handler)), memory_install_readwrite*_handler(space, begin, end, mirror, mask, rhandler, whandler) ==> space->install_legacy_readwrite_handler(begin, end [, mirror, mask], FUNC(rhandler), FUNC(whandler)), memory_install_read*_device_handler(space, device, begin, end, mirror, mask, handler) ==> space->install_legacy_read_handler(*device, begin, end [, mirror, mask], FUNC(handler)), memory_install_write*_device_handler(space, device, begin, end, mirror, mask, handler) ==> space->install_legacy_write_handler(*device, begin, end [, mirror, mask], FUNC(handler)), memory_install_readwrite*_device_handler(space, device, begin, end, mirror, mask, rhandler, whandler) ==> space->install_legacy_readwrite_handler(*device, begin, end [, mirror, mask], FUNC(rhandler), FUNC(whandler)), memory_install_read_port(space, begin, end, mirror, mask, port) ==> space->install_read_port(begin, end [, mirror, mask], port), memory_install_read_bank(space, begin, end, mirror, mask, bank) ==> space->install_read_bank(begin, end [, mirror, mask], bank), memory_install_rom(space, begin, end, mirror, mask, ptr) ==> space->install_rom(begin, end [, mirror, mask], ptr), memory_install_ram(space, begin, end, mirror, mask, ptr) ==> space->install_ram(begin, end [, mirror, mask], ptr), memory_unmap_read(space, begin, end, mirror, mask) ==> space->unmap_read(begin, end [, mirror, mask]) and memory_nop_read(space, begin, end, mirror, mask) ==> space->nop_read(begin, end [, mirror, mask]).
 - 0.141u2            : Fixed memory manager bug when calling 32-bit handlers on a 64-bit address space [Aaron Giles].
 - 0.141u1            : Added emu\machine\ram.c/h.
 - 0.138u2            : Added emu\dimemory.c/h.
 - 0.137u2            : Oliver Stoeneberg applied some Cppcheck fixes.
 - 0.136u1            : New C++-aware memory manager [Aaron Giles]: This is a simple manager that allows you to add any type of object to a resource pool. Most commonly, allocated objects are added, and so a set of allocation macros is provided to allow you to manage objects in a particular pool: pool_alloc(p, t) = allocate object of type 't' and add to pool 'p'. pool_alloc_clear(p, t) = same as above, but clear the memory first. pool_alloc_array(p, t, c) = allocate an array of 'c' objects of type 't' and add to pool 'p'. pool_alloc_array_clear(p, t, c) = same, but with clearing. pool_free(p, v) = free object 'v' and remove it from the pool. Note that pool_alloc[_clear] is roughly equivalent to "new t" and pool_alloc_array[_clear] is roughly equivalent to "new t[c]". Also note that pool_free works for single objects and arrays. There is a single global_resource_pool defined which should be used for any global allocations. It has equivalent macros to the pool_* macros above that automatically target the global pool. In addition, the memory module defines global new/delete overrides that access file and line number parameters so that allocations can be tracked. Currently this tracking is only done if MAME_DEBUG is enabled. In debug builds, any unfreed memory will be printed at the end of the session. emualloc.h also has #defines to disable malloc/free/realloc/calloc. Since emualloc.h is included by emucore.h, this means pretty much all code within the emulator is forced to use the new allocators. Although straight new/delete do work, their use is discouraged, as any allocations made with them will not be tracked. Changed the familar auto_alloc_* macros to map to the resource pool model described above. The running_machine is now a class and contains a resource pool which is automatically destructed upon deletion. If you are a driver writer, all your allocations should be done with auto_alloc_*. Changed all drivers and files in the core using malloc/realloc or the old alloc_*_or_die macros to use (preferably) the auto_alloc_* macros instead, or the global_alloc_* macros if necessary. Added simple C++ wrappers for astring and bitmap_t, as these need proper constructors/destructors to be used for auto_alloc_astring and auto_alloc_bitmap. Removed references to the winalloc prefix file. Most of its functionality has moved into the core, save for the guard page allocations, which are now implemented in osd_alloc and osd_free.
 - 0.135u3            : Memory system changes [Aaron Giles]: Memory banks are now referenced by tag rather than index. Changed all memory_bank_* functions to specify a tag. Bulk-converted existing banks to be tagged "bank##" in order to ensure consistency. However, going forward, the tags don't matter, so please name them something useful. Added AM_BANK_READ/AM_BANK_WRITE macros to let you specify bank tags. Also changed AM_ROMBANK and AM_RAMBANK macros to accept tags as well. Added new functions memory_install_read_bank_handler and memory_install_write_bank_handler to install banks by tag name, similar to input ports. Changed internals of memory system to dynamically allocate all banks. The first time a bank with an unknown tag is installed, a new bank object is created and tracked internally. Removed SMH_* macros entirely. In their place are a series of expanded macros and new memory installation helpers. Some mappings below (not all are new): AM_READ(SMH_RAM)-> AM_READONLY, AM_WRITE(SMH_RAM)-> AM_WRITEONLY, AM_READWRITE(SMH_RAM, SMH_RAM)-> AM_RAM, AM_READ(rhandler) AM_WRITE(SMH_RAM)-> AM_RAM_READ(rhandler), AM_READ(SMH_RAM) AM_WRITE(whandler)-> AM_RAM_WRITE(whandler), AM_DEVREAD(tag, rhandler) AM_WRITE(SMH_RAM)-> AM_RAM_DEVREAD(tag, rhandler), AM_READ(SMH_RAM) AM_DEVWRITE(tag, whandler)-> AM_RAM_DEVWRITE(tag, whandler), AM_READ(SMH_ROM)-> AM_ROM, AM_WRITE(SMH_ROM)-> (was a no-op), AM_READ(SMH_NOP)-> AM_READNOP, AM_WRITE(SMH_NOP)-> AM_WRITENOP and AM_READWRITE(SMH_NOP, SMH_NOP)-> AM_NOP. For dynamic memory handler installation of the various types, use the new functions: memory_unmap_read(), memory_unmap_write(), memory_unmap_readwrite() -- unmaps a section of address space, memory_nop_read(), memory_nop_write() and memory_nop_readwrite() -- nops a section of address space. Cleaned up the internals of the address_map_entry structure, and also normalized the way the address map macros work to remove a lot of redundancy. Renamed functions: memory_install_read/write_port_handler to memory_install_read/write_port. Memory shares are now specified by tag instead of index. The AM_SHARE() macro now takes a tag parameter. All existing shares have been bulk renamed to "share##". However, the name does not matter, so please use descriptive tags going forward. Added tag validation for bank and share tags. Added flag to tagmap_add functions that optionally will replace existing objects if a duplicate is found. Internal code shuffling. Address maps initialized internally now call the same installation handlers that drivers do for dynamic installation. Cleaned up some parameter ordering and error detection. Added new functions: memory_install_ram() to assign a un-named bank to a region and specify a pointer to where the RAM lives. If this is called in the DRIVER_INIT function or MACHINE / SOUND / VIDEO_START functions, then it is permissible to specify NULL, in which case the memory system will allocate memory and register it for save states. memory_install_rom() is like the above except that it only installs a read handler. memory_install_writeonly() is like the above except that it only installs a write handler. Updated several instances in the code that were assigning banks to these sorts of static RAM regions and simplified the code. Apply mirrors and global masks at address map detokenizing time rather than later.
 - 0.131u3            : Oliver Stoeneberg fixed a few potential memory leaks detected by Cppcheck and also added an errormessage to verinfo.
 - 0.131u1            : Changed the way memory allocation is handled. Rather than allocating in terms of bytes, allocations are now done in terms of objects. This is done via new set of macros that replace the malloc_or_die() macro: alloc_or_die(t) - allocate memory for an object of type 't', alloc_array_or_die(t,c) - allocate memory for an array of 'c' objects of type 't', alloc_clear_or_die(t) - same as alloc_or_die but clears the memory and alloc_array_clear_or_die(t,c) - alloc_array_or_die with clearing. All original callers of malloc_or_die have been updated to call these new macros. If you just need an array of bytes, you can use alloc_array_or_die(UINT8, numbytes) [Aaron Giles].
 - 0.129u4            : smf changed memory_set_direct_region to pass the address returned from the DIRECT_UPDATE_HANDLER back to the memory read function.
 - 0.129              : Aaron Giles fixed a few out-of-bounds errors revealed by randomly initializing auto_malloc() memory. These would manifest themselves as difficult-to-reproduce crashes on some systems. Affects laserbat, progolf, seta2, and cubeqst drivers.
 - 0.128u4            : Major memory system change [Aaron Giles, Couriersud, smf, R. Belmont]: Changed READ/WRITE handlers to accept an address_space * instead of a machine *. The address_space object was enhanced to contain a machine and a pointer to the relevant CPU object. Added new function cpu_get_address_space() to fetch the address space for calling in manually to these functions. In some instances, code which should eventually be converted to a device is hard-coding fetching the program space of CPU #0 in order to have something valid to pass. Another significant memory system change [Aaron Giles]: Moved memory global state into a struct hanging off of the machine. Updated almost all memory APIs to take an address_space * where appropriate, and updated all callers. Changed memory internals to use address spaces where appropriate. Changed accessors to point to the memory_* functions instead of the address space-specific functions. Improved internal handling of watchpoints. Added cputag_* functions: cputag_reset(), cputag_get_index(), cputag_get_address_space(). These just expand via macros to an initial fetch of the CPU via cputag_get_cpu() followed by the standard CPU call. Added debugger_interrupt_hook() and debugger_exception_hook() calls which intelligently look at the debugger flags before calling. Memory banking now requires a machine object. This makes the memory system fully global-free.
 - 0.127u7            : Aaron Giles fixed a memory leak in various games.
 - 0.127u3            : Nathan Woods added a core_fopen_ram_copy() call, similar to core_fopen_ram() except that it copies the memory.
 - 0.127              : memset() usage cleanups [Oliver Stoenberg]. Identified compatible timekeeper used by Midway Zeus II. Removed all the timekeeper memory handlers, except for 8 bit & changed the drivers to use the conversion built into the memory system [smf].
 - 0.126u3            : Aaron Giles updated the core memory_region_* functions to accept a tag instead of an integer. Added new memory_region_next() function to allow for iteration over all memory regions. Aaron Giles changed the way memory regions are referenced. Instead of a single integer value, regions are now referred to by a region tag. The region tag must be unique among all regions defined for a given game. This change required updating all the ROM region definitions in the project to specify the tag instead of region number.
 - 0.125u9            : Aaron Giles removed calls to memory_set_context() in favor of cpuintrf_push_context(). Extended memory.c to support up to 4096 banks.
 - 0.125u7            : Atari Ace added machine parameter to memory_region() and memory_region_length() functions. Cleaned up usage of these throughout the code to cache pointers rather than calling these functions repeatedly during loops.
 - 0.124u4            : Aaron Giles expanded the set of memory accessor functions. In addition to direct byte, word, dword and qword accessors for all bus sizes, there are now masked word, dword and qword accessors for all bus sizes. Inverted the sense of the memory mask that is passed to read/write handlers. Previously, the mask indicated which bits were NOT requested to be read/written. Now, the mask indicates which bits ARE to be read/written, which is more logical. Updated a number of drivers and the MIPS CPU cores to comply.
 - 0.124u3            : Aaron Giles simplified memory.c code for dynamic installation so that a single function handles all the work; a NULL read or write handler indicates not to install anything for reads or writes. Andrew Gardner finished memory map merge for W drivers.
 - 0.124u2            : Memory map merges for drivers starting with U, V, W and Z [Andrew Gardner]. Rewrote core memory handlers as inline functions. These should be easier to trace through in a debug build, yet should operate the same as before [Aaron Giles].
 - 0.124u1            : Memory system changes [smf]: Now passing mem_mask to the read and write debug hooks. This allows the address & size of the memory access to be correctly calculated when using a memory call that takes a mem_mask. New macros added for checking mem_mask: ACCESSING_BITS_m_n. These check for any access within the bounds between bit 'm' and bit 'n' (counting bit 0 as the least significant bit). Currently the pattern for checking whether both bytes of a word is written is to make two byte checks. All occurrences of ACCESSING_LSB, ACCESSING_MSB, ACCESSING_LSB16, ACCESSING_MSB16, ACCESSING_LSB32, ACCESSING_MSB32, ACCESSING_LSW32, ACCESSING_MSW32 & simple mem_mask checks have been replaced with the new macros. Andrew Gardner merged memory maps for half of the W drivers. Also made a couple of random touchups for X, Y and Z drivers.
 - 0.123u5            : Aaron Giles changed internal memory mapping behavior to keep only a single address map and store the byte-adjusted values next in the address map entries rather than maintaining two separate maps. Many other small internal changes/cleanups. Replaced the following macros (SMH == static memory handler): MRA*_BANK*/MRA*_BANK* -> SMH_BANK*, MRA*_RAM/MRA*_ROM     -> SMH_RAM, MRA*_ROM/MWA*_ROM     -> SMH_ROM, MRA*_NOP/MWA*_NOP     -> SMH_NOP and MRA*_UNMAP/MWA*_UNMAP -> SMH_UNMAP. This removes the silly need for a bunch of redundant constants with faux type definitions that didn't buy anything [Aaron Giles]. Moved some memory system constants into memory.c. Some additional memory system cleanups [Aaron Giles]: Made address versus byte offsets explicit throughout. Removed some unused parameters. Consolidated initialization process. Removed maximum memory block count. Centralized bank management. Added masked handlers and change_pc to the accessors. Added memory_get_accessors() to return a pointer to the accessors for a given address space/databus width/endian configuration.
 - 0.123u4            : Andrew Gardner merged memory maps for drivers X->Z. In memory.c: removed some code never to be executed [Couriersud]: Removed "return 0" from READ* macros since it is unreachable. Removed comparisons of type FPTR < 0 and FPTR >= 0. Defined new set of memory handler functions which are similar but which pass a const device_config * in place of the running_machine *. These are called read8_device_func, etc. Added macros READ8_DEVICE_HANDLER() for specifying functions of this type [Aaron Giles].
 - 0.123u3            : Merged memory maps for a number of drivers beginning with a digit or the letter 'a' [Aaron Giles].
 - 0.122u3            : Aaron Giles added memory_get_bank() function. Fixed logging in memory.c to use %p for pointer values.
 - 0.122              : Oliver Stoeneberg fixed several minor memory leaks.
 - 0.121u3            : Aaron Giles fixed memory system regression caused by recent optimization. Fixed another bug uncovered as a result in the decrypted opcode management.
 - 0.115u1            : Aaron Giles changed memory system behavior so that masks can be specified independently of mirrors. By default if the mask is 0 and a mirror is present, the mask is implicitly ~mirror, just as before. But if a mask is specified, it is not limited to the non-mirrored bits. This allows you to independently control the mapping versus what is returned to the read/write handler.
 - 0.114              : Nathan Woods fixed bug introduced in the memory pool code when hashing was added.
 - 0.113u4            : Nathan Woods optimized the options code and memory pool code to use hashes for faster searching.
 - 0.112u4            : Improvements to the memory pool routines [Nathan Woods]: Added a pool_clear() call, to clear out a memory pool without freeing the pool itself. Added support for pool_realloc() with a size of zero, which effectively frees a pointer within a pool. Added testing code to validate pool behavior.
 - 0.112u3            : Added lib\util\pool.c/h. Nathan Woods created new utility module pool.c for managing memory pools. Rebuilt auto_malloc on top of this concept.
 - 0.112              : Oliver Stoeneberg partial fixed a memory leak (scsihd.c, scsicd.c, cdrom.c, stv.c, shootout.c, render.c and src\video.c).
 - 0.109u5            : Aaron Giles fixed subtle bug in subtable allocation in the memory system that caused the Eolith games to assert with the debugger.
 - 0.109u2            : Wilbert Pol fixed bug in memory map dumping code that caused wrong addresses to be dumped.
 - 0.106u3            : Added src\restrack.c/h. Nathan Woods refactored resource tracking code, auto_malloc(), auto_strdup() etc into a separate module restrack.c.
 - 0.105u4            : Nathan Woods added a NULL check on memory_set_bankptr(), memory_configure_bank() and memory_configure_bank_decrypted().
 - 0.105u1            : Aaron Giles changed automatic ROM assignment logic in the memory system so that it doesn't auto-assign out-of-bounds ROM regions. Modified a number of drivers that were using empty RAM regions for RAM or which had extraneous memory regions. Most significant changes were to the arcadia, nss and stv drivers.
 - 0.104u5            : Rewrote winalloc to be more dynamic and to ignore memory leaks in the runtime [Aaron Giles].
 - 0.104u4            : Lawrence Gold fixed a couple of small memory leaks and a crash bug found by Valgrind.
 - 0.103u4            : Nathan Woods fixed resource allocation issue with bitmaps in the Windows code and MESS.
 - 0.103u3            : Nathan Woods added memory_install_* calls that are not specific to specific bus widths (only for static handlers, not for function pointers).
 - 18th January   2006: Aaron Giles - If you're writing a driver, or adding save state support to a driver, it's important to understand how resources are managed in MAME. In the old days, resources in MAME weren't tracked at all: if you did a malloc(), you had to do a free(); if you did a timer_alloc() you had to do a timer_free(), etc. Except that you probably didn't bother in a lot of cases because the standard command-line version of MAME only runs a single game at a time, and so it didn't really hurt to leave a bunch of extra resources allocated when you quit. Of course, those other ports like MacMAME - which allow you to stop one game and start another without quitting - would find that they would eventually crash due to running out of memory or some other resource thanks to all the leftovers. Enforcing good resource management in the core is pretty straightforward: it is a relatively small amount of code, and doesn't change very quickly. However, enforcing good resource management across the hundreds of drivers is pretty much a nightmare. Drivers are hooked into the main system by providing callbacks. This is a list of the common ones: DRIVER_INIT, VIDEO_START/VIDEO_STOP and MACHINE_INIT/MACHINE_STOP. Most drivers allocate resources in either MACHINE_INIT or VIDEO_START, and in theory are supposed to provide a MACHINE_STOP or VIDEO_STOP callback to free those resources. In practice, this was used inconsistently, and it's also kind of a pain. Furthermore, some systems would allocate memory in DRIVER_INIT, but there was nowhere to properly free the memory. I suppose we could have added a DRIVER_STOP callback, but ultimately a different approach was taken. If you think about it logically, 99% of the time, you would want MACHINE_STOP to free up all the resources allocated by MACHINE_INIT. Similarly, you would want VIDEO_STOP to free up all the resources allocated by VIDEO_START. So what if, instead of reqiring each driver to write code to release the resources, the core simply kept track of which resources were allocated when and automatically released them at the appropriate time? Turns out this works pretty well. If you look at the ordering of when the callbacks are called, it looks like this (excuse the pseudo-code): init//  {//    DRIVER_INIT//    VIDEO_START//    reset://    {//      MACHINE_INIT//      run-the-game-until-exit-or-reset//      MACHINE_STOP//    }//    if we-exited-due-to-reset then loop back to reset://    VIDEO_STOP//  }//  exit. You'll notice that I have a couple of sets of curly braces embedded in the above pseudo-code. This gives you a hint as to how the automatic resource tracking works. It's very much like local variables in C/C++. As you leave each scope, all the tracked resources that were allocated within that scope go away automatically. When you hit the closing curly brace between MACHINE_STOP and VIDEO_STOP, the core will release all resources that were allocated since the corresponding open curly brace, which includes anything that was allocated at MACHINE_INIT time, as well as any tracked resources the core allocated at that time. Similarly, when you hit the second closing curly brace, all tracked resources allocated by DRIVER_INIT and VIDEO_START will be released. Note that I said tracked resources. Only certain resources are tracked, and some of them need to be explicit. Timers, for example, are always tracked. Anytime you allocate a timer in MACHINE_INIT, it will be released when you exit the inner scope. In fact, timers are tracked in such a way that there is no explicit timer_free() call anymore; you have to rely on resource tracking to get rid of them. The most obvious resource is not automatically tracked, and that is memory. The reason it is not automatically tracked is that there are some legitimate reasons for doing a malloc() and having it survive the boundaries of a scope. You can manually have MAME track memory by using auto_malloc() instead of malloc(). auto_malloc() works identically to malloc() except that any memory allocated will automatically be freed when you exit your current scope. You must be a little careful here because if you do an auto_malloc() in MACHINE_INIT and store that pointer in a global variable, the memory will be freed when the game is reset and MACHINE_INIT will be called again. Your global variable will still have that same pointer value, but the memory will be gone. The right approach is to never look at the old value of a global pointer like that, and simply always auto_malloc() in your MACHINE_INIT callback. Another common resource that needs to be manually tracked is bitmaps. There are auto_bitmap_alloc() functions that create bitmaps which are automatically reclaimed when leaving the current scope. The last major "resource" that is tracked in this fashion is a recent addition: saved state registrations. Prior to recent changes in the system, you could only register data to be saved in the outer scope (DRIVER_INIT/VIDEO_START) and no later. This was because MACHINE_INIT may be called multiple times if you hit F3 and reset the game, and the saved state system cannot handle duplicate reigstrations (I know, it doesn't seem that hard, but there were some major complications). In order to manage this, when you exit a scope, all saved state data that you registered within the scope will be forgotten, meaning you will need to re-register it again. Since the most likely case is that you registered it in your MACHINE_INIT callback, and since after a reset you will get another call to MACHINE_INIT, this doesn't really mean you need to do anything special. Simply perform your registrations there like nothing happened and it will all work out fine.
 - 0.101u3            : Thanks to the new opcode handling, removed "RAMROM" support from the memory subsystem altogether, and updated all drivers to simply limit their decryption to areas that the CPU decrypted [Aaron Giles].
 - 0.101u2            : Aaron Giles fixed a number of games that were broken due to the recent memory system changes. There are still more problems to fix; continue reporting them. Imported a number of memory handler conversion helpers from MESS, placed them in memconv.h.
 - 0.101u1            : Significant change to the memory system. RAM areas are now no longer allocated out of the memory_region for a given CPU. This means that drivers which assume that RAM is located at some offset to the base of the memory region will be broken. Changed timer_alloc_ptr-style timers so that the pointer parameter is supplied at allocation time and is not changeable. This makes these timers more easily supported in save states [Aaron Giles].
 - 0.100u4            : Aaron Giles converted a few more drivers over to using the new memory_configure_bank calls (1942.c, cinemat.c and 40love.c).
 - 0.99u8             : Aaron Giles added new functions memory_configure_bank() and memory_set_bank() which abstract bankswitching better. This allows current memory banking states to automatically be saved for drivers that use this feature. m62.c games have been updated to use this new feature as an example.
 - 0.96               : Nathan Woods fixed implementation of memory_get_op_ptr() (src\memory.c).
 - 0.92               : Nathan Woods reated a memory_get_op_ptr() call (src\memory.c). This call is equivalent to memory_get_read_ptr() in ADDRESS_SPACE_PROGRAM with the exception that it is aware of the opbase handler.
 - 0.91u1             : Aaron Giles fixed bug in memory system introduced in 0.91, this was breaking at least Killer Instinct, the Seattle driver and Where's Wally.
 - 0.91               : Memory System update with improved mirroring support [Aaron Giles].
 - 0.90u4             : Nathan Woods increased the amount of adjustable memory banks from 24 to 32.
 - 0.89u4             : Nathan Woods fixed memory.c MAX BANKS problem.
 - 0.88               : Memory system changes / fixes [Aaron Giles]. Added explicit casting to the memory handler width when computing the shifted data/mask values for read/write handlers -- this should in theory fix R. Belmont's 64-bit issues. Added memory_install_read/write8/16/32/64_matchmask_handler functions to allow dynamic installation of match/mask (AM_SPACE-style) memory ranges -- this should satisfy Frank P's request for the astrocade driver. Changed masking behavior for match/mask pairs so that an AM_SPACE with an AM_MASK does not expand the explicitly-specified mask value -- this should fix dwidel's problem getting Pac-Man accurate. Changed dynamic bank assignment to always assign a bank if you have explicitly specified a mask value via AM_MASK -- this should allow mirroring via AM_MASK if you want to, though AM_MIRROR is still preferred. Derrick Renaud added a new watchdog functionality. Changed watchdog to allow it to start at machine run start. If not used, the previous watchdog functionality is retained. Only define 1 of the 2 watchdogs per game. If both are defined then MDRV_WATCHDOG_VBLANK_INIT will be used only. MDRV_WATCHDOG_VBLANK_INIT(watch_count)- Initializes the watchdog in MACHINE_DRIVER_. watch_count is the # of vertical blanking intervals before a forced reset. If the time is unkown then you can use these defaults: DEFAULT_60HZ_3S_VBLANK_WATCHDOG or DEFAULT_30HZ_3S_VBLANK_WATCHDOG. MDRV_WATCHDOG_TIME_INIT(time)- Initializes the watchdog in MACHINE_DRIVER_. time is the time in seconds before a forced reset. New function to enable/disable the watchdog in game. watchdog_enable(0 or 1) - used to 0=disable or !0=enable. Fixed some last remaining issues with the new watchdog. The watchdog would not remain disabled after a watchdog_enable(0) in some conditions. Added a new function to change CPU clock speed in game. The current scaling factor will still apply. eg. If you force the CPU to change clock to 1MHz while the scaling is at 50%, the effective CPU speed will be 500kHz. Then reading the clock speed will give 1MHz, because clock scaling is transparent to the driver. int cpunum_get_clock(int cpunum): Returns the current CPU's actual unscaled running clock speed and void cpunum_set_clock(int cpunum, int clock): Sets the current CPU's clock speed and then adjusts for scaling.
 - 0.87u4             : Brad Oliver changed the static function implementations in memory.h to inline.
 - 0.82u3             : Nathan Woods added memory_install_*_handler_mirror() calls (memory.c).
 - 0.82u1             : Introduces memory_install_[read|write][8|16|32|64]_handler_mirror() calls, which install memory handlers that can mirror similar to the AM_MIRROR macro [Nathan Woods].
 - 0.79u3             : Aaron Giles removed some memory system test code. Nathan Woods changed all fatalerror() calls to osd_die() in memory.c.
 - 13th February  2004: Aaron Giles fixed the support for CPU-specific internal memory maps in the memory system.
 - 29th January   2004: Aaron Giles fixed a bug in the memory system involving shared RAM with a single memory map.
 - 27th January   2004: Aaron Giles fixed a bunch of drivers that were broken by the memory system changes.
 - 26th January   2004: Aaron Giles fixed a bug in the memory system that allowed programs to write to ROM.
 - 23rd January   2004: Olivier Galibert fixed the memory system to remove useless memory allocations, and he fixed compile warnings in various files. Aaron Giles fixed small bugs in the memory system.
 - 0.78u6             : Another big memory change [Aaron Giles]: The biggest change is the way address maps are declared in the drivers. Rather than having separate read and write address maps, there is now support for a single, merged map. In order to minimize the amount of code churn, there is currently still support for two separate address maps per address space, but they are combined into one internally early on in the memory initialization and setup. The old set of 'start' macros has been replaced by a single macro: ADDRESS_MAP_START(name, address_space, bits). and all drivers have been updated to use this new mechanism. In addition, all the PROGRAM_*, DATA_*, and IO_* synonyms are now merged into a single ADDRESS_* macro. For example, PROGRAM_MAP_FLAGS is now just ADDRESS_MAP_FLAGS. The next big change is that the address maps, in addition to being unified, are no longer static arrays. Rather, they are constructed in much the same way the machine drivers are constructed. Through a series of macros, the address maps are built up in code and type-checked along the way. All existing MAME drivers have been updated to the new macros. In addition, there are many new options available to support extra features like mirroring, automatic pointer assignment, and shared memory pointers. As of this version, only seattle.c and system24.c have been updated to support the new constructs. Use these as examples of what can be done. Also, see the top of memory.c for an explanation of all the new macros. Once again, the way memory is automatically allocated has changed. It is now done based on the memory maps, like it used to be, but with the added support for shared pointers and hard-coded pointers into memory regions. Save states should now work, but once again, they are saving more data than is strictly necessary. Internally, the way address map lookup tables has changed, so that subtables can be reused. This is important if a small memory region is mirrored across a large address space; the old code didn't coalesce identical subtables, which would have blown up in a big way with tricky mirrors. Renamed a bunch of internal memory state, including OP_ROM, OP_RAM, and several others.
 - 20th January   2004: Aaron Giles sent in another big memory system change, adding support for merged read/write memory maps and mirroring.
 - 14th January   2004: Olivier Galibert fixed a typo in the memory system error logging.
 - 0.78u4             : The memory_set_bankhandler calls are now officially history. There were fewer than a dozen drivers using them, and they all have been converted over to using install_mem_read_handler instead where appropriate. This eliminates the last 8-bit-specific hack in the memory system. As a result, RAM reads and writes out of banked memory should be slightly faster on 8-bit CPUs because they are handled inline. * New dynamic memory allocation scheme. The previous method relied on parsing the read/write handlers. The new method simply looks at the top-level memory map after it has been populated, and allocates memory for any mapped 16k chunk. This will likely cause more memory to be allocated than before, but the process is less error prone. Also, checks are now in to make sure that the memory_region for the program address space is the minimum necessary to support non-sparse address spaces. * Fully integrated save/restore memory blocks. Before, the save/restore system had its own memory map walking routines. That's gone now. Instead, memory blocks are registered as they are allocated by the dynamic memory allocator. Note that this will likely cause save states to be bigger than they were before (and certainly, they will not be compatible), but disk space is cheap, live with it [Aaron Giles].
 - 13th January   2004: Aaron Giles sent in phase 2 of the memory system update, adding proper support for Harvard architecture CPUs (separate program and data memory), improving support for CPUs with an implicit address shift (TMS34010 and TMS32031), improving the memory allocation scheme and other things.
 - 0.78u2             : Significant overhaul of the memory system. This is the first of several phases, but it lays the groundwork for future improvements. This first change will also be the most disruptive, touching every CPU core and every driver file [Aaron Giles]. The biggest change is the introduction of the concept of address spaces. Each CPU can have up to 3 separate address spaces now, with the possibility of easily adding more in the future. Each address space has its own addressing semantics, including databus width, address bus width, address shift, and unmapped memory value. The three existing address spaces are defined to be program, data and I/O. The program address space is where code is assumed to live; it is also where all memory lives in standard von Neumann architecture CPUs. The data address space is for Harvard architecture CPUs, and will be used in the future to do proper program/data separation for the CCPU, PIC16C5x, ADSP210x, TMS32010, and TMS32025. The I/O address space is used for port accesses, such as those performed by the Z80 and x86 CPUs. The read/write handlers used by CPUs to access memory have all been renamed in the shuffle, both in order to match the address space naming conventions (program/data/io) and in order to make it clearer what they do. In addition, they have been unified to a large degree. Instead of separate memory accessors based on both the address bus width and the data bus width, there is now just one shared set of memory accessors for each data bus width. Because of this mechanism, the old function memory_set_unmap_value() has been deprecated. All drivers using this have been updated to use the new mechanism instead. Also note that the MRA_NOP handlers have been changed to return the unmapped value as well, instead of always returning 0. Another "feature" that has changed is that unmapped reads and writes to address spaces of less than 20 bits no longer act like RAM. This may break some drivers, but it ends the special treatment of 8-bit address spaces. The other significant change in this release is the way CPUs are defined and referenced. Previously, the file cpuintrf.c contained a huge table with many pointers into each CPU, and a bunch of data about each CPU type. This was problematic to maintain, and left a bunch of data out of the CPU core to be defined by MAME instead. The new release defines a new function that every CPU core must implement, of the form: <cputype>_get_info(UINT32 state, union cpuinfo *info). This is the only public function defined for each CPU core. The table in cpuintrf.c now simply consists of an enumerated index for the CPU type, followed by the pointer to the actual CPU's get_info function. The flexible get_info function is then responsible for providing pointers to all the remaining functions. All the existing MAME CPU cores have been updated to work with this new system. Also, for most cores, all functions and the icount global variable have been made static apart from the get_info function. A number of selectors for get_info/set_info have been defined to return information about the CPU, including the address and data bus sizes for all address spaces, clock dividers, IRQ line size, context size, etc.
 -  8th January   2004: Aaron Giles sent in the first batch of massive memory system overhaul, adding support for separate address spaces (program, data, I/O) and unifying read/write handlers of different address bus widths.
 - 0.77               : Memory annoyance fix [Aaron Giles]: Unmapped memory accesses always reported the raw byte address, not the CPU-level address. This is annoying for chips like the TMS34010 or the TMS32031, so now the effecitve offset is logged instead, taking into account the address shift.
 - 0.72u2             : Guard against OP_ROM/OP_RAM overflows [Nathan Woods]: This patch adds an optional facility to guard against OP_ROM/OP_RAM overflows. This is implemented by adding new variables OP_MEM_MIN and OP_MEM_MAX that track the minimum and maximum address ranges for which using OP_ROM/OP_RAM is valid. Support for this feature is enabled via conditional compilation in memory.h. There are three possible modes: CPUREADOP_SAFETY_NONE - The status quo; no range checking at all, CPUREADOP_SAFETY_PARTIAL - Range checking only against the maximum address and CPUREADOP_SAFETY_FULL - Range checking against both the minimum and the maximum. This patch has MAME using CPUREADOP_SAFETY_NONE, unless MAME_DEBUG is defined in which case CPUREADOP_SAFETY_FULL is set. Thus as is, this patch should have zero effect on release versions of MAME. Additionally, being able to safely disassemble code near bank boundaries when using the MAME debugger is extremely useful. There is a slight performance hit when this is enabled.
 - 0.60               : New function memory_set_unmap_value(), to specify the value returned when an unmapped memory address is read [Aaron Giles].
 - 28th March     2002: Aaron Giles added a feature to the memory system that returns a pre-specified value from unmapped memory addresses.
 - 0.53               : New function auto_malloc(); this is the same as malloc(), but the memory is automatically freed when the driver exits [Aaron Giles].
 -  3rd May       2001: Aaron Giles updated the memory system, re-organizing a bit.
 - 0.37b13            : 16-bit and 32-bit read memory handlers now have the additional mem_mask argument, like write handlers.
 - 0.37b9             : Major rewrite of the memory interface [Aaron Giles]. The interface to the system is nearly identical, but the core has been rewritten. Input ports are now handled just like memory accesses. Input ports are also the same width as memory for a given CPU. For example, a 16-bit CPU now needs both 16-bit memory handlers and 16-bit port handlers. Interfaces for 16-bit and 32-bit port handlers have been added. New macros exist now for generating and declaring a set of memory handlers. This makes it very easy to add a new address space. The "voodoo constants" ABITS1_xx, ABITS2_xx and ABITSMIN_xx are no longer necessary. The number of supported banks has been expanded to 24. The memory_set_bankhandler_* functions now take an additional parameter which serves as an additional offset into the memory space. The namcos1 driver has been modified to take advantage of these features. It is now possible to manually limit the number of active address bits by using a special MEMPORT_SET_BITS() macro in the read or write memory definitions. See the rpunch driver for an example (Rabio Lepus only maps the low 20 bits of the 68000's 24-bit address space). A new function cpu_get_pc_byte returns the byte offset of the current CPU's PC, adjusted for Harvard architecture CPUs and CPUs which track the PC at the bit or word level. Several functions and macros have been renamed. All drivers have been updated accordingly: cpu_setbankhandler_*  -> memory_set_bankhandler_*, cpu_setOPbaseoverride -> memory_set_opbase_handler, memoryswapcontext     -> memory_set_context, cpu_readport          -> cpu_readport16, cpu_writeport         -> cpu_writeport16 and change_pc             -> changepc_16. A handful of drivers haven't been converted to the new memory API yet, and therefore don't work. On startup, they will give the error "cpu # uses wrong data width memory handlers!" and refuse to start.
 - 0.37b8             : Major changes to the memory interface. Drivers must use the new MEMORY_READ_START etc. macros, and for 16-bit CPUs the API is completely changed: the new READ16_HANDLER, WRITE16_HANDLER function types must be used for memory handlers. The macros READ_WORD(), WRITE_WORD() etc. are obsolete: handlers must directly access 16-bit wide arrays (use data16_t * instead of the old unsigned char *); always use the new macro COMBINE_DATA() to store data in the arrays correctlyhandling 8-bit wide memory accesses. Use ACCESSING_MSB and ACCESSING_LSB to know if the specified byte is being accessed (necessary for 8-bit wide external hardware). You no longer have to use MRA_BANKx for sparse RAM areas, you can use MRA_RAM just like with the 8-bit games. A handful of drivers haven't beenconverted to the new API yet, and therefore don't work. On startup, they will give the error cpu # uses wrong data width memory handlers! and refuse to start. The cheat system might be broken for 16-bit CPUs (untested) [Juergen Buchmueller].
 - 0.37b1             : Updated all memory handlers to the new READ_HANDLER()/WRITE_HANDLER() macro declarations. The old "function(int offset,int data)" style must not be used anymore.
 - 0.36b12            : Removed memory_region from struct MachineCPU, now this information is stored directly in the ROM list using the REGION_CPUx attributes. Also remember that now you must never use Machine->memory_region[], always use memory_region() (and the same for memory_region_length).
 - 0.36b10            : Removed base and size from struct MemoryReadAddress, use MemoryWriteAddress to store the pointers. Several drivers had the bad habit of using MemoryReadAddress to initialize those variables, hopefully I haven't broken any while updating them [Nicola Salmoria].
 - 0.36b7             : New function findmemorychunk() that lets you look up a chunk of memory and get its start/end addresses, and its base. This can be used (carefully!) by drivers that wish to access memory directly without going through the readmem/writemem accessors (e.g., blitters) [Aaron Giles].
 - 0.34b5             : New functions install_mem_read_handler() and install_mem_write_handler(). They can be used to install special memory handlers (for example, to trap busy loops, or to make small changes to the memory map for games running on similar hardware) [Alex Pasadyn].
 - 0.34b1             : Added memory_region_length field to the RunningMachine structure. This could be useful for drivers which handle several games on similar hardware [Nicola Salmoria].
 - 0.29               : Added memory.c/h. New memory handling functions, about 10%-30% faster than before. Moved the memory code from cpuintrf.c to memory.c. Banked ROMs can now be handled in a cleaner and faster way. Use the new MRA_BANK1... types in the memory handler arrays, and cpu_setbank() to set the current bank. The Z80 and M6809 emulators natively support bank switching. IMPORTANT: for 24 bit addressing (i.e. 68000) you cannot associate a memory handler to a single byte. You must use four consecutive bytes, longword aligned. This was done to speedup word (2 bytes) and dword (4 bytes) operations [Tatsuyuki Satoh, Aaron Giles].
 - 0.27               : Drivers are now allowed to modify the RAM and ROM pointers to implement bank switching [Nicola Salmoria]. Bubble Bobble uses this. Be careful: When using this feature, you cannot use the standard MRA_RAM and MWA_RAM memory hooks to access RAM.
 - 0.24               : Mike Coates provided a modification to COMMON.C to support multi bank characters. It uses bits 8-15 of the charset array (short int - so hopefully at least 16 bits on all implementations) to signify bank number.
 - 0.09               : The memory handling was no longer up to the task, so I had to make it more flexible [Nicola Salmoria]. RAM is no longer a static array; it is dynamically allocated by readroms(), split in memory regions (one for the CPU addressing space, one for graphics ROMs, and so on) so data not needed at run time, like the graphics data, can be unloaded from memory after conversion. The definition and usage of struct RomModule and struct GfxDecodeInfo has changed. struct RunningMachine contains an array of pointers to memory regions. RomModules are now defined using macros, and readroms() does some error checking as well. This greatly reduces the chance of making a silly mistake. And don't ask me why, but as a result of this change the emulation seems to run much faster than before!



 6.1  ROMLOAD/ROMREGION

 - 0.285              : Use "classic" locale for ROM loading (emu\romentry.cpp) [Vas Crabb].
 - 0.272              : Resolve tags for ROM_COPY relative to current device properly. Tags can contain multiple colon-separated parts. Also, we really don't need tag manipulation code proliferating throughout the codebase [Vas Crabb].
 - 0.260              : Allow clone CHDs to use parent CHDs as parents. Allow caller to provide a helper for finding parent CHDs and expose (recursive) missing parent status (util\chd.cpp). Search parent systems/devices/software for parent CHDs on encountering a delta CHD (emu\romload.cpp). Report error on delta CHDs when parent can't be found (emu\romload.cpp). Check parents for matching CHDs with different names for devices as well as systems and software (emu\romload.cpp). Don't search parent device search path for software media. This was a piece of emergent behaviour in the original implementation of software media loading. It was preserved in the last big refactor of ROM loading, but it can be removed now to simplify the code (emu\romload.cpp). Updated docs for changes to media loading behaviour. Note: To save space, MAME allows delta CHD files to be used for clone systems, devices with parent ROM devices and clone software items. The delta CHD file must use a CHD format disk image from the parent system, parent ROM device or parent software item as its parent CHD file. The space saved depends on how much content can be reused from the parent CHD file. MAME searches the same locations for parent CHD files that it would search for the disk image itself [Vas Crabb].
 - 0.259              : Use std::string_view in determine_bios_rom (emu\romload.cpp) [AJR].
 - 0.252              : Got rid of long-obsolete ROMENTRYTYPE_CARTRIDGE and improved comments on ROM entry type constants (emu\romentry.h) [Vas Crabb].
 - 0.249              : Added pre and post rom bank change callbacks and changed almost all users to 'pre' (emu\dirom.ipp/h) [hap].
 - 0.221              : ROM loading cleanup: More flexible constructors for path_iterator and emu_file. More straightforward system/device ROM loading and software loading when using ROM loader. Proper parent walk when searching for identical CHDs with different names from software list. Fixed hangs if software item parents form a loop. Fixed layouts being loaded from bogus empty paths. Note that there are changes in behaviour: For software list ROMs/disks, MAME will now search the software path before searching the machine path. The search path for the owner of the software list device is used, which may not be the driver itself. MAME will no longer load loose CHDs from the media path - it's just too unwieldy with the number of supported systems. MAME will no longer search archives above the top level of the media path [Vas Crabb].
 - 0.220              : Restored lost message about invalid BIOS (emu\romload.cpp) [Robbbert].
 - 0.218              : Switched ROM size members from u32 to u64 (emu\romload.cpp). Fixes incorrect loading percentages in Happy Fish (V2 PCB, 302-in-1) [Ryan Holtz].
 - 0.217              : Fixed region width/endianness in calchase.cpp, igs_fear.cpp, mquake.cpp, upscope.cpp and voyager.cpp. Enforce that width and endianness of directly-mapped ROM regions should match those of the address space. All of the once-numerous validation failures that this change induced have been fixed in preceding commits. Unmerged drivers may need to be modified to comply with this (emu\addrmap.cpp). Minor cleanup, getting rid of a few static helpers (emu\romload.cpp) [AJR].
 - 0.216              : Fixed region width in many drivers. Note: Many of these ROMs are really accessed as bytes or 16-bit words rather than at the native 32-bit or 64-bit widths, thanks to unemulated dynamic bus sizing and/or bridge controllers [AJR].
 - 0.208              : BIOS flag should apply to fills (and removed zero-value comments) (emu\romload.cpp) [Vas Crabb].
 - 0.201              : Fixed disk entry processing (emu\romload.cpp) [Patrick Mackinlay].
 - 0.200              : Moved ROM loading macros to romentry.h and removed romload.h from emu.h [AJR].
 - 0.199              : Move the +1 to the proper place in the ROM BIOS macros (emu\romload.h and romentry.h) - that's been confusing people for far too long. Added a valdiation check for ROMs with BIOS flag set that are unselectable, fix the things it uncovers. Allow BIOS declaration before first ROM region [Vas Crabb].
 - 0.198              : Eliminated extraneous machine argument (emu\romload.cpp) [AJR].
 - 0.196              : Restricted ROM labels to a filesystem- and shell-safe subset of printable ASCII. Note: The trouble with the ROM label field in MAME is that it serves multiple competing purposes: It's supposed to identify the device in the original system, and also act as a filename when searching for media image files to load. It also has to appear in listings of needed/missing files (e.g. in cases where the image _isn't_ found). To identify the original device, the ROM label field in MAME often contains text derived from some combination of one or more of the text on a label if present, the silkscreen on an IC package, the location on the circuit board, and the device designation. There's no standard for the order in which these appear and how they're separated. Some people add arbitrary filename extensions and other annotations. There are practical limitations on what can appear in the string, given it's used as a filename: * Path/name length limits. * Restrictions on characters that can appear in a filename. * Practicality of using the filename in a command-line environment. * Ambiguity when describing a filename. Filesystems themselves typically restrict characters in filenames: * Windows defines MAX_PATH as 260 characters - longer paths are difficult to use with Win32 APIs and don't work properly in Windows Explorer. * Most filesystems don't allow ^@ or the path separator in names. * Windows doesn't allow C0 control characters or <>:"/\|?* characters in filenames. * Filesystems may have collation, e.g. FAT16 is case-folding, NTFS and HFS+ are case-preserving but case-insensitive, while EXT and XFS are case-sensitive. * Filesystems may perform Unicode normalisation, e.g. NTFS forces NFC, HFS+ forces NFD, while ZFS stores filenames as supplied at creation, but may be configured to apply normalisation when testing equality. Shells use various ASCII characters for special purposes: * C0 control characters for line editing and control (e.g. ^C to cancel a line, ^V for control charecter escape, ^R for history search). * The "'\ chracaters for quoting/escaping. * The ><| characters for redirection. * The *?[] characters for pattern matching. * The ${}~ characters for variable substitution/sequence expansion. * The ! or ^ characters for history substitution. * The ()` characters for controlling subshells. * The %& characters for job control. * The ; character as a command separator. * The # character for comments. There's also the issue of whether users across a range of locales will be able to type/display characters. We still don't have good support for Unicode console output on Windows (std::wcout doesn't seem to work properly), many users don't install C/J/K fonts, and many users aren't comfortable entering text in unfamiliar languages. This means we're limited to printable ASCII for practical purposes. The practical limitations mean the subset of "safe" characters is limited to ASCII digits, either uppercase or lowercase English Latin (but not both due to collation behaving differently across systems), and the +,-.=_ punctuation chracters. We've decided on lowercase, digits and safe punctuation. In addition to this, spaces are allowed, as they can be quoted/escaped easily enough if no other special characters are used. There have been some arguments that allowing uppercase is "more accurate", but in practical terms it doesn't add much value. A string in a C++ program can't represent layout, relative size of text, colour and shape of the label, text font, graphics and many other details. It also does nothing to address labels with text outside the English Latin alphabet (e.g. labels with Chinese ideographs). Besides missing information, the lack of hard and fast rules means you need to intuit what a label string in MAME is trying to represent. There is simply no substitute for photographs. There wasn't even any consistency in case within individual machine sets. For example, several games in vigilant.cpp had inconsistent case for "ic" vs "IC" in designation suffixes, and ibm6850.cpp had inconsistent case for filename extensions withing a set. There were sets that used uppercase for text from the label but not from the part number/PCB location, and vice versa. It was a huge mess. There's some merit to the idea of allowing a wider variety of characters in the label strings in the source, and mapping to a more restricted set when searching for files. However it creates more issues than it solves. It would require a change to the XML output to provide both the label and filename, and a corresponding change to external ROM management tools. It would be impractical to do for software lists, because it would require ROM management tools to implement the exact same mapping algorithm as MAME. But that aside, actually doing useful mapping would be impractical. What would you do with C/J/K ideographs, like the chip labelled ???? (Dongfang Bubai)? There's no intuitive way to do the mapping wtihout incluing something like Unihan data, which would add a lot of bloat. Even the, without a language hint the Romanisation would be less than ideal in many cases (using Chinese reading for Japanese text and vice versa). There's still the messy issue of filesystem collation to deal with [Vas Crabb]. Account for same label different hash (sldh) comments that arose with rom label changes [Tafoid].
 - 0.190              : Defer decoding DOS timestamps (util\unzip.cpp). Turn most of the ROM entry accessor macros into templates, and make them work on tiny_rom_entry/rom_entry pointers/references, also claw back a little performance lost in the ROM entry refactoring. Make ROM BIOS reported in listxml output match what ROM loading does. This is the soure of the "BIOS can only apply to one region" meme - it actually works for all regions, but the listxml output was wrong, making it look like it didn't work. Start adding stuff for iterating ROM entries in a more C++ way without needing to allocate everywhere, improved performance of -listxml by another 10% or so [Vas Crabb].
 - 0.188              : Changed Romload to show all actual hashes on a mismatch [Nathan Woods].
 - 0.185              : Workaround for sibling disk image loading issue (emu\romload.cpp) [Nathan Woods].
 - 0.182              : Added tools\discrepancy-fixer.py and discrepancy-spotter.py. Added handy ROM filename discrepancy spotter scripts [Zoe Blade, Vas Crabb].
 - 0.177              : Added emu\romentry.cpp/h. Miscellaneous cleanups to diimage.cpp/h; mostly std::string stuff. Changed various string arguments for emu_file::open() from 'const char *' to std::string (emu\diimage.cpp, fileio.cpp/h and romload.cpp). Fixed breakage caused by a change in how the byte for ROM_FILL is represented with recent changes (emu\romload.cpp). Introduced a tiny_rom_entry structure, for the purposes of ROM declaration. C++-fiied code that iterates over rom_entry arrays (without usage of rom_[first|next]_*). Changed how ROM_COPY and ROM_FILL are represented in tiny_rom_entry to be more how they were in the past. Turbo Sub had a ROM_COPY declaration with an expression ('ROM_COPY( "main_code", 0x18000 + 0x2000,...) and this simply did not work with the new model. This required changing ROM_* declarations to more resemble how they used to be and to perform the conversion on load. Adding parentheses around some (but not all) ROM_* macro parameters (emu\romload.h) [Nathan Woods].
 - 0.175              : Added ROMX_FILL, passing a ROM_SKIP(param_value) will fill and skip just like a ROM_LOAD16_BYTE macro [Angelo Salese].
 - 0.169              : nullptr to 0x00 for ROM_FILL and ROM_COPY [Miodrag Milanovic].
 - 0.160              : Fixed ALT+TAB during ROM loading screen causes assert with -debug (MT05846) [Peter Ferrie].
 - 0.155              : Fixed memory leak when loading CHD from software list (emu\romload.c) [Oliver Stoeneberg].
 - 0.154              : Fixed up known same label/different hash instances in source (drivers\8080bw.c, astrof.c, bombjack.c, cps1.c, fcrash.c, funworld.c, galaxia.c, galaxian.c, galpanic.c, goldnpkr.c, goldstar.c, kingdrby.c, magic10.c, namcona1.c, namcos23.c, polepos.c and wpc_95.c) [Tafoid]. Fixed loading 0-sized roms or samples causes crash [O. Galibert].
 - 0.151              : Removed DISK_ISOPTIONAL macro in favor of identical ROM_ISOPTIONAL. Show detailed NOT FOUND messages for missing CHDs (emu\romload.c) [Oliver Stoeneberg]. Invalid BIOS is a fatal error (emu\romload.c) [Curt Coder].
 - 0.148u2            : Fixed loaded rom percentage going beyond 100% with softlist entries. Previously, loading from softlist was using the BIOS romsize as totalsize to load, explaining both the erratic percentage values in systems like AES and the totalsize = 0 error in NES and other bios-less systems, which was requiring a special workaround. Handling is still not perfect (e.g I think that first the BIOS is loaded and counter goes to 100%, then the cart is loaded and the count restarts from 0%, so it would be better to have a separate message for the softlist loading, but I need to study in depth the code before such a change), but it's definitely better than having AES carts loading up to 12575% or NES skipping completely the soft percentage due to totalsize =0. Reset rom size counter when starting to load software. Attempt to improve loaded rom percentage display. Namely, with this change the emulator displays first a "Loading Game N%" while loading MAME game or MESS system roms, then it switches to "Loading Software %N" while loading from softlist (this also applies to Megatech, ST-V and NeoGeo lists in MAME). I'm not completely happy with passing a "from_list" boolean to modify the behavior, but I have found no better solution. If you find any, please be my guest and replace this solution with yours. Lists have no BIOS flag, so this check is redundant [Fabio Priuli].
 - 0.147u2            : Tell in which zips a missing rom was searched for (emu\romload.c) [O. Galibert].
 - 0.146u5            : Display correct software load messages depending of supported attribute value (emu\romload.c). Fixed no to display missing roms in case of not supported software (emu\romload.c) [Miodrag Milanovic].
 - 0.145u2            : Removed rom_source abstraction, which was just mapping to devices anyways. Updated everyone involved to just iterate over devices directly [Aaron Giles]. ROM label adjustments to match discussed format [Tafoid]. ROM label adjustments for nwk-tr.c [Guru]. Report drivers with no roms as best available, but don't display anything for devices with no roms. Don't display slot devices that have no roms either. If no roms are found or are required then display error [smf].
 - 0.143u6            : Allow region tags starting with a : to mean "absolute" so devices can access the parent base driver's ROM regions [R. Belmont].
 - 0.143u3            : Removing MD5 support in ROMLOAD_* [Oliver Stoeneberg]. Updated romload so devices are loaded from separate files [Miodrag Milanovic].
 - 0.129              : Aaron Giles removed a couple of unnecessary typedefs from mamecore.h. Updated romload to use an astring for accumulating errors (I always feared busting that buffer with some huge romlist). ROMload cleanups [Aaron Giles]: Added running_machine to internal structure, removed as explicit parameter. Added new function rom_file_size() to compute the size of a ROM. Removed rom_first_chunk() and rom_next_chunk() which are no longer needed (all users can use rom_file_size() now). Changed progress display to be based on size of ROMs loaded. Changed temporary load buffer to be dynamically allocated. Fixed reload logic to handle skipped BIOSes.
 - 0.127u4            : Aaron Giles fixed device-based ROM loading to support loading ROMs from the game's ZIP as well.
 - 0.127u3            : Aaron Giles added new device interface selector: DEVINFO_PTR_ROM_REGION. This allows a device to provide a set of ROM regions to be loaded along with the game ROMs. It is expected that most regions defined for devices will use the ROMREGION_LOADBYNAME flag to enable the ROMs to live in a central location. Aaron Giles added new ROMREGION flag: ROMREGION_LOADBYNAME, which means that if the ROMs in that region are not found in the usual driver files, then the name of the region will be used as a driver filename for loading. Aaron Giles added concept of rom sources to the rom loader. Updated auditing, CLI utilities, validity checks and ROM loading to use these new functions so that device-specific ROMs are handled properly.
 - 0.126u3            : Aaron Giles added region and regionbytes fields to the deviceconfig, which are auto-filled by the device manager before starting the device. This simplifies the auto-binding process for devices. Added new selector for device-specific ROM regions. Not yet wired up in the ROM loader.
 - 0.126u1            : Aaron Giles changed the ROM loading code to actually alter the region flags based on the CPU endianness and bus width when creating the region, rather than fixing them up on the fly. This means that callers to memory_region_flags() will get the correct results.
 - 0.122u7            : Aaron Giles made detection of dynamic attempts to install ROM/RAM handlers more aggressive. Previous checks would not catch modifications in DRIVER_INIT or MACHINE_START calls. Fixed a number of cases of incorrect usage throughout the drivers.
 - 0.109u1            : Aaron Giles rewrote unzip.c to return richer errors and generally behave better.
 - 0.108u3            : Aaron Giles added new ROM loading option, ROM_IGNORE() which works just like ROM_CONTINUE() except that you don't need to load the data anywhere. It can be used when larger ROMs are present and only a portion of the data is used. See solomon.c for an example.
 - 0.108u2            : Buddabing removed recently-introduced case dependency in the ROM naming.
 - 0.106u10           : Aaron Giles added rudimentary progress displays during ROM loading and graphics decoding so you have something to look at instead of a black screen.
 - 0.105u3            : Aaron Giles removed a number of unused ROM regions. Most (but not all) of the empty ROM region warnings are now taken care of.
 - 0.105u1            : Aaron Giles changed automatic ROM assignment logic in the memory system so that it doesn't auto-assign out-of-bounds ROM regions.
 - 0.104u2            : Added src\romload.c/h. Split out ROM management from common.c and moved to a new file romload.c [Aaron Giles].
 - 0.102u3            : Nathan Woods added a MESS specific ROM entry type, and changed ROM entry processing code to ignore any unrecognized ROM entry types.
 - 0.94               : Aaron Giles added macros for ROM_REGION64_LE and ROM_REGION64_BE.
 - 0.70u1             : Added ROM_LOAD32_DWORD (src\common.h) [Nathan Woods].
 - 0.37b9             : Major rewrite of the ROM loading interface [Aaron Giles]. The previous ROM loading system was showing its limitations, and was often the source of confusion about byte ordering. The new system attempts to address these concerns. All drivers have been converted to use the new system exclusively; the old macros are deprecated immediately. The ROM_REGION macro now takes a third parameter, which holds the various flags for the region. These flags have been expanded to describe the data width and endianness of the region (except for CPU regions, which obtain their width and endianness from the associated CPU). This information is used after the region has been loaded in order to appropriately byte-swap the data for the native endianness of the target platform. Additional region flags are now provided: ROMREGION_INVERT performs a logical NOT on all data in the region. And ROMREGION_ERASE can be used to clear the region to a specific byte value before loading ROMs. For ROM loading, the old collection of ROM_LOAD_XXX_EVEN/ODD macros is gone. To load a ROM into every other byte in a region, use the new macro ROM_LOAD16_BYTE. All data should now be loaded in the natural alignment and endianness of the region. Only after the ROMs are loaded will the data be modified to correspond to what the CPU needs. If you are loading data for a CPU into a non-CPU region (for example, you are loading 68000 code into REGION_USER1), you need to make sure to tag the region the same as the CPU. For a user region containing 68000 code, you should use the ROM_REGION16_BE() macro to declare the region. This isn't necessary for REGION_CPUxx because the ROM loader automatically determines the information it needs from the CPU interface. If you have old drivers to convert, these conversions cover 99% of all cases (the (0) or (1) indicates that the offset field should be an even (0) or an odd (1) address): ROM_LOAD_EVEN         -> ROM_LOAD16_BYTE(0), ROM_LOAD_ODD          -> ROM_LOAD16_BYTE(1), ROM_LOAD_WIDE         -> ROM_LOAD16_WORD, ROM_LOAD_WIDE_SWAP    -> ROM_LOAD16_WORD_SWAP, ROM_LOAD_GFX_EVEN     -> ROM_LOAD16_BYTE(0), ROM_LOAD_GFX_ODD      -> ROM_LOAD16_BYTE(1), ROM_LOAD_GFX_SWAP     -> ROM_LOAD16_WORD_SWAP, ROM_LOAD_V20_EVEN     -> ROM_LOAD16_BYTE(1), ROM_LOAD_V20_ODD      -> ROM_LOAD16_BYTE(0) and ROM_LOAD_V20_WIDE     -> ROM_LOAD16_WORD.These new macros are built upon a more flexible collection of ROM-loading operations. ROM data is now loaded in "groups" of 1-16 bytes, with 0-15 bytes of empty space left between each group. The data in each group can be loaded in standard order, or in reversed order. And each byte of data loaded can be masked and shifted to blend with other data that has been previously loaded. Furthermore, since almost every ROM_RELOAD and ROM_CONTINUE was used to load the ROM with the exact same parameters, these macros now inherit the behavior of the previous operation. This eliminates the need for ROM_RELOAD_GFX_EVEN and all the other macros that cluttered up the old system. For example, if you use ROM_LOAD16_BYTE to load some data, and follow it with a ROM_CONTINUE to load additional data at a separate offset, the ROM loader will continue loading every other byte. Finally, there are two new entries that can be used to help fill in unused or duplicated ROM data: ROM_FILL( offset, length, byteval) and ROM_COPY( source_region, source_offset, offset, length ). ROM_FILL simply clears blocks of a region to a specific byte value. ROM_COPY can be used to copy previously-loaded data from the same or another region [Aaron Giles].
 - 0.37b6             : [DOS] Instead of the internal game name, you can use on the command line the .zip file name, it can also include path, so for example MAME G:\MyBoards\pacman.zip will be equivalent to MAME pacman -rompath G:\MyBoards [David Widel].
 - 0.36b16            : Removed the old ROM_REGION() and ROM_REGION_DISPOSE() macros, and renamed ROM_REGIONX() to ROM_REGION().
 - 0.36b14            : Removed *rom_decode and *opcode_decode from struct GameDriver. Decryption must now be handled by *driver_init. If opcodes and data are decrypted separately, remember to allocate a larger chunk of memory in the ROM declaration, decode the opcodes there, and call memory_set_opcode_base() to tell the memory system where the opcodes are. Note that this new system allows bank switching with encrypted ROMs, which wasn't possible before [Nicola Salmoria].
 - 0.36b10            : Removed prom_memory_region from struct GameDriver. The PROM memory region is now specified directly in the ROM declaration, with ROM_REGIONX( length, REGION_PROMS ). Similarly, REGION_GFX1..8 are defined for gfx decoding, but drivers have not been updated to use them. See drivers\namcos86.c for the only example.
 - 0.35RC2            : Simplified the error message when ROMs are missing. It now gives a list of all the missing ROMs, it doesn't stop at the first one [Nicola Salmoria].
 - 0.35b11            : A missing ROM for which no good dump is known to exist is no longer a fatal error - you can start the emulation even if the file is missing. Its space will be filled with random data. Of course the game will probably malfunction. The output of -verifyroms is slightly changed, it says "NO GOOD DUMP KNOWN" now and doesn't print 00000000 checksums [Nicola Salmoria].
 - 0.33b6             : Greater flexibility for ROM placement: ROMs are looked for both in the directory named after the clone, and in the one of the original game. Note that due to how zip support works, if the ROMs are zipped they can be in subdirectories as well (clones data has not been entered yet so this is not complete). IMPORTANT: due to this change, some ROM sets might require renaming to work again.
 - 0.30               : You can keep the ROMs in a subdirectory called "ROMS", if you want to. When loading ROMs for 'gamename', the program will look in these directories in this order: 1) gamename, 2) gamename.zip, 3) ROMS\gamename and 4) ROMS\gamename.zip. The same applies to samples, you can put them in a subdirectory called SAMPLES - therefore separating them from the ROMs [Nicola Salmoria]. New option -romdir which allows to specify a different directory where to load the ROMs from [Mike Balfour].
 - 0.29               : New ROM_LOADEVEN and ROM_LOADODD macros [Aaron Giles].
 - 0.15               : Maintaining the endless list of ROM subdirectories was getting quite boring, so I modified readroms() to make it automatically print the complete list of required ROMs if one is missing [Nicola Salmoria]. I think I should add a CRC check as well. I also added a brief explanation of what ROMs are and why they are required - hoping this will cut down the flow of e-mail asking "gee, I run your program and it says 'unable to open file xxxx/xxxx', what should I do?"
 - 0.14               : driver.c was getting much too large and confused [Nicola Salmoria]. I moved the GameDriver structures inside the single driver/xxxx.c files. This has the additional benefit that people sending me drivers will not forget to include the ROM loading addresses.
 - 0.09               : New rom_decode function pointer in the GameDriver structure [Nicola Salmoria]. It is used to decrypt the whole ROMs after loading them (as opposed to opcode_decode, which is used to decrypt only CPU opcodes). Also, opcode_decode is now handled differently: instead of calling it at runtime when the CPU reads an opcode, another 64k of memory are allocated and the whole ROMs decrypted. opcodes are then fetched from this new array. This approach is less flexible, for example it cannot handle code created in RAM (Pengo does that). However, it is MUCH faster (finally I get 60fps in Crazy Climber!), so I'll go with it for now. Should the need arise for a more flexible decryption, we'll think about it. The memory handling was no longer up to the task, so I had to make it more flexible. RAM is no longer a static array; it is dynamically allocated by readroms(), split in memory regions (one for the CPU addressing space, one for graphics ROMs, and so on) so data not needed at run time, like the graphics data, can be unloaded from memory after conversion. The definition and usage of struct RomModule and struct GfxDecodeInfo has changed. struct RunningMachine contains an array of pointers to memory regions. RomModules are now defined using macros, and readroms() does some error checking as well. This greatly reduces the chance of making a silly mistake. And don't ask me why, but as a result of this change the emulation seems to run much faster than before!
 - 0.05               : Changed readroms() to allow scatter loading of a single ROM. This was needed for Donkey Kong Jr. Now the end of the RomModule array is marked by a size==0, while name==0 means "continue loading the previous ROM at this address".



 6.2  DEVICES

 - 0.283              : Added more sanity checks to device types. This will bloat debug builds a bit, but unfortunately it seems to be necessary to explicitly guard against this now (emu\device.h) [Vas Crabb].
 - 0.282              : Prevent automatic attempts at loading or creating loose image files with the same names as extant software list items when they fail to load as such. Only allow command line image creation when file is not found and save startup image name for error reporting before trashing it (emu\image.cpp) [AJR].
 - 0.281              : Avoid updating data frame if nothing changed (emu\diserial.cpp) [Mark Garlanger]. Don't use bitwise OR on bool. Small cleanup to spacing (emu\diserial.cpp) [hap].
 - 0.278              : Allow flagging devices as not working or not supporting saved states. Removed device_sound_interface from mixins that require device to register members for saved states (emu\device.cpp) [Vas Crabb]. Reset the receive register when changing frame format or the port may be stuck into synchronous receive mode due to the default start bits = 0 (emu\diserial.cpp) [O. Galibert].
 - 0.277              : Removed duplicate getter (emu\diexec.h) [hap]. If a shorter input line pulse overlaps a longer pulse, don't shorten the pulse. Deal with the annoyances of the timer state machine (emu\diexec.cpp). Restore timers expiring at the same time in the order they were scheduled when loading a saved state (emu\schedule.cpp) [Vas Crabb]. Added remove function to unset a devcb (emu\devcb.h) [hap].
 - 0.274              : Round scaled clock to nearest integer (emu\device.cpp) [hap].
 - 0.272              : Don't eat negative cycles with abort_timeslice when icount<0 (emu\diexec.cpp). Added retry_access with abort_timeslice for redoing the access at the same point in time (emu\devcpu.cpp) [hap]. Added devcpu retry_access documentation [O. Galibert]. Added callback to allow debugger to break into the middle of wait-type instructions whose execution time is normally indefinite. When this happens, a special message may be printed to the debug console stating the location of the last actual instruction executed before the wait (if there was one). Note that since the callback ignores the current value of the program counter, this special type of debugger break cannot be entered through breakpoints or instruction stepping commands. The callback also leaves no effect on PC history tracking or trace logs (emu\diexec.h and debug\debugcpu.cpp) [AJR].
 - 0.270              : Removed vestigal execute_input_lines() and execute_burn override (emu\diexec.cpp) [hap].
 - 0.265              : Removed unneeded memset on attotime object in constructor (emu\diexec.cpp) [hap].
 - 0.264              : Removed fread overloads that allocate memory for output (emu\diimage.h) [Vas Crabb].
 - 0.262              : Added media change notifier and exposed to LUA. This allows interested parties to receive notifications on media changes. This is demonstrated by the file manager and media image information menus now updating immediately if the system ejects a mounted image, or a mounted image is changed by a script or something (emu\diimage.cpp) [Vas Crabb]. gen_latch reset latch_written at reset through function instead of directly (machine\gen_latch.cpp) [hap]. Removed now-unused function (emu\diimage.h) [AJR].
 - 0.259              : Use count_leading_zeros_64 to calculate format width (emu\distate.cpp) [AJR].
 - 0.258              : Removed set_log and append_log. These helpers were unintuitive and inflexible. In particular, set_log on a write handler would only log when the value is non-zero, which doesn't appear to be the desired behaviour for several uses (emu\devcb.h) [Vas Crabb].
 - 0.256              : Removed device (READ|WRITE)_LINE_MEMBER in favor of explicit function signatures (emu\device.h) [Ryan Holtz]. Added a lookup() member function to device finders. This simplifies looking up the target device during configuration. It is useful when configuring child devices in things like CPUs with integrated peripherals (emu\devfind.h). Allow templated subdevice() and siblingdevice() to work with classes that don't derive from device_t (e.g. classes that derive from device_interface) (emu\device.h). Added more noexcept. Won't make much difference as most of the affected member functions are inline anyway (util\delegate.h). Added resolve_safe and resolve_all_safe helpers. Uses decay rules, so if a delegate returns a reference and you want to supply a referene to an object you don't want copied as the default result, remember to use std::ref. Updated a few devices to use resolve_safe on device delegates to streamline code (emu\devdelegate.h). Eliminated the need to call resolve() on callbacks. Read callbacks now need a default return value supplied at construction. Replaced isnull() with isunset() which tells you if the callback wasn't configured rather than whether it isn't safe to call. Enabled validation of device callbacks (it seems it was disabled at some point, probably accidentally). Device callbacks and object finders now implement the same interface for resolution (emu\devcb.h) [Vas Crabb].
 - 0.255              : Input line methods can't be called reliably until the device has started, so assert that it has (emu\diexec.h) [AJR].
 - 0.254              : API change for device_image_interface: Removed the seterror method for recording error messages and conditions. Condition codes have been made return values for call_load, call_create and various related callbacks. Error messages (which many devices weren't generating) are now displayed through osd_printf_error. Eliminated the image_init_result and image_verify_result pass/fail enumeration types. Update many functions that were returning these enumerations or simply bools to return std::error_condition instead. In some cases, this type is now passed down from internal parsing/loading functions which were already returning it. In various other cases, the former default UNSPECIFIED has been used as a catchall for I/O errors; anticipated future refactorings should make these error returns more specific. Expand the image_error categories to include INVALIDLENGTH, NOSOFTWARE and BADSOFTWARE. The first is largely self-explanatory. The second is generated by the core to indicate failure to find software items in lists. The third is provided for devices to indicate semantic errors in software list entries. Changed the return type of floppy_image_device::identify to a pair so the potential error condition can be passed along to the UI without storing it in a member variable. Moved device_image_interface::message down into snapshot_image_device and change its implementation to use string_format instead of printf. Correct a typo in the shortname of the generic snapshot device [AJR]. Allow range-based for loops on memory share finders (emu\devfind.h). Restored ability of for image devices to report specific error messages. Moved responsibility for displaying the error message in the UI to the caller rather than device_image_interface and made device_image_interface always log the error along with the full path and error condition content. Gave several image devices more detailed error messages. Added some FIXME comments for apparent bugs [Vas Crabb].
 - 0.253              : Allow base device to be specified directly in delegate setters (emu\devcb.h) [Vas Crabb].
 - 0.252              : Don't try to read unused value() during formatstr. max_length() has no use for value() either (emu\distate.cpp) [hap]. Moved a few macro and delegate definitions down into subclasses (emu\diimage.h) [AJR].
 - 0.251              : Fixed wrong value when used with callexport in device_state_entry::format (emu\distate.cpp) [hap]. Allow command-line creation for tapes/memory cards/printouts (imagedev\cassette.h, magtape.h, memcard.h and printer.h). Made image devices not request read access when creating files for write-only devices (emu\diimage.cpp) [Vas Crabb].
 - 0.250              : Fixed use-after-move in functoid constructor (emu\devdelegate.h) [Vas Crabb].
 - 0.249              : Moved std::function template deduction guide (apple\mactoolbox.h) to more accessible core header (emu\devdelegate.h) [AJR].
 - 0.247              : Don't load any NVRAM other than the default for devices whose configurations inhibit NVRAM saving (emu\machine.cpp) [AJR]. Bus: Get rid of some dubious tag manipulation. The implementation details of how the cartridges allocate storage for memory really shouldn't be part of the interface. Having tags in the headers encourages people to depend on these implementation details. This gets rid of it in most of the headers. A few particularly leaky abstractions (bbc/rom, electron/cart, gba, generic, jakks_gamekey, m5) depend on this, so it can't be removed in those cases without further refactoring to encapsulate the slot devices better. This doesn't change behaviour, it just mechanically removes stuff from the headers and uses device_t::subtag rather than string manipulation on tags. Most of the cartridge devices shouldn't have rom_alloc member functions at all - the region created by the software list loader can be used directly when loading from the software list, and the slot can allocate a region with the same tag when loading loose software. This avoids creating an extra region and copying the data when loading from the software list. See vboy for an example that doesn't allocate a superfluous region [Vas Crabb].
 - 0.245              : Removed device_timer, device_timer_id, et al in favor of direct callback members. Primarily, this removes device_t::device_timer, device_t::timer_set, device_t::synchronize, device_t::timer_expired, and device_timer_id. Use of device_timer often resulted in unnecessary trampolining in addition to switch/case overhead on a driver/device level, and additional logic to manage delegated vs. ID-based timers on a core level. In the worst cases, devices were performing a switch/case with only one valid case. device_scheduler::timer_set is marked deprecated as the only remaining direct uses are via the Lua engine and a few drivers that need refactoring anyway. The remaining uses occur via device_scheduler::synchronize. As a middle ground between the extremely short timer_alloc() and the extremely long machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(widget_device::contoso_tick), this)), a helper function in device_t has been added which can be invoked with the following syntax: timer_alloc(FUNC(widget_device::contoso_tick), this). Removed ID-based timer_alloc. Removed timer_set. Removed synchronize. Removed timer_expired. Added shorthand timer_alloc to avoid lengthy machine().scheduler().timer_alloc() calls (emu\device.cpp). Removed now-unused m_id and m_device members (emu\schedule.cpp). Converted some devices to use logmacro. Made usage of m_member prefix consistent. Removed string-based ioport lookups. Favored BIT() macro for single-bit checks. Removed C89-style variable declarations when noticed. Removed FUNCNAME to avoid compiler-specific #define checks in devices. Removed unecessary member prefixes/suffixes. Re-ordered driver overrides and function members. Made capitalization consistent on class members [Ryan Holtz]. Reduced spam from use of synchronize() - it serves a purpose for now (emu\schedule.cpp) [Vas Crabb].
 - 0.244              : Optionally resynchronize to the implicit clock domain on clock frequency change (emu\device.cpp and emu\diexec.cpp; cpu\nec\v5x.cpp) [O. Galibert].
 - 0.243              : Don't pre-clear memory for drivers (emu\device.h). Osso fixed at least the majority of things that crashed outright and Robbbert initialised variables that Coverity complained about. It's unlikely anything will break due to this [Vas Crabb].
 - 0.242              : Cleaned up a little using C++17 type traits helpers. Re-added std::moves that aren't pessimising (emu\devcb.h) [Vas Crabb].
 - 0.241              : Force recomputation of clock-related parameters whenever a device clock or scale changes by way of loading a save state (emu\device.cpp) [AJR].
 - 0.240              : Added devices\imagedev\cartrom.cpp/h, imagedev\magtape.cpp/h, imagedev\memcard.cpp/h and imagedev\papertape.cpp/h. Interface overhaul (device_image_interface): Removed the iodevice_t classification, which was not used that much and was incomplete anyway. Image device implementations must now provide their own instance names and brief instance names. Several new parent classes have been created to make it easier to use the old standard names. Changed must_be_loaded from a pure virtual function to be overridden in implementations to a getter for a base class property that can be set on the host side (as was formerly made possible for NES, MD and "generic" cartridge slots) but defaults to false for all types. This restrictive property has been unset for a small number of cases. Created parent classes for paper tape and magnetic tape devices. At present these are dummy classes that do little to nothing, but may help unify implementations in the future. Changed several member functions to take std::string_view parameters rather than const std::string & or const char *. Make update_names take into account brief names, as discussed in PR #2555. Removed the obsolete uses_file_extension function (which used thread-unsafe strtok) [AJR].
 - 0.239              : Made checks on device add/replace stricter. Trying to replace a non-existent device or trying to add a device with root or parent references in the path is now fatal [Vas Crabb]. Removed some machine().root_device() calls (drivers\cv1k.cpp, namcos10.cpp and audio\wiping.cpp) [Osso].
 - 0.236              : Allow devices to specify a parent for the purpose of searching for ROMs (emu\device.cpp). Reworked device type definition macros to eliminate one level of indirection when using device types by name. Fixed a potential initialisation order issue that could affect device parent ROMs. Eliminated the need for DEFINE_DEVICE_TYPE_NS - just use DEFINE_DEVICE_TYPE or DEFINE_DEVICE_TYPE_PRIVATE with fully-qualified names. Changed device type aliases to static auto references in the headers. Added Doxygen comments for system/device definition macros and system flags. Moved a few slot devices into anonymous namespaces, getting more stuff out of headers and reducing dependencies [Vas Crabb].
 - 0.231              : Added some softwarelist warnings for Tafoid's tests (emu\diimage.cpp) [Robbbert].
 - 0.227              : General maintenance on emu\devfind: Harmonised memory region/share finder/creator APIs. Moved .found() to optional object finders. Added truth test operator to optional object finders. Fixed things that were testing .found() on required object finders. Improved Doxygen API documentation. Made read_safe avaiable for optional I/O ports only (emu\devfind.h). Added the next couple of sections explaining object finders (docs\source\techspecs\object_finders.rst). Added missing memory_share_array_creator (emu\devfind.h). Cleaned up emu\dirom and made it stricter: Made it an error to specify address map and explicit ROM region. Made it an error if explicitly specified ROM region is not found. Made the ROM region tag apply relative to the current device. More cleanup/consistency changes (emu\devfind.cpp): Removed .mask(), as it's not reliable in the general case. Added asserts to things that assume power-of-two sizes. Got rid of virtual qualifier on pointer-to-member operator. Made helpers a bit more assertive about logging warnings (emu\devfind.cpp). Removed some software list data that was redundantly copied into device_image_interface (m_supported was never even set, so it didn't even work), and made crc() work better (previously it wasn't recalculuated after unloading and loading another image) (emu\diimage.cpp) [Vas Crabb].
 - 0.226              : Don't clear memory before constructing devices, with the exception of drivers for now. This substantially reduces the overhead of running -validate, -romident, etc. and brings us a little closer to not needing to disable lifetime dead store elimination optimisations. There are likely to be some issues that weren't fixed while this was still on a branch, so everyone be alert (emu\device.h) [Vas Crabb].
 - 0.225              : 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) [Vas Crabb]. 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. The 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 [AJR].
 - 0.223              : Removed m_totalcycles workaround (emu\diexec.h) [hap]. Added workaround for GCC and Clang 8 (emu\devcb.h) [Tiago].
 - 0.222              : Changed emu\dirom.cpp to dirom.ipp. Initialized a couple of variables, fixes numerous bugs in DEVNOCLEAR debug build with BIOS roms in devices (emu\device.cpp) [Osso]. Removed the space for the handlers, it is not needed anymore (emu\devcb.cpp) [Osso, O. Galibert].
 - 0.221              : Don't clear the input queue on reset (emu\diexec.cpp). This fixes problems where devices are input line changes are missed because a device was reset. One case is at startup, where one device's output is wire to another's input. During start the first device adds, eg, a RESET assertion to the second. When that device starts, it resets itself and clears the pending RESET assertion [Mike Harris].
 - 0.219              : Changed syntax in emu\devcb.h for constructing/resolving arrays of callbacks. Saves a lot of typing { *this }, { *this }... Switched all DEVCB arrays to new syntax [Vas Crabb].
 - 0.218              : Substitute some cases of deprecated tag lookups with device finders. Updated usage of device finders and remove hardcoded cpu tags in chipset devices (lpci\i82371sb.cpp, i82439tx.cpp, northbridge.cpp and pci.cpp) [yz70s].
 - 0.217              : Added wrapper for using STRUCT_MEMBER with an indeterminate length array (emu\diexec.cpp). Examples in YM2612 family and MultiPCM. Also used STRUCT_MEMBER to reduce clutter in diexec save state registration [Vas Crabb].
 - 0.216              : There can only be one "perfect quantum" device - enforce that only the root machine can set it, as allowing subdevices to will cause weird issues with slot cards overiding it. Allow multiple devices to set maximum quantum and use the most restrictive one (it's maximum quantum, it would be minimum interleave). Start putting noexcept on things that have no business throwing exceptions, starting with diimage. also fix a slight bug in the interface matching function for software list parts [Vas Crabb]. Make many device_execute_interface functions noexcept, including the "information" overrides. This also covers several time-related functions in attotime, running_machine and emu_timer [AJR].
 - 0.212              : Reverted unnecessary change from MAME 0.211 in emu\devcb.h (isnull() checks the list of unresolved functions along with the list of resolved ones, so resolve_safe() doesn't really need a return value as long as it is called second) [AJR].
 - 0.210              : Added sanity check to emu\distate.cpp [AJR].
 - 0.209              : Removed unnecessary arguments in handlers (machine\gen_latch.cpp) [cam900].
 - 0.208              : Expose state_find_entry (emu\distate.h and debug\debugcmd.cpp) [AJR]. Added more granular device_feature bits as well as a couple more catch-all categories [Ryan Holtz, Vas Crabb].
 - 0.207              : Added spacenum getter for required_/optional_address_space (emu\devfind.h). Make -[no]nvram_save option also inhibit saving of "battery" NVRAM for image devices (emu\diimage.cpp). Note: Save the NVRAM contents when exiting machine emulation. By turning this off, you can retain your previous NVRAM contents as any current changes made will not be saved. Turning this option off will also unconditionally suppress the saving of .nv files associated with some types of software cartridges [AJR].
 - 0.206              : Added object finder for address spaces (emu\devfind.cpp). The constructor and set_tag methods for required_address_space and optional_address_space work slightly differently from other finders in that they take the address space number as an extra argument. There is also an option to request a space having a specific data width, and validation checks this as well as the space number. There is also no (required|optional)_address_space_array, but that shouldn't really be necessary since devices shouldn't need large numbers of these finders [AJR].
 - 0.202              : Fixed ioports/membanks in internal maps (emu\device.cpp and emumem.cpp) [O. Galibert]. Don't abuse object finders for things that can't be found at object resolution time [Vas Crabb].
 - 0.201              : Allow set_tag() with a reference or a pointer to a device (emu\devfind.h) [O. Galibert]. Fixed the build by removing calls that don't exist when DeviceClass happens to be an interface (emu\devfind.h). Fetch screen to be potentially configured during device_config_complete. Allow device finder to be used as an argument for set_screen (emu\divideo.cpp) [AJR].
 - 0.200              : Added seperated acknowloge case to machine\gen_latch.cpp [cam900]. DEVCB3 - There are multiple issues with the current device callbacks: * They always dispatch through a pointer-to-member. * Chained callbacks are a linked list so the branch unit can't predict the early. * There's a runtime decision made on the left/right shift direction. * There are runtime NULL checks on various objects. * Binding a lambda isn't practical. * Arbitrary transformations are not supported. * When chaining callbacks it isn't clear what the MCFG_DEVCB_ modifiers apply to. * It isn't possible to just append to a callback in derived configuration. * The macros need a magic, hidden local called devcb. * Moving code that uses the magic locals around is error-prone. * Writing the MCFG macros to make a device usable is a pain. * You can't discover applicable MCFG macros with intellisense. * Macros are not scoped. * Using an inappropriate macro isn't detected at compile time. * Lots of other things. This changeset overcomes the biggest obstacle to remving MCFG macros altogether. Essentially, to allow a DEVCB to be configured, call .bind() and expose the result (a bind target for the callback). Bind target methods starting with "set" repace the current callbacks; methods starting with "append" append to them. You can't reconfigure a callback after resolving it. There's no need to use a macro matching the handler signatures - use FUNC for everything. Current device is implied if no tag/finder is supplied (no need for explicit this). Lambdas are supported, and the memory space and offset are optional. These kinds of things work: .read_cb().set([this] () { return something; }), .read_cb().set([this] (offs_t offset) { return ~offset; }), .write_cb().set([this] (offs_t offset, u8 data) { m_array[offset] = data; }) and .write_cb().set([this] (int state) { some_var = state; }). Arbitrary transforms are allowed, and they can modify offset/mask for example: .read_cb().set(FUNC(my_state::handler)).transform([] (u8 data) { return bitswap<4>(data, 1, 3, 0, 2); }) and .read_cb().set(m_dev, FUNC(some_device::member)).transform([] (offs_t &offset, u8 data) { offset ^= 3; return data; }). It's possible to stack arbitrary transforms, at the cost of compile time (the whole transform stack gets inlined at compile time). Shifts count as an arbitrary transform, but mask/exor does not. Order of mask/shift/exor now matters. Modifications are applied in the specified order. These are NOT EQUIVALENT: .read_cb().set(FUNC(my_state::handler)).mask(0x06).lshift(2) and .read_cb().set(FUNC(my_state::handler)).lshift(2).mask(0x06). The bit helper no longer reverses its behaviour for read callbacks, and I/O ports are no longer aware of the field mask. Binding a read callback to no-op is not supported - specify a constant. The GND and VCC aliases have been removed intentionally - they're TTL-centric, and were already being abused. Other quirks have been preserved, including write logger only logging when the data is non-zero (quite unhelpful in many of the cases where it's used). Legacy syntax is still supported for simple cases, but will be phased out. New devices should not have MCFG macros [Vas Crabb].
 - 0.198              : Concrete device types now have a call operator that instantiates a device. This change means you *must* use DECLARE_DEVICE_TYPE to declare the public interface of your device, even if it's device_t. If you want to use private implementation classes, use DEFINE_DEVICE_TYPE_PRIVATE and instantiate the object finders. Make devopt menu localisable (ui\devopt.cpp). Make machine_config aware of device being configured so owner doesn't need to be passed everywhere. Set finder tag relative to current device being configured rather than the finder's owner. This meand you no longer need to care about the your relationship to the object being configured and a lot of ^ and : can disappear. There's a bit reduction in string pasting in macros from this. Bind DEVCB relative to current device. This is probably going to break plenty of things with late bind errors. Route sound relative to current device. Slot card additions run in the context of the slot itself, which isn't entirely intuitive. Slot configuration needs a bunch of other cleanup anyway (emu\disound.cpp). Allow DEVCB to be bound to a device/mixin or the target of a device finder. This works outside machine configuration context so the workarounds in ATA HLE and MSX slots are no longer necessary. It also allows reduction in tag repetition in machine configuration (see converted (MESS) osborne1.cpp, zorba.cpp or the more extreme tranz330.cpp). Allow reimagined device instantiation to take a device finder based on current device being configured to reduce repetition (see tranz330.cpp). Make MCFG_DEVICE_ADD and callable device types more flexible: * Allows defaulted clocks (see subtle example with vboy). * Allows additional constructors (see RS232 port in tranz330). * Allows use of device finder in place of tag in MCFG_DEVICE_ADD. * Requires out-of-line destructor for devices using incomplete types. * Requires XTAL or explicit u32 for clocks for devices with private types. Devices must still define the standard constructor. When writing additional constructors, be aware that the constructor runs before device_add_mconfig in the context of the existing device, not the new device. See osborne1, zorba, tranz330, and vboy for examples of this in use. Compilation is a bit slower, but this is temporary while refactoring is in progress. Eliminated the need for MCFG_SOUND_ROUTE_EX. Removed macros from slot option configuration - they just obfuscated code and slowed it down with needless dynamic casts, but didn't actually simplify it. Streamline machine configuration macros - everyone's a device edition: * Start replacing special device macros with additional constructors, starting with ISA, INTELLEC 4 and RS-232 buses. * Allow an object finder to take on the target of another object finder. For a combination of the previous two things in action, see either theINTELLEC 4 driver, or the Apple 2 PC Exporter card. Also check out looping over a device finder array to instantiate devices in some places. Lots of things no longer need to pass tags around. * Start supplying default clocks for things that have a standard clock or have all clocks internal. * Eliminated the separate DEV versions of the DEVCB_ macros. Previously, the plain versions were a shortcut for DEVICE_SELF as the target. You can now supply a string tag (relative to current device beingconfigured), an object finder (takes on the base and relative tag), or a reference to a device/interface (only do this if you know the device won't be replaced out from under it, but that's a safe assumption for your subdevices). In almost all cases, you can get the effect you want by supplying *this as the target. * Eliminated sound and CPU versions of macros. They serve no useful purpose, provide no extra checks, make error messages longer, added indirection, and mislead newbies into thinking there's a difference. * Removed a lot of now-unnecessary ":" prefixes binding things relative to machine root. Clean up some miscellaneous rot. Make cards inherit clock from slot by default. Make speaker config more explicit. Added a couple more constructor options. Get rid of implicit prefix for GFX decode names and prefix them all. Get rid of special macro for adding GFXDECODE in favour of constructor. Make empty GFX decode a static member of interface. Allow palette to be specified to GFXDECODE as a device finder. Removed diserial.h from emu.h as it's used relatively infrequently. Added support for custom device constructors when replacing devices. Current syntax: MCFG_DEVICE_REPLACE(tag_or_finder, TYPE, ...). Next-generation syntax: TYPE(config.replace(), tag_or_finder, ...). Get rid of the token-pasting voodoo and casts in the discrete sound macros. Removed many mainly PCI-related MCFG macros in favour of constructor overloads, removed some absolute device lookups, removed some absolute device tags and generally clean up stuff. Fixed incorrect device class for PCI APIC [Vas Crabb]. Device callback (emu\devcb.cpp): * Write callbacks can now be configured as 'OUTPUT("item_name")'. This behaves equivalently to a zero-dimensional 'output_finder', while eliminating the need to instantiate and resolve this in driver classes separately from the callback itself. * The width of a callback's default mask now properly depends on its type (as was half-implemented before), instead of always being reset to 0xffffffffffffffff when actually configured. This allows MCFG_DEVCB_INVERT to work with line write callbacks as one might logically expect. Use new OUTPUT callback object in various (mostly Atari) drivers. Use device_resolve_objects to resolve callbacks in output_latch_device. Renamed machine\latch.cpp/h to machine\output_latch.cpp/h. Eliminated non-diexec PULSE_LINE hacks and disable some side effects. Interrupt API changes (emu\diexec.cpp): PULSE_LINE is no longer a value. Existing uses have been changed to pulse_input_line with attotime::zero as the second argument. Formerly only INPUT_LINE_NMI and INPUT_LINE_RESET were allowed with PULSE_LINE. INPUT_LINE_NMI no longer receives special handling; instead, CPU devices must specify which of their input lines are edge-triggered and thus may be used with zero-width pulses by overriding the execute_input_edge_triggered predicate. INPUT_LINE_RESET is still special-cased, however. execute_default_irq_vector now allows a different default vector to be specified for each input line. This added flexibility may or may not prove useful. machine().device(tag) is now deprecated. Removed some machine().device usage from the core (emu\addrmap.cpp and diexec.cpp). Kludge some absolute tag lookups in the core that can't really be helped (debug\debugcmd.cpp, debugcpu.cpp, emu\romload.cpp and schedule.cpp) [AJR].
 - 0.197              : Allow machine configuration to specify BIOS easily, move default BIOS selection into device configuration complete [Vas Crabb]. Removed unnecessary device_t::memory() (drivers\bublbobl.cpp, missb2.cpp and superqix.cpp). Removed safe_pc() and safe_pcbase() (emu\distate.h) [smf].
 - 0.196              : Removed emu\dioutput.cpp/h. Include option and file names in fatal error message for failure to load image (emu\image.cpp) [AJR]. Get rid of emu\dioutput.cpp - it's only used in one place, and it upset GCC on Linux debug builds for some reason [Vas Crabb].
 - 0.195              : API change: Memory maps are now "last entry wins". This allows for the much more natural "import another map and patch it" structure, or "cover a whole region then punch holes in it". Our previous first-entry-wins rule was always a surprise to newcomers, and oldcomers too. Memory maps are now methods of the owner class. Fixed extra-large device map (emu\addrmap.cpp). Removed multiple handlers with different unitmasks on the same line (aerofgt.cpp, astrcorp.cpp, fromanc2.cpp, gaelco3d.cpp, mcatadv.cpp, neogeo.cpp, pgm.cpp, taito_b.cpp and tatsumi.cpp). Fixed (machine\iteagle_fpga.cpp, namco_c139.cpp, drivers\mcatadv.cpp) [O. Galibert]. Screwed macros: Replaced MACHINE_CONFIG_DERIVED with MACHINE_CONFIG_START. Removed MCFG_FRAGMENT_ADD. There's no voodoo involved in derived machine configurations and fragments any more. The macros were just obfuscating things at this point. Lots of cleanup and encapsulation (drivers\ace.cpp, albazc.cpp, albazg.cpp, aleisttl.cpp, altair.cpp, appoooh.cpp, arcadecl.cpp, aristmk5.cpp, aristmk6.cpp, atarig1.cpp, atarig42.cpp, atarigt.cpp, atarigx2.cpp, atarisy1.cpp, atarisy2.cpp, badlands.cpp, bagman.cpp, batman.cpp, beathead.cpp, bfcobra.cpp, bfm_ad5.cpp, bfm_sc1.cpp, bfm_sc2.cpp, big10.cpp, blstroid.cpp, bowltry.cpp, boxer.cpp, bsktball.cpp, bzone.cpp, canyon.cpp, carpolo.cpp, caswin.cpp, ccastles.cpp, clayshoo.cpp, cloak.cpp, cloud9.cpp, copsnrob.cpp, cyberbal.cpp, cybstorm.cpp, destroyr.cpp, dooyong.cpp, dragrace.cpp, eprom.cpp, eprom.cpp, equites.cpp, equites.cpp, exidy440.cpp, firefox.cpp, firetrk.cpp, flyball.cpp, foodf.cpp, forte2.cpp, gauntlet.cpp, gridlee.cpp, irobot.cpp, jedi.cpp, klax.cpp, ladybug.cpp, liberatr.cpp, looping.cpp, manohman.cpp, mediagx.cpp, meijinsn.cpp, metalmx.cpp, mgolf.cpp, mpu2.cpp, mpu3.cpp, mpu5.cpp, nitedrvr.cpp, offtwall.cpp, ohmygod.cpp, opwolf.cpp, orbit.cpp, patapata.cpp, pengadvb.cpp, poolshrk.cpp, quantum.cpp, quizshow.cpp, quizshow.cpp, rampart.cpp, redclash.cpp, relief.cpp, rmhaihai.cpp, sbrkout.cpp, sfkick.cpp, shougi.cpp, shuuz.cpp, skullxbo.cpp, skydiver.cpp, skyraid.cpp, sprint4.cpp, sprint8.cpp, starshp1.cpp, stellafr.cpp, superslave.cpp, supertnk.cpp, tamag1.cpp, tank8.cpp, tempest.cpp, thunderj.cpp, tomcat.cpp, toobin.cpp, tourtabl.cpp, triplhnt.cpp, tunhunt.cpp, ultratnk.cpp, unico.cpp, vectrex.cpp, vertigo.cpp, victory.cpp, videopin.cpp, vindictr.cpp, wolfpack.cpp, wrally.cpp, xybots.cpp and machine\atarigen.cpp) [Vas Crabb]. Made some methods private in devices\bus\*.h now that it's possible. Some private-ization and removed some duplication [Osso]. Generalized support for byte-smeared accesses: The new cswidth address map constructor method overrides the masking normally performed on narrow-width accesses. This entailed a lot of reconfiguration to make the shifting and masking of subunits independent operations. There is unlikely to have any significant performance impact on drivers that don't frequently reconfigure their memory handlers (emu\addrmap.cpp and emumem.cpp). Set up heavily mirrored memory ranges with subunit masks (e.g. orunners) much more efficiently (emu\emumem.cpp). Register device callbacks and added some basic validation for them (emu\devcb.cpp, device.h, emufwd.h and validity.cpp) [AJR].
 - 0.194              : Moved machine\meters.cpp/h to devices\machine\. Removed a bunch of space.device().safe_pc() from devices [O. Galibert, smf, AJR]. Eliminated some machine().firstcpu usage. Eliminated unnecessary downcast in debug\debugcpu.cpp [AJR]. Differentiate between cartridge (cart) and romimage (rom) in generic\slot.cpp [Nigel Barnes]. API Change: Machine configs are now a method of the owner class, and the prototype is simplified. NOTE: Beware, the device context does not follow in MCFG_FRAGMENT_ADD anymore due to the prototype change. So creating a device then configuring through a fragment doesn't work as-is. The simplest solution is just to add a MCFG_DEVICE_MODIFY at the start of the fragment with the correct tag. Fixed timeplt_audio and Chance Kun regression. Regression fixes/cleanups to pooyan.cpp, rocnrope.cpp and tutankhm.cpp [O. Galibert, AJR].
 - 0.193              : Fixed -listdevices misplacement of subdevices in some configurations (mame\clifront.cpp). Moderate overhaul of device_rom_interface: Allow endianness and data/address width to be altered during configuration. Raise memory_space_config from private to protected so it can be overridden. Make entire interface optional (as needed by one device to be added soon). Use interface_post_load instead of explicitly registered delegate. Only call rom_bank_updated when bank actually changes. Removed prototypes for nonexistent functions (emu\dirom.cpp). Eliminated device pointer conversion from device_interface (emu\device.h) [AJR]. Replaced some space.device() calls (drivers\namcos11.cpp, namcos22.cpp, namcos23.cpp, naomi.cpp, rmhaihai.cpp, witch.cpp, x1.cpp, xexex.cpp, xmen.cpp, xyonix.cpp, yunsung8.cpp and zn.cpp) [smf].
 - 0.192              : Moved object finder resolution before device_start (emu\device.cpp and machine.cpp) [Vas Crabb].
 - 0.191              : Device state interface (emu\distate.cpp): Polymorphism and std::function for entries. Created a templated subclass of device_state_entry to provide separate read/write interfaces for registers of varying widths. The efficiency impact of this should be minimal, given that this eliminates the need to make each byte width a subcase for reads and writes. Created similarly templated "pseudo-register" versions of device_state_entry that provides custom read/write interfaces through std::function. The intent of this is to eventually replace the dummy register + state_export interface hitherto necessary to provide debugger access to bankswitched or computed state registers. State registers can now be made read-only, and this is automatically done now when state_add is called with a std::function read handler but no write handler. This property is honored by MAME debug expressions. Added override keyword. Removed explicit instantiations that were causing linking errors in tools build. Explicitly allow floating point values for state registers (cpu\dsp32\dsp32.cpp, powerpc\ppccom.cpp and machine\netlist.cpp). Note: The internal debugger's expression interpreter is not set up to handle floating point values at all, so they remain disabled there. Polymorphic classes need virtual destructors [AJR].
 - 0.189              : Fixed -slot card, bios=rev (selected BIOS was being applied to slot itself, not card) [Vas Crabb]. 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) [AJR, Vas Crabb]. 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 [AJR].
 - 0.188              : Fixed issue loading reset_on_load() images (emu\diimage.cpp) [Nathan Woods]. Fixed scheduler overflow when a device executes for more cycles than there are in a second. Make machine().describe_context() a const function returning a std::string. As part of this change (because std::string is not printf-compatible), several devices have been updated to use the modern logmacro.h logging system [AJR]. Fixed Clang build (emu\device.h) [smf]. Fixed custom instance names and slot devices don't work properly with the current MAME options code (emu\diimage.cpp). Fixed media option numbering with custom instance names (emu\diimage.cpp) [O. Galibert]. Save partname to inifile, so that the correct part is loaded next time (emu\image.cpp) [Robbbert, Nathan Woods]. Added machine().side_effect_disabled to machine\gen_latch.cpp [Vas Crabb].
 - 0.187              : Updated devices\cpu, devices\machine and devices\bus\* devices to use device_add_mconfig insted of device_mconfig_additions [Osso, Vas Crabb]. Got rid of machine_mconfig_additions in devices\bus\* [Osso]. Allow device to be configured for acknowledgement to occur separately from data reads (machine\gen_latch.cpp); use this for Armed Police Batrider [AJR].
 - 0.186              : Fixed an issue that could cause problems when loading reset_on_load devices (like cartridges) from softlists at runtime. This was not guaranteed to cause a problem; the specific issue here was reported by mr_gw in the context of the CoCo, and the proximate issue (hanging) was in CoCo-specific code. That said, this could cause problems elsewhere (emu\diimage.cpp). Fixed issue when the hash length is zero (emu\diimage.cpp) [Nathan Woods]. Defend clocks_to_attotime and attotime_to_clocks against the possibility of the device clock being 0 (emu\device.cpp). Mechanism for devices to generate clocks for other devices. Have set_unscaled_clock and set_clock_scale not call notify_clock_changed unless the device has been started. Owner-derived clocks are now updated whenever the owner's clock is changed, including at configuration time. This simplifies the configuration of various (MESS) NES clones. Added clock_update_delegate type to represent device-generated clock outputs that may be dynamically modified. The model implementation of this is the CLK output in I8085A. Use a proper error message in emu\emumem.cpp. Copy longname, manufacturer, year, filetype, etc. for image info in all softlisted cases (emu\diimage.cpp). Extend slot option processing to the -listdevices command as well. Don't try adding any system-specific options when a wildcard is specified. Have -listroms display a user-friendly message when no ROMs are required (mame\clifront.cpp) [AJR]. Moved static data (short name, full name, source file) out of devices into the device types. The core changes: * Short name, full name and source file are no longer members of device_t, they are part of the device type. * MACHINE_COFIG_START no longer needs a driver class. * MACHINE_CONFIG_DERIVED_CLASS is no longer necessary. * Specify the state class you want in the GAME/COMP/CONS line. * The compiler will work out the base class where the driver init member is declared. * There is one static device type object per driver rather than one per machine configuration. Use DECLARE_DEVICE_TYPE or DECLARE_DEVICE_TYPE_NS to declare device type. * DECLARE_DEVICE_TYPE forward-declares teh device type and class, and declares extern object finders. * DECLARE_DEVICE_TYPE_NS is for devices classes in namespaces - it doesn't forward-declare the device type. Use DEFINE_DEVICE_TYPE or DEFINE_DEVICE_TYPE_NS to define device types. * These macros declare storage for the static data, and instantiate the device type and device finder templates. The rest of the changes are mostly just moving stuff out of headers that shouldn't be there, renaming stuff for consistency, and scoping stuff down where appropriate. Other things: * More descriptive names for a lot of devices. * Untangled the fantasy sound from the driver state, which necessitates breaking up sound/flip writes. * Used object finders for Irem sound subdevices. * Started to break out common parts of Samsung ARM SoC devices. * Turned some of FM, SID, SCSP DSP, EPIC12 and Voodoo cores into something resmbling C++. * Converted generic keyboard/terminal to not use WRITE8 - space/offset aren't relevant. * Dynamically allocate generic terminal buffer so derived devices (e.g. teleprinter) can specify size. * Factored out some boilerplate for YM chips with PSG. * Toaplan2 gfx. * Video System video. * Out Run/Y-board sprite alignment. * GIC video hookup. * SMS passthrough control devices starting subslots. Support -listroms for devices (e.g. mpu401 or m68705p3; mame\clifront.cpp) [Vas Crabb]. Updated mame\audio, devices\sound, devices\video, mame\video, mame\drivers and mame\machine devices to use device_add_mconfig insted of device_mconfig_additions [Osso]. Fixed emu\image.cpp: 1. If either a multipart softlist item was loaded, or a single-part item loaded into a system with more than one of the same media slot, then a reset would cause a fatal error. 2. If a non-existing image was listed in the ini, it would fatal error at start and there was no way to fix it except by hand-editing the ini file. This restores the previous behaviour of ejecting the bad image with the first error [Robbbert].
 - 0.185              : 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 [AJR]. Made a number of device_image_interface members private. This also fixes a number of get_default_card_software() implementations that were accessing m_file incorrectly. Removed duplicate prototype. Fixed an issue where reset_on_load images would not properly persist across emulation sessions (emu\image.cpp). Workaround for issue where the cannonical instance_name for a device was lost (emu\image.cpp). This is a hack; details are in the source code. I felt that it was too late in the 0.185 release cycle to do anything intrusive. I intend to fix this "for real" when image/slot option morphing is encapsulated within emu_options [Nathan Woods].
 - 0.184              : Fixed regression pertaining to specification of empty strings as slot names e.g. - 'next -scsibus:1 "" -listdevices'. Cleanup of slot code. Added device_slot_interface::has_selectable_options() to calculate whether a particular slot has selectable options [Nathan Woods]. device_image_interface cleanups: Replaced comparisons of software_entry() or part_entry() with nullptr with loaded_through_softlist() predicate. Eliminated the superfluous m_software_info_ptr member. The software_entry() accessor is still provided, but now rarely used. Eliminated two of the three arguments to load_software_part. Removed some unnecessary auto-typing in ui\inifile.cpp. Fixed Clang build by supplying constructor for device_registrar (emu\device.h). Image instance name refactoring and bug fixing: update_names no longer takes arguments; the device type can be obtained easily, and the custom instance names are now overrides. Devices might not need to explicitly call update_names in the future. Fixed the frontend crash/assert failure resulting from instance names not being generated properly. Make device_image_interface::update_names a private method called automatically at config_complete time [AJR]. Self-registering devices: Make device_creator a variable template and get rid of the ampersands. Removed screen.h and speaker.h from emu.h and added where necessary. Centralised instantiations of screen and speaker finder templates. Added/standardised #include guards in many hearers. Removed many redundant #includes. Order #includesr to help catch headers that can't be #included alone. This changes #include order to be prefix, unit header if applicable then other stuff roughly in order from most dependent to least dependent library. This helps catch headers that don't #include things that they use. MAME now walks all devices when generating -lx output irrespective of whether they're actually instantiated anywhere or not. -lx is at least 30% faster than previous implementation. Only possible drawback is that filtering drivers no longer filters devices. Fix for libc++ build (emu\device.h). Filter devices when a driver pattern is supplied to -listxml. This fixed sampleof entries show up on devices which do not have samples. Cleaning up duplicate device shortnames. Added basic device validation. Fixed uninitialised members in some devices using constructor delegation [Vas Crabb].
 - 0.183              : Use std::sort instead of qsort in listdevices (mame\clifront.cpp) [AJR]. Make object finder arrays meet more Container/Sequence requirements (allows range-based for and many algorithms to work) (emu\devfind.h) [Vas Crabb].
 - 0.178              : Resist emu\dirom.cpp to out-of-bounds bank numbers. Added a mandatory callback on bank change to dirom. Added some documentation (device_memory_interface.rst and device_rom_interface.rst) [O. Galibert]. Changed the "extension as filetype" behavior for software list images to be opt in behavior. Allows devices to indicate whether image creation should be supported at the command line (emu\diimage.cpp and image.cpp). This addresses MT06372 bug. The prior issue is that creating serial and/or printer output relied on how image_load() would create images that were not there. This behavior was not universally desirable (the consensus was that it was wrong for disk images, up in the air for cassettes etc). This change makes it possible for devices to control this behavior. Currently I have it associated with image_type(); this might not be the ideal fix. Now setting m_filetype for images loaded from softlists (emu\diimage.cpp) [Nathan Woods].
 - 0.177              : Added emu\dirom.cpp/h. Miscellaneous cleanups to diimage.cpp/h; mostly std::string stuff. Changed various string arguments for emu_file::open() from 'const char *' to std::string (emu\diimage.cpp, fileio.cpp/h and romload.cpp). Miscellaneous cleanups (emu\diimage.cpp/h and ui\imgcntrl.cpp): Removed some c_str() calls when using util::zippath_parent(). Removed the error code return value from set_image_filename(). Consolidated error code translation (osd_file::error ==> image_error_t) in image_error_from_file_error(). Other cosmetic improvements. Removed device_image_interface::has_been_created(). This method was necessary long ago when devices didn't have distinct load and create paths, which has since been addressed. Created device_image_interface::add_format() protected member and made device_image_interface::m_formatlist be private. Made a bunch of device_image_interface members private (instead of protected) (emu\diimage.h). Changed device_image_interface::load() to take 'const std::string &'. Converted more stuff in diimage to use std::string instead of 'const char *'. Fixed issues where softlist items (that were not for floppies) were loaded from the software list menu. Eliminated device_image_interface::make_readonly(): 1. All image loads through softlists are done through common_process_file(), and thus going to be readonly anyways. 2. The cassette.cpp call to make_readonly() seems to be a residual hack, if a failure occurs the image will be unloaded anyways. Adding parentheses around some (but not all) ROM_* macro parameters (emu\romload.h). device_image_interface::software_name_split() ==> softlist.cpp:software_name_parse(). Also consolidated with code that performed a quick pass to identify whether a piece of text is a software name. Changing device_image_interface::determine_open_plan() to not support creating an image unless device_image_interface::create() is used [Nathan Woods]. Reverse logic of IMAGE_VERIFY (emu\diimage.h) [Miodrag Milanovic]. Changed device_image_interface::load() so that it is no longer responsible for both loading images and softlist items. Turn image init/validate into scoped enums to avoid accidental casts to/from integer and boolean types. The image error should also be turned into a scoped enum - the menus were assuming it was the same thing as an init result. Added some default constructors to rom_entry(), and made it so changes to flags are done through a set_flags() accessor method. Changes rom_entry from a struct to a class, storing its strings as stdd::string and separated the declaration into a new header. Make &some_required_shared_ptr[offs] work as expected in const context (emu\devfind.h). Make (required|optional)_ioport_array perform as well as a real array + shared_ptr arrays cleanup (emu\devfind.h). Devices can be found array-style, too (emu\devfind.h). Doxyfy a significant chunk of devfind.h. Eliminate a lot of boilerplate code from devfind.h. Keep instantiation of templates in one place to improve build time. Removed some dangerous accessors. Prepare to make object finders behave like a pointer, not a half-pointer (emu\devfind.cpp). Make object_array_finder a bit more flexible, centralise instantiation of more templates, more preparation for crud removal. Make object finders behave like pointers for the purposes of implicit casts, dereferencing and array access, not something that's part pointer, part reference, part vector. Require dummy tag to be specified explicitly, magical defaults are unhelpful here as the more common case it to search for a real object. Make the search methods private in concrete classes where possible as users should rely on the resolution process for these things (emu\devfind.cpp) [Vas Crabb]. Fixed missing region report when DEVICE_SELF is used (emu\devfind.cpp). Added device_rom_interface for sound chips with rom/memory map alternative. Make dirom robust to too big roms. Added/fixed dirom banking support. Better OKIM6295 fix post-release [Olivier Galibert].
 - 0.176              : Changed image_device_format::extensions() to be a vector (emu\diimage.cpp) [Nathan Woods]. Cleanups for device_image_interface. Removed the loaded_through_softlist virtual method and added a boolean getter with the same name, replacing a few variables that provided similar but redundant flags. Removed call_softlist_load, which the previous change reduces to a simple and unnecessary wrapper [AJR].
 - 0.171              : Simplified "device_image_interface::set_image_filename" function (emu\diimage.cpp) [dankan1890].
 - 0.170              : Implement found() method for object finders (emu\devfind.h; drivers\segas16b.cpp) [AJR].
 - 0.162              : Fixed drivers using ioport_arrays on OSX (emu\devfind.h) [Wilbert Pol].
 - 0.156              : devfind: Added rom_ptr_finder, which works like shared_ptr_finder except it finds a ROM region instead of a memory share. Unlike the old memory_region_finder, these can be accessed without any overhead (since it's a pointer directly to the data and not to the memory_region object), can be whatever data type you want (no casting needed) and are strictly type-checked--if you have a required_rom_ptr<UINT32> the region has to be a ROM_REGION32 (or an implicitly 32-bit region due to belonging to a CPU) or the finder won't find it and will tell you why. Basically, rom_ptr_finders are strictly better than memory_region_finders and all drivers using the latter should be converted over. I've done megasys1.c and twin16.c as examples: megasys1: Use a device address map for the peekaboo oki instead of memcpy(). twin16: Convert the scrolling layers to tilemaps (the fixed text layer was already one). Miscellaneous cleanups/modernizations. Notice that rom_ptr_finder has a length() method which returns the length in whatever size unit the pointer is, instead of a bytes() method. Yes, I'm going to convert shared_ptr_finder to match, since this way makes a lot more sense (in particular, mask() is useless for shared_ptrs that are anything other than INT8/UINT8). More devfind: Renamed rom_ptr_finder to region_ptr_finder after discussion with Aaron. First round of memory_region_finder to region_ptr_finder conversions. rf5c400: use a region_ptr_finder to find our sound ROM instead of looking up the region by hand in device_start(). Will probably start converting other sound devices to this pattern (other than the ones that use the memory system) if there are no problems or objections (emu\devfind.c) [Alex Jackson].
 - 0.153              : Added emu\dioutput.c/h. Added "read_only" feature to the software list to denote write protected images (emu\diimage.c) [Curt Coder]. Fixed nvram save location by setting proper name (emu\diimage.c) [Miodrag Milanovic].
 - 0.152              : Added load_software_region() function that loads a software list region into a shared_ptr [Curt Coder]. fix for MSVC "warning C4717: 'device_image_interface::fread' : recursive on all control paths, function will cause runtime stack overflow" [smf].
 - 0.149u1            : Added emu\devfind.c/h, drivlgcy.h and mcfglgcy.h. Allow devices with execute interface to have a clock of zero, they are suspended and restarted on clock change. Note that the device still needs to have a clock before MAME actually starts executing timeslices (emu\diexec.c/h) [Dirk Best]. Device system: Moved required/optional device finders to a new header devfind.h [Aaron Giles].
 - 0.148u1            : Allow image devices to skip core fopen() of the image's filename and handle themselves in call_load() (emu\diimage.c) [R. Belmont]. Error out if XML is incomplete instead of crashing (emu\diimage.c) [Fabio Priuli]. Getting rid of DEVICE_IMAGE_START [Wilbert Pol].
 - 0.147u2            : Verify softlist items that are not CHDs or roms and display warnings/errors (emu\diimage.c) [Miodrag Milanovic].
 - 0.146              : Added device image type for individual ROM images (as used in some Amstrad CPC applications) (emu\diimage.c) [Barry Rodewald].
 - 0.145u6            : Display softlist in menu only for devices having interface set [Miodrag Milanovic].
 - 0.145u4            : Removed emu\devimage.c.
 - 0.145u2            : Added helpers for loading file for slot determination. Give more proper name and disabled loading of soflist items in open_image_file call [Miodrag Milanovic].
 - 0.145              : Workaround for softlist images ending up with the wrong basename. this fixes problems with nvram and snap handling in softlist [Fabio Priuli].
 - 0.143u2            : Update support for slot devices based softlists [Miodrag Milanovic].
 - 0.142u6            : Cleanup of image device base classes and prepare for rewrite [Miodrag Milanovic].
 - 0.142u5            : Removed memory allocation calls from image device [Miodrag Milanovic].
 - 0.142u3            : Fixed uninitialized variables found by Valgrind (emu\diimage.c) [R. Belmont]. Fixed problem with image devices due to same name in interface and device class [Miodrag Milanovic].
 - 0.138u4            : Renamed feof to image_feof (in device_image_interface) in order to compile on FreeBSD [El Barto].
 - 0.139u1            : Fixed image device error handling [ShimaPong, Miodrag Milanovic]
 - 0.139              : Fixed image based cheat file loading (emu\diimage.c) [Miodrag Milanovic].
 - 0.138u4            : Adding ability to support other types of software lists, so floppies, cassettes, cd-roms are now possible to be used [Miodrag Milanovic].
 - 0.138u3            : Added emu\devimage.c. Moved image legacy device implementation to devimage.c. Created image.c implementation with initialization of devices/configuration for image devices, used those calls from mame.c. Some minor cleanup of legacy device and initial implementation of some calls. Implemented most of calls for image device. Added new static call in diimage and added call to initialize subdevices for image device [Miodrag Milanovic].
 - 0.138u2            : Added emu\diimage.c/h. Created legacy image device [Miodrag Milanovic].



 6.3  SOFTWARE LIST

 - 0.281              : Split multiple languages/developers into separate info elements in all software lists [holub].
 - 0.276              : Removed spurious spaces with name and supported values for consistency (hash\*) [Angelo Salese].
 - 0.261              : Disallow zero-length regions in ROM definitions and software lists (emu\validity.cpp and emu\softlist_dev.cpp) [AJR].
 - 0.255              : Validate characters in software list names (emu\softlist_dev.cpp) [AJR].
 - 0.251              : Give "slot_default" option values default priority rather than maximum priority, so command line option specifications can override these. Silently ignore software list-provided default options or values that don't exist in a particular system configuration (emu\emuopts.cpp) [AJR].
 - 0.240              : Future-proofing by using correct #include for SOFTWARE_LIST device [AJR].
 - 0.237              : Added support for a 'notes' field to store information about a software list or software list item (emu\softlist.cpp) [Wilbert Pol]. Use more appropriate containers (emu\softlist.cpp). Ignore notes elements when loading software lists. It's effectively a comment that isn't a comment syntactically, it's being used for things that are not useful to display in the internal UI, and it slows down startup (emu\softlist.cpp) [Vas Crabb].
 - 0.234              : Fixed verbose printf (emu\softlist_dev.cpp) [AJR].
 - 0.233              : Miscellaneous improvements for software lists: Show list name in software selection menu (machines have multiple lists). Actually report software list parsing errors during validation. Check that software list name attribute matches filename. Limit software list names to 24 characters - they're getting too long, and they need to be practical in command lines [Vas Crabb].
 - 0.221              : Start adding validation for data areas (emu\softlist_dev.cpp). Fixed the errors found by adding validation to software list data areas. Most of them seem to be simple copy-paste errors hidden by the fact that the default device_image_interface loader ignores the data area size (as opposed to the "ROM" loader). Validate ROM labels [Vas Crabb].
 - 0.217              : Get some stuff out of the global namespace (emu\softlist_dev.cpp). Make -listsoftware and -getsoflist recognise software lists that come from slot cards (mame\clifront.cpp) [Vas Crabb]. Avoid "Redundant default attribute value assignment" in hash files [Firewave].
 - 0.210              : Removed not needed offset from files in HASH folder [Robbbert].
 - 0.209              : Offset is now optional and defaults to 0 (emu\softlist.cpp) [hap].
 - 0.207              : Fixed XML file structure for files in HASH folder which required it (hash\neogeo.xml...). Loadflag no longer required for jpond (hash\megadriv.xml) [Tafoid]. Srcclean the softlists [Vas Crabb].
 - 0.202              : Fixed displaying of software lists title images (ui\selmenu.cpp) [Robbbert].
 - 0.201              : Make the software list "special" to prevent pausing while typing (ui\imgcntrl.cpp) [smf].
 - 0.194              : Fixed nodump disk validation regression (emu\softlist.cpp) [Osso]. Simplified nodump CHD check (emu\softlist.cpp) [smf].
 - 0.193              : Changed misleading parameter name (emu\softlist_dev.cpp) [AJR].
 - 0.188              : Made internal UI list missing/incorrect files when audit fails. Also consolidated selgame/selsoft code for actually launching systems into one place. Reduced header clutter (ui\selmenu.cpp) [Vas Crabb].
 - 0.186              : Copy longname, manufacturer, year, filetype, etc. for image info in all softlisted cases (emu\diimage.cpp) [AJR]. Adding hack to fish hashpath option out of INI files prior to softlist evaluation. Logan B reported an error where the hashpath specified in INI files was not being honored in softlist evaluation. This is a change to preprocess INI files for the sole purpose of finding the hashpath prior to evaluating softlists [Nathan Woods]. Removed duplicates from list of approximate software matches (emu\softlist_dev.cpp) [Robbbert].
 - 0.185              : Fixed a bug that caused "Switch Item Ordering" in the software list menu to dupe entries. Changed a lookup within the softlist code to use std::find_if(). Changes to make get_default_card_software() less stupid. The goals with this change is to make get_default_card_software() a bit more standalone by making it a const method that does not mutate the state of the device_image_interface. This is done by passing in a small structure that encapsulates the minimum of information that get_default_card_software() needs. This also eliminates the need for device_image_interface::open_image_file() [Nathan Woods].
 - 0.184              : Very minor cleanups; accessing options.software_name() once and better std::string usage (clifront.cpp and mameopts.cpp). Eliminates the need for emu_options::update_cached_options() by providing a hook for when option values change. This is a preliminary fix to the issue identified in PR#2065 (https://github.com/mamedev/mame/pull/2075). More softlist related refactoring: We now only parse the command line (with core_options::parse_command_line()) once. Options that are set up during slot and image setup go through a 'value_specifier' function. Eliminated the command line postprocessing. Cleanup of slot code. Added device_slot_interface::has_selectable_options() to calculate whether a particular slot has selectable options. Fixed regression when loading multipart softlists. Pernod found a regression introduced in the 0.183 softlist refactoring whereby multi-part softlist items would not distribute to multiple slots. The problem was that the old code was relying on the image slots being loaded into the core. This is not the way the new system works, so I've added a hook into software_list_device::find_mountable_image() that allows the new approach to work. Fixed Software list items with the "requirement" sharedfeat don't work [Nathan Woods]. Fixed image mounting from command-line in systems with a software list and an ini file, but there's plenty of time for testing (MT06107) [Robbbert].
 - 0.183              : Allow softlist software parts to use different interfaces: imgcntrl: Don't assume first software part, find part with correct interface. swlist: Check all software parts for matching interface when populating list of software lists. softlist_dev: Check all software parts when finding approx matches [Nigel Barnes]. Revert 'Make "requirement" field in softlists actually work (MAME 0.182; MT06464)' [Vas Crabb]
 - 0.182              : Make "requirement" field in softlists actually work. MAME's architecture for software loading remains gruesomely overcomplicated, and this makes it even less efficient than it already was. However, I think more invasive cleanups would best be left until later [AJR].
 - 0.178              : Increased max length of parent name to 16, for evaluation purposes (emu\softlist_dev.cpp and validity.cpp) [Robbbert]. Check that driver names contain only [0-9a-z_] (emu\validity.cpp). Check characters in softlist setnames, fix errors (emu\softlist_dev.cpp) [Vas Crabb].
 - 0.177              : Added emu\softlist_dev.cpp/h. Fixed issue that prevented softlist items specified on devices from loading. Splitted emu\softlist.cpp/h: The newly refactored rom_entry data structure is used. Keep the refactored softlist code in src\emu, in order to defer the mechanical process of moving it. Keep includes of softlist[_dev].h out of diimage.h, so that changes to either do not trigger an emu.h recompilation. Changing 'bool iswild' to 'const bool iswild' (emu\softlist_dev.cpp). Fixed an issue that caused softlist device descriptions to be blank. This also fixes a likely undiscovered issue where the filename in softlist XML parse error messages was also blank. Changed software_info::find_part() to use std::find_if() [Nathan Woods].
 - 0.176              : Const correctness related changes to softlist. Better adoption of move constructors. Changed the softlist code to more aggressively use std::string. Changed some usage of simple_list to std::list in the softlist code. Added usage of std::find_if(). Replacing the enum with a class hierarchy, derived from 'software_list_loader'. Consolidated implementations of device_image_interface::call_softlist_load() [Nathan Woods]. std::string::c_str() const never returns nullptr. Get rid of extra length parameter using a template (emu\softlist.cpp) [Vas Crabb]. Cure software lists of validity checking errors: Fixed stupid logic errors in software_list_device::internal_validity_check. Allow info and feature list entries to provide an empty string as the value [AJR].
 - 0.175              : No need for custom allocators (emu\hashfile.cpp and softlist.cpp). Added PugiXML and used it for hashfile (3rdparty\pugixml\... and emu\hashfile.cpp) [Miodrag Milanovic].
 - 0.174              : Check software parts for incompatibility as well as compatibility. This new softlist feature is now used by genesis_tmss to exclude several entries from megadriv.xml. Use popmessage instead of osd_printf_warning for incompatibility warnings. Unify some common software loading code, which reduces indentation levels in clifront.cpp [AJR].
 - 0.173              : Fixed software loaded outside of software list (e.g. -cart PATH_TO_ROM) fails to save SRAM (emu\diimage.cpp) [dankan1890]. Reverted software-installed slot/image options when changing software. Removed emu.h's stealth include of emuopts.h through mconfig.h; reduced dependency on emuopts.h in other headers and source files. MCFG_CPU_FORCE_NO_DRC is now a CPU configuration parameter rather than a global one; it still works to override the -drc option setting [AJR]. Added support for "rom_ignore" [Fabio Priuli].
 - 0.172              : Fixed GUI software list cartridge picker fails to select cartridge (MT06156). Let slot_default in softlists override INIs (but not the command line; emu\emuopts.cpp). Remember to load software when the system name doesn't change. Allow software selected from UI to install slot defaults. Remember to load software when the system name doesn't change [AJR].
 - 0.171              : Software list entries can now supply slot option defaults. This feature is enabled when executing 'mame driver software'. After the specified software is found in the software list and attached to an appropriate image device, the software part's feature list is examined for any feature whose name is that of a slot device with _default appended. The feature's value field becomes the slot's default option, which overrides any driver-specified default and can be overridden by user-specified options. No software lists have been updated to use this feature at the moment. Ignore invalid default slot options in software lists. This prevents software lists from (e.g.) trying to put a Zapper into ctrl1 on the Famicom [AJR].
 - 0.168              : Fixed whitespace for publishers and descriptions in softwarelist XMLs and softlist format fixes and validation fix [sparrowred]. Fixed softlists validity [Nigel Barnes].
 - 0.165              : Sync software list rom name validation with regular rom name validation (emu\softlist.c) [Wilbert Pol].
 - 0.164              : Stop crashing after saving to a disk image loaded from a software list (windows\winfile.c) [Curt Coder].
 - 0.163              : When accessing the internal File Manager for a system with available softlists, let the softlist item be highlighted by default to make navigation faster (ui\filesel.c). Added validation entry for softlist items which might miss the <part> nodes [Fabio Priuli]. Parse ini files before looking for software (emu\clifront.c). This way the hashpath setting will actually be used to search for software in software lists. This only occured when starting the emulator with the auto-search/mounting-software-feature: MAME nes sonic. This format worked ok: MAME nes -floppy sonic [Wilbert Pol].
 - 0.162              : Moved src\mess\mess.c and mess.lst to src\mame and src\mess\osd\windows\mess.ico, mess.man and mess.rc to src\mame\osd\windows\mess. Removed mess\tiny.lst. Slightly optimized -romident so that each software list is parsed only once instead of as many times as the number of drivers it is attached to. Also, removed the implication that files with (size != power of 2) are to be skipped, since we now want to identify also tapes and floppies and not only ROM binaries (emu\clifront.c) [Fabio Priuli].
 - 0.159              : Removed duplicate and unused code in emu\softlist.c (compare lib\util\cstrpool.c) [Justin Kerk].
 - 0.156              : Fixed poteotential -validate crash with invalid softwarelist XML. Actually report softwarelist XML parsing errors in -validate. Fixed softwarelist validation errors [Oliver Stoeneberg].
 - 0.155              : Fixed attributes changed in 0.154 release for megadriv/neogeo software lists. Thanks Sunbeam for the heads up [Tafoid]. Fixed inconsistent -listsoftware output (emu\clifront.c) [phulshof]. Restored the support for loading games from compatible softlists (like gbcolor games in gameboy, and viceversa, msx1 carts in msx2, etc.) by using the syntax: mess system -media list:gamename. You can now for instance use again "mess gbcolor -cart gameboy:sml" to play "Super Mario Land" with the custom palettes of the Game Boy Color (emu\diimage.c). Fixed multisession crash when the new cart needed a dynamic buffer/array larger than the original one. this got introduced when converting from auto_alloc_array to dynamic buffers, because such buffers are not made NULL at reset, but got unnoticed/unreported up to now. many thanks to Trebor for catching it! [Fabio Priuli]. Fixed memory leak when loading CHD from software list (emu\romload.c) [Oliver Stoeneberg].
 - 0.154              : Optimized software_list_device::find() a bit - speeds up -validate for MESS [Oliver Stoeneberg]. Added support for loading a default battery (emu\diimage.c and image.c), instead of a fixed fill value, when no battery is found. This allows for loading factory formatted sram/nvram from softlist. (MESS) Fixed NES Silva Saga, which relies on SRAM not being 0x00 filled from factory, with many thanks to naruko for investigating the problem [Fabio Priuli]. Make hasfile processing work without a running_machine() (emu\hashfile.c) [Wilbert Pol]. Examined/adjusted mess.lst for orphaned sets and invalid entries. Adjusted spacing to better view commented setnames and added commented entries in mess.lst to match missing roms as well as already existing macros in drivers. Alignment fixes for XML hashes [Tafoid]. Added width and endianness attributes to data areas in software lists. Update neogeo.xml to take advantage of them. For regular rom loading we try to autodetect the appropriate endianness and width by matching the region tag to a device with a device_memory_interface; this is generally not doable for software lists because the regions are children of some slot device and thus not siblings of the devices in the root driver (i.e. "cartslot1:maincpu" rather than "maincpu") So you have to specify the width and endianness manually for now [Alex Jackson].
 - 0.153              : Software list UI cleanups (ui\swlist.c) [Nathan Woods]. Fixed when launching softlist items without the media switch, MESS ignores hashpath option from mess.ini (emu\clifront.c and mame.c) [Miodrag Milanovic]. Added "read_only" feature to the software list to denote write protected images (emu\diimage.c). (MESS C64) Bounty Bob Strikes Back! will not load if disk is not write protected. Fixed software list regression [Curt Coder]. Clang 3.4 fixes for MESS [Oliver Stoeneberg].
 - 0.149              : Let's increase approx matches for gamenames from 10 to 16 (emu\clifront.c and softlist.c) [hap]. Fixed software list CHD verification (emu\audit.c) [qmc2].
 - 0.148u3            : Fixed name of software_list_device to "Software list" [Oliver Stoeneberg]. Added some additional XML validation and fixed the resulting errors (emu\softlist.c) [Fabio Priuli]. Added the parent software to the searchpath when verifying software list entries (emu\audit.c) [Wilbert Pol].
 - 0.148u2            : Fixed loaded rom percentage going beyond 100% with softlist entries. Previously, loading from softlist was using the BIOS romsize as totalsize to load, explaining both the erratic percentage values in systems like AES and the totalsize = 0 error in NES and other bios-less systems, which was requiring a special workaround. Handling is still not perfect (e.g I think that first the BIOS is loaded and counter goes to 100%, then the cart is loaded and the count restarts from 0%, so it would be better to have a separate message for the softlist loading, but I need to study in depth the code before such a change), but it's definitely better than having AES carts loading up to 12575% or NES skipping completely the soft percentage due to totalsize =0. Reset rom size counter when starting to load software. Attempt to improve loaded rom percentage display. Namely, with this change the emulator displays first a "Loading Game N%" while loading MAME game or MESS system roms, then it switches to "Loading Software %N" while loading from softlist (this also applies to Megatech, ST-V and NeoGeo lists in MAME). I'm not completely happy with passing a "from_list" boolean to modify the behavior, but I have found no better solution. If you find any, please be my guest and replace this solution with yours. Lists have no BIOS flag, so this check is redundant [Fabio Priuli].
 - 0.148u1            : Fixed handling of software list entries without any datearea definition. This fixes romident crashing on the CPM set from the c64_cart list. Fixed crash in software_find_romdata() [Oliver Stoeneberg]. Sync the internal software list dtd (emu\clifront.c) [Wilbert Pol].
 - 0.147u2            : Added verifysoftlist command for verifying software availability for separate software lists (emu\clifront.c) [Wilbert Pol].
 - 0.147              : Patch that enables output of <info> elements stored in software lists through -listsoftware [qmc2]. Merge of MESS sources. Unified SVN properties of softlists [Fabio Priuli]. Testing the new SVN [Angelo Salese]. Sync software lists from MESS into hash [Miodrag Milanovic].
 - 0.146u5            : Added some sanity checks to the softlist handling [Curt Coder].
 - 0.145u6            : Display softlist in menu only for devices having interface set. Prevent crashing if there is interface defined but no actual softlist hooked. Fix for required softlist item loading. Fixed canceling file in softlist selection. Fixed merge name for devices in XML output [Miodrag Milanovic]. Fix for feature name XML output in softlist (emu\clifront.c) [bobz].
 - 0.145u4            : Removed emu\devimage.c. Fabio Priuli fixed -lsoft reporting wrong sizes for roms using ROM_CONTINUE (the size is calculated with rom_file_size which already takes into account all ROM_CONTINUE, so no need to output it). Miodrag Milanovic removed legacy image devices and related code.
 - 0.145u2            : Added getsoftlist;glist call so list content can be taken by name, to help clrmamepro and others handling software lists, and simplified rest of code [Miodrag Milanovic].
 - 0.145              : Fixed regression on softload item load using menus. Do the softlist validation only on validate command [Miodrag Milanovic]. Fabio Priuli fixed crash when loading from softlist with -cart/-flop/-cass switch. Workaround for softlist images ending up with the wrong basename. this fixes problems with NVRAM and snap handling in softlist [Fabio Priuli].
 - 0.144u7            : Rewrote the software_list_device as a modern device, getting rid of the software_list_config abstraction and simplifying things [Aaron Giles].
 - 0.144u6            : Fixed softlist entry count tracking issue [O. Galibert]. Enabling load of multi part softlist items on all available device [Fabio Priuli].
 - 0.144u4            : Softlist support cleanup and addition of compatibility filtering [Miodrag Milanovic].
 - 0.144u1            : Added support for hard disk softlists [Miodrag Milanovic].
 - 0.142u6            : Miodrag Milanovic added support for starting softlist item directly without marking image device to be mounted on. If soft item is found it will be loaded on first image device that have needed interface defined.
 - 0.142u1            : Fabio Priuli moved software list handling (in the Internal UI) to a separate source, and made the code more similar to the File Manager handling code. Fabio Priuli added a switch to choose between shortname order or description order for softlist entries (in the Internal UI), and adapted the char input code to match shortnames or descriptions accordingly (emu\uiswlist.c/h).
 - 0.142              : Split the <info> field (added some time ago to handle compatibility requirements) into <info> and <sharedfeat> (softlist.c). The former stays tied to the whole software entry, the latter gets inherited by each part [Fabio Priuli]. Added hash\megatech.xml and hash\softwarelist.dtd. Two hash_collections can only match if they have at least one matching hash [Aaron Giles].
 - 0.141u3            : Softlist WIP code to add more info nodes [Fabio Priuli].
 - 0.141u1            : Fabio Priuli improved the behavior of -listsoftware by updating DTD (clifront.c), by adding output of most missing elements and attributes (softlist description, features & diskdata) and by fixing size and offset formats. Added remaining loadflags to -listsoftware output (clifront.c). Added best match suggestions to software lists (softlist.c). Only output best match if a list is present, limit the scan for best match to the devices with the same interface and fixed a corner case with shortname=listname. Fabio Priuli added "-lsoft" option as short version of "-listsoftware", prevented -lsoft from output DTD if no list is found, allow software lists to look for files in the rompath too, added support for split set to softlist for cass and flop too (devimage.c), added support for split set to softlist (for Cart, CD and HD) (romload.c), added WARNING if loading a software with supported="partial" or "no" and implemented handling of parent-clone CHDs in software lists (romload.c).
 - 0.140u2            : Curt Coder allowed the use of either decimal or hexadecimal values for <dataarea> size, <rom> size and <rom> offset in software lists.
 - 0.138u4            : Miodrag Milanovic added per-device image softlist loading routine. Added ability to support other types of software lists, so floppies, cassettes, cd-roms are now possible to be used.
 - 0.138u3            : Moved softlist implementation from MESS [Miodrag Milanovic]: Moved image related UI from MESS to emu core. Reimplemented filename related image device calls. Moved listsoftware command line option from MESS, and added softlist in XML output. Miodrag Milanovic moved ioproc implementation from MESS. Software list update [Wilbert Pol]: Software list XML files are now read in full such that information for clone and parent sets is available. Added validity check to check for existence of parent sets. Software list improvements [Miodrag Milanovic]: Support for multiple software list per driver. Added MDRV_SOFTWARE_LIST_COMPATIBLE_ADD for adding compatible software lists (for documentation purposes). listsoftware option now return only original software lists. UI is updated to enable mounting software items per device, it will display only items from list that are for specific device. Separate compatible software lists in UI.



 7.   INPUT/OUTPUT

 - 0.286              : Don't gate creating input device behind -mouse option, it breaks -mouse_device, -trackball_device, etc (input\input_win32.cpp) [Vas Crabb].
 - 0.282              : Removed the "optional" field flag (emu\ioport.h). There are multiple issues with this flag: It's poorly defined. Is it an input that's software-accessible but not used? Is it an input that shows in test modes but doesn't do anything useful? Is it an input that the system can be configured to not use? Is it an input that is useful but not strictly necessary? In almost a decade, it hasnt been used widely. It was used in less than ten places. There hasn't been substantial interest in actually applying it across the codebase. It would be an absolute nightmare to try and apply to mahjong and hanafuda games. Consider all the cases where a game may use some but not all of the double-up game controls, and some games support multiple control schemes that use different subsets of the standard mahjong matrix. Trying to apply it to gambling systems would also be a minefield. If we were to expect it to be applied, it would cause an eplosion in input port definitions for platforms with multiple games, adding further maintenance burden. It would greatly reduce the value of having things like the standard mahjong panel definitions as you'd rarely actually be able to use them as-is [Vas Crabb]. Removed PORT_ROTATED from the core. This automatic joystick remapping feature has not been enabled in any driver for years (emu\inputdev.cpp, emu\ioport.cpp and mame/luaengine_input.cpp) [AJR].
 - 0.281              : Fixed "Application" key with SDL keyboard provider (input\input_common.cpp). Also improved support for rare higher F-keys with SDL and Win32 providers [Vas Crabb].
 - 0.279              : Added coinage settings 10C_1C, 1C_10/20/25/50/100C (emu\ioport.cpp) [hap].
 - 0.278              : Group default double-up game control assignments on home row. Also moved Mahjong P to P and Payout to 4. This fixes the conflict between Mahjong I and Payout (emu\inpttype.ipp) [Vas Crabb].
 - 0.277              : Fixed possible issue where 4way joystick value could be invalid (emu\ioport.cpp) [hap].
 - 0.274              : Fixed enum range warnings in debug builds (interface\inputcode.h) [AJR].
 - 0.273              : Retire PORT_VBLANK / PORT_HBLANK (emu\ioport.h) [Angelo Salese]. Use the empty string rather than nullptr as default tag for ioport_condition (ioport_condition::operator== was blindly passing the null pointers to strcmp) [AJR].
 - 0.272              : Guard against automatic integer promotion on arithmetic (emu\input.cpp) [Vas Crabb]. Don't increment coin counter at power-on when initial counter_w input is 1. Added handlers for resetting counters (emu\bookkeeping.cpp) [hap].
 - 0.271              : Fixed deadlock issue with joystick (removed reset() call during process_event) (input\input_sdl.cpp) [hap]. Added piano keyboard definitions and automatic names (emu\ioport.cpp) [O. Galibert]. Improved validation of DIP switch locations. Treat an empty switch name as an error. Treat a non-positive switch number as an error. Also allocate fewer temporary strings (emu\ioport.cpp). Made syntax for configuring callbacks more consistent. You now use FUNC or NAME to configure port field callbacks, like you would when configuring other kinds of callbacks. This has a number of benefits: No need to remember different syntax for port field callbacks and more approachable for new contributors. May use function templates with multiple arugments using NAME((&...)) syntax without resorting to another layer of macros. May use non-member functions on the odd chance it's useful. More natural syntax for referring to member functions (emu\ioport.h) [Vas Crabb].
 - 0.270              : Increase event queue size (input\input_common.h). Empty event queue on resets (input\input_win32.cpp and input\input_sdl.cpp). Set RIDEV_INPUTSINK flag because of missed keyup events, causing stuck inputs (input\input_rawinput.cpp) [hap]. Made DIP switch location validity errors more precise (emu\ioport.cpp). Got rid of [DECLARE_]CUSTOM_INPUT_MEMBR - it's just obfuscation at this point (emu\ioport.h) [Vas Crabb].
 - 0.269              : Offset analog value by half a step because of rounding issue when crossing 0 (crossing 0 now takes 1 step instead of 2, and there's 0.5 step wiggle room at edges) (emu\ioport.cpp). Added missing XML tag to cfg files (ctrlr\*.cfg) [hap].
 - 0.267              : Added assertion to write_at equivalent to the one in write. Checks for invalid results from underlying write call. Also more const (util\ioprocs.cpp) [Vas Crabb].
 - 0.266              : Added an SDL lightgun provider. This does essentially the same thing as the Win32 lightgun provider, mapping the absolute pointer position over the window to gun axes (input\input_sdl.cpp). Also added a bunch of const in the windows input handling code [Vas Crabb].
 - 0.265              : Initial touch input support. Feed mouse/pen/touch pointer events through UI input manager with Win32 and SDL. Started migrating UI code to use new API and reworking mouse/touch interaction. Made scaling for mouse scroll better match RawInput and DirectInput (input\input_sdl.cpp). Added support for horizontal scroll axis (input\input_rawinput.cpp). Added support for scroll axes and more buttons to mouse/lightgun (input\input_win32.cpp). Don't fight over events with the UI manager - it breaks menus. Refuse to break if unable to take over UI input (debugger/debugimgui.cpp). Translate mouse position to window cooridinates for scroll wheel events (windows\window.cpp). Supply last mouse position for scroll wheel events if possible (sdl\window.cpp). Made zero input mask an error - it was only being used to block clicks (scripts\build\complay.py) [Vas Crabb].
 - 0.264              : Added wrappers for common patterns (util\ioprocs.cpp). Various cleanup and minor enhancements (osd\modules\input\*): Got rid of the DirectInput key code macros. DirectInput headers are always available on Windows - it's just an opportunity for bygs (input\input_common.h). Added default names for keys mapped to MAME's "other switch" type (input\input_common.cpp). Simulate Pause key being held for 30ms, similarly to what's done for Caps Lock on macOS with SDL. Also added a gross hack to give "correct" names for Pause and Num Lock (input\input_rawinput.cpp). Get default key names from SDL. Not really that useful as it isn't aware of the current keyboard layout. Key map files are still needed for anything other than a US ANSI layout (input\input_sdl.cpp). Properly align buffers for RAWINPUT header (input\input_rawinput.cpp) [Vas Crabb].
 - 0.262              : Allow punching holes in IPT_UNUSED and IPT_UNKNOWN (emu\ioport.cpp) [Vas Crabb].
 - 0.261              : Fixed rarely-used PORT_CROSSHAIR_MAPPER and PORT_CROSSHAIR_MAPPER_MEMBER macros (emu\ioport.h) [qufb].
 - 0.259              : Trim extra spaces in keyboard key names more safely (emu\ioport.cpp). Use multibyte.h functions (emu\ioport.cpp) [AJR].
 - 0.255              : Made explicit -no{mouse|joystick|lightgun} take precedence over -{mouse|trackball|adstick|paddle}_device etc. from lower priority levels (emu\ioport.cpp) [Vas Crabb]. Put IPT_ADJUSTER in same class as IPT_CONFIG (emu\ioport.cpp) [hap].
 - 0.253              : Minor fix to error message (emu\ioport.cpp) [AJR]. Fixed a corner case in XInput DJ Hero controller turntable handling (input\input_xinput.cpp). Modernised interface for enumerating DirectInput devices. Gets rid of some state in the winhybrid joystick module that's only used during initialisation (osd\modules\input\*). Always use DirectInput with desktop window in background mode. There are multiple issues with what MAME was doing, but the most glaring is that it violates the DirectInput interface contract that requires the window associated with an open device must not be destroyed. See documentation for IDirectInputDevice8::SetCooperativeLevel: "This parameter must be a valid top-level window handle that belongs to the process. The window associated with the device must not be destroyed while it is still active in a DirectInput device". The previous code also prevented DirectInput controllers from working when using multiple windows if any window other than the first window had focus. Also fixed SDL builds not correctly recognising when all windows lose focus, and save state menu not appearing (osd\modules\input\*). Changed config save/load behaviour for conditional fields. See GitHub #10937 for issues with current approach. Only save configuration for enabled fields. Apply loaded configuration to all matching fields (emu\ioport.cpp). Work around inability to have stdcall non-capturing lambdas (fixes 32-bit MinGW build) (input\input_dinput.h). Adjusted heuristics to work better with newer DualShock/DualSense controllers (input\input_dinput.cpp/h) [Vas Crabb].
 - 0.252              : Added emu\inpttype.h, input\input_wincommon.h, osd\interface\inputdev.h, interface\inputfwd.h, interface\inputman.h, osd\sdl\osdsdl.cpp, osd\sdl\sdlopts.cpp/h and windows\winopts.cpp/h. Removed input\input_sdlcommon.cpp/h and osd\windows\winmenu.cpp. Input code cleanup: dinput and xinput: Use proper item IDs for hat switches rather than "other switch" (input\input_dinput.cpp and input_xinput.cpp). xinput: Map right thumb stick to Z/rZ for consistency with SDL and DirectInput. Map triggers to additional absolute axes 1 and 2. Map start and back buttons to start and select (input\input_xinput.cpp). Added default assignments for player 5-10 start/select. Added default assignments for 5P-8P start and coin 5-8. Better XInput and SDL game controller input enhancements: Added initial support for XInput controller subtypes, starting with driving, arcade and flight controllers. Check XInput capabilities to ignore buttons and hats that aren't present. Added preliminary SDL Game Controller joystick provider. Reconnection and mixed Game Controller/Joystick devices are unsupported. Show the input token for the highlighted control on input device menus. Include mapping string in verbose output when enumerating SDL game controllers (input\input_sdl.cpp). Fixed names of face buttons on Switch Pro Controller with SDL Game Controller provider (input\input_sdl.cpp). Fixed names of DualSense controller buttons with SDL Game Controller provider (input\input_sdl.cpp). Improved SDL Game Controller joystick provider: Allow fallback to joystick API for devices without game controller mappings. Detect controller reconnection. Force Switch Pro Controller ZL/ZR to act like buttons. Added button names for Google Stadia controller. Also fixed dumb copy/paste error on my part in Windows clipboard code (input\input_sdl.cpp and lib\osdlib_win32.cpp). Added support for mapping files to sdlgame joystick provider and made it default with SDL. This changes behaviour, however I think it's a net positive: Most games using Steam Input or SDL2 to read game controllers have this behaviour, so users have come to expect it. This module is better at giving meaningful names to buttons on common controller, and assigning axes consistently. Button/axis mapping files using a widely-used format are supported. The old behaviour is still available with '-joystickprovider sdljoy' if anyone wants it. The new option for controller mapping files is in the general OSD options rather than SDL options as it can be extended to DirectInput in the future (commandline\commandline-all.rst, input\input_sdl.cpp, input_xinput.cpp and lib\osdobj_common.cpp). Work around bad XInput capabilities report from Retro-Bit Saturn pad (input\input_xinput.cpp). Recognise Joy-Con pairs with sdlgame input module (input\input_sdl.cpp). Added option to accept SDL game controller/joystick input when losing UI focus. Better button names for NVIDIA Shield and Xbox One controllers with SDL game controller module. Work around another observed invalid XInput capabilities report (input\input_xinput.cpp). Added support for guitar and drum kit controllers via XInput (input\input_sdl.cpp and input_xinput.cpp). Improved XInput guitar support and added XInput Rock Band keyboard support (input\input_xinput.cpp). Better XInput rhythm game controller support on Windows: Better support for extended controller type information. Support for velocity sensitive six-drum controller. Don't ignore button capabilites for keyboard controller (input\input_xinput.cpp). Still more XInput rhythm game controller support for Windows: Added support for DJ Hero turntable controller. Added support for Rock Band keyboard controller pedal. Fixed pickup selector switch on guitar controllers (emu\inputdev.cpp, input\input_winhybrid.cpp and input\input_xinput.cpp). Fixed bar graph display for fields with ranges that wrap through zero (ui\analogipt.cpp). Separateed analog axis deadzone and switch threshold settings, reduced default deadzone, and fixed a potential division by zero if the deadzone and saturation settings are equal (emu\inputdev.cpp). Fixed behaviour of absolute analog fields where range passes through zero - it previously only worked for specific combinations of mask, minimum and default. Removed a workaround from universal/getaway.cpp that is no longer necessary (emu\ioport.cpp). Fixed unintuitive behaviour when an absolute field is assigned an OR combination of a relative control folled by an absolute control (e.g. Mouse X or Joy 1 LSX). Also fixed reading axis input sequences where an axis code is followed by a switch code (these can only be produced by manually editing configuration files, not through MAME's UI), and fixed the returned type when multiple relative axes sum to zero (emu\input.cpp). Fixed hat switches being stuck in up position when input is suspended in the background (osd\modules\input\input_dinput.cpp). Give throttle control a distinct type, and don't auto-centre (taito\taitoio_yoke.cpp). Renamed inputs that were causing confusion. "Bill" and "Track" were causing confusion for translators and hence likely causing confusion for many users, especially those who are not native English speakers. "Track" as an abbreviation for "Trackball" was frequently being mistranslated, e.g. in the sense of a CD track selection button or even in the sense of a railway track. There's no reason to abbreviate it. "Bill" in the US English sense as a banknote is too ambiguous and was causing confusion for translators. It's better to use the less ambiguous "Banknote". Correct Greek translations of "Trackball" (emu\inpttype.ipp). Various input and OSD refactoring: OSD: Supply OSD object to modules on initialisation. Encapsulated some event handling in the OSD objects rather than leaving it in free functions. Put various stuff in namespaces. osd/modules/input: Enabled dinput, xinput and winhybrid modules for Windows SDL builds, and enabled background input for dinput and xinput (and by extension winhybrid) modules. Also fixed some COM and X11 resource leaks. osd/modules/input/input_sdl.cpp: Flipped SDL mouse button order to match Windows, and exposed vertical and horizontal scroll as Z and rZ axes. Moved SDL UI event handling out of input devices into OSD object. osd/modules/input_rawinput.cpp: Changed lightgun Z axis token so it's correctly identified as a relative axis (it maps to the scroll wheel equivalent). OSD: Added an option to choose the network provider module. Mostly useful if you build with both TUN/TAP and pcap support included, or if you want to disable emulated networking completely. emu/input.cpp: Use a better strategy for assembling input code names that uses fewer temporary strings and doesn't require use of the non-Unicode-aware space trimming function, fixes UI control names ending in certain characters cause display issues. osd/modules/input_dinput.cpp: Improved polling logic. OSD: Made various parts of the input code less dependent on concrete emu objects, and reduced inappropriately passing around the machine object. Made input modules less dependent on OSD implementation. Encapsulated some stuff and got rid of some vestigial newui and SDL1 support code. Cleaned up some interfaces. Moved OSD options classes to their own files. Prepare to remove main.h from emu.h - it's mostly used to get the application name, which the vast majority of emulated devices don't need to do. Don't swallow text input with -keyboardprovider win32 (input\input_win32.cpp), fixes keyboardprovider=win32 breaks search on the machine list. Clarified documentation of input options. Made explanation of interaction between device class enable options (-[no]mouse, -[no]joystick, -[no]lightgun) and automatic device class enable options (-*_device) more explicit. Also documented that -mouse_device mouse is set by default in both relevant places. Provided a better explanation of the purpose of -dual_lightgun (commandline\commandline-all.rst and windowsconfig.rst). Added an introduction to the input system for developers (docs\source\techspecs\inputsystem.rst). Fixed regression in display of some joystick inputs (emu\input.cpp). Split up interface classes into a few more files to reduce where the input device interface class needs to be included. Made OSD independent of concrete input_device class (osd\interface\input*). Allow input devices to provide tokens for controls without standard item types and additional default input assignments. Fixes issues assigning Yen and Backslash on Japanese keyboards (osd\modules\input, emu\inputdev.cpp and emu\ioport.cpp). Input refactoring: Made most default joystick assignments supplied by input modules. Input modules take available controls into consideration when generating default assignments (osd\modules\input and emu\inpttype.ipp). Added a separate "Back" UI input separate from Cancel. You may want an easier to hit combination for moving to the previous menu than for exiting or cancelling input. They both default to Escape (emu\inpttype.ipp). Added a UI Help control. Currently only used by analog inputs menu (emu\inpttype.ipp). Moved I/O port field type enum to its own header and sorted UI controls so they appear in a more logical order (emu\inpttype.h). Don't use UI Select to restore defaults - people should be getting used to the UI Clear input by now. UI Select cycles multi-value items instead (mame\ui\*). Don't use immediate cancel to cycle between clearing and restoring default assignment (use UI Clear instead) (ui\inputmap.cpp). Reduced the number of files needing to include the dreaded emu.h. Got some implementation out of headers (src\osd\*). Fixed failure to display localised analog input adjustments help (ui\analogipt.cpp). Fixed PS3/PS4 sticks have a stuck up input when program loses focus [Vas Crabb]. Swap ports and button bits at runtime. Avoids multiple input defs per-device (vcs_ctrl\paddles.cpp) [Ryan Holtz]. Better scaling factors for XInput DJ Hero turntable dials (input\input_xinput.cpp) [DarkMoS]
 - 0.249              : Added lib\util\utf8.h. Moved UTF8_xxx string literal macros to new header in lib\util\utf8.h [AJR].
 - 0.248              : Log 1-based device numbers, matching what's shown in the internal UI and used in tokens in CFG files (emu\input.cpp and emu\inputdev.cpp). Reworked and expanded documentation on configuring stable controller IDs (docs\source\advanced\ctrlr_config.rst and devicemap.rst) [Vas Crabb].
 - 0.247              : Removed no longer needed #include (util\ioprocs.cpp) [AJR].
 - 0.244              : Improved display name scheme for joystick axes and buttons [Vas Crabb].
 - 0.242              : Use ioprocs classes instead of emu_file for device_nvram_interface's load and save methods, and have these return false on I/O errors [AJR]. Fixed out of bounds access to std::string_view (emu\input.cpp) [Nathan Woods]. Allow re-plugging mouse/keyboard (input\input_rawinput.cpp) [Vas Crabb].
 - 0.241              : Only show items for first device in non-multi classes. It's not possible to actually use higher-numbered device assignments for classes that combine all host devices. For example you can't use the default "Mouse 2" assignments if -multimouse isn't enabled (emu\input.cpp). Fixes mouse B0 doesn't work by default in (MESS) Nintendo Zapper Lightgun. Added default assignements for P2-P4 mahjong/hanafuda inputs when using -multikeyboard (emu\inpttype.ipp). Added doxygen comments so one doesn't need to read the source to work semantics (util\ioprocsfilter.h) [Vas Crabb].
 - 0.239              : Marked PORT_RESET deprecated (emu\ioport.h). Fixed SlikStick configuration is not working for Asteroids. The reason for this is that Asteroids overrides the default assignments for the buttons, so the ctrlr\slikstik.cfg file needs to use the syntax for overriding specific inputs. See here: https://docs.mamedev.org/advanced/ctrlr_config.html. There was also a bug in how specific input overrides are applied (emu\ioport.cpp). Fixed the \ctrl files don't override driver specific mappings. Moved localised I/O port name lookup into I/O port manager. Added pseudo format specifiers to controller port names: %p for player and %% for literal percent symbol. This lets you get the localised player identifier in overridden input names (see NES and Neo-Geo for examples), and reduces the number of messages to translate [Vas Crabb]. Removed awkward initial_state setter from machine\input_merger.cpp and added notes [hap]. Added Player 3 and Player 4 mahjong input types (emu\inpttype.ipp) [kmg].
 - 0.238              : Made the default assignment for Save State recognise right shift (emu\inpttype.ipp). Fixed "MAME lost my joystick settings" (emu\ioport.cpp). Made default behaviour better (emu\ioport.cpp): If an input is configured to some combination of controls that are not present at all, ignore the setting altogether for the session. Fixed relative axes with PORT_RESET not responding to absolute controls. Fixes mapping joystick to trackball causes input to go haywire in sonic, cabalus and possibly others using upd4701a. Fixed relative axes not responding to an absolute control if the value doesn't change every frame (eg. holding a stick against the stop). Changed the scaling for absolute controls assigned to relative axes to make defaults more sane (e.g. arkanoid or spdheat with a joystick). Added documentation on assigning inputs (docs\source\usingmame\ui.rst). Fixed some default setting handling issues. Issues were unlikely to actually manifest unless you use controller configuration files to change specific system input defaults (emu\ioport.cpp). Added size accessor to multi-element output finder. std::size will work on the top rank of an outut finder now (emu\output.h). Exposed a couple more input related things (mame\luaengine_input.cpp). Exposed constructor and a few methods on input_seq required for scripts to properly clear assignments or restore default settings. Exposed ioport_manager::set_type_seq which is required to configure general input assignments properly. Removed unnecessary use of sol::overload in favour of optional parameters. Updated documentation and also fixed a few errors. Added description for axis setting assignments. Enabled complex combinations for analog axes: Made it possible to add digital controls to axis settings as enables. Mix multiple analog controls assigned to an axis setting. Added a "reverse" modifier for analog controls (useful with mixing). Fixed an issue assigning mouse axes using multiple mouse-like devices with -nomultimouse [Vas Crabb].
 - 0.236              : Added util\ioprocsfill.h, util\ioprocsfilter.cpp/h and util\ioprocsvec.h. Moved formats\ioprocs.cpp/h to util\. Started refactoring file I/O stuff. Added more modern generic I/O interfaces with implementation backed by stdio, osd_file and core_file, replacing io_generic [Vas Crabb].
 - 0.235              : Slightly cleaned up OSD input modules. Removed support for DirectInput 7 and earlier. It hasn't been tested in years, and it's not relevant on any supported OS. DirectInput is effectively finalised at version 8 and is unlikely to get an API update in the future. Use more string[_view] and fewer C strings and tightened up scope of a few things [Vas Crabb].
 - 0.234              : Added docs\source\advanced\ctrlr_config.rst. API cleanups (emu\input.cpp and util\unicode.cpp). Allow controller files to override input sequences for inputs that don't use defaults, and to override the toggle setting for digital inputs (emu\ioport.cpp). Expose configuration level (mostly matters for controller files), improved verbose diagnostic messages, and moved a few things out of the global and preprocessor namespaces (emu\config.cpp). Added documentation for some controller configuration file features (docs\source\advanced\ctrlr_config.rst). The device mapping feature documentation will be merged in at some point [Vas Crabb].
 - 0.233              : Added setter for initial state (machine\input_merger.cpp) [hap].
 - 0.232              : Handle Caps Lock key up events via a frame callback instead of the SDL key up event (which is too fast) (input\input_sdl.cpp) [ksherlock].
 - 0.230              : Fixed missing LUA API changes (plugins\portname\init.lua) [Carl].
 - 0.229              : Prevent race condition between ui_input().pressed() and poll() (ui\inputmap.cpp). Don't prompt to toggle to default if default is None (ui\inputmap.cpp) [hap]. Added prompts to input mapping menu to make it less intimidating (ui\inputmap.cpp) [Vas Crabb]. Converted a few more functions to use std::string_view (emu\input.cpp and inputdev.cpp) [AJR].
 - 0.228              : Fixed a recent regression with processing XInput DPAD input item tokens. Prevent code_to_token from blowing up in strange cases (emu\input.cpp and inputdev.cpp) [AJR].
 - 0.227              : Cleaned up RawInput code slightly (input\input_rawinput.cpp) [Vas Crabb].
 - 0.226              : Allow keyboard devices to be enabled/disabled. This fixes the "typing on all keyboards at once" issue. You can now enable and disable keyboard/keypad inputs per device in the Keyboard Mode menu. Default is to enable the first device with keyboard inputs and all device with keypad inputs but no keyboard inputs. The settings are saved in the CFG file for the machine. Typing in natural keyboard mode only ever types on one keyboard at a time, but now you can control which keyboard it types on, as it will be the first enabled keyboard. You can easily try this out with something like: mame64d zorba -rs232 terminal cpm. Improved initial keyboard enable settings when changing slot options (emu\ioport.cpp) [Vas Crabb].
 - 0.225              : Added docs\source\usingmame\images\mahjongpanel.svg. Moved axis movement checking code down into input devices. Transfer crosshair polling loop to render_crosshair [AJR]. Overhaul the default keys list (docs\source\usingmame\defaultkeys.rst) [Firehawke]. 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 [Vas Crabb].
 - 0.222              : READ/WRITE macros removal (machine\input_merger.h) [Osso].
 - 0.218              : Eliminated simple_list_wrapper and replaced its only use. The replacement of append with emplace_front alters the sequence, but that should cause no difference in behavior here (util\coretmpl.h, emu\ioport.cpp) [AJR].
 - 0.217              : Ignore joystick buttons beyond maximum supported number (input\input_sdl.cpp). Note: The code to map excess buttons to switches doesn't actually do anything useful while INPUT_MAX_BUTTONS and MAX_BUTTONS happen to be defined to the same number [Vas Crabb].
 - 0.216              : Added ui\analogipt.cpp/h. Changed emu\inpttype.h to inpttype.ipp. Replaced output().set_value with output finders [AJR]. Display emulated analog input values on the anaolg controls menu screen. Removed internal autofire functionality as there's a plugin for that now. Updated emu\input.cpp: constexpr crusade on input_code and input_seq and some very slight optimisation to input_seq. seq_poll* is a frontend function and had no business being in the core, so it's a utility class now. seq_poll* now exposes a bit more detail, enabling improved interaction on the UI inputs menu. Global state is reduced a little, but the poll_* functions are still members of the input manager with global state. ioport update: Better than 50% reduction in compile time, and better locality for static data. Better encapsulation, const correctness and noexcept usage (emu\ioport.cpp) [Vas Crabb]. Removed up to one frame of input latency. Makes MAME virtually lagless on VRR monitors. Use empty parentheses and clean interface member calls. Added new option -lowlatency (-lolat) to make this feature optional [Antonio Giner]. Recognized GUIDs for joysticks, allows stable input ID mapping (input\input_sdl.cpp) [R. Belmont].
 - 0.214              : PORT_CUSTOM simplification: Removed both arguments from CUSTOM_INPUT_MEMBER (adding template parameters as necessary). Removed 'param' from PORT_CUSTOM_MEMBER and assume 'device' is DEVICE_SELF (use PORT_CUSTOM_DEVICE_MEMBER if it isn't). Replaced PORT_CUSTOM_MEMBER with PORT_READ_LINE_MEMBER where applicable. Added implicit DEVICE_SELF variants of PORT_READ_LINE_DEVICE_MEMBER and PORT_WRITE_LINE_DEVICE_MEMBER. Removed ioport_field argument from PORT_CROSSHAIR_MAPPER [AJR].
 - 0.213              : Changed PORT_CHANGED_MEMBER param type from void * to u32 (emu\ioport.cpp) [AJR].
 - 0.212              : Moving paste() from mame_ui_manager class to natural_keyboard class, exposing to LUA [Nathan Woods].
 - 0.211              : Added focus next/previous input types, will be hooked up later (emu\inpttype.h and ioport.h) [Vas Crabb].
 - 0.210              : Added plugin for autofire: Hardcoded autofire plugin. Changed register_frame to register_frame_done, removed pause check. Added support for multiple buttons loaded from a file. Implemented saving settings on quit. Fixed multiple keybindings for same button from overwriting each other. Replaced double-quotes with single-quotes. Refactored saving/loading into a separate module. Changed button format to use input_code rather than string token. Settings format is unchanged (still saved as string token). Rewrote table initialization in save/load. Implemented menus. Added helper messages for "on frames"/"off frames". Fixed bugs related to reloading roms. Soft resets would reload autofire settings without saving them first, causing the settings to be lost. This commit adds a check to only reload from the settings file if loading a different rom than before. Hard resets would leave bad references lying around, causing MAME to crash under certain circumstances (i.e. resetting while in the edit menu and entering the menu again). This commit makes sure to properly clean up and reinitialize menu and button states when resetting. Used set_folder to avoid hardcoding plugin name in settings path [Jack Li]. Disabled WII Lightgun hack by default [Kiall Mac Innes]. Improved sorting of items for machine input menu. Inputs of the same type are sorted by name, and keyboard keys are sorted by their assigned character codes (if any) (ui\inputmap.cpp) [AJR].
 - 0.208              : Fixed German keymap (keymaps\km_de_LINUX.map) [Couriersud].
 - 0.207              : Updated Brazilian ABNT2 keyboard map for SDL keyboard input (keymaps\km_br_LINUX.map) [Wellington Uemura].
 - 0.206              : Fixed assert in field_set_name if no field is configured. This should help catch instances where PORT_NAME is accidentally substituted for PORT_START (a frequent mistake of mine) (emu\ioport.h) [AJR].
 - 0.199              : Use plural names for output finders when there are multiple outputs [Wilbert Pol].
 - 0.198              : Replaced set_led_value and set_lamp_value with output_finders [Wilbert Pol].
 - 0.197              : Standardised on IPT_CUSTOM for hooking up custom code in PORT_BIT, leaving IPT_SPECIAL for the UI [smf]. Removed set_digit_value and deprecate set_lamp_value and set_led_value (emu\output.h) [AJR].
 - 0.194              : Added plugins\portname\init.lua and plugin.json. New WIP plugin for loading translations or alt names for input port fields [Carl].
 - 0.193              : Fixed random strings of question marks in displayed key names (emu\ioport.cpp) [AJR].
 - 0.192              : Added a little logging to machine\input_merger.cpp. Improved wraparound handling for relative inputs (emu\ioport.cpp). Fixed core rounding error with analog input sensitivity scaling (emu\ioport.cpp) [AJR].
 - 0.191              : Expose condition for dipswitches, configuration entries and adjusters. This eliminates ambiguities between settings with different conditions and allows a frontend/tool to generate a dipswitch preview (emu\ioport.h). Reduced number of calls to fprintf - saves overhead of setting up the formatting engine (mame\info.cpp) [Vas Crabb]. Added support for multiple PORT_CHAR() bindings, and adopted in the (MESS) CoCo driver [Nathan Woods]. Proposed fix for rotary positional joystick with skipped positions (emu\ioport.cpp) [Angelo Salese]. Make xinput analog triggers half-axes and default IPT_PEDAL2 to RZ- instead of Z+, placing IPT_PEDAL and IPT_PEDAL2 on separate axes [hap].
 - 0.190              : Added a natural keyboard validation to check for valid natural keyboard (uni)codes. Using a better overload of utf8_from_uchar() in ioport_field::key_nam (emu\ioport.cpp) [Nathan Woods]. Fixed a longstanding INP playback desync bug caused by a rand() call in the MAME core (emu\ioport.cpp), fixed playback lose sync in B.Rap Boys and Blood Warrior, INP playback fails after a short time in Shinobi III (Mega Play) and Shogun Warriors cannot be replayed from .inp file [Angelo Salese, hap]. Prefer lower shift states, eliminate O(n) lookup allows Alt-combos on European Amiga keyboards to be restored as MAME will now prefer the simpler Shift-combos to get characters that can be typed in more than one way [Vas Crabb].
 - 0.189              : Fixed up input_merger: Added more variants, synchronisation and save state support and removed dubious reset behaviour (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)) [Vas Crabb]. Use input merger device for btime.cpp [AJR].
 - 0.187              : Use callbacks to set coin counters and coin lockouts from Taito I/O devices. This is a largish and not particularly elegant change, but those outputs aren't exactly internal [AJR].
 - 0.185              : UI input map: 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 [AJR].
 - 0.184              : Some reports of garbage in console with DInput controllers. Changed to snprintf with assert since apparently snprintf fixes the reported problem [Brad Hughes].
 - 0.182              : Service mode DIP switch adjustments: Changed how input sequences are assigned to service mode DIP switches. The frontend now assigns them the default sequence for the non-toggle service mode/test switch (not necessarily the F2 key, the previously hardcoded default) unless the machine happens to have one of those as well (as is somewhat common with gambling games). All DIP and configuration switches are automatically defined as toggle fields to make assigning input codes to them easier [AJR].
 - 0.180              : Added emu\inputdev.cpp/h. Polymorphize input_device and input_class and moved to separate source file (emu\inputdev.cpp/h) [AJR]. Fixed key names with -keyboardprovider win32 (input\input_win32.cpp). Drop invalid input tokens when parsing configuration, fixes uncaught exception error when writing configuration [Vas Crabb].
 - 0.179              : Separate natural keyboard support from ioport.cpp. Misc keyboard input improvements: Added BS, Tab, 00, 000 keys common on add-on keypads as input items; SDL may recognize these, but DirectInput does not. Assign Keypad 00 and Keypad 000 in several drivers' input lists. Added SDL keycode for "cancel" key. Added keypad keys as alternates to natural keyboard. Moved has_keyboard() out of the core; enabled() test is unnecessary now that all optional keyboards are slot devices. Parenthesize optional items in input menus (ui\inputmap.cpp). Lock out ioport_fields independently of natural keyboard state [AJR]. Incorporate product/instance directinput device IDs. This change generates a more unique device ID for direct input devices by incorporating the product unique identifier and instance unique identifier. This allows for better disambiguation on device ID when mapping controllers via mapdevice config settings (input\input_dinput.h) [Tomer Verona]. Fixed Left/Right Sticks for P2 and above (emu\inpttype.h) [Angelo Salese]. Removed all ioport and address map macros from (MESS) Tranz 330 (emu\ioport.cpp/h and drivers\tranz330.cpp) [MooglyGuy].
 - 0.178              : Added advanced\devicemap.rst. Added support for binding devices to controller IDs (see devicemap.rst). This allows for stable controller IDs even if USB devices are plugged or unplugged, system is rebooted, etc. Added id() property to input_device. Added an id() property representing unique device ID. This allows the OSD layer to supply display name along with unique identifier. Currently only used to map a physical controller device to controller ID, but can be used more generally in the future. For raw input devices, device ID is full raw input name. For all other devices, we fall back to device name as the device ID. Device ID uniqueness is not currently enforced programmatically [Tomer Verona]. Changed use of IPT_START to IPT_START1 in bartop52, guab, midyunit, namcos22, sshot and turrett [MASH].
 - 0.177              : Keyboard/terminal improvements: Mark lots of things constexpr in attotime and turn macros into functions. Added base classes for HLE matrix keyboard and buffered RS232 device. Make generic keyboard/terminal more usable. Keyboard has configurable typematic delay/rate. Keyboard has selectable JIS/ANSI layout. Keyboard handles simultaneous keypresses more intuitively. Keyboard uses meta to set high bit. Terminal has configurable auto LF on CR, auto CR on LF and local echo. Terminal has audible bell. Added linefeed key to generic keyboard (maps to ins by default). Removed legacy forms of (required|optional)_(shared_ptr|ioport)_array, use new syntax for I/O port array [Vas Crabb]. Fixed Gun#2/Aimtrak Dual Lightguns no longer properly detect (input\input_rawinput.cpp) (MT06185) [Patrick Lessard]. Devfind revision: Eliminate read_safe as a global function and make it a method of optional_ioport (and required_ioport, for which it makes less sense). New constructor for optional_ioport_array and required_ioport_array using std::initializer_list to specify tag list. Removed pointer/reference conversion operators for required_ioport and optional_ioport. Explicit getters like found() and target() are now required when dereferencing isn't wanted. Many drivers have been changed to use required_ioport_array and optional_ioport_array to make this cleaner. Updated numerous drivers that were using read_safe to use I/O port finders generally. Port names have been kept the same as far as possible to avoid breaking saves (some of the optional finders should probably be required). Give edfbl and monkelf their own memory maps so hacky input reading routines can be removed. Clean up some legacy static handlers in amiga.cpp and cubo.cpp [AJR]. OSD input code cleanup (osd\modules\input\input_...) [Brad Hughes].
 - 0.176              : Added machine\input_merger.cpp/h. Fixed input issues on big endian systems (input\input_common.h, input_dinput.cpp, input_rawinput.cpp, input_sdl.cpp, input_win32.cpp, input_windows.h, input_x11.cpp and input_xinput.cpp) [Brad Hughes]. Fixed 0.172 regression for non-US keyboards (input\input_common.cpp) [Hans Ostermeyer]. Crosshair refactoring: Individual crosshairs are now first-class objects, rather than bits of state scattered across half a dozen arrays. The class is named render_crosshair with a view towards incorporating crosshairs into layouts in the future, rather than managing them separately as crosshair_manager still does now. Removed the old crosshair_user_settings interface for adjusting crosshair settings, since the UI can access the new crosshair objects directly [AJR]. Added a device as proof of concept which merges several input lines into a common output line, supporting both active high and active low inputs [Dirk Best]. Make ioport_list a map instead of unordered_map, should fix INP incompatibilities across compilers and platforms [Barry Rodewald].
 - 0.175              : Added flag to mark input fields as optional [AJR]. Changed error printing to verbose on probe() and error on init() (input\input_winhybrid.cpp and input_xinput.cpp). Don't crash on input modules not derived from wininput_module, like "none" (input\input_windows.cpp). A few minor input fixes and cleanups: Input modules exit() is called twice. Removed the unnecessary input_exit() method. Removed unnecessary pointer init in handle_input_event and should_hide_mouse. When registering event callbacks in SDL, don't assume the SDL enum values are int-sized [Brad Hughes]. Added ioport tagged_list to unordered_map [Miodrag Milanovic].
 - 0.174              : Ioport refactoring and cleanups: Completely move mouse hit testing down into the UI input module. This reduces some dependencies. Never return a null pointer from ioport_field::name() to prevent potential crashes. All anonymous inputs are classified as INPUT_CLASS_INTERNAL, so several frontend functions now check type_class instead. Correct a couple of typos [AJR]. Correct joystick polling methods in DirectInput8 to better support older joysticks which previously only worked with DirectInput7. This fixed joysticks using PPJOY driver do not work anymore and MAME fails to accept input from XBCD-supported joysticks with DirectInput 8 [Quench].
 - 0.173              : Added input\input_dinput.h, input_winhybrid.cpp and input_xinput.h. Recognized the full range of controller inputs. This simplifies an old piece of MESS code that failed to properly classify paddle, pedal, positional and dial inputs, along with many of the less-common digital inputs. MT06172 should be fixed by this. The distinction between INPUT_CLASS_MISC and INPUT_CLASS_INTERNAL makes more sense now, though nothing makes use of it [AJR]. Added hybrid DirectInput/XInput module. Release WMI COM objects correctly in XInput device discovery. Make Xinput triggers analog and centered at 0 [Brad Hughes]. Extended core input to support up to 10 players [Fabio Priuli].
 - 0.172              : Added input\input_common.cpp/h, input_dinput.cpp, input_module.h, input_none.cpp, input_rawinput.cpp, input_sdl.cpp, input_sdlcommon.cpp/h, input_win32.cpp, input_windows.cpp/h, input_x11.cpp and input_xinput.cpp. Removed windows\input.cpp/h and sdl\input.cpp/h. Rewrote input routines as modules (Common, DirectInput, SDL, Unimplemented, Win32, Windows and X11). Added XInput support for Windows OSD. Dynamically load XInput. Minor fixes for DirectInput 7. Simplify XInput dynamic linking. Code cleanup in rawinput plus use common code for dynamic function binding. Rewrote overly complex rawinput_device_improve_name function for rawinput module, plus fixing some other defects in input modules as detected by Coverity. General code cleanup in input modules. Using ComPtr to manage DirectInput resources. Fixed DirectInput stuck joystick directional input when window loses focus. The reset function for the device was overwriting the axis information previously obtained. Changed it to correctly only reset the state member [Brad Hughes]. Use lambdas instead of wrappers (emu\ioport.h) [Miodrag Milanovic]. Wrap up INP header I/O [Vas Crabb]. Added IPT_POWER_ON/OFF F1/F2 meant for soft-power buttons, as seen often in battery-backed CMOS CPU machines like (MESS) NeoGeo Pocket [hap].
 - 0.171              : Fixed ledutil [Miodrag Milanovic].
 - 0.170              : Modernized configuration_manager (emu\config.cpp), crosshair_manager (emu\crsshair.cpp), image_manager (emu\image.cpp and diimage.cpp), network_manager (emu\network.cpp), output_manager (emu\output.cpp), rom_load_manager (emu\romload.cpp) and ui_input_manager (emu\uiinput.cpp). Get rid of global_alloc (emu\crsshair.cpp). Generic machine is now bookkeeping. Modernized bookkeeping manager. Fixed image unload (emu\image.cpp) [Miodrag Milanovic].
 - 0.168              : Make input manager more strict [Vas Crabb].
 - 0.167              : Allow nameless input devices for windows rawinput [hap].
 - 0.166              : Added 'global_inputs' (disabled by default) to allow MAME to read inputs even when it doesn't have the focus [Scrooge McClunk]. SailorSat made it possible to run multiple instances of MAME for link games, but the problem is that you can only control one MAME instance at a time (the window that has focus). Because Win32 MAME supports RawInput, we can make linked games playable with global inputs that will poll simultaneously regardless of whether that MAME instance has focus. In Win32 MAME using RawInput, keyboards were already registered for global inputs (RIDEV_INPUTSINK), but the polling code checks if the window has focus, so it wasn't taking advantage of it. I thought it'd be a good idea to add an option for global inputs to Win32 MAME with RawInput. The WINOPTION is the "global_inputs" boolean. The option is disabled by default because this is an uncommon use case for MAME. The option is also disabled when forcing direct input and debugging. If the RawInput initialization code fails for whatever reason, the option will not be enabled. If the option is disabled, keyboards are no longer registered for global inputs (dwFlags set to 0 instead of RIDEV_INPUTSINK), because they won't work globally with the screen focus check anyway [David Haywood].
 - 0.165              : Reduced tagmap lookups in emu\ioport.c. Get rid of active_safe (emu\ioport.h) [Wilbert Pol].
 - 0.163              : Hook up -uimodekey for Windows [Vas Crabb].
 - 0.160              : Set default version of DirectInput to 8 so it builds with 3rdparty/dxsdk out of the box (windows\windows.mak) [Oliver Stoeneberg].
 - 0.159              : Improved responsiveness of 8-way joysticks default behaviour on 4-way games when moves unintentionally become diagonal by favouring the new direction change [Quench].
 - 0.158              : Added a PORT_DEVICE flag to identify inputs of any kind which are connected to a device different from the root_device. These are the dynamical inputs and it might be useful to be able to catch them without performing a string comparison of the device tag against the root_device one (emu\ioport.h). Group inputs in UI based on the device they are attached to and display their tag only once instead of at each input [Fabio Priuli].
 - 0.156              : Added check for GCC 4.4.4+ for pragma, definitely doesn't work with 4.4.3 (emu\inpttype.h) [Barry Rodewald].
 - 0.155              : Fixed logic of restrict digital joysticks (emu\ioport.c) [O. Galibert]. Added aliases for some IPT_x (emu\ioport.h). ioport_array stuff (namcos22.c, namcos23.c and taitojc.c). ioport array for Outrun and Sega Y-board [hap]. Added friendly macros to initialize an ioport_array_finder with an array of port names. Update namcona1.c, segaorun.c and segaybd.c to use them. Removed runtime ioport tag lookups from a few other drivers. Converted various pinball drivers to ioport_array (drivers\atari_s1.c, atari_s2.c, flicker.c, g627.c, peyper.c, spectra.c, techno.c, thayers.c and zac_2.c). Allow ioport_finder to be dereferenced when NULL so read_safe() can be used (emu\devfind.h) [Alex Jackson].
 - 0.154              : Adding dummy IPT_UI_* slots as a temporary measure [Nathan Woods]. Added ioport_array_finder (emu\devfind.h): ioport_array_finder is a new device finder template for finding, unsurprisingly, an array of ioports. It is mainly intended to help handle multiplexed ioports without runtime tagmap lookups in a more elegant way than was previously possible. It is similar in principle to shared_ptr_array_finder; however, rather than passing a single tag that gets automatically decorated with numeric suffixes, you need to pass an array of tags (this is so ioports can continue to have human-meaningful tags rather than the tags being forced by how the hardware multiplexing happens to work). Because C++ doesn't have array literals, and because most driver state class constructors are defined in header files, the semantics are a little different from other device finders (and possibly awkward/suboptimal, this is the best I could think of). You have to declare the array of tags as a static class member and define it somewhere in a source file (defining it near the function that actually reads the multiplexed ports seems like the most logical place to me). Updated bladestl.c to use ioport_array_finder; will wait for Micko to pass judgement on the semantics before updating more drivers. ioport_array_finder improvement: Allow ioport_array finders to be given a single base tag as an alternative to an array of tags. This alternative syntax is exactly the same as shared_ptr_array. This form makes more sense when the individual "ports" don't really have human-meaningful names (e.g. rows of a keyboard matrix). Note that just as with shared_ptr_array, you need a period between the base tag (as specified in the constructor) and the index. Updated odyssey2.c using this form of ioport_array. Reduced number of buttons from 30 to 16 (emu\ioport.h) [Alex Jackson].
 - 0.153              : Adopted 'bool' type (windows/input.c) [Nathan Woods]. No more legacy CUSTOM_INPUT (emu\ioport.h, drivers\popeye.c) [Miodrag Milanovic].
 - 0.151              : Hardcoded toggled inputs (eg. simulated hi-lo gearshift-lock in racing games) can now be manually turned off or on by the user (emu\ioport.c). For example, to disable the toggle on the shifter in Outrun, open cfg\outrun.cfg and add toggle="no" to the port tag, like so: <port tag=":SERVICE" type="P1_BUTTON1" mask="16" defvalue="0" toggle="no"> [hap]. Split up the construct_core_types() monster [Justin Kerk]. IPT_START changed to IPT_START1 or IPT_START2 where multiple start buttons exist (drivers\cham24.c, cobra.c, cps1.c, stv.c and taitotz.c. Except namcos22.c: This system has cabinet networking and no games allow two players with one machine) [MASH].
 - 0.150              : Removed some legacy interrupt trampolines. Removed legacy trampoline generic_pulse_irq_line_and_vector() (machine\generic.c) [Oliver Stoeneberg].
 - 0.149u1            : Expand read_line to all 0s or all 1s; fixes cases where read_line (specifically vblank) callbacks are mapped to multiple bits (emu\ioport.h) [Aaron Giles].
 - 0.149              : Use O1 instead of O0 on the critical function in emu\inpttype.h [Hans Ostermeyer]: Some benchmarking for different compilers and levels (seconds): GCC 4.4.7: O0=ICE  O1=38.62 O2=58.13 O3=3721.11, GCC 4.5.4: O0=6.21 O1=25.63 O2=38.24 O3=3085.74, GCC 4.6.4: O0=4.95 O1=15.89 O2=32.94 O3=48.95 and GCC 4.7.3: O0=6.11 O1=22.03 O2=126.41 O3=348.02. Note from O. Galibert: Hans tracked a wrong compile issue in 4.7 to the use of -O0. That table shows that -O1 is acceptable for everybody. Note that it isn't a time critical function, and it doesn't make sense to optimize it much (it's a bunch of calls to another function which itself is optimized and no computations).
 - 0.148u2            : Removed runtime ioport tagmap lookup when using PORT_CONDITION with PORT_BIT, used by gmgalax for example [smf]. Support up to 32 buttons and harmonize Windows and SDL behavior if you exceed the limit (emu\input.c and windows\input.c) [Nick3092].
 - 0.148u1            : Fixed compile error in 'Save Snapshot' input_seq (emu\inpttype.h) [Robbbert]. Fixed compile (emu\inpttype.h) [Angelo Salese]. Fixing natural keyboard debugger commands (input, dumpkbd) (emu\ioport.c/h and emu\debug\debugcmd.c) [Nathan Woods].
 - 0.148              : O. Galibert fixed joystick constraint computations when multiple sources are possible (emu\ioport.c/h). Phil Bennett fixed crash on exit (emu\ioport.c).
 - 0.147u1            : Miodrag Milanovic removed legacy port changed support (emu\ioport.h).
 - 0.146u5            : Default inc/dec keys for AD Stick Z [hap]. Added GAME_IMPERFECT_KEYBOARD flag and changed ui.c to use that instead of displaying message for each driver with keyboard. Added internal mouse cursor visible in menus and when clickable artwork is used [Miodrag Milanovic].
 - 0.146u4            : PORT_ADJUSTER now accepts PORT_MINMAX as well [Couriersud].
 - 0.146u2            : Doing renumbering for controller port players, to enable dynamic controller boards. Fixed call device line write handlers (emu\ioport.c). This fixed Zaxxon and Congo INPs do not play back correctly [Miodrag Milanovic].
 - 0.146u1            : Miodrag Milanovic added support for fixed slots (used for MAME) and ability to create internal only slot options (for MESS).
 - 0.146              : Cleanup and fixed natural keyboard issues in ioport [Miodrag Milanovic]. Fixed uninitialized field in ioport_field.m_chars (fixes stack corruption with three PORT_CHAR definitions) / added some sanity checks for PORT_CHAR adding and lookup [Firewave]. Port changed regression fix and fix for PORT_CONDITION regression (emu\ioport.c) and cleanup. Set m_cursetting to NULL (emu\ioport.c) since must not be set in case of onoff_alloc, this fixes validation too [Miodrag Milanovic].
 - 0.145u8            : ioport.c C++ conversion [Aaron Giles]: Mostly internal changes, with no intended differences from previous behavior. For drivers, the main change is that input_port_read() no longer exists. Instead, the port must be fetched from the appropriate device, and then read() is called. For member functions, this is actually simpler/cleaner: value = ioport("tag")->read(). For legacy functions which have a driver_data state, it goes: value = state->ioport("tag")->read(). For other legacy functions, they need to fetch the root device: value = machine.root_device().ioport("tag")->read(). The other big change for drivers is that IPT_VBLANK is gone. Instead, it has been replaced by a device line callback on the screen device. There's a new macro PORT_VBLANK("tag") which automatically points things to the right spot. Fixed issue where initial values are not set up correctly. Fixed saving changes to inputs, player mappings, and a couple of odd joystick problems. Fixed some analog control issues due to incorrect assumption that scale factors were INT32's not INT64's. Also explicitly use ioport_value for lookup tables instead of UINT32. Fixed issue where changes to the default input config did not apply to the game-specific config. Also fixed none/default toggle for game-specific configs [Aaron Giles].
 - 0.145u7            : Modernization of some CUSTOM_INPUT's Part 1-5. Convert INPUT_CHANGED to INPUT_CHANGED_MEMBER. Replaced remaining instances of INPUT_CHANGED with INPUT_CHANGED_MEMBER [Miodrag Milanovic]. Created ioport_manager and moved the port list to it. Removed global port lookups, now all lookups must be done through device_t::ioport() [Aaron Giles].
 - 0.145u6            : Change DirectInput joystick acquisition method to be non exclusive [bdam].
 - 0.145u4            : Make ioport compile time less insane [O. Galibert].
 - 0.145u2            : Removed build\makedev.c, mame\mame_dev.lst, mame\tiny_dev.lst and ldplayer\ldplayer_dev.lst. Devcb port tags need to be relative, not absolute, like other DEVCB tags. Fatal error if a custom I/O port handler's device is not found [Aaron Giles].
 - 0.145u1            : Made the key/paste buffer auto-expand when it becomes full. This makes it possible to paste larger BASIC programs for instance [Wilbert Pol].
 - 0.144u7            : Made codes in the 'input' debugger command case insensitive [Nathan Woods].
 - 0.143u9            : Alex Jackson fixed analog controls are broken on keyboard when joystick is enabled and all games with paddle inputs: IPT_PADDLE inputs do not center properly when mapped to an analog joystick. Alex Jackson changed some of the default mappings for analog controls in order to fix various input-fighting bugs (including, but not limited to, MT04394 and MT04509). Reverted the u8 change to analog joystick handling--it only partially solved the problem it was meant to fix, it introduced new issues in return, and generally made the code more complicated for little benefit.
 - 0.143u8            : Made some fixes/additions to the input system [kanikani]: Added the possibility to press contradictory direction digital joystick input at the same time (i.e. up-down, left-right). Added the possibility to set an arbitrary value for coin impulses. Fixed a bug with loop lever routine. Fixed a bug with analog joystick routine.
 - 0.143u4            : During emulation (ioport.c), detect keyboard only when enabled [Fabio Priuli].
 - 0.143u1            : Changed emu\inptport.c/h to emu\ioport.c/h.
 - 0.142u6            : O. Galibert disable the default sequence recognition for now (inptport).
 - 0.142u5            : Removed emu\inputseq.c/h. Tom Clayton fixed Keyboard chars initialization. Low-level input upgrade [Aaron Giles]: Classes now exist for input_codes, input_items, input_devices, and input_seqs. Also created an input_manager class to hold machine-global state and made it accessible via machine.input(). Expanded the device index range (0-255, up from 0-16), and the OSD can now specify the device index explicitly if they can better keep the indexes from varying run-to-run. Olivier Galibert fixed PORT_CENTERDELTA in input ports overwrites PORT_KEYDELTA settings in Up Scope and other games. Olivier Galibert fixed DIP locations are displayed incorrectly in all sets with PORT_DIPLOCATIONs.
 - 0.142u4            : Aaron Giles switched input ports to use function-based constructors instead of tokens. Removed the old tokenizing helpers. Added basic classes for ports, fields, settings and DIP locations as a first step. These will be fully cleaned up later. Added machine() method to field to hide all the necessary indirection. Changed custom/changed handlers into generic read/write handlers and added wrappers to convert them to device read/write lines. Aaron Giles changed input read/write and crosshair callbacks into delegates. Changed signature for callbacks to take an input_field_config reference instead of pointer. Aaron Giles removed legacy trampolines from eeprom_device, taking advantage of new input port support for delegates.
 - 0.141u4            : Curt Coder removed unnecessary machine parameter from device-specific input_port_read. O. Galibert added existence and used bits interface for automatic controller adaptation (inptport.c). Curt Coder mapped KEYCODE_BACKSLASH2 to the OEM_102 key (located between LShift and Z on international keyboard layouts). Miodrag Milanovic added possibility of altering default input port setting for devices.
 - 0.141u3            : Input ports can now be added to device, names are formed as sub tags from parent device tag [Miodrag Milanovic]. Make DEVICE_SELF work in ports [O. Galibert]. Curt Coder added overloaded input_port_read() for reading device owned input ports.
 - 0.140u2            : Tafoid cleaned up many duplicate inputs and fixed others in a number of drivers.
 - 0.140u1            : Curt Coder added UTF-8 constants for cursor key arrows, and accented characters on the Swedish/Finnish keyboard layout.
 - 0.140              : Aaron Giles fixed texture leak in crsshair.c.
 - 0.139u3            : Tafoid correct or clarified a number of duplicated inputs for drivers up through A-G.
 - 0.138u2            : David Haywood increased number of coinslots to 12, and tilt inputs to 4, required by in-progress gambling driver.
 - 0.138u1            : Angelo Salese added debug_global_input_code_pressed_once() function to input.c.
 - 0.137u3            : Fabio Priuli fixed keyboard detection (mainly for MESS) (inptport.c).
 - 0.137u2            : Aaron Giles made input_device pointers non-volatile. Since we return pointers to them in response to input_device_add(), ensure that the pointers don't change after subsequent adds.
 - 0.136u1            : The starting value for an output port is now the default value, which is based on whether it is active high or low. So the device will be called the first time the line becomes active. Changed the EEPROM device to assume that the reset and clock are cleared until it's told otherwise [smf].
 - 0.136              : Barry Rodewald added a fix for INP recording ports that have changed notification. Also prevents new inputs from affecting recorded inputs during playback.
 - 0.135u4            : Fabio Priuli and Aaron Giles removed all uses of input_port_by_index(), and removed the function.
 - 0.135u2            : smf added device support to the input system. Internally this replaces PORT_CUSTOM/PORT_CHANGED, backward compatibility is achieved with an internal dummy device. Added output lines (IPT_OUTPUT), which can be written using new input_port_write* functions or directly from a memory map using AM_WRITE_PORT converted adc083x to use io lines. Aaron Giles added new module tagmap which is a simple hashed string map. Updated device and input port lists to use the tagmap for tag searches. Also removed the whole "quark" thing from the validity checker in favor of using the tagmaps. smf made DEVCB_INPUT_PORT(tag) work for write callbacks.
 - 0.134              : Curt Coder fixed drivers having empty INPUT definitions: Access Violation. Aaron Giles added debug_global_input_code_pressed() for use in debugging.
 - 0.133u5            : Atari Ace de-globalified input.c. Aaron Giles added PORT_CROSSHAIR_MAPPER() allowing you to specify an alternate, non-linear mapping function from the raw crosshair value to its position onscreen.
 - 0.133u2            : Fabio Priuli added a stop4 input to slot default and remapped slot default keys to better suit Amcoe games. Updated sfbonus.c to use the new gambling inputs. Fabio Priuli added default input mappings for Hanafuda games (ddenlovr.c, dynax.c, macs.c, nbmj8891.c, ssv.c and stv.c). Updated most of the Hanafuda games to use them. Like for Mahjong games, keys A->H are used. "Yes" is mapped to M, "No" is mapped to N. Fabio Priuli removed fake P3 Start from Nichibutsu mahjong games and properly called "Credit Clear" that input. Also, added back Bet button in nb1413m3.c fixing omotesnd.
 - 0.133u1            : Fabio Priuli added default input mappings for gambling / poker / slot games. Converted many drivers to use the new mappings. Changed default key for Mahjong P1 Bet to '3', because '2' was conflicting with P2 Start in 2 players Mahjong games. Changed default key for Mahjong P1 Bet to '3', because '2' was conflicting with P2 Start in 2 players Mahjong games.
 - 0.132u5            : Aaron Giles fixed the -crsshairpath option to be spelled properly.
 - 0.132u3            : Firewave fixed bitmap memory leak in all games using lightguns.
 - 0.131u3            : DIP switch changes [Kanikani]: Added some DEF_STRs (Difficult, Very Difficult, etc.) and modified drivers using them.
 - 0.131u1            : Fabio Priuli moved Taito 'skip to next level' buttons from BUTTON_2 to Q/W keys.
 - 0.131              : Fabio Priuli removed the last use of PORT_PLAYER(2) for P1 inputs. Derrick Renaud fixed mouse/lightgun buttons to individually select when using -mouse/-multimouse and -lightgun. Meaning you will not receive Mouse Button 0 Gun Button 0 when selecting in the UI.
 - 0.130u4            : Derrick Renaud fixed analog settings to return to default when IPT_UI_SELECT (enter) pressed. Derrick Renaud fixed auto-center bug on analog joysticks. Fixed misplaced brackets, allowing upper/lower case extensions for crosshair graphics and ldplayer CHD files. Aaron Giles reverted to older behavior for how modified input port fields are handled. The originally intended behavior is that a new field that intersected a previous field would completely wipe out the original field. Recently a change was made that changed the behavior to only remove a portion of the bits from the original field. This is actually problematic behavior, so the original behavior was restored.
 - 0.130u3            : Crosshair update [Derrick Renaud]: Added Crosshair Options menu: Ability to individually enable/disable crosshairs, ability for them to automatically disappear after a set amount of time (this is now the default), ability to select crosshair graphic and all settings are saved in the cfg file. Removed F1 toggle for crosshairs. Added new command option -crsshairpath: Store all selectable graphics here and see config.txt for further info. Konami inputs improvements [Fabio Priuli]: Added source file konamipt.h to unify Konami inputs where possible (e.g. most 80s-90s games were using basically the same coinage settings and joystick inputs). Verified 0x00 coinage settings in remaining Konami drivers (and two Banpresto ones using same coinage settings).
 - 0.130u2            : Fabio Priuli fixed MAME allocates Player 2 - 4 inputs for deficient Player 1 inputs in some driving games.
 - 0.130              : Derrick Renaud fixed analog settings so digital and autocenter speeds are applied properly in real time. Fixed digital speed = 0 so it increments in single steps per button press.
 - 0.129u6            : Aaron Giles removed input_port_read_handler8/16/32/64 functions, since they were really only used for getting a memory handler for a port by tag, and this is no longer necessary. Aaron Giles moved input port handlers to internal code in the memory system. Aaron Giles removed all remaining uses of input_port_n_r() functions, and purged them from src\emu\machine\generic.
 - 0.129              : Phil Bennett fixed crash when mouse-clicking without a valid mouse_target set (typically after startup when no mouse movement events have occurred).
 - 0.127u6            : Aaron Giles added mechanism to generically specify input port tags in place of machine\device handlers. Unfortunately, the implementation relies on sentinel values to distinguish a port tag versus a pointer to function code. However, since this is a very common situation, it will hopefully be worth the slight grossness. New macros are defined in inptport.h: DEVICE8_PORT(name) - use this to specify the name of a port to read wherever a read8_device_func would normally be used. MACHINE8_PORT(name) - same as DEVICE8_PORT except it can be used wherever a read8_machine_func would normally be used. IS_HANDLER_PORT(ptr) - accepts a read8_device_func or read8_machine_func and determines if it is an actual function or a reference to a port; intended for use by devices that accept DEVICE8_PORT-style functions. CALL_DEVICE8_READ(ptr,device,offset) - either calls through the given read8_device_func, or calls input_port_read with the appropriate tag, depending on the result of IS_HANDLER_PORT; intended for use by devices that accept DEVICE8_PORT-style functions. CALL_MACHINE8_READ(ptr,machine,offset) - same as CALL_DEVICE8_READ except for read8_machine_func. Note that in order for these to be useful, the consumer of the function pointer must be enhanced to use the CALL_* macros above instead of directly calling through the function. So far, only the 8255 PPI is set up to do this, as part of the cleanup below. Also note that the sentinel value is currently 4 consecutive 0 bytes; this may need to change in the future, in either length or value, so it is important to stick to the macros above.
 - 0.127u4            : Andrew Gardner continued I/O map merging.
 - 0.127u3            : Clickable input support [Nathan Woods]: Layouts can now have items which when clicked will alter the state of an input port. This is done via the new attributes 'inputtag' and 'inputmask', which specify an input port tag and mask. When the given element is clicked, the state of the element changes to 1 and the given bits in the input port are set the same as if you had pressed the equivalent switch. Christophe Jaillet added memory checking and error logic to ledutil.c. Andrew Gardner merged I/O maps in a number of drivers.
 - 0.127u2            : Andrew Gardner began the "big IO_MAP merge of 2008". A number of drivers have had their I/O space address maps merged. Fabio Priuli concluded input port cleanups for drivers W->Z. Introduced a new PORT_CUSTOM which returns a tagged input that can be used to route bits from one port into another.
 - 0.127u1            : Input port cleanup pass over drivers from N-V, leveraging AM_READ_PORT, converting to full 32-bit inputs where suitable, using CUSTOM_PORTs for EEPROM bits, etc. Additional input port cleanups in the Jaleco drivers [Fabio Priuli].
 - 0.126u5            : Fabio Priuli improved input ports for drivers starting with F->M. In particular: Added AM_READ_PORT whenever suitable, make inputs fully 32bit where needed, removed indexed input read handlers from INITs, replaced many read handlers with appropriate CUSTOM_INPUTs. Fabio Priuli converted most of the games checking avgdvg_done() in inputs to use a CUSTOM_INPUT (defined in video\avgdvg.c).
 - 0.126u4            : Aaron Giles removed PORT_START macro. Renamed old PORT_START_TAG to PORT_START. All input ports must have tags. Aaron Giles fixed bug that would break conditions on ports using the PORT_DIPUNKNOWN_DIPLOC macro. Fabio Priuli continued the cleanup of inputs in drivers starting with C (the remaining ones), D and E. Improvements include conditional dips added to dynduke and diplocations for chinagat, chqflag, circus, citycon, cloak, contra and dynduke. Added tags to EVERY input port in drivers starting with F->Z.
 - 0.126u2            : Fabio Priuli completed removal of all explicit calls to input_port_read_indexed(). Converted a number of drivers from A-C to using tagged input ports, and AM_PORT_READ in the address maps. Aaron Giles made input_port_read_indexed() private to machine\generic.c. Eventually it will probably disappear altogether. Fixed the two remaining instances.
 - 0.126u1            : Added src\emu\uiinput.c/h. Nathan Woods and Aaron Giles added new module uiinput.c which manages input for the user interface. The OSD is responsible for pushing mouse events and character events to this interface in order to support mouse movement and text-based input (currently only used for the select game menu). Added support for navigating through the menus using the mouse. More conversion to input_port_read() [Fabio Priuli]: Converted to use tagged inputs and handlers all drivers starting with S & T. Simplified input reads in system24 (removing a redundant handler). Cleaned up a bit inputs in system 16 & 18 bootlegs (among the other things, now coinage and P2 inputs in fpointbl & fpointbj work again). Removed a lot of redundant #define from taito drivers, replacing them with PORT_INCLUDEs and definitions from taitoipt.h.
 - 0.125u9            : Aaron Giles fixed Various games with Fatal error: Input ports cannot be read at init time (part 2). HeadKaze fixed memory leak in ledutil.c.
 - 0.125u7            : Aaron Giles fixed input port read validation. The previous check was way too aggressive, and prevented CUSTOM_INPUT handlers from reading other ports. This one sets an "all clear" flag as soon as the configuration data is loaded. More conversion to input_port_read [Fabio Priuli]: Updated the whole mid*unit family of drivers + seattle & zeus which shared some input code. Updated most namco systems + a couple of old drivers sharing the input handling, minus namcos22. Updated most of the M->Q drivers + finally removed indexed reads from megadriv.c (without breaking ssf2ghw). Removed indexed read from drivers starting with r (and slightly simplify inputs in royalmah.c). Unified nichibustu mahjong input ports (using common ports in nbmj9195.c as well as in the other drivers), removed indexed read and exploited tags to reduce complexity in a couple of handlers. Minwah added 360degree wheel (dial) input to GTMR, which is available when the Controller dip is set to 'Wheel', and Controls dip is set to '1P Side'. Note when Controls dip is set to 'Both Sides', 270degree wheel (paddle) input is used.
 - 0.125u6            : Fabio Puiuli converted many drivers in the d-j alphabetical range to use input_port_read() instead of input_port_read_indexed().
 - 0.125u5            : Fabio Priuli converted a number of drivers over to using input_port_read() from input_port_read_indexed(). Aaron Giles added option -[no]coin_lockout (-[no]coinlock) to control coin lockout behavior.
 - 0.125u4            : Made it possible to pass a NULL errorbug to input_port_config_alloc(). Fixes -listxml crashes [Nathan Woods]. Fixed duplicate input port bits [Aaron Giles, Nicola Salmoria, David Haywood]. Aaron Giles made duplicate input port bits an error now that all the warnings are fixed. Removed port_input_read_indexed in favor of the use of proper tags in a number of drivers [Fabio Priuli, Couriersud].
 - 0.125u3            : Aaron Giles added TOKEN_SKIP_* macros to tokenize.h. Nicola Salmoria fixed PORT_IMPULSE handling. The old code would force inputs to be asserted for at least the number of frames indicated, but keeping the button pressed would keep the input asserted. Now the input is asserted far exactly the number of frames indicated. Aaron Giles added a PORT_CUSTOM for the EEPROM bit reading. Updated several drivers to use that by specifying it in their input ports instead of having a custom read handler that inserted the bit forcefully. Also added a PORT_CUSTOM for the ticket dispenser callback as well. Updated the dcheese driver to use it. Many more drivers can be updated to use these new PORT_CUSTOMs in the future, eliminating hacky input port read handlers. Aaron Giles changed error reporting during input port detokenization to fill a buffer rather than fatalerror-ing immediately. Should now properly skip over any invalid tokens. Enhanced error detection during input port detokenization to catch duplicate bits. There are a lot of these! Updated initialization code to print errors and fatal only if the input ports were unable to be constructed at all. Aaron Giles added support for a NULL set of input ports, used by the empty driver. Nicola Salmoria removed meaningless service_coin_lockout_w function. Updated the Zaxxon driver to correctly handle the coin enable lines. Aaron Giles added internal default tags for input ports when saving/loading.
 - 0.125u2            : Added src\emu\inpttype.h. Aaron Giles changed defaults so that joysticks are enabled standard. Restructured input port internals and cleaned up inptport.c [Aaron Giles]: * Input ports are now maintained hierarchically. At the top level are input ports, which contain a list of fields. Each field represents one or more bits of the port. Certain fields such as DIP switches and configuration switches contain a list of settings, which can be selected. DIP switch fields can also contain a list of DIP switch locations. * Normalized behavior of port overrides (via PORT_INCLUDE or by defining multiple overlapping bits). All fields within a port are kept in strict increasing bit order, so altered DIP switches are now kept in the appropriate order. This addresses MAMETesters bug 01671. * Live port state is now fully separate from configured state. This is manifested in a similar way to devices, where a const list of ports can be managed either offline or live. Each port has a pointer to an opaque set of live state which is NULL when offline or valid when live. Each port also has a running_machine * which is also NULL when offline. * Because of this new arrangement, the conversion from tokens to a list of ports now requires reasonably complex memory allocation, so these port lists must be explicitly allocated and freed (they are not mantained by automatic resource allocation). * Custom and changed callbacks now take a pointer to a field config instead of a running machine. This provides more information about what field triggered the change notification. The machine can be found by referenced field->port->machine. * The inptport.c module has been cleaned up and many ambiguities resolved. Most of this is internal, though it did result in osd_customize_inputport_list() being changed to osd_customize_input_type_list(). The parameter to this function is now a linked list instead of an array, and the structures referenced have been reorganized somewhat. * Updated config.c to pass machine parameters to its callbacks. * Updated validity checks, XML output, and UI system to handle the new structures. * Moved large table of default input settings to a separate include file inpttype.h. * Removed gross hacks in trackfld and hyperspt NVRAM. These may be broken as a result.
 - 0.124u3            : smf fixed crosshair update when the game is not polling the coordinates.
 - 0.124u2            : Couriersud changed the system to show a message if coin-lockout is active and a coin key is pressed. Aaron Giles renamed input port functions: readinputport -> input_port_read_indexed, readinputportbytag -> input_port_read and readinputportbytag_safe -> input_port_read_safe. Added machine parameter to input port functions. Updated many drivers to accomplish this. Bulk converted drivers explicitly calling input_port_n_r() with a bogus offset to calling input_port_read_indexed() instead. Couriersud fixed Hat switch inputs are not read at all, even in the control setup menu.
 - 0.124u1            : Couriersud added input ITEM_IDs for additional axes and switches. Also added ITEM_IDs for up to 4 hats/POVs. Couriersud fixed cfg file corruption if joystick is not connected; itemclass now part of token if item is not found. Settings for joysticks which use a custom item id will still be lost. A fallback has to be provided here since those will use a token generated from the input item name.
 - 0.123u6            : Nathan Woods added a crosshair_set_screen() to allow drivers to control which screen(s) on which crosshairs are displayed.
 - 0.123u5            : Added emu\crsshair.c/h. Zsolt Vasvari moved crosshair code from video.c into its own module. Simplified crosshair logic and made it screen device based. Aaron Giles removed cpu_scalebyfcount(). Changed input ports to register a frame callback, which is called immediately after throttling and updating. This is the proper "sync point" between emulated time and real time. Moved all analog and digital port processing into a central place here. Added tracking of time since the previous frame update and use that as an estimate for the time of the current frame. This is used to scale analog ports without the use of cpu_scalebyfcount(). This is not perfect in the case where frame rates are dynamic (vector games), but works well for other cases. Aaron Giles fixed several instances of porttagtohandler*() in the address maps. Drivers should use AM_READ_PORT() macros instead.
 - 0.123u4            : Stephane Humbert updated the "Input (This Game)" menu to support conditional inputs. Zsolt Vasvari added PORT_CHANGED macro which calls a callback if the given port changes. Usage is very similar to PORT_CUSTOM. See the Astro Invader driver for an example. Removed input_port_set_changed_callback and converted all users to PORT_CHANGED. The only difference between the old callback and the ones supplied by PORT_CHANGED is that values passed by PORT_CHANGED are normalized to start at bit 0, just like PORT_CUSTOM. Added running_machine* to the CUSTOM_INPUT callback - updated drivers to use it.
 - 0.123u3            : Added src\emu\tokenize.h. Aaron Giles added new module: tokenize.h. This centralizes the behavior of tokenizing data structures, as currently used by the input port system. Redid the input port tokenization to be more compact and make use of the new macros. Added support for designated initializers in C99 and GCC builds to enforce type safety.
 - 0.123u2            : Changed the input port tokens to use a union instead of casting everything to FPTR. In the future, C99-enabled compilers will be able to achieve type safety with designated initializers [Aaron Giles].
 - 0.123u1            : Used PORT_SERVICE and PORT_SERVICE_NO_TOGGLE macros when it was possible [Stephane Humbert].
 - 0.122u8            : Aaron Giles cleaned up implementation of extended INP header in inptport.c.
 - 0.122u6            : Aaron Giles added CUSTOM_INPUT macro for defining input port callbacks. Pushed its usage throughout the code.
 - 0.122u4            : Aaron Giles added new function input_poll_keyboard_switches to poll for only key events. Expanded the size of the maximum simultaneously pressed switches.
 - 0.122u2            : Nathan Woods named the input_seq_type enumeration and used it explicitly in several places.
 - 0.122              : Oliver Stoeneberg removed obsolete crosshair code. Aaron Giles fixed Light gun support.
 - 0.121              : Aaron Giles made it a non-fatal error if we are unable to change a joystick to absolute mode in the Windows input code. Some drivers apparently freak out about this.
 - 0.120u4            : Nathan Woods fixed bug that caused incorrect input to be read if multiple inputs were mapped to the same mouse input under Windows.
 - 0.120u3            : Aaron Giles made almost all input port definitions static.
 - 0.120u1            : R. Belmont fixed a crash in the input system when you configure joypads and then unplug them and press Esc on the system info screen.
 - 0.118u3            : Atari Ace added new AM_READ_PORT() macro which lets you define an input port read callback based on a port tag. This is now preferred over the previous technique of calling port_tag_to_handler() within an AM_READ() macro. Updated all drivers that were using the latter pattern to the new system.
 - 0.117u3            : Aaron Giles removed underscores from some keycode token names. Thus, KEYCODE_0_PAD now becomes KEYCODE_0PAD. This is to prevent confusion when parsing multiple keyboard items. Due to this change, also removed imperfect backward compatibility with older configs; some mappings will still work, but some won't. Note that this change will also break some existing ctrlr files; new ones will be provided.
 - 0.117u2            : Aaron Giles fixed raw input-based lightgun buttons.
 - 0.117u1            : Added emu\inputseq.c/h. Aaron Giles reworked input system to push more features into the core. Cleaned up architecture to properly separate dependencies. Please note that this change only addresses the lower layer of input handling. The upper layer (i.e., input port handling at the driver layer) remains the same. Major changes include: * Removed the concept of os_code from the system. Now all codes are defined via a set of macros in input.h. Each code is a 32-bit value that encodes a device class, device index, item class, item modifier, and item ID. * Removed OSD functions osd_get_code_list() and osd_get_code_value(). Instead, the OSD layer during osd_init() must register one or more devices and the input items attached to each device via two new functions input_device_add() and input_device_item_add(). * Separated input sequence code into new module inputseq.c. * Moved support for the following options into the core: -mouse, -joystick, -lightgun, -steadykey, -offscreen_reload, -joy_deadzone, -joy_saturation, -paddle_device, -adstick_device, -pedal_device, -dial_device, -trackball_device, -lightgun_device, -positional_device, -mouse_device. The OSD layer should simply register all devices at osd_init() time and allow the core to enable/disable them according to the options. * Added two new options: -multikeyboard and -multimouse. By default, both options are OFF. When OFF, the core will combine all keyboard or mouse input into a single keyboard or mouse device. When ON, these options instruct the core to keep inputs for each keyboard and/or mouse independent. * Added new option: -joystick_map. This option allows for a 9x9 grid to be specified which controls analog-to-digital mapping of joystick inputs. * Changed the Windows implementation of input handling to fully support the raw input interfaces for keyboard and mouse. DirectInput is still used for all joystick inputs, as well as for keyboard and mouse inputs on pre-Windows XP systems. This allows for multiple keyboards and mice to be supported. Also changed keyboard and mouse behavior to use non-exclusive mode in DirectInput, and to keep the devices alive during pause for more consistent input handling. * Broke windows.txt into config.txt, which contains all common core-supported options and commmands, and windows.txt, which now only lists Windows-specific additions.
 - 0.116u3            : Aaron Giles temporarily reverted input code back to 0.116 baseline pending deeper analysis and upcoming core changes to simplify the OSD layer for input management. Atari Ace fixed code_to_token() to prevent potential buffer overflows.
 - 0.116u1            : Added support for multiple keyboards: [Andrew Kurushin]: Added multikeyboard input support through RAWINPUT mechanism (up to 8 simultaneous keyboard inputs). Fixed RAWINPUT device registry enumeration bugs.
 - 0.115u4            : AHofle fixed ledutil.c to work for USB keyboards again.
 - 0.115u3            : Nathan Woods fixed input.c to use osd_ticks() instead of clock().
 - 0.114u2            : Nathan Woods added a concept of a "crosshair screen mask" internal to video.c and created a static call to retrieve the mask.
 - 0.113u2            : Derrick Renaud added back joystick deadzone handling behind a compile-time define as a pattern for other OSD ports.
 - 0.113              : Fixed all analog controls for the newly enabled validity checks [Derrick Renaud].
 - 0.112u4            : More input fixes and improvements [Derrick Renaud]: Fixed some obscure masking, shifting, overflow and signed problems in the input system. Most noticeably this fixes the analog controls in sfootbal and stops the pedal in redlin2p from rotating through gas/no gas as the pedal is pressed. Analog ports no longer save and load their default value from the config file. It should only ever use the value specified in the driver, and storing it can cause problems the more the game is restarted and the value starts to change. Added a bunch of validity tests to the analog ports. Some are commented out until the problems they uncovered are fixed. Analog ports now defalt to a PORT_MINMAX of (0,mask). This means you no longer have to specify PORT_MINMAX if you are not using any limits. Removed a bunch of no longer needed PORT_MINMAX entries.
 - 0.112u3            : Significant changes to the input system [Derrick Renaud]: * Added the -vol shortcut to -volume to match the docs. * Added new joystick options -joy_deadzone & -joy_saturation. Removed -a2d_deadzone. These now apply to the analog and digital-from-analog data. See windows.txt for more info. * Analog joystick data is divided into chunks for IPT_POSITIONAL controls. e.g., for a 7 position emulated control, a joystick axis will move 3 positions each way from center + center = 7 positions. One good use for this is 49way sticks. The driver input code just needs to be set to IPT_POSITIONAL PORT_POSITIONS(7) and use a PORT_REMAP_TABLE. * IPT_PEDAL controls are now nothing special in the core. They can use any control like a paddle does. At the OS input level, the code has been changed to supply full joystick axis and the +/- axis. This means any half axis or full axis can be used for any emulated control. e.g., a pedal that only outputs Y- data can be used for the full range of the gun in boothill. Or a full axis slider on a joystick can be used in its full range as an emulated pedal. INC now increases the pedal value, not DEC. * When seting up the player controls in the menu, the first time an analog joystick axis is selected it will use the full range. If you immediately select the same joystick axis it will toggle to the half +/- axis. * Analog joysticks can now simulate relative devices such as a trackball. The further you move the joystick, the faster the trackball spins. Use the sensitivity setting to adjust. * Added support for mouse +/- axis to be used as button input. * Modified IPT_PADDLE and IPT_AD_STICK so they do not behave as pedals using half the joystick range if their default value is equal to one of the PORT_MINMAX values. Now you can select it as the full or +/- part axis. Bob Seide modified ledutil to save the LED state when returning from pause.
 - 0.112u2            : Added pause support to the output system [Bob Seidel]: Added "pause" message through the Output system to let clients know when MAME is paused. The state of an item is now sent when the item is first created. Updated ledutil to use the pause state.
 - 0.112u1            : Input system changes [Derrick Renaud]: Added new IPT_POSITIONAL control type. This is for Ikari type rotary controls and gray-code devices like Seawolf. This makes rotary and gray-code controls easy to enter without custom handlers. Fixed some rounding and min/max errors in the core input code. Modified crosshair code to be based on real scaling, see Seawolf for an example. It can now also have multiple crosshairs on one input port if needed. Added back in the namcos2 crosshairs. Turns out they are needed for calibration. Removed the gwar control hack from the Ikari games that did not need it. Modified the gwar control hack so it is only used for 1 frame, making it unnoticeable. Updated boothill, gunfight, seawolf, spcenctr to use the new PORT_REMAP_TABLE.
 - 0.112              : Canim and Aaron Giles fixed crosshair problems.
 - 0.111u6            : Dirk Best added mappings for break and pause keys. Oliver Stoeneberg cleaned up stray variables from the crosshair drawing removal. Also removed some orphaned function declarations. Aaron Giles changed automatic crosshairs so they are not quite so automatic. They now need to be explicitly specified by the driver in the input ports. Also changed the PORT_CROSSHAIR macro to take a shorter form of the axis name. Updated all lightgun drivers to have this macro in its default state.
 - 0.111u5            : smf cleaned up a few drivers to use input_port_dword_*_r.
 - 0.111u4            : Aaron Giles added a new mechanism for rendering the crosshairs on lightgun games. Crosshairs are automatically rendered if lightgun controllers are specified; the game no longer has to render them. Any other analog axis can be configued to use crosshairs via the new PORT_CROSSHAIR macro. Crosshairs are also now rendered in different colors for different players, and done as an overlay using the new rendering system instead of drawing into the game bitmap, which means they no longer show up on screenshots. If you don't like the built-in crosshairs, you can make your own. Just call them cross0.png (player 1), cross1.png (player 2), etc. and place them in the root of your artwork directory. Changed F1 crosshair toggle. By default crosshairs are on for all configured players. Toggling once will turn them all off. Each sucessive toggle will enable one player at a time until all players are again visible.
 - 0.111u3            : Aaron Giles fixed several glitches and crashes related to the input port and unicode changes from 0.111u2.
 - 0.111u2            : Atari Ace and Aaron Giles converted input port definitions from code-based constructors to data-driven tokenized values. This reduces the overall MAME code size by a significant amount. Note that the tokenization is a bit different for 32-bit versus 64-bit builds, so hopefully somebody with a 64-bit system can verify that it works (mame -listxml should produce identical results to the 32-bit version).
 - 0.110u5            : Derrick Renaud removed the "Autocenter Speed" menu entry for Analog Controls that do not use it. Added a "Digital Speed" of 0 in the "Analog Controls" menu. This will cause the control to only inc/decrement once per button press no matter how long the button is pressed. Remember this is still scaled by the "Sensitivity" setting. Scaled Windows mouse Z axis by 30 to make it usable. Most mice inc/decrement by 120 for each wheel click. Some rare ones are 30. So this means for most mice, using a Sensitivity setting of 25%, you will get 1 inc/decrement for each wheel click.
 - 0.110u4            : Derrick Renaud added support for more than 4 mouse buttons on versions of Windows that support it. Win98/Me with DX7+ or XP. It defaults to regular 4 buttons if not supported.
 - 0.110u2            : smf cleaned up the input definitions for n-way joysticks so they are more explicit. Added concept of a "16-way" joystick, which is a joystick that doesn't prevent simultaneous opposing directions from bring reported.
 - 0.109              : HobbesAtPlay changed input port calculations to go in two passes, to catch out-of-order conditionals properly.
 - 0.108u5            : Aaron Giles added new output utilities: output_set_led_value(), output_set_digit_value(), output_set_lamp_value(), which are used to set a generic indexed data type. Changed Turbo and Max-a-Flex over to using output_set_digit_value() for their digits.
 - 0.107u4            : Added src\output.c/h, windows\output.c/h and ledutil.c. Ben Rudiak-Gould fixed detection of left/right modifier keys when paused. Also added support for recently added keys so they are detected by MAME when paused. Aaron Giles abstracted the notion of outputs. A new module, output.c, now controls all outputs. Each output is tagged with a name; some standardization eventually needs to happen on these names, but at the moment it's fully open. The OSD layer can register with output.c to be notified when outputs change. From there, it is free to do what it wants. LEDs have now been converted to outputs with the name "led0", "led1", etc. Added support for notifying external clients of changes in output states in the Windows OSD system. See windows\output.h for a list of messages that external clients can register to receive. Removed the built-in hacky LED support in the Windows OSD layer. Created a sample application ledutil.exe which subscribes to the external events and routes the "led0", "led1" and "led2" outputs to the keyboard LEDs just like before. If you want to continue to have LED support, simply copy ledutil.exe into your startup folder and let it run in the background. Aaron Giles added new layout element component type "text", which lets you draw text in the built-in MAME font onto an element in a layout. This can be used for basic lamps and built-in layouts. See maxaflex.c for an example.
 - 17th August    2006: Aaron Giles - Upcoming Changes, part 2: If there's one area that's been sadly neglected in MAME, it's been outputs. Most game PCBs have some means of communicating to the outside world, and while for the most part these outgoing signals are not important from a gameplay perspective, it is not in keeping with the spirit of a documentation project to neglect them as much as we have in the past. Over the years, a couple of standard outputs have been supported: 3 LED outputs have been commonly mapped to the num lock, caps lock, and scroll lock LEDs on your keyboard, and generic support coin counters has been present for a while now. When the old artwork system was introduced, it provided another means of connecting outputs to some kind of visual representation. But nothing tied any of this together. Furthermore, there was no generic means of supporting arbitrary outputs, like the pinball knocker in Q*Bert or other oddities. In order to help rectify this situation, as of MAME 0.107u4 there is now a generic output support system. It's actually quite simple. You assign each output a name, and the driver calls a new function output_set_value() with the updated value. All the drivers that previously used artwork to indicate the state of an output have been changed to use this new function instead, and the new renderer now queries the output system to get the current state. In addition, the existing LED system now routes all of its outputs through this mechanism, using the names "led0", "led1", "led2", etc. However, a few outputs such as coin counters and ticket dispensing are not reflected this way. You'll see why in a moment. So you're thinking to yourself, well, what good is this new system? Sure, internally this will help us properly document how the outputs behave on various games, but why make a big deal out of it? Well, if you've ever wanted to hook up a real pinball knocker to fire in Q*Bert or ever tried hacking MAME to route some output to an external connection, this is where it gets interesting. In addition to keeping track of all the output states, the new output module also allows various components to register for notification when one of these states changes. In the Windows build, the OSD layer does just this, listening for changes in the outputs, and then providing a brand new mechanism for exposing these states to other applications running on your machine. This mechanism takes the form of a few simple custom windows messages that are sent to specially written listener clients. Writing a new client is quite straightforward, and I've even taken the liberty of writing an example client to show exactly how it's done. Which is why I've removed the keyboard LED support from the Windows builds of MAME. See, the keyboard LED support is a big hack, and as you all know, I'm not a big fan of hacks. But wait, all is not lost. I took this opportunity to write a little sample output listener client called ledutil.exe. Run this program in the background while MAME is running and you will have your keyboard LED support back. ledutil.exe simply uses the newly provided messages from MAME to do exactly what the old keyboard LED support used to do, but completely external to MAME. If you really like the keyboard LEDs, I recommend you just copy ledutil.exe into your startup folder and never worry about it again. Here's a basic rundown of how the external messaging works: When MAME starts up, it broadcasts a message (I call it OM_MAME_START) to all windows in the system letting them know what's going on. All non-listening applications will just ignore this message, but if you've written an app that knows about this message, you can listen for it and respond. Once you get the OM_MAME_START message, you need to respond to MAME in order to register to receive notifications by sending back an OM_MAME_REGISTER_CLIENT message. This tells MAME that you want to hear about changes in any of the outputs. At this point, you'll start getting some OM_MAME_UPDATE_STATE messages. These messages contain the ID of an output and its current value. But wait, aren't outputs specified by name? Yes, but due to the limits of Windows messages, you only have a couple of integers to pass back and forth, so you will just get an ID. The first time you see an ID, you'll want to figure out what name it maps to. In order to do that, you'll send MAME an OM_MAME_GET_ID_STRING message, which it will respond to with a standard WM_COPYDATA message. The WM_COPYDATA message is unique in that you can pass larger amounts of data between applications with it. In this case, MAME will respond with a copydata_id_string structure, which contains the ID you requested along with a string containing the output name. You should cache this ID-to-name mapping in your program so that you don't have to keep asking MAME what each ID is. When you're finished listening, you can send MAME an OM_MAME_UNREGISTER_CLIENT message to tell it to stop sending you stuff. And when MAME shuts down, it will broadcast an OM_MAME_STOP message in case you need to reset any of your state back to normal (for keyboard LEDs we restore the original state at that time). This is also the signal to flush the cache of ID-to-name mappings that you have been accumulating. And that's pretty much it. It sounds more complicated when I describe it here, but it's actually rather straightforward. The ledutil.c source code in the windows directory is set up in a way that you can change a couple of constants at the top, snip away the LED-specific code at the bottom, and drop in your own implementation which doesn't have to worry about a lot of the details. I'm hoping this new functionality will inspire some of the BYOAC folks to update their MAME hacks to use this new solution instead, and come up with some other new cool ideas. I'm also hoping it will inspire folks documenting the outputs better in MAME proper, which is something I've been wanting to see for quite some time.
 - 0.107u3            : ClawGrip updated several games' input ports to use IPT_BILL1 for bill acceptors. Aaron Giles added new macro PORT_SERVICE_DIPLOC for specifying a PORT_SERVICE and a DIPLOCATION.
 - 0.107u2            : Aaron Giles added service_coin_lockout_w() to lockout service coins.
 - 0.106u13           : Aaron Giles fixed bug that led to black crosshairs in lightgun games.
 - 0.106u12           : Cananas changed the coordinates where for offscreen lightgun reloading, moving it from the upper-left to the upper-right for better compatibility.
 - 0.106u10           : Aaron Giles fixed keyboard LEDs so they work again. Added back support for full screen brightness correction.
 - 0.106u1            : Aaron Giles changed a number of games that were incorrectly using IPT_LIGHTGUN to use IPT_AD_STICK instead.
 - 0.105u3            : Derrick Renaud fixed incorrect lightgun names.
 - 0.104u7            : Nathan Woods and Aaron Giles added new function input_port_set_changed_callback() which lets you receive a change notification when certain bits in an input port have changed. See sega.c for an example. Aaron Giles added new PORT_CUSTOM() macro which allows you to specify a callback to return the value of bits in an input port. This saves you from needing to intercept the port read and modify the bits there. See sega.c for an example. Aaron Giles moved read/write handlers for input ports, watchdog and interrupt enable out of the core and into machine\generic.c. Updated raw mouse support for Windows XP [Derrick Renaud]: Reversed the RAWMOUSE device list. RAWMOUSE reports the last installed mouse as the first device. I now place new mice at the end. Added clipping to RAWMOUSE support so the cursor does not leave the game area in Windowed mode. Also fixed the non-RAWMOUSE Windowed mode clipping I broke by my last changes. You can now see the names of the mice attached by using -verbose. Changed Lightgun functionality if using XP. You no longer need to use -lightgun or -dual_lightgun. Use -mouse and multiple (2+) "HID-compliant mouse" lightguns will be detected. Lightgun support in Win98/Me remains unchanged. -offscreen_reload can still be used on Win98/Me/XP. See windows.txt for further info.
 - 0.104u5            : Updated windows input code [Derrick Renaud]: Now using RAWMOUSE mode if available. This means you can now use multiple mice in Windows XP. Lightgun support has not been changed yet. Added back DX7 support for the windows input system to support multiple mice. It was set to DX5 in 104u2. Removed the system mouse from the list of available mice on non-XP systems. This allows you to now properly select the individual mouse. Modified the Analog Axes selection of the player controls to be more responsive.
 - 0.104u1            : SilverFox fixed default gun location for a number of lightgun games.
 - 0.103u3            : Nathan Woods cleaned up PC keyboard code.
 - 0.99u8             : Aaron Giles made input port conditionals work more generically. This necessitated a bit of a minor reorg in the input port code. Please verify that controls work as before. This change has also required a modification to how analog ports are recorded, so existing INPs may not work.
 - 0.99u7             : Aaron Giles fixed custom analog input settings saving (analogconfig099u6).
 - 0.99u2             : More input port cleanup [Aaron Giles]: Fixed input port handlers that used the port_tag_to_handler calls. Simplified the reading/writing of input ports so they work more reliably. Only write changed settings to the .cfg files. Fixed saving of analog port configurations.
 - 0.98u4             : Anssi fixed seq_analog_value(), the value 0 was ignored.
 - 0.96u4             : Aaron Giles added 4 different crosshair styles to differentiate different players' crosshairs.
 - 0.96               : Jonathan Lunman fixed -dual_lightguns option.
 - 0.95u5             : Aaron Giles fixed Windows-specific input bug introduced in 0.95u4 (windows\input.c).
 - 0.95u3             : Speed up reading of input ports with a lookup list [wpcmame].
 - 0.94u2             : Allow for more than 40 entries in the Analog menu [Christopher Stone]. Robin Merrill added scroll mouse support.
 - 0.92u1             : James Wallace updated Mahjong drivers to use new default controls.
 - 0.92               : James Wallace updated some Mahjong drivers to use the new standard inputs.
 - 0.90u4             : Aaron Giles added standard Mahjong inputs to the input port (inptport.c).
 - 0.88u2             : Aaron Giles fixed Joystick axis problem.
 - 0.88               : Input Port System Update [Aaron Giles] PORT_INCLUDE() works the same as before. PORT_MODIFY("tag") allows you to modify any given input port by specifying its tag. Any PORT_BIT() entries that you put after a PORT_MODIFY will nuke any matching entries in the previous definition, allowing you to overwrite them with new stuff. Aaron added also a few new functions: readinputportbytag_safe() takes a tag and a default value. If the tag is not found, the default value is returned. port_tag_to_handler8(), port_tag_to_handler16() and port_tag_to_handler32() -- these 3 new functions take a tag string, find the input port, and return the appropriate handler. They can be used in AM_READ, so instead of: AM_RANGE(0x00, 0x00) AM_READ(input_port_1_r). You can use AM_RANGE(0x00, 0x00) AM_READ(port_tag_to_handler8("MyPortName")). Aaron modified exidy.c to use these features as a testbed. Let me know if you see any problems.
 - 0.87               : Support 16 Joystick buttons [Norix].
 - 0.86u3             : Fixed for the random key mappings bug with new config system. Reversed pedals now work correctly (e.g., brake in Hard Drivin'). All relative controls (dial, trackball, mouse) scale the same regardless of the number of bits allocated for that port [Aaron Giles].
 - 0.86u2             : Turned off auto-center in some games [Stefan Jokisch].
 - 0.86u1             : B.S. Ruggeri fixed some inputs.
 - 0.86               : Nathan Woods fixes PORT_INCLUDE by making the final IPT_END appended within input_port_allocate(), added some MESS specific defaults and spelling fix in IPT_BILL default.
 - 0.85u3             : Additional input port cleanup [El Condor].
 - 0.85u2             : Aaron Giles renamed PORT_CENTER to PORT_RESET to more accurates describe what it does. Also added PORT_CENTERDELTA(x) to control the autocentering behavior. El Condor fixed a number of recent errors introduced into the input port definitions of several drivers.
 - 0.85u1             : Aaron Giles fixed loading of ctrlr files so that they actually take effect now. Changed all the analog mapping defaults back to 'keyboard' as the default values were confusing people. Fixed bug preventing saving of lightgun control changes. Added the ability for analog axes to return "invalid" as a value from the OSD layer, allowing them to dynamically disable themselves. Using this feature, the Windows version now autodetects analog versus digital axes and dynamically disables the analog values if it thinks you are using a digital axis. Note that this even works if you have a "switchable" gamepad.
 - 0.85               : El Condor added conditional coinage to a number of games. Aaron Giles added feature to the general input settings so that if you hit Esc to cancel setting a new input sequence, it toggles between "None" (old behavior) and the default. This is similar to the change that went into u6 for the game-specific inputs. Changed the way the remapping works in the ctrlr .cfg files so that it works more like the way the old system did. Fixed load order for ctrlr files so that they don't stick in the default.cfg if you switch between ctrlrs. Added a new port type IPT_OTHER to use for controls that don't map in a standard way. Modified all the Mahjong games to use this instead of 0 for the port type, and changed the UI to recognize this and show it in the game-specific inputs. Renamed the paddle/adstick/pedal/dial/trackball/lightgun default device selection options to paddle_device/adstick_device/pedal_device/dial_device/trackball_device/lightgun_device to prevent naming conflicts.
 - 0.84u6             : Aaron Giles disabled input to the game while the user interface is in active use (prevents keypresses from affecting the underlying game). Made it possible to assign game-specific inputs to "None", effectively disabling them. To do this, select the input and hit enter, then cancel by hitting escape. Previously, cancelling would always reset you to the default key sequence for that input. Now, MAME alternates between the default key sequence and "None". Added groupings to the master controls list so that the list size is not so unwieldy. Added core-level support for the previously only Windows-supported controller files. These files now have the extension .cfg instead of .ini and are in the same format as the new XML-based .cfg files. See the ctrlr directory for some examples. Improved handling of interpolation for analog ports so that they don't wrap around and cause artifacts. Improved -verbose output display to enumerate all joysticks and joystick axes that have been detected. Useful for the new -digital command line parameter. Added several new command line options to assist in the automatic enabling of analog controls: -paddle (keyboard|mouse|joystick|lightgun), -adstick (keyboard|mouse|joystick|lightgun), -lightgun (keyboard|mouse|joystick|lightgun), -pedal (keyboard|mouse|joystick|lightgun), -dial (keyboard|mouse|joystick|lightgun) and -trackball (keyboard|mouse|joystick|lightgun). For example -dial mouse will automatically enable mouse controls (just like -mouse) if a dial control is present for the selected game. Added a command line parameter to control which joystick axes are considered digital. If you are using a digital gamepad with MAME, you will want to use this option. There are a number of ways to do this: * -digital all means that all axes of all connected joysticks will be treated as digital. * -digital none means that all axes of all connected joysticks will be treated as analog (this is the previous behavior). * -digital j2 will treat all axes of joystick #2 as digital; axes on all other joysticks will be treated as analog. * -digital j1a0a1 will treat axis 0 and 1 on joystick #1 as digital; all other axes will be treated as analog. * -digital j1a0a1,j2a5 will treat axis 0 and 1 on joystick #1 as digital, as well as axis 5 on joystick #2; all other axes will be treated as analog. Make use of the new -verbose information to determine which joysticks and axes you should be configuring this way. El Condor removed PORT_CHEAT from a number of drivers and documented the cheats in the port names.
 - 0.84u5             : Aaron Giles fixed several bugs in the new input system. Removed PORT_CENTER from drivers that were using it for autocentering and added a user-configurable autocentering property that applies to all absolute analog controls. Also made this autocentering intelligent so that it shouldn't need to be manually set to 0 if using a real analog device.
 - 0.84u4             : Aaron Giles added a number of commented-out default strings and modified all drivers to use them. Revamped most of the input and input port system. This means a number of changes for those who do their own OSD layer. All input APIs are now unified -- there is no notion of "keyboard" versus "joystick" anymore. The following APIs are now obsolete: osd_get_key_list, osd_is_key_pressed, osd_get_joy_list, osd_is_joy_pressed, osd_is_joystick_axis_code, osd_lightgun_read, osd_trak_read, osd_analogjoy_read and osd_customize_inputport_defaults. Instead there is a new set of simpler APIs: osd_get_code_list, osd_get_code_value and osd_customize_inputport_list. The code list returned by osd_get_code_list should include entries for every keyboard key, every joystick and mouse button, digital versions of joystick analog axes (e.g., joystick X axis up), as well as entries for analog axes on joysticks, mice, lightguns, etc. Essentially any input you wish to expose to the user should be added to this list. Note that if you add items to this list that don't map to the standard defaults, you must specify one of: CODE_OTHER_DIGITAL, CODE_OTHER_ANALOG_ABSOLUTE, or CODE_OTHER_ANALOG_RELATIVE to indicate what type of input you are providing. osd_get_code_value is then later called to retrieve the value for a given code. Digital inputs should return either 0 or 1. Absolute analog inputs should return values between ANALOG_VALUE_MIN (-65536) and ANALOG_VALUE_MAX (65536). Relative analog inputs should return values that approximately scale to 512 units per pixel (e.g., an X axis moving left 4 pixels should return -4*512 = -2048). Finally, osd_customize_inputport_list replaces osd_customize_inputport_defaults and allows you to add any OSD-specific UI input ports, as well as mess with the default configuration. Note that at this time, the controller.ini file support is currently disabled in the Windows build [Aaron Giles]. The configuration of ports has changed a bit now as well. You can now map any analog axis to an analog port in the standard input UI. There are now three entries per analog port. The first entry is the analog mapping. The second and third control the digital decrementing and incrementing sequences. To map an analog axis, just hit ENTER and then move the axis in question by a large amount [Aaron Giles]. Added 32-bit port read handlers, and extended input port internals to 32 bits. Furthermore, the controller.ini support is temporarily disabled. Any other input-related bugs, please report to www.mametesters.org.
 - 20th July      2004: Aaron Giles - After struggling to patch up the input port system with the recent changes, I've finally come to the conclusion that it has been hacked and patched way too much over the years so I am doing a serious cleanup/reworking. While I'm at it, the .CFG files are moving to XML format. Next release should be a big barrel of laughs while the kinks get ironed out.
 - 0.84u2             : Aaron Giles fixed a bug that prevented changes to the default controls from sticking. El Condor cleaned up PORT_CHEAT and tagged ports for a number of drivers.
 - 0.84u1             : Removed src\legacy.h. Fully obsoleted the old input ports, modifying all drivers to use the new forms. Added a number of new PORT_* macros to handle all the previously-defined flags. Fixed several issues with the new input port system [Aaron Giles].
 - 0.84               : New input port definitions, similar to the new memory map definitions. You can continue to use the old PORT_BIT, PORT_BITX, and PORT_ANALOG macros for now, but it is preferred going forward that all ports use only PORT_BIT, and append all other flags and options using the new macros. See pacman.c for an example of the new format. The new input ports also support tagging for easier tracking of ports, and the ability to import port definitions from another set [Nathan Woods].
 - 0.83               : Nathan Woods switched input_port_allocate() to use auto_malloc(), removing the need for input_port_free().
 - 0.82u3             : Nathan Woods changed use_mouse to win_use_mouse and made it non-static (windows\input.c). Added more MESS specific stuff within #ifdef MESS (src\inptport.h).
 - 0.79u3             : Nathan Woods changed key_trans_table to be non static and renamed to win_key_trans_table (this table is now used in MAME32).
 - 0.79u1             : IP_KEY_PREVIOUS and IP_JOY_PREVIOUS are no longer used by any Namco driver: they may be removed from the core [Nicola Salmoria].
 - 0.78u5             : Support USB Keyboard LEDs [smf]: led_mode PS/2 is the default and uses DeviceIOControl and led_mode USB uses keybd_event(). This only affects windows nt/2000/xp. There might be a way of using DeviceIOControl to change the led's on USB keyboards, but I can't find it. Using keybd_event() may have problems restoring on exit, but at least it does work.
 - 0.78               : Bryan McPhail improved Lightgun code / reload handling: '-lightgun' now enables the lightgun only - no button remapping is performed. '-reload' (formally '-offscreen_reload') is now needed for 2nd button presses to map to offscreen shots. '-dual' (formally '-dual_lightgun') adds support for the Actlabs Dual Lightgun setup, it may be used with and without '-reload' and it requires '-lightgun'. This mode attempts to automatically remap the player 1 & 2 buttons to suit the lightgun setup. If it doesn't work you probably need to delete the .cfg file for that game.
 - 18th December  2003: Curt Coder fixed inputs in a few games in the Sega System 32 driver, in Relief Pitcher and in WEC Le Mans 24 / Hot Chase.
 - 14th December  2003: Bryan McPhail sent in an update to the lightgun support, adding support for dual lightguns and fixing other things.
 - 19th November  2003: El Condor submitted some input port fixes. Joe Redfish submitted a fix to a bug in setting the keyboard LEDs in the Windows version.
 - 18th November  2003: Curt Coder fixed the inputs in Sonic the Hedgehog and Dead Angle / Gang Hunter.
 - 12th November  2003: Dave D. submitted a few input port and DIP switch corrections to various Midway drivers.
 - 0.77               : Some input port corrections [Robin Merrill, fixed by Bryan McPhail].
 -  7th November  2003: Howard Casto submitted a bunch of fixes to input port defitinions.
 -  6th November  2003: Robin Merrill fixed the input ports in various games that mapped the 'A' key instead of nothing to some inputs.
 - 27th October   2003: Howard Casto submitted some more input port fixes to various drivers.
 - 0.75               : Reversed inptport.c changes to 0.74u1 as the version in 0.74u2 wasn't correcly merged, these will need resubmitting.
 -  8th October   2003: Submitted fixed inputs to Hanaroku and cocktail mode fixes to the Shoot Out driver.
 - 26th September 2003: Howard Casto submitted a bunch of drivers with old pedal hacks replaced with the new z axis and second pedal inputs.
 - 0.74u1             : Added src\config.c/h. MAME now recognises off-screen shots with the Act-Labs gun in a way which works better with certain drivers (Area 51 etc,) [Bryan McPhail]. Robin Merrill fixed some problems with defaults in inptport.c. Moved some Config code around (src\config.c, inptport.c) [Nathan Woods].
 - 22nd September 2003: Bryan McPhail sent in a patch to the light gun support code to fix shooting outside the screen.
 - 18th September 2003: Robin Merrill fixed the default settings for the player 5-8 pedal2 input sequence.
 - 0.74               : Support for 8 controllers [Robin Merrill].
 -  7th September 2003: Stefan Jokisch fixed a user interface bug that caused the selector to jump around when editing an input in the general input menu.
 -  5th September 2003: Robin Merrill further improved the 8 controller support.
 -  4th September 2003: Robin Merrill submitted an improvement to the 8 player support, adding proper JOYCODEs for devices 5-8 and increasing the maximum number of mice and joysticks to 8. Nathan Woods sent some more MESS-specific fixes to the core.
 -  3rd September 2003: Stefan Jokisch improved the 8 player support and fixed a crash that happened when entering the general inputs menu.
 - 0.73               : Stefan Jokisch added 8 Player support to the core.
 - 0.72u1             : Nathan Woods added some MESS specific IPT defaults (within #ifdef MESS) (src\inptport.c). Modified input_port_allocate() so that PORT_BITX declarations that specify JOYCODE_a_BUTTONb for their default codes will also get JOYCODE_MOUSE_a_BUTTONb or'd in. Added seq_set_4() and seq_set_5() (src\input.c).
 - 15th August    2003: El Condor re-submitted some input port fixes.
 - 0.71u3             : Raises the maximum number of ports to thirty. Added a few MESS specific IPT_* types (within #ifdef MESS) [Nathan Woods].
 - 0.70               : Sanity checks for ports [Pierpaolo Prazzoli].
 -  4th May       2003: Lawrence Gold forwarded a few patches to add support for multiple mice button inputs and more joystick buttons.
 - 18th March     2003: BUT fixed a bug that happened when using -skip_gameinfo with -nojoy.
 - 17th March     2003: Nathan Woods fixed possible crashes when reading certain INI files.
 -  1st March     2003: Carlos Irigaray submitted another fix for light guns and frame skipping.
 - 17th February  2003: Carlos Irigaray fixed a problem in light gun suddenly jumping around, and he fixed a light gun problem in Bang!.
 - 0.62               : Paul Priest fixed keyboard LEDs being messed up on program exit. Robin Merrill fixed inputs are messed up for many gun games when using a joystick, the crosshairs/target jumps around.
 -  6th September 2002: Paul Priest added definitely correct keyboard LED handling but it only helps Windows NT / 2000 / XP.
 -  5th September 2002: Paul Priest fixed the keyboard LEDs from being incorrect reset after exiting MAME.
 -  1st September 2002: Bryan McPhail fixed several problems with the light gun support.
 - 22nd July      2002: Robin Merrill fixed an input bug in light gun games with analog joysticks.
 - 0.61               : Light gun support [Bryan McPhail]. Robin Merrill fixed AD Stick and Pedal support in MAME.
 - 0.71u2             : Nathan Woods changed seq_name() so that instead of saying "<KEY> or n/a", it will say "<KEY>" (src\input.c). Added very small hooks for MESS (src\inptport.c).
 -  8th July      2002: Paul Priest added support for reading controller .ini files named after the driver file name.
 - 26th June      2002: Ron Fries fixed a small typo in the input remapping system.
 - 19th June      2002: smf merged the various input system updates.
 - 18th June      2002: Robin Merrill submitted a patch to allow mapping of analog joystick inputs and fixed a bug regarding pedal inputs.
 - 14th June      2002: Bryan McPhail updated a few more drivers for the light gun support, and changed the order of mouse buttons.
 - 13th June      2002: Bryan McPhail submitted a major update to the input system, adding support for light guns.
 -  5th June      2002: Robin Merrill submitted an improvement to the input support that allows remapping of the analog joystick inputs and it also fixes a bug with analog joysticks.
 - 29th May       2002: Bernd Wiebelt added a configurable dead zone for analog joysticks to the Windows version.
 - 14th May       2002: Derrick Renaud submitted an addition of proper optical joysticks input to the Exterminator driver.
 - 10th May       2002: Ron Fries fixed a memory corrupting bug in the new controller input remapping support.
 - 0.60               : Support for external configuration files for special controllers; this replaces the -hotrod and -hotrodse options. See ctrl.txt for the detailed explanation [Ron Fries].
 - 12th April     2002: Ron Fries sent in another update to the controller-specific .ini file support system.
 -  4th April     2002: Ron Fries added a little better support for joysticks with start and select buttons.
 - 25th March     2002: Ron Fries finished adding the support for adding controller-specific mapping using .ini files.
 - 24th March     2002: Paul Priest re-submitted the improvements to the hotrod/hotrodse presets.
 - 0.59               : Loads of fixes to input ports etc. in several drivers [Stephane Humbert].
 - 21st March     2002: Ron Fries started adding support for re-mapping inputs using standard .ini files.
 -  7th February  2002: Paul Priest improved the key remapping with the hotrod/hotrodse presets. Robin Merrill re-submitted his analog pedal support patch which fixes several driving games' inputs.
 - 12th December  2001: Phil Stroffolino submitted a change to the input port system that is more responsive and intuitive with the 4-way joystick games.
 -  8th December  2001: Robin Merrill submitted an improved patch to fix analog pedals.
 - 10th November  2001: Stephane Humbert fixed DIP switch settings and input ports in several drivers.
 -  7th November  2001: Kale resubmitted some DIP switch and input port fixes.
 -  6th November  2001: Pierpaolo Prazzoli submitted several fixes for input ports and DIP switch settings.
 - 14th October   2001: Martin M. submitted some changes to various drivers, such as correct input ports.
 - 28th August    2001: Robin Merrill submitted a hack to improve the handling of analog pedals.
 - 0.53               : Aley Keprt support for C64/Atari/Sinclair joysticks connected via DB9 or Turbografix interface.
 -  9th August    2001: David Graves made the default light gun values centered to overcome problems with some input devices.
 - 11th May       2001: Aaron Giles added an easier way to set names for buttons.
 - 22nd April     2001: Zsolt Vasvari added the spinner emulation.
 - 0.37b14            : Jeoff Krontz changed 4-way emulation on a 8-way joystick to "sticky" mode. This makes Lady Bug and other 4-way games more playable. Explanation here: http://www.rentrondesign.homestead.com/JoyPrimer.html
 -  4th March     2001: Warlock submitted an update to the input port routines, fixing some bugs and improving wheel and pedal support. Bryan McPhail fixed Super Chase input ports and cleaned up the driver a little.
 - 22nd February  2001: Aaron Giles fixed a bug in the analog port input system which sometimes caused analog inputs to jump quickly between the minimum and maximum values.
 - 16th February  2001: Nicola Salmoria fixed the input ports for third and fourth player in the CPS-2 games.
 - 12th February  2001: Jarek Burczynski added trackball control to Rambo III in addition to joystick control.
 - 0.37b12            : draw_crosshair() [Nicola Salmoria].
 - 0.37b10            : Paddles now map linearly to the analog joystick.
 - 0.37b7             : Removed osd_led_w(); instead, an additional leds_status parameter is passed to osd_update_video_and_audio(). Drivers now have to use set_led_status().
 - 0.37b6             : Removed osd_poll_joysticks(). Ports requiring polling of the joystick can do so in osd_update_video_and_audio().
 - 0.36RC2            : [DOS] There are now two options for Hot Rod key mapping, -hotrod and -hotrodse. The latter remaps NeoGeo games to use the lower row of buttons.
 - 0.36RC1            : The coin/start buttons are slightly changed. Now they are layed out this way: 1,2,3,4 -> start 1,2,3,4 and 5,6,7,8 -> coin 1,2,3,4 and 9,0,-,= -> service coin 1,2,3,4. Fixed a rounding error in IPF_CENTER handling which caused problems with Centipede. Note, however, that it would be advisable to not use IPF_CENTER at all for trackball/dial inputs, since this is probably not how the hardware works in reality. For the same reason, also removed the "clip" parameter from the PORT_ANALOG() macro. Incidentally, this fixed Peek-a-Boo [Nicola Salmoria]. DOS -hotrod selects a more appropriate button configuration when NeoGeo games are played [Paolo Fiorani].
 - 0.36b16            : Unified keyboard and joystick interface, now they are all assigned in the "Input" menu and you can mix them at will [Andrea Mazzoleni].
 - 0.36b12            : Added the possibility to use a multiple keys or joysticks sequence to drive a generic action. This can be handy with consoles or cabinets with a limited number of buttons, to reuse all buttons with only one extra button, like a shift key. For example the COIN1 action can be mapped to the "Player 1 Fire" plus the "Extra Shift Button". It can also be used to map Q*Bert movements to joystick diagonals (since the orginal used a joystick rotate 45 degrees) [Andrea Mazzoleni].
 - 0.36b8             : [DOS] The mouse buttons are no longer aliases for joystick buttons, they are independently recognized. They are not enabled by default, you'll have to add them to the controls if you want to. This is a minor annoyance that was needed to allow interfacing a Discs of Tron controller to the mouse port (spinner + up and down switches) while still using joystick buttons 1 and 2 for fire and deflect [Nicola Salmoria].
 - 0.36b5             : New input type IPT_PEDAL [Aaron Giles].
 - 0.36b2             : Rewritten the OS dependant joystick interface, it's like the keyboard interface now. Also a few function renames, and osd_wait_keypress() must now return a keycode [Nicola Salmoria]. DOS: The above should remove all limitations on number of axis and buttons, so e.g. joypads with multiple sticks should work. Changes to the analog devices handling will follow [Nicola Salmoria].
 - 0.36b1             : Added src\input.c/h. Rewritten the OS dependant keyboard interface. The OS dependant code now only has to provide four functions: osd_get_key_list(), osd_is_key_pressed(), osd_customize_inputport_defaults() [optional] and osd_wait_keypress() [optional] everything else is handled by the main core. The joystick interface has been similarly modified, removing limitations on the number of sticks and buttons [Nicola Salmoria].
 - 0.35RC1            : Changed the analog port handling to avoid problems with keyboard control (e.g. Arkanoid 2) [Nicola Salmoria].
 - 0.35b10            : Added support for up to 4 analog controllers (multiple trackballs are NOT supported under DOS, but multiple joysticks should work) [Brad Oliver].
 - 0.35b9             : Redesigned the struct InputPort to use less space, and changed how analog inputs are defined. An additional benefit is that the keys for digital emulation of analog inputs are now defined in the Keys for this Game menu, together with all other keys, instead that in the Analog Controls menu. The Analog Controls menu remains to set the other parameters [Nicola Salmoria].
 - 0.35b1             : The driver input ports are now 16 bit. This allows for higher resolution analog inputs (Arkanoid 2). Also, the 68000 based games no longer have to read and mix two 8 bit ports to get a 16 bit value [Brad Oliver].
 - 0.33b7             : Improved handling of 4 way joysticks [Martin Sandiford].
 - 0.33b6             : Emulating analog devices via joystick no longer deactivates the mouse. IMPORTANT NOTE FOR PORTERS: osd_analog_read() had to be changed. The mame.cfg setting for joysticks was renamed to "joystick" instead of "joytype". The numbering of joystick types has changed, look into readme.txt [Bernd Wiebelt].
 - 0.33b5             : New flag IPF_RESETCPU for input ports. When this flag is set, CPU #0 is reset when the key is pressed. This cleaned up the vicdual driver [Nicola Salmoria].
 - 0.33b1             : Brad Oliver added support for coin counters to some games.
 - 0.31               : Improved analog input handling [Bernd Wiebelt]. Migration to the new input port definitions is complete. The obsolete structures have been removed from struct GameDriver [Marco Cassili].
 - 0.30               : Right control and right alt work again [Nicola Salmoria]. Enhancements to the analog input controllers emulation. Their keyboard counterparts can be changed, the sensitivity adjusted, and the direction reversed. This is all controlled by the analog setup menu [Brad Oliver]. Support for true analog joystick input in games like Star Wars [Bernd Wiebelt]: Moreover, the whole range of joystick types supported by Allegro is now supported. To handle that, use the new command line option -joy N, where N can be 0 - normal 2 button joystick, 1 - CH Flightstick Pro, 2 - Stick/Pad with 4 buttons, 3 - Stick/Pad with 6 buttons, 4 - dual joysticks and 5 - Wingman Extreme (or Wingman Warrior without spinner). Press F7 to calibrate the joystick. Calibration data will be saved in mame.cfg. If you're using different joytypes for different games, you may need to recalibrate your joystick every time. Note that if you enable joystick support, games like Star Wars will work ONLY with the joystick - mouse emulation will be disabled.
 - 0.29               : Tweaked input port code. Added new fields for analog controls - clip, min and max. Also added 2 new analog joystick types - IPT_AD_STICK_X and IPT_AD_STICK_Y. The new fields are packed into the same int field (arg) as the sensitivity and as such they can only be in the range of 0-255. The clip field clips the trackball/dial/stick deltas, a common callback routine task. Min and Max are so far only used in the AD_STICK types. They limit the range of motion for those sticks - used in Star Wars and Red Baron [Brad Oliver]. Additional tweaking of analog inputs, allowing them to be updated more than once per frame. This is needed by some games [Bernd Wiebelt]. Removed osd_track_center(). We always use relative mouse movement now [Bernd Wiebelt]. Bernd Wiebelt removed "-trak" and "-mouse" options. Mouse support is now enabled by default. To disable it, use "-nomouse". In some games (e.g. Pacman, Galaxian, Rally X) the NumLock and CapsLock leds emulate the 1 Player/2 Players start lamps [Sean Gugler].
 - 0.28               : Added src\inptport.c/h. Moved the input handling to the new source file inptport.c [Nicola Salmoria]. Totally new Input port definition structure. See driver.h for the new structures definition; several drivers already use it, check them for working examples. The new definition is much more powerful and easier to maintain than the previous one. It isn't complete yet, but it will eventually handle everything, including trackballs and analog joysticks. Drivers using the old definition will gradually be converted to the new one. Please do not submit new drivers using the old definition. It is obsolete and will be removed as soon as the conversion of the existing drivers is finished [Nicola Salmoria].
 - 0.27               : Andrea Fregoli added a scroll routine used when the keyboard/joystick settings menu doesn't fit on the screen. Nicola Salmoria modified readinputport() to scan the keyboard only once per frame, and handle everything more efficiently. It is now MUCH faster than before - useful with games which continuously poll a port for VBlank. InputPorts now can automatically handle VBlank bits [Nicola Salmoria]. No more need to write custom code. Lady Bug, Carnival, Mysterious Stones, Naughty Boy and Phoenix use this feature. Many other drivers need to be updated to use it. MAKE SURE TO DELETE LADYBUG\LADYBUG.DSW AND LADYBUG\LADYBUG.CFG, OTHERWISE THE GAME WILL NOT WORK CORRECTLY.
 - 0.26a              : Patrick Lawrence added trackball sensitivity setting menu.
 - 0.26               : Patrick Lawrence did a great work adding trackball support to the main core system. Trackball is enable with -trak parameter. Trackball support has been added to Centipede and Reactor. Eric Anschuetz fixed a bug in joystick redefinition menu. Also added the selection support for Any Button ("A" key), and None ("N" key). Mauro Minenna introduced a new option (-dir4) that simplify the use of the joysticks to be connected on the keyboard. This modify resolves the problem of diagonal direction in games such as PacMan, Popeye and Kung Fu Master.
 - 0.25               : Eric Anschuetz proposed me to implement a different button layout for joysticks. I replyed with a configurable joystick setup (like the keyboard one). So Eric finished the work providing us a useful joystick setup menu. Thanks Eric and Robert! Pause key back to 'P'. Sorry, you cannot use it for your redefinitions, but, hey, you have 101 keys left!!! Nigel T. Barber (Nigel.Barber@sgcs.co.uk) added mouse support. We need some feedback, because each mouse device has its own sensitivity. Enable mouse support with -mouse parameter. Modifications done by Eric Anschuetz to added joystick reconfiguration menu.
 - 0.23               : Dipswitches and Key Settings are now selectable thru a menu system. F8 key is no longer supported.
 - 0.21.5             : Fixed a bug in keys redefinition routine: ALT, SHIFT and CONTROL are now selectable.
 - 0.21               : Mirko Buffoni added redefinable keys in MAME. A new structure cointains which input ports and bits have a certain meaning. The KEY settings will be saved in a .KEY file, in the game directory.
 - 0.14               : Nicola Salmoria changed the GameDriver structure, moving there fields from the MachineDrivers structure. The idea is that MachineDriver should describe the hardware, while GameDriver the software. Therefore things like colors (which are usually stored in a PROM) and dip switch settings go into GameDriver; decode_color_prom, on the other hand, goes into MachineDriver because it is an hardware function. It could be argued that input_ports belong to the hardware; but sometimes we have keys tied to dip switches (test switches and so on) whose function is determined by the software. Moreover input_ports contains the default values for all ports, including dip switches, and those are definitely software related.
 - 0.04               : Handle IN and OUT instructions in the same way as memory accesses (table of handler functions). The parameters of the functions are the same, so the same function can be used both for memory and ports. Had to change the driver structure, removed the pointers to _in and _out functions and added port_read and port_write array pointers.
 - 0.03               : New general purpose readinputport() function used to handle reads of input ports and dip switches [Nicola Salmoria]. This saves some work when creating a game driver. Required changes to struct MachineDriver.



 7.1  DIPSWITCHES

 - 0.182              : Added service mode DIP switch adjustments (emu\ioport.cpp, ui\info.cpp and ui.cpp). Removed find_dipname [AJR]. Changed ui\filesel.cpp to use wstring_from_utf8() [Nathan Woods].
 - 0.144              : Alex Jackson added some common country and language names to the default strings, and removed some unused and/or redundant strings.
 - 0.141u3            : Updated dipswitches and DIP locations based on documents posted by Laschek at KLOV [Tafoid]. hap fixed global flipscreen.
 - 0.128u3            : Aaron Giles fixed Dip Condition / Port Include limitation.
 - 0.127u8            : Tafoid added DIP locations to items in the driver and cleaned up some of the comments mentioning duplicate dips configurations. Not fully understanding how the FREE PLAY was implemented, I left that not to show a location.
 - 0.126u2            : Made DIP switch renderings consistent regardless of UI aspect [Aaron Giles].
 - 0.125u4            : Couriersud fixed DIP switch information is not being readded properly when .CFG is read.
 - 0.125u3            : Aaron Giles fixed bug that caused dipswitches to be improperly read from game cfg file in certain circumstances.
 - 0.125u2            : Aaron Giles fixed every set with PORT_MODIFY used for DIPs (e.g. arknoidj): the modified dipswitches are always listed at the bottom of the list.
 - 0.124u1            : Aaron Giles converted special-case DIP switches (service, unknown and unused) into their own token type rather than expanding into other tokens. The reduces the number of redundant strings and data.
 - 0.123u2            : RansAckeR improved some dipswitches, added some DIP locations and replaced IPT_COINx with IPT_SERVICE1 where appropiate.
 - 0.121u2            : Nathan Woods and Michael Zapf fixed array overrun in get_num_dips.
 - 0.120u4            : Vas Crabb added support for indicating that DIP switches are reversed in the DIP locations view.
 - 0.119u2            : Brian Troha added DIP locations and changes the Japanese inputs into PORT_INCLUDE and PORT_MODIFY.
 - 0.112u4            : Stephane Humbert updated a number of drivers to use the new PORT_DIPUNUSED macros.
 - 0.111u4            : Stephane Humbert added two new convenience macros for input ports: PORT_DIPUNUSED and PORT_DIPUNUSED_DIPLOC.
 - 0.111u3            : Zsolt Vasvari changed uimenu.c to allow displaying DP switch banks which have gaps (unused switches) in them. These switches are now grayed out. Nathan Woods and Aaron Giles updated input port tokenization for MESS. Added support in MAME for "configuration" switches which are separate from DIP switches. These can be used to configure aspects of the game that don't correspond to DIP switches. Modified pacman.c to use configurations to control the speedup options.
 - 0.111u2            : Brian Oberholtzer added new visible representation of physical DIP switches for drivers that have them defined. To see this, just pull up the DIP switch menu on drivers that have been documented.
 - 0.108u2            : Roberto Fresca added PORT_DIPLOCATION macros to a number of drivers based on research.
 - 0.106u1            : Alex Jackson and Aaron Giles correct the ordering of the DIP_PORTLOCATION() macros to be consistent. Multi-bit DIP switches should be specified in LSB-first order. Added a comment to this effect in inptport.h.
 - 0.104u7            : Aaron Giles added new PORT_DIPLOCATION() macro which allows you to specify the physical PCB location of a DIP switch and the switches that correspond to the bits in the DIPSETTING. See sega.c for an example.
 - 0.84u6             : Aaron Giles added support for conditional dipswitch settings. This allows for multiple equivalent entries but with different text depending on the state of another dipswitch. See mappy.c for an example of how this works to handle the changing bonuses based on the number of lives.
 -  3rd February  2004: Curt Coder submitted DIP switch and input fixes to Guardians of the Hood, Heat Barrel, Shot Rider and Fire Battle.
 -  6th October   2003: Brian A. Troha updated various drivers with documentation and DIP switch fixes.
 - 0.74u2             : Various dipswitch fixes [Inigo Luja].
 -  4th October   2003: El Condor submitted some DIP switch fixes to various drivers.
 - 0.72u1             : Paul Priest change so DIP menu isn't displayed if no Dipswitches are defined in the driver instead of flashing a blank menu when you try and enter it. athan Woods parameterized the setdipswitches() call; so that a menu that looks like the DIP switch menu can easily be made with different IPT_* values (MESS has a configuration menu that functions a lot like the DIP switch menu).
 -  8th August    2003: Brian A. Troha fixed DIP switch settings in various drivers.
 - 16th June      2003: El Condor and others fixed some inputs and DIP switches.
 - 18th March     2003: Smitdogg submitted a bunch of fixes to input ports and DIP switches in various drivers.
 - 26th February  2003: Milan Koci submitted some DIP switch fixes to various drivers.
 - 31st August    2002: Stephane Humbert fixed DIP switches and a few other things in the old SNK games' driver.
 -  5th June      2002: Stephane Humbert updated DIP switches and inputs in various drivers.
 - 29th May       2002: Stephane Humbert fixed DIP switches in various drivers.
 - 28th May       2002: Stephane Humbert fixed the inputs and DIP switches in various drivers.
 - 10th May       2002: William Kucharski re-submitted the various cocktail mode patches.
 -  1st April     2002: Stephane Humbert fixed the DIP switch settings and input ports in various drivers.
 -  5th March     2002: Stephane Humbert fixed DIP switches and inputs in various drivers.
 -  3rd January   2002: William Kucharski re-submitted a lot of cocktail mode support and other small fixes for various drivers.
 -  1st December  2001: Smitdogg fixed DIP switch settings in Truxton 2.
 - 29th November  2001: Stephane Humbert fixed DIP switch settings and flipscreen support in a few drivers.
 - 27th November  2001: Stephane Humbert fixed DIP switch settings and input ports in Congo Bongo, Xevious and Zaxxon drivers.
 - 10th November  2001: Stephane Humbert fixed DIP switch settings and input ports in several drivers.
 -  7th November  2001: Kale resubmitted some DIP switch and input port fixes.
 -  6th November  2001: Pierpaolo Prazzoli submitted several fixes for input ports and DIP switch settings.
 -  3rd November  2001: William Kucharski resubmitted a load of flip screen support and cocktail mode patches.
 - 19th October   2001: William Kucharski submitted a truckload of cocktail mode fixes to various drivers.
 -  6th September 2001: Gerardo Oporto fixed DIP switch settings in some Nichibutsu drivers.
 - 22nd August    2001: Takahiro Nogi correct the DIP switch settings in the Final Romance driver.
 - 26th July      2001: Gerardo Oporto updated the Sega System E driver, fixing DIP switch settings in Hang-On Jr.
 - 25th July      2001: Marco Cassili fixed DIP switch settings in many M-92 games.
 - 17th July      2001: Marco Cassili fixed DIP switch settings in Oh My God.
 - 14th July      2001: Uki fixed DIP switch settings in the Nemesis / Gradius driver.
 - 24th June      2001: inside out boy added DIP switch settings and state saving to the Solomon's Key driver.
 - 15th June      2001: Gerardo Oporto added correct DIP switch settings to the Sega System E driver.
 - 29th May       2001: Brian A. Troha submitted the correct DIP switch settings for Macross and Macross 2.
 - 19th May       2001: Aaron Giles fixed the DIP switch settings in Shuffleshot.
 - 10th May       2001: Stephane Humbert submitted a few dip switch settings fixes.
 - 25th April     2001: Stephane Humbert submitted some dip switch fixes to several drivers.
 - 23rd April     2001: Gerardo Oporto fixed dip switch settings in Exzisus.
 - 21st April     2001: Marco Cassili fixed dip switch settings in Tunnel Hunt.
 - 10th April     2001: Marco Cassili fixed dip switch settings in suna8 and balsente drivers.
 -  9th April     2001: Zsolt Vasvari fixed the dip switch settings in Phoenix and Pleiads.
 -  7th April     2001: Guru fixed dip switch settings in Yie Ar Kung Fu.
 - 29th March     2001: Gerardo Oporto fixed yet more dip switch settings in the Taito L driver.
 - 27th March     2001: Gerardo Oporto fixed some dip switch settings in the Taito F2 driver.
 - 20th March     2001: Marco Cassili fixed some more dip switch settings.
 - 19th March     2001: Marco Cassili fixed dip switch settings in a few drivers.
 - 18th March     2001: Uki added screen flip and fixed some dip switch settings in Momoko 120%.
 - 16th March     2001: Marco Cassili fixed dip switch settings in Gunnail, Mouja and Momoko 120%.
 - 11th March     2001: Marco Cassili fixed some dip switches in the Seta games.
 -  9th March     2001: Mike Coates improved the ASM 68k core's save state support.
 -  8th March     2001: Marco Cassili fixed some dip switch settings in Rolling Thunder and Konami Twin16 games.
 - 15th February  2001: Gerardo Oporto fixed some more Taito drivers' dip switch settings. Marco Cassili fixed dip switch settings in Chinese Hero.
 - 10th February  2001: Gerardo Oporto fixed dip switch settings in Taito B system and Ninja Warriors drivers.
 - 31st January   2001: Marco Cassili added the dip switch settings to the Roller Aces driver.
 - 31st January   2001: Gerardo Oporto fixed dip switch settings in the Taito L system driver.
 -  9th January   2001: Gerardo Oporto fixed some more Taito games' dip switch settings.
 -  4th January   2001: Gerardo Oporto fixed dip switches in the Top Speed driver.
 - 0.37b3             : Fixed dipswitches in many games [Gerardo Oporto].
 - 0.36b4             : New PORT_SERVICE() macro, use it instead of the long declaration needed for the service mode dipswitch [Nicola Salmoria].
 - 0.36b4             : Fixed cocktail mode in several games [Chad Hendrickson].
 - 0.35b9             : Added default strings for dipswitches. For example, instead of "Cabinet", use DEF_STR( Cabinet ). The constants are defined in inptport.h [Nicola Salmoria].
 - 0.31               : Fixes to dipswitches and input ports in several games [Marco Cassili].
 - 0.30               : Marco Cassili fixed to dipswitches and input ports in several games.
 - 0.28               : Some of the games now support Cocktail mode (only the graphics, not the controls yet) [Nicola Salmoria].
 - 0.19               : Fixes to setdipswitches() and the fps counter in COMMON.C, to make them work correctly with non 8x8 fonts.
 - 0.14               : I changed the GameDriver structure, moving there fields from the MachineDrivers structure [Nicola Salmoria]. The idea is that MachineDriver should describe the hardware, while GameDriver the software. Therefore things like colors (which are usually stored in a PROM) and dip switch settings go into GameDriver; decode_color_prom, on the other hand, goes into MachineDriver because it is an hardware function. It could be argued that input_ports belong to the hardware; but sometimes we have keys tied to dip switches (test switches and so on) whose function is determined by the software. Moreover input_ports contains the default values for all ports, including dip switches, and those are definitely software related.



 7.2  INIT/RESET/RUNNING/PAUSE/EXIT ROUTINES

 - 0.267              : Relax log message. Get rid of verbose call and reword comments (machine\watchdog.cpp) [Angelo Salese].
 - 0.257              : Make watchdog_enable compatible with writeline, added a watchdog reset writeline and a debugger side effect checks for watchdog reset_r (machine\watchdog.cpp) [hap].
 - 0.253              : Interrupt callback rationalization: Make CPUs pass interrupt return PC as a second argument to standard_irq_callback. Added interrupt return PC to "Stopped at interrupt" message produced by debugger 'gint' command. Added messages to trace logs whenever interrupts are accepted. Attempt to step over interrupt routines for applicable debugger commands. Eliminated standard_irq_callback_member wrapper method. Updated many CPU cores to invoke standard_irq_callback at the start of or during interrupt processing, rather than at the end or when the input line changes. Removed IRQ callbacks for some input lines that never cause interrupts. MB88xx and MCS48: Added IRQ callbacks for internal interrupts [AJR].
 - 0.209              : Simplified handlers. Reduced watchdog handler trampolines (machine\watchdog.cpp) [cam900].
 - 0.201              : Modern configuration accessors (machine\watchdog.h) [Ryan Holtz].
 - 0.177              : New core input type: "Memory Reset": In machines that store their settings and/or bookkeeping logs in some form of non-volatile memory, "Memory Reset" will reset them to some system-provided default. This replaces all existing inputs named "Memory Reset" and a few simply named "Reset" which are known to do this rather than reboot the system (a confusion to be avoided, though many systems will only acknowledge this input at boot time); others should be checked. The default key binding (F1) for this new input type is chosen partly to avoid conflicts with those used by gambling/mahjong games which are currently the only systems to use this, though broader use is envisioned. Added "Memory Reset" input type to Nichibutsu mahjong games (nbmj8688.cpp, nbmj8891.cpp and nbmj8991.cpp) as designated in source [AJR].
 - 0.176              : Flush stdout/stderr before killing process (osd\watchdog.cpp). This fixed watchdog dialog is not able to be captured [Vas Crabb].
 - 0.174              : Added machine\watchdog.cpp/h. Make watchdog timer a separate device. Separate watchdog implementation from running_machine (once again) and driver_device. Old-style methods, now hidden behind #ifdefs, will probably be safe to remove soon [AJR]. Removed legacy watchdog calls [Miodrag Milanovic].
 - 0.144u7            : Change device reset so that the resets proceed hierarchically [Aaron Giles]. Added a device_reset_after_children() hook for things that need to wait for the children to finish. Moved calling the driver / machine / sound / video reset callbacks to the after children time, to align more with how it was happening before. Fixed siblingdevice("") so that it returns the current device and not the owner. siblingdevice now checks for and removes a leading "^" to indicate the owner. This allows "^" to be used to reference the owning device in device callbacks, among other things.
 - 0.128u3            : Aaron Giles changed init, reset, exit and execute interfaces to be passed a const device_config * object. This is a fake object for the moment, but encapsulates the machine pointer and token. Eventually this will be a real device.
 - 0.125              : Aaron Giles added -watchdog to runtest.cmd.
 - 0.124u4            : Aaron Giles added new Windows option -watchdog, which creates a watchdog thread that forcibly kills the application after a certain number of seconds. Primarily intended to be used in regression test runs to handle the occasional hung game.
 - 0.123u4            : Added emu\watchdog.c/h. Zsolt Vasvari moved watchdog processing logic into its own module.
 - 0.123              : Aaron Giles fixed watchdog behavior when not explicitly specified.
 - 0.121u4            : Olivier Galibert added new option -update_in_pause which enables updating the screen bitmap while the game is paused. This is useful for debugging in some scenarios (and gets in the way in others).
 - 0.121u3            : Aaron Giles added an assert to ensure that the sound clear latch value is only set at init time, since its value is not saved.
 - 0.114              : Aaron Giles fixed MAME, when you hard reset a game the last UI message stays on screen when the game is already running. it also causes all UI keys not to work anymore.
 - 0.108u4            : Aaron Giles did a bit of object-orienting the core. All core init functions now take a running_machine parameter. All exit, reset and pause callbacks now require a running_machine parameter to register, and pass in the running_machine when called. Added a running_machine parameter to the following driver callbacks: DRIVER_INIT, MACHINE_START/MACHINE_RESET, SOUND_START/SOUND_RESET, VIDEO_START/VIDEO_RESET/VIDEO_EOF/VIDEO_UPDATE and NVRAM_HANDLER/MEMCARD_HANDLER. For the most part, this didn't affect the code thanks to the macros, apart from cases where direct calls were made.
 - 0.108u3            : Nathan Woods fixed a multithreading race condition at startup.
 - 0.107u1            : BUT fixed Pause single-frame-step.
 - 0.104u5            : Aaron Giles added mame_get_phase to determine which program phase (init/reset/running/exit) the system is in. This is intended primarily for assertions to enforce rules about when certain actions can be taken.
 - 0.104u4            : More initialization/reset/pause cleanup [Aaron Giles]: New function add_pause_callback can be called by other modules to register a callback for whenever MAME is paused/resumed. Converted all existing pause hooks to use the new system. New function add_reset_callback can be called by other modules to register a callback for whenever MAME is reset. Converted all existing reset hooks to use the new system. Removed machine_reset; replaced with mame_schedule_soft_reset. New function mame_schedule_exit to force an exit cleanly from  external events. Removed all the "trying_to_quit" crap from the Windows code. Moved save/restore system out of cpuexec.c into mame.c. Moved core game loop out of cpuexec.c into mame.c. Added hard reset support (complete tear down and re-init).
 - 0.81u3             : Reset fix / timer bug fix [Aaron Giles].
 - 30th December  2003: Erik Sipman submitted a modification to pause MAME automatically when it loses focus.
 - 0.72u1             : Nathan Woods changed render_frame() so that throttle_speed() will also be called when game_is_paused is set. This prevents MAME from busy looping when paused (src\windows\video.c).
 - 18th November  2002: Olivier Galibert ported tilemap naming and pause brightness updates to 0.62.
 - 28th October   2002: Nathan Woods changed MAME to pause when the window is dragged or resized.
 -  1st September 2002: Olivier Galibert made the pause brightness level configurable.
 -  2nd June      2002: Ian Patterson fixed a bug in changing sound volume while paused.
 -  1st June      2001: Nicola Salmoria fixed CPS-2 games from crashing when resetting them.
 - 29th May       2001: Bart Puype submitted a fix for itech8 games crashing when resetting them.
 - 0.33b1             : Increased the watchdog period, to avoid unexpected resets in some MCR games.
 - 0.28               : MachineDriver/init_machine is now a void (*)(void), and the function is called by cpu_run() during a reset. Some games, like Espial and the MCR games, needed that to perform a reset correctly [Nicola Salmoria].



 7.3  TIMER SYSTEM

 - 0.278              : Fixed lockup with as_string and negative attotime (emu\attotime.cpp) [hap].
 - 0.262              : Be more consistent with s32 param (emu\schedule.cpp (timer)) [hap].
 - 0.250              : Rename getter functions to match emu_timer (machine\timer.h) [hap].
 - 0.247              : Make operator+ and operator- constexpr (emu\attotime.h) [AJR].
 - 0.222              : Added to_string() to get a human-readable version of the time (emu\attotime.cpp). Periodic timers are not adjustable, be a little more affirmative about it (machine\timer.h) [O. Galibert]
 - 0.221              : attotime::zero is not a valid arugment for as_hz et al (emu\attotime.h) [AJR].
 - 0.216              : Make many device_execute_interface functions noexcept, including the "information" overrides. This also covers several time-related functions in attotime, running_machine and emu_timer. Added as_khz and as_mhz to emu\attotime.h [AJR].
 - 0.207              : Refactor IRQ timers (machine\timer.h) [AJR].
 - 0.206              : Added device support to configure_scanline (machine\timer.h) [Ryan Holtz].
 - 0.204              : Added as_hz() to emu\attotime.h. Replaced ATTOSECONDS_TO_HZ with as_hz where appropriate. On 0hz "attotime::from_ticks" return "attotime::never" instead of crashing [AJR].
 - 0.202              : A better way of doing scanline timers (machine\timer.h; (MESS) apple2e.cpp) [Ryan Holtz].
 - 0.198              : Use siblingdevice instead of absolute tag lookup. Added screen tag validation for scanline timers (machine\timer.cpp) [AJR].
 - 0.191              : Moved emu\timer.cpp/h to devices\machine\. Removed timer_device from emu.h and move it out of src\emu [AJR].
 - 0.188              : Switched to delegate timers. Frees implementations from having to call timer method. Eliminates risk of ID conflicts with implementations/other interfaces [Vas Crabb].
 - 0.186              : Retired min/max in attotime.h, in favor of std::[min|max] (emu\attotime.h, schedule.cpp) [Nathan Woods].
 - 0.176              : Made emu_timer register_save properly handle timer_expired_delegate(). Removed timer_expired_func and calls using it [Miodrag Milanovic].
 - 0.172              : Added tests\emu\attotime.cpp. Added attotime test for Balrog (scripts\src\tests.lua) [Miodrag Milanovic]. Document attotime (emu\attotime.h) [Balrog].
 - 0.165              : Added seconds() and attoseconds() to attotime and prefixed members with m_. Rewrote code accessing members to use seconds() and attoseconds(). The changes were triggered by a test how GCC __int128_t would perform as the internal representation. This test revealed that the current implementation is still faster [Couriersud].
 - 0.161              : Optimized attotime with assignment constructor and operator implementations (emu\attotime.h). Gives attotime heavy drivers a nice speedup, e.g. (MESS) st_de: 129.29% -> 151.12% (Average speed before and after). Pass attotime as const reference (bus\ieee488\c8050fdc.c/h, machine\hdc9234.c/h and victor9k_fdc.c/h) [Oliver Stoeneberg].
 - 0.155              : Updated most of the remaining static TIMER_CALLBACKs to MEMBERs (audio\jedi.c/h, starwars.c/h, turbo.c/h, includes\midzeus.h, machine\harddriv.c/h, kaneko_calc3.c/h and video\midzeus2.c) [Osso]. Reverted r31185 in video\voodoo.c (Passing of attotime as const references). This fixed emulation hangs in gauntdl and gauntdl24 after initialization [Phil Bennett].
 - 0.154              : Removed legacy timer device callback (emu\timer.h, drivers\harddriv.c, igs011.c, sliver.c, includes\harddriv.h and machine\harddriv.c) [Miodrag Milanovic]. Batch of passing attotime as const reference instead of copy - where possible (emu\bus\ieee488\c2040fdc.c, imagedev\floppy.c, machine\64h156.c, amigafdc.c, fdc_pll.c, wd_fdc.c, wozfdc.c, cpu\h8\h8_sci.c, cpu\sh4\sh4tmu.c, debug\debugcpu.c, debugger.h, device.c, diexec.c, diserial.c, ioport.c, machine\atahle.c, machine\eeprom.c, machine\hd63450.c, machine\laserdsc.c, machine\ldpr8210.c, machine\ldstub.h, machine\ldv1000.c, machine\ldvp931.c, machine\upd765.c, machine\wd17xx.c, schedule.c, sound\262intf.c, sound\3526intf.c, sound\3812intf.c, sound\8950intf.c, sound\fmopl.h, sound\speaker.c, sound\ymf262.h, timer.c, video.c, video\fixfreq.c, video\voodoo.c, mame\audio\n8080.c, mame\drivers\gottlieb.c, mame\machine\cdislave.c and mame\machine\ticket.c) [Oliver Stoeneberg]. Compile-time disable now in M6502 CPU the slow attotime precalculation/caching at start of each timeslice. This precalculation seems to be part of OG's "CPU core template", as all CPU cores written by him do it. It's used to optimize things like onboard serial ports and high-frequency timers; however, the M6502 and its derivatives have neither onboard serial ports nor high-frequency timers, and the precalculation is simply a boat anchor on drivers with 6502-family CPUs and tight interleaving. (MESS) Added MCFG_M6502_DISABLE_DIRECT (address decoding is 100% dynamic, no RAM/ROM banks) to all Commodore 8bit drivers [Alex Jackson].
 - 0.153              : Timers now execute at the end of each timeslice instead of at the start, as they did prior to MAME 0.141u2 (emu\schedule.c). This fixed .INP playback fails (Out of Sync) when paused during recording [Alex Jackson].
 - 0.149u1            : Converted Wave DMA to use cycles to attotime (machine\dc.c) [Angelo Salese]. Added attotime and clock-div forms of set_rateand rename check_for_start to rx_w. attotime from_hz is inverted so multiply (emu\diserial.c). Simplify diserial [Carl].
 - 0.149              : Removes more MAME anonymous timers (drivers\midvunit.c, tubep.c, includes\amiga.h, astrocde.h, blstroid.h, bublbobl.h, cchasm.h, dcheese.h, exidy.h, exidy440.h, gameplan.h, hyhoo.h, lethalj.h, m10.h, m92.h, micro3d.h, midtunit.h, midvunit.h, midyunit.h, nbmj8688.h, nbmj8891.h, nbmj8900.h, nbmj9195.h, niyanpai.h, opwolf.h, pastelg.h, segag80r.h, snes.h, stfight.h, tank8.h, triplhnt.h, tubep.h, vectrex.h, volfied.h, machine\amiga.c, bublbobl.c, micro3d.c, opwolf.c, snes.c, stfight.c, vectrex.c, volfied.c, video\astrocde.c, blstroid.c, cchasm.c, dcheese.c, exidy.c, gameplan.c, hyhoo.c, lethalj.c, m92.c, midtunit.c, midvunit.c, midyunit.c, nbmj8688.c, nbmj8891.c, nbmj8900.c, nbmj9195.c, niyanpai.c, pastelg.c, segag80r.c, tank8.c, triplhnt.c, tubep.c and vectrex.c) [Andrew Gardner].
 - 0.148u5            : Eliminate some of MAME's anonymous timers (drivers\artmagic.c, asterix.c, astinvad.c, asuka.c, boxer.c, capbowl.c, cball.c, cidelsa.c, dec8.c, destroyr.c, esh.c, fgoal.c, firetrk.c, flyball.c, fuukifg2.c, fuukifg3.c, galastrm.c, gaplus.c, gcpinbal.c, gottlieb.c, gpworld.c, groundfx.c, gticlub.c, gunbustr.c, kinst.c, m10.c, mappy.c, megatech.c, metro.c, mgolf.c, mjsister.c, mlanding.c, othunder.c, parodius.c, peplus.c, policetr.c, rabbit.c, rollerg.c, simpsons.c, skullxbo.c, slapshot.c, sprint4.c, taito_b.c, taito_f2.c, taito_f3.c, taito_z.c, tehkanwc.c, thayers.c, thunderx.c, tickee.c, tmnt.c, toaplan2.c, topspeed.c, toypop.c, trucocl.c, tugboat.c, ultratnk.c, undrfire.c, vendetta.c, videopin.c, wgp.c, wolfpack.c, zr107.c and includes\megadriv.h) [Andrew Gardner].
 - 0.148              : Used core clock/attotime functions in 6522 VIA [Curt Coder].
 - 0.147u1            : Introducing TIMER_CALLBACK_MEMBER and modernization part 1/2/3. Made timer_device use delegates (emu\timer.c/h, drivers\midvunit.c, segas24.c, viper.c, machine\balsente.c and megacd.c). Made member calls work (emu\timer.c/h). TIMER_CALLBACK_DEVICE_MEMBER modernization part 1/2. Some manual cleanup (drivers\chinagat.c, cps2.c, ddenlovr.c, eolith.c, eolith16.c, eolithsp.c, galaga.c, mpu4hw.c, saturn.c, vegaeo.c and includes\cps1.h, ddragon.h, dynax.h, eolith.h, eolithsp.h, galaga.h, mpu4.h, stv.h and xevious.c) [Miodrag Milanovic].
 - 0.147              : Fixed debug assert (src\emu\attotime.h) in all/most sets in superchs.c, gunbustr.c, groundfx.c, galastrm.c, taitojc.c, undrfire.c, taito_f3.c and bfm_sc4.c [Phil Bennett].
 - 0.145u4            : Clamp timer->remaining() to 0 if the timer has expired (emu\schedule.c) [Aaron Giles].
 - 0.141u3            : Fixed attotime max() function to not be a copy of min(). Fixes several regressions in the scheduler after the recent attotime object conversion [Aaron Giles].
 - 0.141u2            : Aaron Giles converted attotime to a class, with proper operators. Removed old global functions which are now superceded by the operators and methods on the class. Convert emu_timers to objects. Moved implementation and management of timers into the scheduler. Retain TIMER devices as a separate wrapper in timer.c/h. Rather than using macros which hide generation of a string-ified name for callback functions, the new methods require passing both a function pointer plus a name string. A new macro FUNC() can be used to output both, and another macro MSTUB() can be used to output a stub-wrapped class member as a callback [Aaron Giles]. Aaron Giles added a time() method on the machine, so that machine->time() gives the current emulated time. Added methods to the device_t class that make creating and managing device timers much simpler. Modern devices were updated to use these [Aaron Giles].
 - 0.139u3            : Timers get rescheduled only if enable state has changed (timer.c) [Christophe Jaillet]. Aaron Giles added an integral device_timer_id to device timers. This is a cleaner way to differentiate between multiple timers rather than relying on the pointers. These values are also saved with the timers. Updated the few devices using device timers to leverage this. Added new function device_timer_call_after_resynch() which creates a temporary 0-length timer that calls back through the device's device_timer() method with a given device_timer_id.
 - 0.129              : Phil Bennett correct cpu_attotime_to_clocks() calculation.
 - 0.128u7            : Aaron Giles removed MDRV_INTERLEAVE(x), which specified the minimum scheduling quantum in terms of "frames" (a dubious concept now with multiple screens and changing refresh rates). Replaced it with a new MDRV_QUANTUM_TIME(x) which specifies the minimum scheduling quantum as a time value. Time can be specified as HZ(x), NSEC(x), USEC(x) etc. Updated all drivers to use this, assuming 60 was the frame rate (this is not perfect but should work for almost all cases). Aaron Giles changed MDRV_WATCHDOG_INIT_TIME(x) to automatically prepend UINT64_ATTOTIME_IN_ to the parameter, ensuring there is no improper use of this macro and bringing it in line with the MDRV_QUANTUM_TIME() macro. Updated all callers. Aaron Giles added new MDRV_QUANTUM_PERFECT_CPU(x) to specify that the minimum quantum should be enough to ensure that the specified CPU tag only ever executes a single instruction at a time. This can be used to explicitly require "perfect" synchronization for drivers that have multiple CPUs with shared memory. Turned this on for the arknoid2 driver for now as a test (the interleave on that driver was already very close to perfect anyway).
 - 0.128u6            : Aaron Giles changed attotime_to_ticks/ticks_to_attotime to use UINTs and the eminline functions where possible.
 - 0.128u5            : Aaron Giles changed timer_alloc, timer_set, timer_pulse, timer_call_after_resynch and timer_get_time to pass the machine parameter. Moved timer globals to hang off of the running_machine.
 - 0.128u3            : Aaron Giles added concept of scheduling quanta to the timer system. Also added means of setting the minimum useful scheduling quantum and clamping all quanta to that value. Aaron Giles changed interleave/boost handling to use scheduling quanta instead of timers. Aaron Giles re-inlined core attotime functions. This makes a significant difference when running with high interleaves. Aaron Giles changed core cycle computations to use div_64x32 instead of full 64-bit divides. This involves tossing a few bits of resolution at divide time, but should make no real difference in practice.
 - 0.127u5            : Aaron Giles added generic timer devices, which simply allocate a timer but don't prime it. This is the preferred method for allocating timers and may eventually be the only mechanism for doing so in the future.
 - 0.126u5            : Atari Ace collapsed timer callbacks in some cases to avoid duplicating code. In the case of crystal.c, also refactored two DMA handlers and shuffleed the init/reset code around a bit.
 - 0.126u2            : Aaron Giles added new functions attotime_to_ticks() and ticks_to_attotime() to convert between attotimes and a clock tick at an integral frequency.
 - 0.123u6            : Zsolt Vasvari added a new device type for timers. Where applicable, added a parallel set of timer functions that take a device_config instead of an emu_timer. Added MDRV_TIMER_* macros to define the timers in the machine driver. Implemented both periodic and scanline-based timer variants. Modified Space Encounters and Centipede to make use of this feature. Going forward, this is the preferred way of creating periodic timers.
 - 0.123u1            : Split timer_adjust() into timer_adjust_oneshot() and timer_adjust_periodic(). Updated all call sites [Aaron Giles].
 - 0.121u2            : Aaron Giles unified timer callbacks. All timer callbacks are now passed both a pointer and a parameter. The pointer can only be set at timer allocation time; the parameter can be changed whenever the timer is adjusted. Removed most explicit uses of timer_*_ptr functions in favor of the more generic routines.
 - 0.121u1            : Aaron Giles fixed attotime routines to use unsigned math for multiply/divide, solving problems with some games which errantly passed in -1 for the factor. The new behavior matches the original behavior.
 - 0.121              : Added src\emu\attotime.c/h. Cleaned up timer interfaces. Created new module attotime which manages a new structure type attotime, equivalent to the old mame_time. All time math functions are now implemented in attotime and have been removed from timer.h. The following search/replace over the code has been made: mame_time -> attotime; subseconds_t -> attoseconds_t; time_zero -> attotime_zero; time_never -> attotime_never; ; make_mame_make -> attotime_make; mame_time_to_subseconds-> attotime_to_attoseconds; mame_time_to_double -> attotime_to_double; double_to_mame_time -> double_to_attotime; add_mame_times -> attotime_add; add_subseconds_to_mame_time -> attotime_add_subseconds; sub_mame_times -> attotime_sub; sub_subseconds_from_mame_time -> attotime_sub_subseconds; scale_up_mame_time -> attotime_mul; scale_down_mame_time -> attotime_div; compare_mame_times -> attotime_compare; SUBSECONDS_TO_DOUBLE -> ATTOSECONDS_TO_DOUBLE; DOUBLE_TO_SUBSECONDS -> DOUBLE_TO_ATTOSECONDS; USEC_TO_SUBSECONDS -> ATTOSECONDS_IN_USEC; SUBSECONDS_TO_HZ -> ATTOSECONDS_TO_HZ; HZ_TO_SUBSECONDS -> HZ_TO_ATTOSECONDS; MAME_TIME_IN_HZ -> ATTOTIME_IN_HZ; MAME_TIME_IN_SEC -> ATTOTIME_IN_SEC; MAME_TIME_IN_MSEC -> ATTOTIME_IN_MSEC; MAME_TIME_IN_USEC -> ATTOTIME_IN_USEC; MAME_TIME_IN_NSEC -> ATTOTIME_IN_NSEC; MAME_TIME_TO_CYCLES -> ATTOTIME_TO_CYCLES; MAME_TIME_IN_CYCLES -> ATTOTIME_IN_CYCLES. In addition, all the mame_timer_* functions have been renamed back to their original names timer_*, so it is timer_set() instead of mame_timer_set() once again. The mame_timer object itself has been renamed to emu_timer.
 - 0.117u1            : Zsolt Vasvari added new function timer_call_after_resynch(), which effectively sets a zero-duration timer for resynchronization. Replaced instances of zero-duration timers in the code with this more descriptive call. Defined new macro TIMER_CALLBACK, which should be used to wrap timer callbacks. Added a running_machine * parameter to timer callbacks. Updated all existing timer callbacks to use the new macro.
 - 0.117              : Aaron Giles improved accuracy of mame_timer_scale_up.
 - 0.116u4            : Zsolt Vasvari changed all drivers to use the mame_timer_* calls. Deprecated the old double-based timer calls.
 - 0.116u2            : Atari Ace changed a number of MAME timer objects from void * to mame_timer *.
 - 0.114u1            : Aaron Giles updated video timing in the Sega System 16, Hang On, Out Run and X-Board games according to measurements from the boards.
 - 0.113u3            : Zsolt Vasvari updated some more drivers updated to the new video timing.
 - 0.113u2            : Aaron Giles changed refresh and VBLANK timing parameters throughout the system to be specified in subseconds_t instead of as floating point frequencies.
 - 0.108u1            : Aaron Giles fixed the new scanline timing functions to compute things correctly and without using unnecessary timers.
 - 0.101u1            : Changed timer_alloc_ptr-style timers so that the pointer parameter is supplied at allocation time and is not changeable. This makes these timers more easily supported in save states. Deferred state loading until all anonymous timers have cleared. This fixes issues where the timers would fire after the load and would clobber data that was just loaded [Aaron Giles].
 -  3rd April     2004: Aaron Giles fixed the hard lockups that occurred in games that use scanline-based timers.
 - 0.80u2             : Aaron Giles fixes various timer bugs and correct some problems with SlySpy.
 - 18th March     2004: Aaron Giles fixed a potentially problematic timer bug pointed out by Raphael Nabet.
 - 15th March     2004: Aaron Giles fixed a interrupt queueing problem that started happening with the new interrupt/timer system.
 - 0.79u4             : Aaron Giles fixed a problem when resetting various games caused by the timer updates.
 - 0.79u2             : Timer system update [Aaron Giles]: The timer system is now integer-based instead of floating-point based. It requires 64-bit ints. I've defined a new type 'mame_time' which is a 96-bit time value. There are 32 bits for counting full seconds, and 64 bits for counting subseconds. This type is used extensively in the core timer system and the CPU scheduler. The accuracy of the new system is down to 1 attosecond (10^-18 seconds). This may seem excessive, but for a 100MHz CPU, each clock cycle is 10^10 attoseconds. That works nicely because 100MHz divides evenly. For a 96MHz CPU, each clock cycle is 1.041666667 * 10^10 attoseconds. Rounding, we lose 1/3 of an attosecond per cycle in error. Multiply that error by 96000000 and you end up with an error of 32000000 attoseconds. Fortunately, that's only 0.032ns, but if I had much less accuracy than this, the errors would start to add up in a more significant way. All the existing APIs are still around, and doubles can still be passed as arguments. But they are all immediately connverted to 'mame_time' values for processing. The old system had some drifting errors due to FP rounding which are gone now.
 - 20th February  2004: Aaron Giles - The second core change I just submitted last night was a change to make the timer system use integers internally instead of floating point values. This has been on my to-do list for years, and I finally got the courage up to potentially break everything once again with a timer change. Fortunately, my limited testing indicates that things aren't really broken for the most part (except Hard Drivin', which always breaks anytime I change anything, and which I've already fixed). The main reason for using integers is accuracy. With floating point, the more time that accumulated, the more error we would see in the low bits. This was leading to some timing drift and other subtle errors. The new code keeps track of everything down to the nearest attosecond, which, by my calculations, only loses 1 cycle on a 96MHz CPU once every 5 minutes. And that's a case I manufactured to deliberately expose an error.
 - 0.75u1             : Aaron Giles attempted to fix remaining timer system related bugs.
 - 0.75               : Aaron Giles fixed some bugs introduced with the timer system changes a while back. Now uses the active callback as a base time when adjusting timers outside of a CPU context.
 - 12th October   2003: Olivier Galibert and Aaron Giles fixed more bugs in the timer system and SH-2 CPU core.
 - 10th October   2003: Aaron Giles sent in another update to the timer system, fixing Exterminator and the Atari polygon games.
 - 0.70u5             : Nathan Woods changes timers so that they are now 'mame_timer *' instead of 'void *'. mame_timer is an opaque structure, similar to mame_file in fileio.h. I didn't update any code using timers yet; it doesn't seem to me that there isn't a rush and since they used 'void *' before, everything compiles just fine. I hope noone objects to this one.
 - 0.69b              : Aaron Giles fixed a problem which caused sound to break in games using a YM2610 using the new timer system.
 - 0.69a              : A number of changes to the timer system [Aaron Giles].
 - 30th May       2003: Aaron Giles sent in the new timer code that cleans up the core significantly and allows for perfect synchronization if needed.
 - 25th April     2003: Stefan Jokisch sent in another bug fix to cycle counting in the timer system.
 - 23rd April     2003: Stefan Jokisch fixed a bug in the cycle counting that occurred when a new timer was fired within the current time slice.
 - 12th May       2003: Aaron Giles sent in an update to the timer system that moves the CPU scheduling from the timer system to the CPU execution engine, causing a lot of problems in different drivers so it'll need a bit more work before it gets included.
 -  3rd March     2003: Aaron Giles fixed a subtle bug in the timer functions that could cause a one-shot timer to get re-fired sometimes.
 - 27th November  2002: Aaron Giles fixed a bug in scanline timing that occurred if a game changed the visible area dynamically.
 - 19th March     2002: Aaron Giles improved the idle timeslice releasing by using more accurate timers.
 - 17th March     2002: Aaron Giles added support for idle timeslice releasing, which will avoid using 100% of the processing power with the less demanding games.
 - 0.58               : Two new functions have been added to the timer system. timer_create() creates a new "permanent" timer, and timer_adjust() adjusts the scheduling of that timer. This is now the only way to dynamically manipulate a timer. The old functions timer_set() and timer_pulse() are still around, but they no longer return a handle to the timer they create. Timers created with timer_create() should be created at initialization time, not dynamically. Timers also now participate in the automatic resource tracking, so there is no need to explicitly dispose of them. All existing drivers have been updated with the necessary changes.
 - 0.31               : Added timer.c/h. New timer-based event scheduler. This is a major change which is used throughout the code. See timer.c and cpuintrf.c to get an idea of the many things it does. One of the many benefits this has is that dip switches in Do's Castle now work, but there's an endless list of things affected [Aaron Giles].



 7.4  NETWORK

 - 0.281              : Added packet logging helper (emu\dinetwork.cpp) [Patrick Mackinlay].
 - 0.277              : Added osd\modules\netdev\netdev_common.cpp/h. Removed osd\osdnet.cpp/h. Removed mac address filter from osd(emu\dinetwork.cpp, interface\nethandler.cpp, netdev\pcap.cpp and netdev\taptun.cpp) [Patrick Mackinlay]. Got rid of the gross globals and functions for manipulating them in the network modules (emu\dinetwork.cpp, ui\miscmenu.cpp, interface\nethandler.h, netdev\netdev_module.h, netdev\pcap.cpp, netdev\taptun.cpp and osd\osdepend.h). Don't return a pointer to a buffer on the stack that's about to be unwound (osd\modules\netdev\pcap.cpp) [Vas Crabb].
 - 0.267              : Got rid of some sprintf and strcat (generates warnings on macOS) (emu\network.cpp). Fixed various warnings (netdev\taptun.cpp) [Vas Crabb].
 - 0.264              : Cleaned up network interface a little more (netdev\pcap.cpp, netdev\taptun.cpp) [Vas Crabb]. Removed dependency from OSD network device to libemu. This allows save states to be created and loaded when network interfaces are present. device_network_interface may need some more attention to get save states taken while receiving a packet to work properly (osd\osdnet.cpp) [Vas Crabb].
 - 0.259              : Changed parameter type for device_network_interface::set_mac from char * to u8 * [AJR].
 - 0.255              : Fixed adapter detection on windows for newer versions of taptun driver (3rdparty\tap-windows6\tap-windows.h and netdev\taptun.cpp) [Patrick Mackinlay].
 - 0.248              : OSD/network interface cleanup: Moved osd_midi_device from osdcore.h to osdepend.h. Moved osd_list_network_adapters from osdcore.h to osdnet.h (was already defineduniquely in osdnet.cpp). Moved #include <cstdarg> from osdcore.h to emu.h. Removed dinetwork.h from emu.h [AJR].
 - 0.244              : Added MTU paramter and removed unnecessary floating point calculations (emu\dinetwork.cpp) [Ted Green].
 - 0.223              : Set default network device to be none to avoid inadvertantly spamming a network (emu\dinetwork.cpp) [Ted Green]. Fixed PCAP builds [xray-sky, R. Stricklin].
 - 0.232              : Don't transmit FCS (emu\dinetwork.cpp) [Patrick Mackinlay].
 - 0.220              : Removed 3rdparty\winpcap\*. Removed winpcap and cleaned up network module selection. The pcap.h header itself has the problematic original BSD license, including the obnoxious advertising clause. Using tap/tun networking on Windows provides a much better experience, so the extra setup is worth it. This patch also allows you to enable pcap on platforms where it's disabled by default with USE_PCAP=1 if you really want to use it [Vas Crabb].
 - 0.211              : Added loopback control (emu\dinetwork.cpp) [AJR].
 - 0.206              : Always call send_complete_cb, even if no adapter is present (emu\dinetwork.cpp) [Ted Green].
 - 0.204              : Avoid crashing (emu\dinetwork.cpp). Padding and fcs on Linux (netdev\taptun.cpp) [Patrick Mackinlay].
 - 0.202              : Changes to make (MESS) InterPro networking work on Windows with the TAP-Windows6 driver: Pad short Ethernet frames and append FCS (Windows-only until Linux taptun behaviour is verified) (netdev\taptun.cpp). Fixed bugs in carry flag handling, prefer sign bit for tests (clipper). Introduced somewhat realistic delays into network transmit and receive paths. This version works by adding functions to device_network_interface which enable a device to be informed when the transmit or receive completes. The delay is only crudely approximated based on the specified bandwidth and the number of bytes being transmitted, but it should be good enough in practice. Existing drivers should not be impacted by these changes; overriding the new functions (and no longer overriding recv_cb) is necessary to obtain the new behaviour. Added transmit/receive delay timers, handlers and logic (emu\dinetwork.cpp). Added the ability to start the receive timer (osd\osdnet.cpp) [Patrick Mackinlay].
 - 0.201              : Added 3rdparty\tap-windows6\tap-windows.h and license.txt. Extended the existing TUN/TAP OSD module (modules\netdev\taptun.cpp) to support Windows through the TAP-Windows6 driver (https://github.com/OpenVPN/tap-windows6) [Patrick Mackinlay].
 - 0.199              : Prevent segfault at stop and when selecting device from menu (emu\dinetwork.cpp and osd\osdnet.cpp) [Carl].
 - 0.198              : Output system changes: Cleaned up syntax for network provider. Added pause and savestate commands to both network and win32 providers (output\network.cpp, output_module.h and win32_output.cpp) [headkaze, R. Belmont].
 - 0.190              : Bug fix for network menu (ui\miscmenu.cpp) [Patrick Mackinlay].
 - 0.188              : Fleshed out network output provider so it has the same capability as legacy Win32. Clients: Connect to TCP port 8000. Messages will be of the form "verb = value\1"; if your client is busy when MAME is spamming, you may get multiple messages glued together by \1 separators (\1 was chosen because it's neutral on Win32/Mac/Linux). You will get a "hello = 1" message upon connection to MAME, and a "mamerun = 0" message when MAME shuts down. You may send "send_id = n" to MAME to get IDs where n=0 means ROM set name of current game, 1-? = output node names. MAME will reply "req_id = string\1"; this is currently the only case where a string will be returned instead of an integer value. A working example POSIX client will be released soon (output\network.cpp) [R. Belmont].
 - 0.175              : Fixed network output to include all data (output\network.cpp) [headkaze].
 - 0.173              : Added osd\modules\output\network.cpp. Added skeleton for network output [Miodrag Milanovic].
 - 0.172              : Fixed error and crash in netdev\pcap.cpp [Carl].
 - 0.159              : Added osd\modules\netdev\pcap.c, netdev_module.h and none.c. Removed windows\netdev.c, sdl\netdev.c and netdev_pcap.c/h and netdev_tap.h. Converted pcap and taptun network code into modules. Added a netdev provider "none" as a fallback doing nothing [Couriersud].
 - 0.158              : Changed pcap warnings to be verbose (windows\netdev_pcap.c) [Couriersud].
 - 0.156              : USE_NETWORK Ethernet emulation is now enabled by default as per the roadmap. Reverse the networking polarity in the OSD makefiles [R. Belmont]. Fix for network compile [Robbbert]. Restored USE_NETWORK checks [Oliver Stoeneberg]. Added -listnetwork option to list available network adapters [Miodrag Milanovic].
 - 0.154              : Removed windows\netdev.h.
 - 0.149u1            : Don't crash if pcap can't find a network interface's name (osd\osdnet.c) [Richard L. Hamilton].
 - 0.148u2            : Updated the traditional missed file (src\osd\osdnet.c) [R. Belmont]. Removed mcast_chk and check for multicast in recv (emu\dinetwork.c, dp8390.c and mb8795.c). Set non-block mode for winpcap (windows\netdev_pcap.c) [Carl].
 - 0.148u1            : Don't crash on exit when wpcap.dll is unloaded before pcap_close is called (windows\netdev_pcap.c) [Carl].
 - 0.144u7            : Fixed pcap network device search [Carl].
 - 0.143u6            : Added osd\windows\netdev.c/h, netdev_pcap.c/h. and emu\dinetwork.c/h.
 - 0.144u3            : Added emu\network.c/h.
 - 0.84               : Removed src\network.c/h.
 - 0.35b9             : Added src\network.c/h.



 8.   USER INTERFACE (UI) - ON SCREEN DISPLAY (OSD) - CONFIGURATION

 - 0.285              : Added -[no]drc_rwx option to allow forcing W^X mode when writable executable pages are permitted (emu\emuopts.cpp). Shuffled numeric option conversions: Moved float/integer conversions into the option entries themselves. Fixed another bug where float values would be converted to strings with the global local, but converted from strings using the "classic" locale (util\options.cpp). Use "classic" locale for numeric conversions, suppor UI Clear to set default. Note that setting the default just sets the option to its default value at "command line" priority - the options system doesn't support peeling off a layer (ui\submenu.cpp) [Vas Crabb]. Start converting "usage" info and comments into new "required_ram" and "required_os" info (Software List; ui\utils.cpp) [AJR].
 - 0.284              : Added speaker channels to gameinfo panel (ui\info.cpp) [hap].
 - 0.281              : Hold ALT to INC/DEC setting by 100 (ui\analogipt.cpp) [hap].
 - 0.279              : Added shift/ctrl/alt modifier keys to some controls (ui\viewgfx.cpp) [hap].
 - 0.278              : Added ui\audio_effect_eq.cpp/h, ui\audio_effect_filter.cpp/h, ui\audioeffects.cpp/h and ui\audiomix.cpp/h. New sound infrastructure. Don't show the audio menus when there are no audio devices (ui\mainmenu.cpp). Added a compressor. May need some tuning (ui\audio_effect_compressor.cpp) [O. Galibert]. Root device is special for non-working message (ui\info.cpp). Fixed layout issue when DIP switch bank with the most switches has the shortest name and reduced space between name and switches a bit (ui\confswitch.cpp). Fixed some non-bug "warnings" going missing (ui\info.cpp). Sound sliders: Press Del to set to 0db like before (mute is alt+left). Multiply internal value by 10 to allow fine grained slider controls (left/right while holding Shift) (ui\ui.cpp). Use fat triangles instead of arrows for L/R indicators. More control over db adjustment (like with sliders, hold shift for +/- 0.1, hold ctrl for +/- 10) (ui\audiomix.cpp). Treat incorrect ROM content as a severe warning (ui\info.cpp). Added note about file handle buffering (file\winfile.cpp). Use terse messages for bad media. Making these messages longer hasn't reduced support burden. Adding the version will just perpetuate the myth that you need to redownload all your ROMs for every release (ui\selmenu.cpp and ui\imgcntrl.cpp). Allow info screens to be dismissed by mouse clicks or touches (ui\ui.cpp). Hiding the menu should preserve state. This is a design choice (ui\sliders.cpp) [Vas Crabb]. Removed master volume slider if driver has no sound (ui\mainmenu.cpp and ui\ui.cpp). Changed mimimum speed setting from 0.01 to 0.1 (mame would crash with very low value, and besides, video throttle still fails below 0.1) (emu\emuopts.cpp). Added speed slider when cheats are enabled (ui\ui.cpp). Added MAME version info to the 'missing roms' error msg (ui\imgcntrl.cpp and ui\selmenu.cpp). Use UI text/bg color for osd text popups (ui\ui.cpp). Finer control over screen refresh slider, correction to shift+alt incval (although after this commit, nothing has an incval > 100). Added separator after osd sliders. Make sure menu won't be hidden when re-entering it (POLA) (ui\sliders.cpp) [hap].
 - 0.276              : Added newline at end of -version output (mame\clifront.cpp) [Vas Crabb].
 - 0.274              : Don't rescale icons that are close to the target size (ui\selmenu.cpp). Use a smoother, symmetrical highlight texture (ui\widgets.cpp) [Vas Crabb]. Make inc/dec slider control consistent with other sliders where holding ctrl = 'big steps' (ui\analogipt.cpp) [hap].
 - 0.273              : Allow icons to be scaled up as well as down (ui\selmenu.cpp) [jflatt]. Make failure to mount required media fatal if file manager can't be displayed (ui\ui.cpp). Show warnings in a box above the menu so they can be wrapped rather than being truncated to the point of being useless (ui\filemngr.cpp). Show warnings at the bottom (ui\filemngr.cpp) [Vas Crabb]. Fixed calculation mistake that resulted in NaNs (Not a Number) being passed to the renderer, causing assertion failures in debug builds (ui\menu.cpp) [AJR].
 - 0.272              : Fixed sorting. Clones should match parent on list name and short name, instance name of first part is irrelevant. List names actually need to be compared (ui\selsoft.cpp). Only check for hold/drag conversion on losing pointer if it hasn't already happened (sdl\window.cpp and windows\window.cpp) [Vas Crabb]. Fixed palette viewer if indirect pen exists (ui\viewgfx.cpp) [cam900].
 - 0.271              : Allow pressing UI Clear to restore default pointer timeout settings (ui\ui.cpp and ui\videoopt.cpp). Don't ignore character input when no pointer is active (ui\selmenu.cpp). Handle menus resetting items from custom pointer handlers better (ui\menu.cpp) [Vas Crabb].
 - 0.269              : UI pointer options: Set inc/dec to 1s (hold shift for shorter 0.1s). Allow 0.0s hide delay to disable pointer. Warning message if delay is set to 0.0s (ui\videoopt.cpp). Be consistent with custom_render passed variable names (ui\*). Changed driver status "Overall:" to "Status:" (ui\selmenu.cpp and ui\simpleselgame.cpp) [hap]. Avoid floating point equality comparison. Fixes pointer input not working on menus at some window sizes in 32-bit x86 builds (ui\menu.cpp) [Vas Crabb].
 - 0.268              : Do an extra item reset the next time through the event loop after making a change. Updated DIP switch and configuration field values aren't seen in the port value until the next I/O port manager frame update, and hence enable state won't be seen until then (ui\confswitch.cpp). Dismiss error messages on pressing left or right (ui\selmenu.cpp) [Vas Crabb].
 - 0.267              : Fixed out-of-bounds access when no primary items are visible, fixes GitHub #12429 (SIGSEGV crash on MAME4droid new support for touch screens). Also fixed separator being highlighted as though it were selectable. Ensure WM_MOUSE* to WM_POINTER* event translation is always disabled (osd\windows\window.cpp) [Vas Crabb].
 - 0.266              : Update slider list on demand rather than on frame updated. Fixes cycling through BGFX chain effects with tilde menu crashes (osd\mac\osdmac.h+window.cpp, osd\modules\lib\osdobj_common.cpp+osdobj_common.h, osd\sdl\osdsdl.h+window.cpp and osd\windows\window.cpp/h). Don't rebuild menu just to update one item. Fixes mouse input in Tape Control menu doesn't work. Also automatically rebuild if a script or something changes media underneath. Ensure device monitored for media change is up-to-date (ui\tapectrl.cpp). Fixed issue with focus rotation when filter matches no items (ui\selmenu.cpp) [Vas Crabb].
 - 0.265              : Allow the UI handler to control pointer display (ui\ui.cpp). Added mouse/touch and more keys for navigating field state list (ui\analogipt.cpp). Use vertical swipe to scroll and horizontal swipe to adjust. Draw after processing input - greatly improves responsiveness. Ignore keyboard/gamepad input during pointer actions (ui\menu.cpp). Made left/right info pane arrows repeat when held. Use middle click to move keyboard focus. Let filter list scroll if it's too tall, and use a bit of horizontal padding. Improved divider sizing (ui\selmenu.cpp). Don't allow clicks to pass through the confirm deletion prompt to the menu (ui\state.cpp). Fixed error message display and graphics/sound status not showing. Allow tap/click to dismiss error message (ui\simpleselgame.cpp). Show UI for choice filters when there are no choices - it's less confusing (ui\utils.cpp). Handle mouse wheel units properly (ui\menu.cpp and ui\selmenu.cpp). Made pointer activity timeout configurable (ui\ui.cpp and ui\videoopt.cpp). Hold Ctrl to jump to the next one-second interval for pointer timeout (ui\videoopt.cpp). Fixed clickable artwork, when mouse click stays active when cursor leaves window with button held down [Vas Crabb]. Force left-align for view list. Use empty 'radiobuttons' to indicate current view (ui\videoopt.cpp) (ui/videoopt.cpp) [hap].
 - 0.263              : Swap columns when sorted by shortname. Added UI header. Don't add switch item ordering menu entry when there's only 1 swlist item (ui\swlist.cpp). Readjust visible width if heading width exceeds that of the menu (ui\menu.cpp). Added quick save/load state shortcut, default key undecided (emu\inpttype.h and ui\ui.cpp). OSD SDL default keys: Removed ctrl-blocks on F3 and F4 and moved OpenGL filter from LCTRL+F5 to LALT+F10. Moved prescale keys from CTRL+F6/F7 to ALT+F8/F9 (sdl\osdsdl.cpp). Don't indicate max value for SDL modify_prescale (mac\window.cpp and sdl\window.cpp). OSD Windows default keys: Moved post processing key from LCTRL+LALT+F5 to LALT+F10 (input\input_windows.cpp). MAME default keys: Moved rewind step from SHIFT+tilde to SHIFT+F4, moved cheat from SHIFT+F6 to SHIFT+F8 and moved quick save/load from (none) to SHIFT+F6/F7 (emu\inpttype.ipp) [hap]. Use forwarding header (#include "utilfwd.h") (util\options.h) [AJR]. Default UI keys cleanup: Pause moved from P to F5. Step single frame moved from Shift-P to Shift-F5. Create save state moved from Shift-F7 to F6. Toggle cheats moved from F6 to Shift-F6 (emu\inpttype.ipp) [hap, R. Belmont]. Fixed OSD interaction with updated default keys (emu\inpttype.ipp, input\input_windows.cpp and sdl\osdsdl.cpp) [R. Belmont]. Show prescale popup when it hasn't changed due to hitting the limit. This makes it easier to see that you've hit the limit and MAME isn't just ignoring your keystrokes (mac/window.cpp and sdl/window.cpp). Restored tabulation (emu\inpttype.ipp) [Vas Crabb].
 - 0.262              : Update file manager and media image information menus immediately on media image changes (ui\filemngr.cpp and ui\info.cpp). Return index of added item from item_append (ui\menu.cpp). Miscellaneous cleanup (ui\icorender.cpp/h). Fixed misleading error messages from -verifysoftware (mame\clifront.cpp) [Vas Crabb].
 - 0.261              : Refactor probably-unsafe code referencing temporary object (ui\menu.h) [AJR].
 - 0.259              : Added configurable speaker panning. Set pan range to -1 to 1 (emu\speaker.cpp). Show channel volume in percentage and increase maximum to 400% (ui\ui.cpp) [hap].
 - 0.258              : Always leave a space between option and description in usage messages (util\options.cpp). Get decimal separator from C++ locale. Also random cleanup (ui\info.cpp). Added a source file filter for system selection menu (ui\utils.cpp). Show system source file in general info (ui\selmenu.cpp). Get decimal separator from C++ locale (ui\devopt.cpp). Replaced imprecise "driver" with "source file" (ui\info.cpp and ui\simpleselgame.cpp) [Vas Crabb]. Swap notworking/mechanical warnings, only add initial \n if there were warnings before it. Added \n before 'BTANB' warning strings (ui\info.cpp) [hap].
 - 0.255              : Added ui\prscntrl.cpp/h. Don't use facets of destructed locales (mame\ui\*). For an empty media device, look for another device with a mounted software item that has compatible parts before falling back to the file manager. This is useful when mounting a multi-part item via the menus, or for a system like the X68000 with multiple drives where the boot disk remains mounted but another application disk is automatically ejected when you're prompted for the next disk (ui\filemngr.cpp). Don't assume mounted images are always from software lists and take the first image mounted from a software list rather than the last (ui\datmenu.cpp). Fixes MAME freezes when inserted an external rom via the File Manager and afterwards you select View External DAT View [Vas Crabb]. Fixed file menu enable (ui\mainmenu.cpp) [O. Galibert].
 - 0.254              : Create single-threaded COM apartment on main thread (osd\windows\winmain.cpp). Changed -listbios to work more like -listslots, showing all BIOS options in a system (mame\clifront.cpp) [Vas Crabb].
 - 0.253              : Don't pump events when reading inputs. This was a drain on performance. If anything is trying to poll inputs in a loop, it needs to call input_update() to ensure it gets up-to-date state. Cleaner way of dealing with input updates. Updated accumulating relative inputs exactly once per frame. This fixes "amplification" effects that would happen if the frame rate rose above 100 Hz (whether by unthrottling or otherwise). Synchronise with wall clock any time inputs are read. Not doing this has weird effects on relative inputs with frame skipping and contributes to unresponsiveness of menus. Reduced visual latency for mouse movement on menus when paused or skipping frames. The rest of the code changes to menus won't provide benefits until draw can happen after event handling. Fixes -throttle forgotten with high -frameskip. Moved some windows-specific stuff into osd\windows\window.cpp/h. Cleaned out more leftover crud and removed debug printfs (ui\ui.cpp). Don't pass IPT_UI_BACK event to the implementation when dismissing the menu (ui\menu.cpp). Honour UI enable for machines without keyboards (ui\ui.cpp). Moved the UI active flag from the machine to the UI manager (ui\ui.cpp) [Vas Crabb]. Do not raise fatal error on -video auto -videodriver wayland (osd\sdl\osdsdl.cpp) [Julian Sikorski].
 - 0.252              : Give menus an opportunity to recompute metrics on window resize. Also reworked calculation of menu geometry in general and limited width of left panel on system/software selection menus. Fixes images in the right panel and icons on the system/software selection menus not being scaled correctly when the window is resized. Fixes thumbnail preview is blurry on first load. Fixes bad font size selection at low resolutions when using bitmap fonts like uismall.bdf (GitHub #7105 = UI font not readable in native resolution on CRT). Fixes collapse/expand arrows on left/right panels of system/softwre selection menus getting bigger if the window is made narrower. More UI cleanup: Got rid of more UI globals. Cache more metrics in system/software selection menus. Don't lose a BDF font specified on the command line when changing font size via the UI. For win32 debugger, behave as though most recent history item was just entered when restoring session state. Allow menus to set required space above and below menu when metrics change. Fixes the initial bad layout on the system selecton menu, or bad layout after resizing windows [frontend\mame\ui\*] [Vas Crabb]. Added -listbios command to list alternate BIOSes for drivers and devices (frontend\mame\clifront.cpp, commandline\commandline-all.rst and commandline-index.rst) [AJR].
 - 0.251              : Load INI files for the 'empty' driver that runs under the system selection menu (frontend\mame\mame.cpp and mameopts.cpp). Fixed overridden default option values from OSD (util\options.cpp). Rationalised right panel behaviour: Removed the "default" state for the image tab where it would show different things for different types of machine - it just confused users. Remember the selected tab and image in the right panel. State for system selection menu is remembered across sessions. Last used state for software selection menus is remembered across sessions. Within a session, state is remembered separately for recently selected machines, similarly to the way filter selection is remembered. Fixed some focus order issues in the software selection menu (mame\ui\*). Fixed issue when copying options that don't carry values (util\options.cpp). Got rid of the check for "arcade" systems - it broke managing favourites for the slotted Neo Geo (ui\inifile.cpp) [Vas Crabb]. Don't magically substitute environment variables when opening files (osd\modules\file\posixdir.cpp, posixfile.cpp, winfile.cpp and winrtfile.cpp). Added option types for single and multiple paths. Substitute environment variables in values from defaults and INI files (util\options.cpp). Removed hard-coded list of multi-path options (ui\dirmenu.cpp) [Nathan Woods]. Work around reevaluate_default_card_software trying to purge XXX_default values. Reword some comments (emu\emuopts.cpp). Clear BIOS option setting when reloading empty pseudo-driver to prevent spurious ROM loading errors for this and other drivers (frontend\mame\mame.cpp) [AJR].
 - 0.250              : Fixed display of software favourites (ui\selgame.cpp) [Vas Crabb].
 - 0.249              : Reword mechanical "cannot be emulated" to "cannot be emulated accurately" as often times we do crudely emulate mechanical elements (ui\info.cpp) [hap]. Added support for shows localised system name in Favorites (ui\selgame.cpp) [K2-git].
 - 0.248              : Added an option to copy input device IDs to the relevant menus. Added an item for setting the software lists files path (-hashpath) to the folder setup menu. Allow pasting text from clipboard in most places that allow typing (searching, entering filenames and entering barcodes). Changed the software selection menu heading to be a bit less misleading. Made barcode menu less eager to rebuild itself unnecessarily and removed some confusing and apparently pointless code. Added some functionality to OSD and cleaned up a little: Added a function for copying text to the clipboard. Moved function for converting Windows error codes to standard error conditions to winutil.cpp so it can be used from more places. Removed duplicate declaration of osd_get_clipboard_text and made the function noexcept (including fixing implementations). Made macOS implementation of osd_get_clipboard_text skip the encoding conversion if it finds UTF-8 text first. Changed the default -uimodekey setting so it doesn't lose the "not shift" that stops the default from interfering with UI paste. Made error messages more detailed when opening a configuration file fails and bumped error messages to warning level (emu\config.cpp). Preserve elements with no registered handlers in default and system configuation files (emu\config.cpp) [Vas Crabb].
 - 0.247              : Swallow save state slot key/button (ui\state.cpp). Base "no sound" check on speaker devices. Currently the speaker device is the only way sound can get to the OSD layer, so its presence or absence determines whether the emulated system is capabale of producing sound. A few systems use chips with sound capability for other purposes (typically I/O or video) while leaving the sound outputs disconnected. These systems should display the notice about the absence of sound output (emu\validity.cpp and ui\info.cpp) [Vas Crabb].
 - 0.246              : Clear up std::vector asserts triggered when menu items is empty (ui\selgame.cpp and selsoft.cpp) [jflatt].
 - 0.245              : Added osd\interface\inputcode.h, inputman.h, inputseq.cpp/h, ui\inputdevices.cpp/h, ui\inputopts.cpp/h and ui\inputtoggle.cpp/h. Cleaned up Windows API usage a little. Bumped target windows version to 6.0.0 (Vista). Use WRL COM pointers to manage some COM-like objects. Cleaned up includes in Windows input modules. Switched to Common Item Dialogs in Windows debugger. Replaced disabled code that never really worked with a TODO comment. Added menus to fill a couple of gaps and improved consistency. Added menus for controlling toggle inputs, and showing recognised input devices and control state. Moved input menu options off main menu to a submenu, as there are a lot of them now. Moved menu heading drawing into base class, added headings to more menus, and made headings more consistent with the menu items used to reach them. Also made terminology more consistent. Changed the default names for buttons and hat switches/D-pads to use 1-based numbering. DirectInput still returns 0-based button numbers for some devices. Started adding documentation for menus, to hopefully help people find menus they remember seeing but can't recall how to access. For translators, this makes terminology more consistent. In particular: * "Settings" is preferred over "configuration" in a number of places, as the latter can be construed as referring specifically to settings stored in .cfg files in the cfg_directory folder. Also, references to saving machine configuration could be interpreted as relating to the settings on the "Machine Configuration" menu. * The controls on host input devices (e.g. keys, buttons, joystick axes) are referred to as "controls", while emulated inputs are referred to as "inputs". * The menus for assigning host controls to emulated inputs are called "input assignments" menus to distinguish them from other input settings menus. * Combinations of controls that can be assigned to emulated inputs are referred to as "combinations" rather than "sequences". * The potentially confusing term "ROM set" has been removed altogether. Use "short name" to refer to a device or system's identifier. * "System" is used in almost places to refer to a complete, runnable system rather than "Machine". * "Driver" is now only used to refer to source files where systems or devices are defined - it is no longer used to refer to individual systems. * A few more menus have message context for the messages. This makes it a bit easier to guess where the messages are used. It also means you can use different translations in different places if necessary (e.g. if the same English text should be translated differently as an item in one menu and as a heading in another). Put the system-specific items on the input settings menu together and fixed the crosshair visibility settings. Got rid of some of the OSD input modules dependence on concrete input classes from emu [Vas Crabb]. Removed legacy OPTION_* option type constants. These constants were polluting the global namespace (util\options.h) [Nathan Woods]. Avoid assert in std::vector when no items in menu (ui\selgame.cpp) [jflatt].
 - 0.244              : Do not lose slot card name when setting slot card BIOS (emu\emuopts.cpp) [Miodrag Milanovic]. 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). Use unordered map for session data, to tempt fate with toolchain bugs (ui\ui.h) [Vas Crabb].
 - 0.243              : Make a couple of overloads const (osd\modules\osdhelper.h) [AJR]. Respect clicks on headings (ui\datmenu.cpp) [Vas Crabb]. Added an 'image_display_enabled' property to mame_ui_manager and exposed it to LUA. This property allows one to disable image-specific UI displays (mame\luaengine.cpp, ui\ui.cpp) [Nathan Woods].
 - 0.241              : Use util::core_file instead of emu_file where applicable (frontend\mame\*.*) [AJR]. Added 57 glyphs (mostly arrow symbols) to uismall.bdf [Vas Crabb].
 - 0.240              : Sort directory selection menu items. Fixes browsing folders are sorted by date (MT08167). Also fixed selecting (not moving up more than one level). Removed a vestigial member function from the file selection menu (ui\dirmenu.cpp and ui\filesel.cpp) [Vas Crabb].
 - 0.239              : Fixed various errors reported by Coverity, one of which actaully breaks stuff (mame\ui\*). Give heading items in menus a bit of horizontal space (ui\menu.cpp). Don't call .name() on I/O port fields without a running machine (ui\devopt.cpp) [Vas Crabb]. Changed string parse for screen Hz info (ui\devopt.cpp and ui\info.cpp) [hap]. Fixed lockup loading UI with Emscripten builds that don't support threading (ui\systemlist.cpp) [Justin Kerk].
 - 0.238              : Added ui\textbox.cpp/h and docs\source\usingmame/ui.rst. Fixed wrongly placed messagebox (ui\selmenu.cpp). Fixes program/copyright info overflows UI frame [hap]. Refactored menu event handling and fixed a number of issues. Moved common code for drawing about box, info viewer, and other text box menus to a base class; removed the last of the info viewer logic and the multi-line item hack from the base menu class. Added previous/next group navigation for general inputs and plugin input selection menus. Moved message catalog logic to lib/util, allowing osd and emu to use localised messages. Made the base menu class use the UI manager's feature for holding session state rather than a static map and mutex. Improved menu event handling model, and fixed many issues, particularly with menus behaving badly when hidden/shown. Added better support for menus that don't participate in the usual menu stack, like the menuless sliders and the save/load state menus. Made a number of menus refresh state when being shown after being hidden (fixes MT08121 among other issues). Fixed indication of mounted slot option in the slot option details menu. Improved appearance of background menus when emulation isn't running - draw all menus in the stack, and darken the background menus to make the edges of the active menu clearer. Started adding some documentation for MAME's internal UI, and updated the list of example front-ends. Make all the textbox menus use the custom navigation flag, on the off chance they become scrollable somehow. Made it so you can press UI On Screen Display to hide the Analog Controls menu and see the response to your inputs without the risk of changing settings, and see more axes at once and scroll them for systems with very large number of axes. Also ensure the axis being configured is visible when the menu is visible, and made the menu behave a bit more like the system input assignments menu (including previous/next group navigation). Allow LUA to draw to the UI container - this addresses the main complaint in #7475. Note that drawing to the UI container will draw over any UI elements, including menus. Plugins can check menu_active to avoid drawing over menus. Also removed some unnecessary use of sol::overload. Improved info/image box navigation on the system/softwre selection menus, and cleaned up some leftover code that came from the copy/pasted event handling functions. Fixed sliders menu not handling Alt+Shift as intended (thanks Coverity). Fixed a couple of harmless Coverity errors, too. Added basic description of the system and software selection menus, and correct a couple of errors in the LUA reference. Fixed some localisation issues in Analog Controls menu. Don't let the non-menus get as far as trying to draw (frontend\mame\ui). More cleanup: Got rid of some abuse of "special main menus". Added a helper class for auto-pause menus that don't spawn submenus. Got rid of the fake menu that schedules an exit on the first frame. Turned the confirm quit prompt into a menu, eliminated one more special-cased event loop. Fixed the confirm quit prompt resuming if you return to emulation if you weren't paused to begin with. Allow cycling modifiers for an absolute axis by pressing repeatedly without going through an append step (frontend\mame\iptseqpoll.cpp). Don't inappropriately truncate text in menu text boxes (ui\menu.h and ui\ui.cpp). Handle WM_UNICHAR (ui_input; windows\window.cpp). Added input provider module options to menu, worked around machine options not showing modules. Handle analog controls with high sensitivity numbers better (ui\analogipt.cpp). Show error message box on a separate thread (see MT08118; osd\windows\winmain.cpp). Default to built-in UI language rather than English. The external English message catalog is a placeholder anyway (emu\emuopts.cpp). Fixed stupid potential deadlock on exit (osd\windows\winmain.cpp). Some changes to menu item class that will make it possbile to reduce the number of menu rebuilds. Don't set parent window for error message box - it doesn't appreciate the parent being pulled out from under it (osd\windows\winmain.cpp). Various minor improvements: Made a few more menus reset values to the default in response to the UI clear input. Made the minimum info text size less unreasonable and fixed a locale issue in the font/size selection menu when parsing option strings. Made the keyboard mode menu toggle items on double click or UI select. Made the menuless sliders menu remember the last slider shown (this probably broke when sliders were moved out of the UI manager itself). Made a few menus just update the highlighted options when it's adjusted rather than unnecessarily rebuilding the menu. Made a few more menus reset on being reactivated to cope with scripts or other things changing stuff out from under them (frontend\mame\ui). Fixed master volume values set from tilde bar and slider controls menu don't agree. Show more unemulated/imperfect features per-device in warnings menu (ui\info.cpp). Fixed crashes switching between favourites and other filters. Also made the system and software selection menus a bit less eager to reselect the first item. Fixed another case where the system selection menu could get confused when changing filters (ui\selgame.cpp) [Vas Crabb].
 - 0.237              : Added ui\systemlist.cpp/h. Removed ui\starimg.ipp. Work around for MAME can't remember last_used_filter (ui\selgame.cpp; GitHub issue #8634). Made file manager software list menu search behave better (based on file selection menu code) (ui\swlist.cpp). Locale-aware sorting for software list items (ui\selsoft.cpp and ui\swlist.cpp). Put software description on the left and sort by description by default (ui\swlist.cpp). Set locale on start so sorting in the UI works properly (osd\windows\winmain.cpp). Internal UI enhancements: Added support for message context to localisations. Added string_view versions of the message lookup functions. Added a few more folder options to the internal UI. Use more appropriate containers (emu\softlist.cpp). Switched to Python 3 by default - this will become a requirement. Updated scripts\build\msgfmt.py for message context support. Show all software item info in the internal UI. Search alternate titles in software selection menu. Updated 3rdparty\utf8proc to v2.6.1 (has several fixes). Added software filters for common info fields. Allow UI manager to hold onto persistent session data. Cache software lists for eight machines. Added support for loading localised system names. Added UI for selecting localised system names. Fixed clone sorting (string_view treatment; osd\strconv.cpp). Fixed a bug with ANSI codepage (osd\strconv.cpp). Added string_view treatment for the last two holdouts (util\unicode.cpp). If in doubt, micro-optimise (halves startup time on Windows). Support phonetic reading field from localised system name lists. Fixed sorting of clones when not using localised system names. Allow falling through to file manager for systems that require media. Moved plugins menu off the main menu - it's only one level deeper now. Don't show toggles for plugin libraries, show a message when no plugins are found (ui\miscmenu.cpp). Recovered precious vertical space for system/software names. Reduced the height of the bottom info panel by one line. The system shortname or list/software name tuple are now only displayed in the info box on the right. It's a bit out-of-the-way, but it's not something you need to see all the time. The main reason for having the quit or return to previous menu item always visible is to make it easy for someone to quit if they only have a mouse. However, we don't need waste space on the menu for this when we have a toolbar. Users without a mouse can exit using the keyboard/controller UI Cancel input (given how important this is, it's unlikely they won't have it mapped to something usable). There's now a toolbar button on the extreme right for returning to the previous menu or quitting. The tooltip and icon are appropriately context-sensitive. This recovers one line on the system selection menu, and two on the software selection menu since the separator is no longer needed. Replaced the toolbar icons bitmaps with SVGs. Colours/shapes may be tweaked before the release if people have good suggestions  Flipped the simple system selection menu so the description is on the left. Moved the handling of special cases for the final menu item out of the base menu class. It's still hacky having it handled there at all, but it's less hacky without if menus that want to do something different can do it themselves. Fixed another dumb clone sorting bug (ui\selsoft.cpp). Keep cleaning up. Got rid of one of the UI audit inputs. There only needs to be one, and the options can be presented in the confirmation menu. Two secret keystrokes is too confusing. Also got rid of the long-obsolete UI Toggle Debugger input. Added audit media button to the toolbar so it's a bit less opaque, and it can be accessed with a mouse/trackball (not just by knowing the key mapping). Made default I/O port names localisable. Made autofire plugin save port fields using the { port, mask, type } tuple, the same way MAME does. Unfortunately this will break existing autofire configuration, but it should be more stable going forward. Added some more UI keys to the default key mappings documentation. More UI enhancements/cleanup: Made the headings in the info viewer clickable, so you can switch between DATs with a mouse or trackball (or maybe a lightgun if that's your thing). Made the UI red/yellow/green traffic light status colours less dirty-looking. The "yellow" is more of an amber-brown than a cat puke brown now, and red is brighter. The contrast with white text is definitely fine for red and green, but it's reduced a bit for yellow. However there's a limit to how dark you can make a yellow or orange colour before it looks muddy. Reduced the number of places the UI uses red for things that aren't errors. The error colour should be used sparingly, for actual errors. Improved the colour swatch display in the RGBA colour editor. It now has black/white underlay so alpha effects are move obvious. Also fixed a bug preventing the channels being run down to zero. Fixed double-clicking configure machine causing MAME to exit from the system selection menu. Also slightly adjusted the colours of the toolbar buttons again. More wording and localisation fixes for colours menus. Allow clicking the adjuster arrows on menu items. This allows things like video options and DIP switches to be configured using a mouse only. Also fixed a bug preventing paging menus with a mouse if the first item scrolled off the bottom is not selectable. Ignore notes elements when loading software lists. It's effectively a comment that isn't a comment syntactically, it's being used for things that are not useful to display in the internal UI, and it slows down startup (emu\softlist.cpp). Made it possible to cancel a media audit while it's in progress. Also made the media audit multi-threaded so it's faster. Made the DIP switches in the DIP switch preview clickable. Made the system and software selection menus leave focus on the same system when clearing the search rather than jumping to the first item. Also fixed a couple of bugs in the logic for keeping the selected item visible. Fixed a few places that weren't showing localised system names. Made UI Cancel clear a search in the file manager the same way it does on the system and software selection menus. Made it possible for plugin menus to handle UI Cancel more naturally, backing up to the previous plugin menu rather than dropping straight back to the list of plugins. Updated the autofire, cheat and cheatfind plugins, and fixed a few other issues in the cheatfind plugin. Show full software name in right panel for favourites, too. Audit menu was using one variable for two things, which obviously doesn't work. DIP switch menu could trigger spurious clicks on for systems with too many DIP switch groups to show. Also work around Xcode's issues with casting non-const to const reference wrappers. Cleaned up rendering of info views. Put the description for systems in the info box - it's useful for the fruit machines with very long names that are truncated in the list. Also stopped truncating manufactuer and parent name in the info box. Made the text layout class capable of handling lines containing combinatations of left/centre/right-justified text and got rid of the legacy UI manager text wrapping function. Made the system/software selection menus and the info viewer share the same code for formatting info text. This means the multi-column layout works properly in the info viewer now, and the code is a lot simpler. Also the system/software selection menus don't have to redo the text layout every frame now. Made the info viewer update the text layout if the output aspect ratio changes, and cleaned up more legacy code. The lines in the info viewer are no longer bogus "menu items", and there's a lot less special-case code to support it in the base menu class. Better code for carrying justification across when wrapping. Fixed horizontal offset on text boxes with blank lines. Further improved behaviour of info box on system selection menu, and fixed alignment issues. Changed the default mapping for UI select to not trigger on Alt+Enter fullscreen toggle (fullscreen toggle still doesn't work in menus - actually fixing that is complicated.) Made the about box wrap text properly, made the title and backtrack menu item always visible, and added a footer with the VCS revision. Don't highlight the favourites and info toolbar buttons if there's no selection (can happen if filters produce no results). Also made the info viewer appear even if no info is available - it's less confusing to see an empty menu than wonder why clicking the button does nothing. Added a bit more info to the about box, moved the VCS revision to the heading. Don't show "not" codes in prompts - they're not helpful. Fixed a couple of Coverity warnings. Pass events for automatically generated menu items to the plugin - they will have index zero. Don't try calling the data plugin from the main menu if the system isn't starting yet - doing so will prevent the data plugin from loading at all. Don't show plugin options menu in main menu before start - it doesn't work anyway. Fixed another case where the menus may not automatically scroll the first item into view. Sort input selection menus for autofire plugin. Made left/right repeat when held (makes setting long delays/durations easier). Added headings for devices in input selection menus (helps when controller buttons have identical names, e.g. AES). Made intial selection when moving between menus intuitive, log some errors on saving/loading configuration. Fixed untranslated info box title appearing on system/software selection menus [Vas Crabb]. Fixed build on non-WIN32 systems (util\unicode.cpp) [AJR].
 - 0.236              : Started refactoring file I/O stuff. Added more modern generic I/O interfaces with implementation backed by stdio, osd_file and core_file, replacing io_generic. Converted osd_file, core_file, archive_file, chd_file and device_image_interface to use std::error_condition rather than their own error enums. Return would block when reading a socket with no data available - no error can be confused with remote shutdown (osd\modules\file\posixsocket.cpp and winsocket.cpp). Made zoom controls a bit more intuitive: * The UI controls are described as zoom in/out, but they had the opposite effect on the palette and tile viewers. That has been changed to make them consistent with the tilemap viewer. * Made the default zoom key not act as a toggle. People are familiar with the function of Ctrl+0/=/- in web browsers, so making them behave similarly in MAME should make it more approachable. Also added the default zoom key to the relevant documentation page. * Implemented the default zoom key for the palette and tile viewers. * In the tilemap viewer, if the view is in default expand to fit mode, zoom in/out starting from the actual zoom ratio. Once again, this behaves more like the zoom controls in a web browser displaying an image so it should be more intuitive. * Made more messages from the tilemap viewer localisable. Fixed attempted loading of loose software does not work with MAME filemanager (util\zippath.cpp). * There were multiple issues at play here. After #8443 was applied, is_root was simply never returning true on Windows, as OSD_WINDOWS isn't actually defined outside libosd and libocore. This caused phantom parent items to appear in disk roots on Windows, but it meant that the check in zippath_resolve would always fail so the trailing backslash would be trimmed. Fixing the macro test in is_root meant the trailing backslash from C:\ would no longer be trimmed, which caused the stat in zippath_resolve to fail. Reduced tag map lookups in several drivers and devices. Removed an overload of bitswap that can be avoided using if constexpr (util\coretmpl.h). Added doxygen comments to some classes, and fixed several doxygen warnings. Test for _WIN32 rather than WIN32 (util, osd). * In C++17 mode, WIN32 is no longer a predefined macro, although various things in 3rdparty define it to maintain legacy support. We're better off moving forward anyway for when WIN32 disappears entirely. WIN32 is not a reserved name, while _WIN32 is, starting with an underscore follwed by an uppercase letter [Vas Crabb]. Added fractional zoom-out support to the tilemap viewer (ui\viewgfx.cpp). Also added IPT_UI_ZOOM_AUTO for toggling auto-zoom mode without needing to cycle through all zoom levels [Ryan Holtz]. Prevent UI file select menu from crashing in error cases where no files can be found (ui\filesel.cpp) [AJR]. Removed VISIBLE_SOUND_OVERDRIVE compile-time option in favor of enabling the red overdrive border when speaker_report is non-zero (ui\ui.cpp) [Aaron Giles].
 - 0.234              : Expose configuration level (mostly matters for controller files), improved verbose diagnostic messages, and moved a few things out of the global and preprocessor namespaces (emu\config.cpp). Added documentation for some controller configuration file features (docs\source\advanced\ctrlr_config.rst). The device mapping feature documentation will be merged in at some point [Vas Crabb]. List shortnames of subdevices that have ROMs as part of -listroms header (mame\clifront.cpp) [AJR].
 - 0.233              : Added reset to default to BIOS selection menu (the one from the TAB menu, not the popup when starting a machine) (ui\miscmenu.cpp) [hap]. On input mapping menus, use UI left/right to switch between setting and appending to an input sequence (ui\inputmap.cpp and ui\menu.cpp) [Vas Crabb].
 - 0.232              : Added -share_directory option. This sets a directory on the host system which emulated systems can directly access [R. Belmont]. Workaround for 'File Manager' crashes MAME in spectacular ways (ui\imgcntrl.cpp) [AJR]. Don't make assumptions about what's off the end of a string view (ui\selmenu.cpp) [Vas Crabb].
 - 0.231              : Disable option sleep when using -bench [Aaron Giles]. Simplified the statename/snapname logic for naming after image devices (e.g. %d_cart or %d_flop1) while allowing for more general non-alphanumeric separators, so that for instance %d_cart_%i correctly produces a name with the software name, followed by an underscore and an index, rather than failing to be recognized and defaulting back to %g/%i (emu\machine.cpp and video.cpp) [Fabio Priuli]. Allow breaking into main menu before the machine fully starts (i.e. just before the initial soft reset) by using the normal "Config Menu" UI input. Note that the minor code shuffling in machine.cpp is necessary to prevent emulation from getting confused if "Select New Game" happens to be selected (ui\menu.cpp and ui\ui.cpp) [AJR]. Added separator before 'return to previous menu'. Added message when trying to config unavailable machine inputs (ui\inputmap.cpp). Added space to prevent long strings concat when printing results (mame\media_ident.cpp) [hap]. Allow UI file manager to create floppy images before machine is started (ui\floppycntrl.cpp) [AJR].
 - 0.230              : Tell user to get the correct files (ui\imgcntrl.cpp and selmenu.cpp) [hap]. A few incremental UI code improvements: Simplified message when toggling UI controls. Show actual configured UI toggle key, not misleading hard-coded text. Push window activated/deactivated events to UI manager. Simplified SDL window event handling code - events are pretty precise. Miscellaneous code cleanup. Fixes incorrect message when enabling/disabling UI on systems with emulated keyboard. Added option to mute when unthrottled to advanced options menu. Also refactored slightly to avoid some initialisations before main [Vas Crabb]. Restored validation for command-line and .ini options (disabled since 0.188) and make some errors non-fatal (mame\clifront.cpp and util\options.cpp) [AJR].
 - 0.229              : Removed ui\sliderchangednotifier.h. Clean up slider callbacks. Removed now-unused slider ID macros/enums (ui\ui.h). Fixed exception in debug build when selecting machine category filter (ui\utils.cpp) [AJR]. Fixed issues detected by Coverity Static Analysis (software) (ui\custui.cpp and ui\confswitch.h) [Robbbert]. Improved messages displayed when files are missing. Only show things preventing launch in UI (not NO_DUMP, optional, etc.). Don't show details like file lengths and checksums in UI. Actually do system audit when launching from favourites. Log the more detailed summary at info level (ui\selgame.cpp, selmenu.cpp and selsoft.cpp) [Vas Crabb].
 - 0.228              : Fixed use of strmakelower (ui\selsoft.cpp) [AJR].
 - 0.227              : Added MAME version to About menu header (ui\about.cpp) [hap]. C++17 string handling updates (without charconv so as not to break GCC 7). ui\ui.cpp and ui\menu.cpp: Changed argument types for text processing functions from const char * to std::string_view. ui\menu.cpp: Added overloads of item_append omitting the frequently empty subtext argument [Vas Crabb]. Removed long-disused UI button color tables (emu\ui\cmddata.h). Fixed crash with unmounted images (ui\filemngr.cpp) [AJR].
 - 0.226              : Added ui\keyboard.cpp/h. Show software selection menu before doing system audit, for casual browsing. Optimised some SVG images (images\MAMElogo.svg and images\mahjongpanel.svg). Cleaned up some geometry on MAME logo. Made the event type a scoped enum (emu\uiinput.cpp). Show device descriptions as well as tag paths (ui\inputmap.cpp). Only populate BIOS Selection menu with system and slot cards that actually have BIOS options (ui\miscmenu.cpp and ui\info.cpp). Apply shift to analog fields in preview (ui\analogipt.cpp) [Vas Crabb].
 - 0.225              : 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. Don't ignore config elements with attributes but no child nodes (emu\config.cpp and util\xmlfile.cpp). 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) [Vas Crabb].
 - 0.223              : Get help from website instead of files that don't exist (mame\clifront.cpp) [Robbbert]. Able to show emulation warnings from tab menu. Swap order of popup screens (gameinfo first, warnings second) and added "press any key" to gameinfo [hap]. Added new option beam_dot_size that controls the rendered size of 'dots' in vector games [Aaron Giles].
 - 0.222              : Skip -romident matching process and display error message when no files are found (mame\clifront.cpp) [AJR]. Only warn about external artwork when it wasn't loaded (ui\info.cpp and emu\render.cpp) [hap].
 - 0.221              : Removed auto pause (ui\about.cpp). NOTE: Inconsistent with other Tab menu entries including the fullscreen popup for selecting new machine, and also a bug where it refuses to unpause when closing About popup with Tab. Removed clock freqs trailing 0s on machine info screen (ui\devopt.cpp and info.cpp) [hap]. Fixed assert when starting empty driver - the empty driver magically has no search path, and hence can't have any ROM data regions (emu\drivers\empty.cpp) [Vas Crabb].
 - 0.220              : Added frontend\mame\ui\about.cpp/h. Added an 'About' menu option to display the contents of COPYING in order to be more license-compliant (frontend\mame\ui\about.cpp) [Ryan Holtz]. Added appname to about [hap].
 - 0.217              : Added -lowlatency option to UI (ui\submenu.cpp) [Antonio Giner]. Find software lists attached to devices that aren't in any system by default (e.g. spectrum_mgt_flop) (mame\media_ident.cpp). Allow slot options with -listsoftware so stuff like spectrum_mgt_flop can be discovered (emu\emuopts.cpp and mame\clifront.cpp) [Vas Crabb].
 - 0.216              : Added ui\confswitch.cpp/h and frontend\mame\iptseqpoll.cpp/h. UI updates: Made DIP switch display scale with UI font and improved layout. Improved analog control display giving an indication of neutral position. Fixed menu heading sizes not being recalculated after font is changed. Cleaned up memory management in some more menus. Don't walk the directory every time the crosshair menu is refreshed. Sort crosshair pictures. Show a selector menu when crosshair picture item is selected. Make input mapping menus more efficient - most of the properties of a field won't change. Get rid of the pool allocator in base menu class - it was encouraging bad design. Get rid of some pointless members of input mapping menu. Hook up focus next/focus prev on system/software selection menus (Tab and LShift-Tab, respectively by default). Allow joystick buttons to be used to change focus on system/software selection menus. Fixed bug that allowed focus to move to hidden panels. If panel is collapsed while focused, return focus to systems/software. UI show feedback when configuring an input to give the user more of an idea of what's going on. When modifying an input mapping, only cycle default/none if UI_CANCEL is the first thing pressed. Note: If you hit UI_SELECT to modify an input then hit UI_CANCEL immediately, it will cycle default/none; however if you press any other input first and then hit UI_CANCEL, it will just back out the change. UI input mapping menu updates: When a switch-type input is selected, show feedback when it's pressed. If an invalid code is entered (e.g. only negatives) abandon the change rather than cycling default/none. If an invalid code is entered display a message until the user takes some other action. UI input menu: treat codes containing a postive and negative of the same thing as invalid (e.g. A S not A). UI updates: Re-wrote localisation loader: Sanitise input, check for buffer overruns, fixed endianness handling, keep data in a single allocated block, do a single hash lookup when fetching a string and print diagnostic output when things go wrong. Sort UI language menu so it's not in whatever random order the filesystem yields. Fixed most menu code to adjust L/R border for UI aspect ratio and pass container to render manager when getting UI aspect ratio. Converted a couple more things to use smart pointers [Vas Crabb]. Allocate bitmap in place rather than using global_alloc; explicitly initialize each member of ui_gfx_state (ui\viewgfx.cpp) [AJR]. Support PORT_CONDITION for PORT_ADJUSTER. PORT_CONDITION can now enabled/disabled the display of PORT_ADJUSTER sliders in the UI [Couriersud].
 - 0.215              : Moved one variable down into subclasses and fixed some confusing variable naming [AJR]. Fixed display of Covers tab in UI (ui\selmenu.cpp) [Robbbert].
 - 0.214              : Distinguish DIP switches that belong to different devices but have the same name in UI menu. This is most likely to occur when multiple instances of the same device type are configured on bus slots (ui\inputmap.cpp) [AJR]. Fixed presentation of error message about invalid INI options (mame\mameopts.cpp) [Robbbert].
 - 0.213              : Enabled default move vector/assignments in core_options and changed plugin_options code to use them (util\options.h and mame\pluginopts.cpp). Creating an -attach_window command line parameter on Windows to attach to an existing window. Moved -attach_window option to Windows-specific code. Created an osd_set_aggressive_input_focus() function and exposed to LUA. Created a dummy implementation of osd_set_aggressive_input_focus() forSDL. Changed mechanisms for overriding the mandatory file manager. Removed the -skip_mandatory_fileman command line option. Created an emu.register_mandatory_file_manager_override() LUA function to allow LUA plugins to substitute the mandatory file manager [Nathan Woods].
 - 0.212              : Changed the various usages of UI_*COLOR to be calls to frontend\mame\ui\moptions.h. The various UI_*COLOR macros were implemented as calls to decode_ui_color, which cached the values for the various options in a static array, which was obviously a gross hack. This refactoring is strategic because I am trying to confine awareness of mame_ui_manager to code in frontend\mame\ui, and the implementation of decode_ui_color() relied on the ability to access mame_ui_manager as a singleton from outside this code. Created a ui_colors object, so that queries for UI RGB values would not always require parsing strings. Replaced UI_TARGET_FONT_[ROWS|HEIGHT] and UI_BOX_[LR|TD]_BORDER macros with property calls. These macros were implemented with a call to a function (get_font_rows()) that opportunistically stashed the results of option accesses in static variables; in other words, a gross hack. Because get_font_rows() attempted to access mame_ui_manager as a singleton, it was an obstactle to providing an alternative implementation of ui_manager. Removed stray debugging cruft that found a way into the other PR. Converted a few more options().zyx_color() to colors().zyx_color() [Nathan Woods]. Disable ui startup screens for "-video none" [feos]. Fixed segfault when trying to access some image option that does not exists (emu\emuopts.h and image.cpp; MT06655, MT06654, MT06677 and MT06880) [AmatCoder].
 - 0.211              : Adding a -version command line argument to get the current build version (mame\clifront.cpp) [Nathan Woods].
 - 0.210              : Allow palette alpha value viewable (ui\viewgfx.cpp) [cam900]. Privatized a few variables. Provided more helpers (ui\menu.cpp) [AJR].
 - 0.208              : Updated UI and XML output for additional emulation status flags (CAPTURE, COMMS, DRUM, MEDIA, PUNCH, ROM and TAPE) [Vas Crabb].
 - 0.207              : Fixed crash when exiting directly while filter UI is active (ui\menu.cpp) [Vas Crabb].
 - 0.206              : Added ui\icorender.cpp. Eliminated qsort (ui\inputmap.cpp) [AJR]. Apply -verbose after processing command-line options and after first pass over .ini files. Improved search function (use algorithm derived from Jaro-Winkler similarity to match search strings). UI cleanup: Fixed crash on builds with fewer than 16 drivers. Fixed "available" filter in internal UI. Get rid of some UI globals that shouldn't be global. Better encapsulation in UI. Clean up favourites manager - in particular kill hidden state and O(n) walks. This breaks adding systems/software to favourites from the main tab menu. Splitted up the different parts of ICO loading in the menus (locating files, scaling, drawing, etc.). Added icon support to software selection menu. Added support for more ICO file variants, including PNG-in-ICO (new DIB parser is overkill for ICO but I can factor it out for BMP loading at some point). Added favourites filter for software menus - includes software that's favourited on any system, so GBC includes DMG favourties and vice versa. Eliminated unnecessary member variables and O(n) walks in software selection menu. Made the menus' cached texture structures a bit more efficient. Restored functionality of the "Add to Favorites" item on the main in-emulation menu (emu\softlist_dev.cpp and ui\inifile.cpp). Make search apply to the filtered list in system/software selection menus, and cache stuff used for searching in software selection menu [Vas Crabb].
 - 0.205              : Clean up and improved option descriptions (emu\emuopts.cpp, lib\osdobj_common.cpp, sdl\sdlmain.cpp, windows\winmain.cpp) [Vas Crabb]. Pass UI cancel to LUA (ui\pluginopt.cpp) [Carl].
 - 0.203              : Improved search behaviour in file selection menus (ui\filesel.cpp) [Vas Crabb]. Restored erroneously-removed game-specific INI option reversion between runs. Fixes specialized ini file settings get retained on a second game launch, instead of using raster.ini or mame.ini [Ryan Holtz]. Fixed command line parsing for the long form of the first instance of a media option (emu\emuopts.cpp) [Tim Lindner].
 - 0.201              : Clean up some outdated "game" terminology in clifront.cpp [Vas Crabb].
 - 0.200              : Standardized "On"/"Off" items in UI menus. "On" is now consistently to the right of "Off", as with dipswitches [AJR].
 - 0.198              : Fixed error in debug build with SMS card options (emu\emuopts.cpp) [AJR].
 - 0.194              : Added option to disable saving NVRAM on exit (emu\emuopts.cpp and machine.cpp) [AJR]. Added verbose logging for configuration files (emu\config.cpp). Note: We already have verbose logging for INI files that get parsed, so having CFGs get similar treatment is useful [Firehawke]. Fixed AddressSanitizer: alloc-dealloc-mismatch when closing dipswitch menu (ui\menu.cpp) [Firewave]. Eliminated core_strdup (mame\pluginopts.cpp, util\corestr.cpp and lib\osdobj_common.cpp). This fixed memory leak in options [AJR].
 - 0.193              : Fixed can't change into directories that have a "." prefix in their name (ui\filesel.cpp and posixdir.cpp) [Vas Crabb]. Fixed off-by-one crash (ui\selsoft.cpp) [smf].
 - 0.192              : Fixed tilemap live updates regression (ui\viewgfx.cpp) [hap]. Fixed Reset was sometimes ignored in File Manager (ui\filemngr.cpp) (ui\filemngr.cpp) [Robbbert].
 - 0.191              : Fixed an options overhaul regression. This crash (discovered by Wizz) had the following symptoms: 1. Start MAME, 2. Choose "Configure Machine" and 3. Choose "Video Options"... CRASH. This was the result of the options editor not having a fully formed list of options where it was expecting one. The fix is to change the declaration of emu_options to one that have full OSD options (it is possible that SDLMAME needs something slightly different) [Nathan Woods]. Actually make sure OSD options are included when saving through UI (ui\ui.cpp), fixes also configuring machine level "Video Option" causes crash. Avert potential crash when populating DSW menu (ui\inputmap.cpp) [AJR]. Small fixes to general info panel on internal UI. This fixed unknown numbers showing up at the right side panel [BraiNKilleRGR]. Fixed the last used game is not saved, if you exit MAME (ui\selgame.cpp) [Robbbert]. Fix for prescale value entry. Top prescale value allowed via command-line is 3 [Tafoid].
 - 0.190              : Don't translate info box titles twice (ui\datmenu.cpp, ui\selmenu.cpp) [Carl]. Merged duplicate code for drawing UI palette menu. Use std::unique_ptr to manage instances of slider_state (ui\slider.h). Eliminate now-unnecessary machine parameter (ui\ui.cpp). Don't use auto_alloc for temporary bitmaps (ui\selmenu.cpp). Eliminated last use of auto_alloc in frontend (ui\ui.cpp) [AJR]. Turn most of the ROM entry accessor macros into templates, and make them work on tiny_rom_entry/rom_entry pointers/references, also claw back a little performance lost in the ROM entry refactoring [Vas Crabb].
 - 0.189              : Removed ui\custmenu.cpp/h. Eliminated use of hairline spaces for alignment 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. Added indication for presence of analog controls and keyboard inputs in info box (ui\selgame.cpp). Fixed -sleep and -refreshspeed options (MAME will no longer use 100% of a CPU core for the least demanding systems; emu\emuopts.cpp). Greatly reduce copy/paste code for drawing menu header/footer boxes. Display full name of selected slot device below slots menu. Fixed spacing on dircetory configuration menu. Fixed minimum/maximum for UI font rows per screen setting. Fixed info box navigation when system selection menu doesn't have focus. 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 mouse wheel 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 software art/info display when keyboard focus leaves software selection 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. 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 of code for 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 [Vas Crabb]. Fixed selecting a slot to fill for "EXP" causes Fatal Error in (MESS) C64 (ui\slotopt.cpp). 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 [Nathan Woods].
 - 0.188              : Added ui\state.cpp/h. Added a menu listing existing state files displayed when choosing a position to save/load. Any position may be selected with keyboard 0-9/A-Z or joystick buttons. Existing positions may be selected using UI navigation controls. Overhauled MAME options handling. The new options system is more dynamic and should detect errors earlier. The slot menu now shows updated options in response to selections made by the user. This fixed loading softlist items from the command line with changed slot options and various problems with software loading/unloading. Fixed slot unmount issue: Start (MESS) MAME sorcerer, then enter the slots menu, empty the RS232 slot, then choose Reset. It crashes with an access violation (emu\image.cpp) [Nathan Woods]. Don't lose the system inipath when looking for hashpath (mame\mameopts.cpp) [O. Galibert]. Allow experimental overclocking of sound devices through UI sliders with -cheat enabled (ui\ui.cpp) [AJR]. Made internal UI list missing/incorrect files when audit fails. Also consolidated selgame/selsoft code for actually launching systems into one place. Fixed fatal error on selecting software part from internal UI. Sort software part menu in internal UI (was ordered by hash). This preserves the option priority behaviour from 0.187 when setting the instance option to the desired part. Note that software part selection from internal UI doesn't actually work. For example with zorba:cpm, no matter which part you select, you'll always end up with flop1 in A: and flop2 in B:. This actually did work properly in 0.187, so something has gone wrong in between (ui\selmenu.cpp) [Vas Crabb].
 - 0.187              : Fixed erroneous space padding before linefeed on -listclones and -listbrothers output (mame\clifront.cpp) [Tafoid]. Fixes a crash when returning to the front end when a system was launched from favorites. This bug could be reproduced with the following steps: 1. Put 'nes' in 'Favorites'. 2. Launch 'nes'. 3. Choose something from the software menu and run the emulation. 4. Escape back... CRASH [Nathan Woods]. Sort slot options by name in -listslots. Device names can be obtained without instantiation now (mame\clifront.cpp) [AJR].
 - 0.186              : Added the ability to select different tilemap categories. This allows you to select different tilemap categories in the built-in tilemap viewer. The default is to render all categories (same as before), but you can select to render only a specific tilemap category with the PAGE_UP and PAGE_DOWN keys [Dirk Best]. Cleanups to slot options (ui\slotopt.cpp): 1. Polished up residual traces of this code's pre-C++ heritage. 2. Moved completely private code to an anonymous namespace. 3. Created device_slot_interface::slot_name() to wrap the pattern of taking the tag and removing the initial colon. Changed 'int ignore_warnings' parameter on core_options::parse_ini_file() to be 'bool ignore_unknown_options'. Fixed a regression in -listmedia/-listslots. The issue is that -listmedia/-listslots were not honoring command line options specified on the slot. This works around the problem [Nathan Woods]. Added trailing newline to several frontend error messages. Fixed bug that permanently disabled some UI search strings when they were cleared. This adopts std::string::clear() and empty() consistently, rather than storing and checking for NUL as with C-style buffers. This fixes issue #2295 ("Search bar broken after changing ROM list view mode") and probably other unreported bugs afflicting UI search text input. Have -listroms display a user-friendly message when no ROMs are required [AJR]. Starting from the Favorites menu now starts the software list submenu (if necessary). Starting a machine containing a list of the software from the Favorites menu, now determines the launch of the appropriate sub-menu with the list of software [Dankan1890]. Better completions (plugins\console\init.lua) [Carl]. Support -listroms for devices (e.g. mpu401 or m68705p3; mame\clifront.cpp) [Vas Crabb].
 - 0.185              : UI input map: 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 (MT06519) [AJR]. 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". Fixed selecting a new ROM file through the internal UI for consoles via external path (MT06531; (MESS) a2600, a7800, coleco, genesis, nes and snes). Fixed UI 'Switch Item Ordering' corrupts software list (MT06402). Fixed issues specifying image/slot options fron INI files. I added hooks so that options specified at the command line can also be responded to when parsed from INI files, but in the long run much of the logic that is currently in mame_options should go into emu_options so that when an option is specified, all of the wacko logic around slot/image specification "just works" because it is encapsulated within emu_options. util\options.cpp. More options refactoring: Stabilization options function for 0.185 release. Fixed a regression in the mandatory image check. As a consequence of recent changes, we were not properly blocking the emulation from starting when a must_be_loaded() image had an unspecified image (ui\info.cpp and ui.cpp). Workaround for scenarios where both the command line and an INI specify an image option. This is a hack; see commentary within the code. I intend to fix this "for real" when emu_options become more self contained (emu\emuopts.cpp) [Nathan Woods].
 - 0.184              : Fixed an issue where device options (e.g. -cart) were reported as unknown when they actually worked. This change also changes around how command line arguments are passed around; specifically I changed argc/argv to be std::vector<std::string>. Note this is not passed around 'const', the reason being that the command line processing will now "eat" the vector [Nathan Woods, Vas Crabb]. Fixed regression pertaining to specification of empty strings as slot names e.g. - 'next -scsibus:1 "" -listdevices'. Preliminary attempt to fix regression caused by poor understanding of get_default_card_software() (mame\mameopts.cpp) [Nathan Woods]. Fixed crash on excessive command-line options, clean up some tabulation and removed long-dead option [Vas Crabb]. Possibly uninitialized class member fix (ui\datmenu.cpp and ui.cpp) [dankan1890].
 - 0.183              : LIST command format changes: Changes to output produced to better deal with maximum limits of certain items. Fixed issue with -LISTROMS output not displaying hapyfsh2 rom sizes correctly [Tafoid].
 - 0.182              : Added service mode DIP switch adjustments (emu\ioport.cpp, ui\info.cpp and ui.cpp). Removed find_dipname [AJR].
 - 0.181              : Removed ui\cmdrender.h. Make -console start console LUA plugin [Miodrag Milanovic]. Double-check key state before UI autorepeat, this fixed keyboard/gamepad game list selection jump every two games (emu\uiinput.cpp) [Brad Hughes]. Added an associative LRU cache with map-like behaviour to util\coretmpl.h. Use LRU cache in ui\selmenu.cpp so icons don't all need to be reloaded on scroll. Set default character for absent glyphs in uismall.bdf. Encapsulate many BDF and BDC handling details (emu\rendfont.cpp). Make file I/O 64-bit clean, check for allocation errors. More solid BDF parser with error messages and trace logging. Fixed heap smash when building bitmaps for BDF fonts. Extended BDC format to support high planes and default character. Render default character if glyph not found for BDF/BDC. Make bitmaps movable, allowing them to be used in vectors and emplaced easily [Vas Crabb]. Another attempt at sorting File Manager entries [Barry Rodewald]. Fixed for -romident misattributing device ROMs to alphabetically first driver using them (mame\media_ident.cpp) [AJR].
 - 0.180              : Cache texture/surface were not released when render target was destructed (render\drawd3d.cpp). This fixed MAME crashed with UI and HLSL [ImJezze]. Fixed driver info (plugins\data\data_mameinfo.lua and data_messinfo.lua). Stored data in database [Carl]. Fixed a bug in parsing the software name option that prevented the loading of slot defaults for software selected from the internal UI (mame\mameopts.cpp) [AJR]. Ability to show custom menu using LUA (ui\pluginopt.cpp) [headkaze]. Added typographical characters to uismall.bdf, including the hair space used by the internal UI. Encapsulate a bit more of the menu base class to control when layout changes can happen. Encapsulate mouse translation in the menu code, make more stuff const. A bit of prep for making selected index private [Vas Crabb]. Fixed the mouse hover state drawing (ui\datmenu.cpp) [dankan1890].
 - 0.179              : Added frontend\mame\media_ident.cpp/h and console.cpp/h. Initial work on console interface. Use Ctrl-Z to close console on any OS. To start use -console parameter [Miodrag Milanovic]. Added "Software Media" folder (swpath). Allows users to specify location of loose software (emu\diimage.cpp, emuopts.cpp and ui\dirmenu.cpp). Fixed INI creating for individual games when the game and the driver share the same name (source.ini must now be in the source subfolder) [Robbbert]. Split media_identifier and console in separate files [Miodrag Milanovic].
 - 0.178              : Removed ui\datfile.cpp/h. Added plugins/data/button_char.lua, data_command.lua, data_gameinit.lua, data_hiscore.lua, data_history.lua, data_mameinfo.lua, data_messinfo.lua, data_story.lua, data_sysinfo.lua, init.lua, load_dat.lua and plugin.json. More new features for UI graphics viewer. Mouse over GFX tiles to reveal pixel values. Mouse over tilemap to reveal tile codes and colors. UI tilemap scrolling controls are now orientation-relative. Make mouse visible everywhere in UI graphics viewer by treating it like a menu. Added all necessary getters to tilemap_t and a few more. Added comment about role of decoder in tilemap creation. More consistent use of integer types in tilemap_t and other graphics-related classes. Define indirect_pen_t, requiring a slight reordering of emu.h due to an unsurprising dependency [AJR]. Fixed File Manager when cfg image directory invalid (ui\imgcntrl.cpp) [Nigel Barnes]. Removed datfile_manager (ui\datfile.cpp) and moved UI dats to LUA plugin. Changes the selgame UI sidebar get the dat information from a plugin rather than the hardcoded C++. Much easier to add other dat files and allow for scripted data. Example included that uses the hi2txt XML parser files to display high score info from hiscore file or NVRAM [Carl]. Fixed remove favorites via "configure machine" menu (ui\miscmenu.cpp). Sort favorites game list by description (ui\selgame.cpp). Fixed custom renderer alignment (ui\custui.cpp). Removed enable_dats() option, no longer needed after the switch to LUA plugin. Fixed the failure to select the last used machine if quit with the focus in another part of the main menu. Exporting game list is now also possible for the favorites list, except if it has software in it (MT06383) [dankan1890]. Consolidated code that inputs characters into buffers. Fixing issue where a multibyte character could cause the maximum size to be exceeded, and obtaining the maximum size with std::numeric_limits (ui\utils.h). Fixed an off by one error when identifying best entries for typeahead on the file selection and software list dialogs (ui\filesel.cpp and swlist.cpp) [Nathan Woods].
 - 0.177              : Fixed stuk softlist art (ui\selmenu.cpp). Attempt to prevent GCC optimising away global_alloc_clear (scripts\genie.lua). This fixed UI 'Input (general)' selection menus do not display correctly. Fixed a regression in the bios menu that caused all devices to be displayed (ui\miscmenu.cpp) [Vas Crabb]. Moved input_character() template method to ui\utils.h and changed menu_software_list::m_filename_buffer to be std::string [Nathan Woods]. Created class ui::machine_info for holding calculated machine info and generating descriptive strings for the UI. This absorbs a number of unimportant core functions that existed only for the UI's convenience [AJR]. Fixed detection of auto option in ui\submenu.cpp [MooglyGuy]. Moved creation roms list where necessary, this gets back to the menu at acceptable reaction times (ui\selgame.cpp) [dankan1890].
 - 0.176              : Added ui\filecreate.cpp/h, ui\selmenu.cpp/h and ui\widgets.cpp/h. Renamed ui\defimg.h to defimg.ipp, ui\starimg.h to starimg.ipp and ui\toolbar.h to toolbar.ipp. Added a move constructor and got rid of the 'const char *' overload. More use of std::move() and usage of emplace[_back]() as per cuavas. C++-ified the strings inside of menu items. Reduced usage of c_str() when used with menu::item_append(). Changing menu_file_selector::append_entry() to return a reference instead of a pointer. Cleanups to the software list menu. Cleanup ui\filesel.cpp. Fixed how the file selection dialog determines when to show "create". Changed a number of file manager related menus to have their outputs be by reference than pointer and tightened up typecasts in menu_select_rw. Added file create refactoring. Splitted "widgets" code out of ui::menu::global_state into a separate module. Now using core_filename_extract_base() in menu_file_create ctor. Moved background bitmap/texture back into ui\menu.cpp. Making menu_control_device_image::populate() be private (ui\imgcntrl.h). Miscellaneous cleanups to ui\imgcntrl.cpp/h and calling code [Nathan Woods]. Added first 48 Latin-1 Supplement characters, many Cyrillic characters (covers at least Russian, Ukrainian and Serbian), most of Latin B, some archaic Cyrillic characters, some IPA extensions and half-width katakana to uismall.bdf. European Latin and Cyrillic coverage should be pretty good. Added monotonic Greek (and a couple of archaic Cyrillic characters). Can now run MAME -uifont uismall.bdf -language Greek for 15kHz monitor lowercase gamma and lambda could probably be prettier, but it's definitely all legible. Improved legibility of Russian at small sizes. Force move construct/assign to be generated (ui\menuitem.h). Fixed crash when drawing menus (MT06268; ui\menu.cpp). Untangling the menu code and reduced visibility of more menu members. UI code refactoring: Split out main menu and dat box drawing from base class. Make a bunch of class statics proper per-machine persistent objects. Object lifecycle fixes. Moved more main menu stuff out of the base menu class. Get rid of the rest of the troublesome static members in ui::menu (there are still problematic function statics in some menu classes). Moved palette menu drawing code out of base into palette menu class. Added std::bind - accept no substitutes. pointer -> reference conversion. Make more menu members private or protected. Don't play so fast and loose with integer types. Reduced some vector copying. Make more static constants const. Reduced repeated string allocation in audit code. Eliminated some function statics. Moved another launch menu specific member out of base class. Moved some common code from selgame and selsoft into selmenu. Tighten up const and casts. .h -> .ipp for things that aren't really headers. Make more stuff in selmenu private. Moved the remembered driver/software associated with the snap to the cache object. Start cleaning up constness in datfile manager - it's still a mess of non-const statics. More const where it should be. Don't unnecessarily copy big maps. Don't make things members when they shouldn't be. Get rid of a couple more function statics. Moved custom render and tab navigate up to base class [Vas Crabb]. Fixed choosing any filter which has no data makes the UI unrecoverable [dankan1890]. Fixed separator in ui\pluginopt.cpp [Carl]. Added in "Miscellaneous Options" menu one item to hide ROMless machines from the availables list [Maurizio Petrarota]. Fixed selecting "Category" after listing "Favorites" causes exception [Cuavas].
 - 0.175              : Added ui\sliderchangednotifier.h and ui\text.cpp/h. UI refactoring: Moved menu classes into ::ui namesapce. Reduced scope of many symbols. Make ARRAY_LENGTH cause a compile error if used with a pointer/vector. Clean up text input code, move common operations to inline templates. Fixed numerous one-byte buffer overruns. Don't flat-out ignore input beyond the C1 hole. Fixed decoding of SDL text input [Vas Crabb]. More slider cleanup [MooglyGuy]. Changed the backing representation of OPTION_UI from being a string to an enum. Changed UI handlers to be stored as std::function(); implemented old set_handler() on top of this. Added template implementations of mame_ui_manager::set_handler(), and changed call sites. Fixed issue with volume slider likely introduced with ui handler lambda changes. Changed to C++ comments (ui\sliders.cpp). Make filesel current path clickable. Miscellaneous text fixes and cleanups. Changed mame_ui_manager::draw_text_box() to use ui::text_layout directly. Using rgb_t::transparent constant (ui\text.h). Fixed a bug in text layout that could cause text_layout::actual_width() to return something higher than what it really was. Changing maximum width specified in mame_ui_manager::draw_text_box() to allow for the border (ui\ui.cpp) [Nathan Woods]. Fixed loading info for several software lists (ui\datfile.cpp). Fixed not load for some INI files in the category filter. Removed use of strcmp for menu separators. Modernized and cleaned up some part of code. Fixed crash in attempt to use "Configure Machine" from favorites filter. Boot time reduced by ~15%. Fixed crash with icons in main list. Fixed incorrect icons refresh [dankan1890]. A little change to device_image_interface::call_display to better decouple UI fronted and image devices [F.Ulivi]. Prevent NaN errors by initializing variable in ui::text_layout (ui\text.cpp) [AJR]. Added "return to origin point (0,0)" feature to Tilemap Viewer (tied with HOME key) [Angelo Salese]. Fixed a problem with game list when using MS Sans Serif font (ui\text.cpp) [Robbbert].
 - 0.174              : Added frontend\mame\ui\menuitem.h and slider.h. Relieve UI menus and such from having to constantly fetch UI object from global state [AJR]. Fixed MAME hangs when command bench is higher than 299 (MT05831) [?]. Moved slider_state and ui_menu_item into frontend\mame [MooglyGuy].
 - 0.173              : Moved emu\ui\*.* to frontend\mame\ui\*.*. Added scripts\src\mame\frontend.lua, frontend\mame\mameopts.cpp/h, ui\pluginopt.cpp/h and ui\uimain.h. Removed ui\ctrlmenu.cpp/h and dsplmenu.cpp/h. Merged emu\cliopts.cpp/h into frontend\mame\clifront.cpp/h. Borrow string processing code from ui.cpp so that Pound sign works in layouts (using UTF-8 encoding at least) [David Haywood]. Updated sc4fd7tha.lay with UTF8 encoding of Pound sign [Krick]. Small UI changes. Fixed the key handler for the error "roms or missing CHD.". Removed the delay in showing the description in the Advanced menu. Enter on keypad now act in the same ways of Enter on keyboard (emu\inpttype.h). Reduced code for entries of "enum class ui_menu_item_type" and the use of item_append with separators. Re-enabled configuration menu for single-machine and added some options. Adding handler for the right mouse button in the main menu, calls the machine configuration. Added advanced options to per-machine configuration. Forced reset in order to properly apply some options [dankan1890]. Refactored miscmenu and added advanced menu. submenu lang and cosmetic [Jeffrey Clark]. Added plugin options menu [Carl]. Make sliders use an std::vector instead of a linked list. Make core vector-related slider handling slightly less egregious [MooglyGuy]. Removed ui\ui.h dependency from emu.h [Vas Crabb]. Get rid of some options that no longer exist (docs\man\mame.6) [Jordi Mallach]. Added ImGui based debugger. Note: Currently only works with the BGFX renderer [Barry Rodewald]. Fixed specialized ini file settings get retained on a second game launch (emu\emuopts.h) [dankan1890]. Isolated CLI part - merged emu\cliopts.cpp/h into emu\clifront.cpp/h. Created mame_options as 1st step towards creating core independent of MAME implementation (m_options -> mame_options). Splitted UI and frontend part from core [Miodrag Milanovic]. Standardize platform window pointer storage in osd_window. Also encapsulate show/hide capture/release cursor functionality. Check that we have a window before updating cursor state. Refactor OSD window. Unified renderer in osd_window as std::unique_ptr. Made windows all std::shared_ptr<window_type>. Made window lists std::list<std::shared_ptr<window_type>>. Updated OSD SDL worker_param to not use malloc (not compatible with smart pointers). Made renderer pointer to window a weak reference. May not be available during destruction of the window [Brad Hughes]. Reset menu on toggle fullscreen [Balrog].
 - 0.172              : Added scripts\font\LICENSE, font\NotoSans-Bold.bdc/ttf and font/README.md. Replaced emu\uismall.png with uismall.bdf. Fixed LANGUAGE_MENU changed when the HIDE_MENU on the customize UI are changed by cursor key [Katsuhiko Kagami]. Fixed search for software list (ui\selsoft.cpp). Fixed missing mouseover highlight for in-game menu (ui\menu.cpp). More UI internationalization. Removed unused code and key handler fix (ui\menu.cpp). Extended keyboard navigation in the UI on the right side. Added the skeleton for a configuration menu for single machine. Fixed bug in building the search path for images. Moved options "Configure Directories" and "Save Configuration" into "Configure Options" menu. Removed unnecessary icons from the toolbar (performed the same actions of entries already in the menu). Proper handling the export of the list. Updated the .po files. Changed filter label from "Originals" to "Parents" (see MT06143). Improved ROM-less and availability checking at startup (ui\selgame.cpp). Proper removal of the folder from the path (ui\dirmenu.cpp). Fixed failure to load software from the BIOS menu selection. Added handling of mouse button held down on arrows in the machine list. Fixed "Show mouse pointer" option stays off. Improved layout for viewing in vertical orientation. Added support and configuration for the image collection "covers". Slightly modernized and simplified the code. Fixed unwanted games unpauses when loading External DATs view. Proper drawing of the panels arrows for vertical orientation. Reducing the code for managing icons. Added support to "gameinit.dat" [dankan1890]. Enabled user interface navigation through UI_CONFIGURE button (tab key by default). Fixed DATs reload after path changes. Fixed software load failure from BIOS submenu [Maurizio Petrarota]. Use appname instead of hard-coded MAME for main title (ui\selgame.cpp) [Robbbert]. Added NotoSans-Bold as backup font for platforms that do not have default system fonts exposed. Make some of the UI code more localisable. Added -plugins / -noplugins (to enable or disable plugins in total): -plugin highscore (will enable just that plugin) and -noplugin highscore (will disable just that plugin). plugin/noplugin use comma separated list of plugins [Miodrag Milanovic]. Changed %d to %u to correct ARGB settings display (ui\custui.cpp). Move font enumeration to OSD, separate font name from display name as needed for OSX. Fixed BDC loading and fullpath TTF loading (emu\rendfont.cpp). Make a proper BDF out of uismall font (emu\uismall.png -> uismall.bdf). Improved OSD font API: Release font handles on destruction. Moved font enumeration into OSD, implement for SDL, Windows and OSX. Fixed drawing characters outside Unicode BMP with sdl_ttf. Support TTC fonts with sdl_ttf. Separated font display names from configuration names. Made OSX font configuration name the PostScript face name. Made sdl_ttf configuration name Family|Style. Supply ui_small font as a BDF file with Adobe glyph names [Vas Crabb]. Changed default value of autoboot_delay to 0 (emu\emuopts.cpp). The LUA scripts themselves can use wait() to delay [Tafoid]. Added support to adjust the screen color. This is now used for monochrome screens instead of creating custom palettes (8080bw.cpp, ace.cpp, blockade.cpp, circus.cpp, copsnrob.cpp, fastinvaders.cpp, galgame.cpp, headonb.cpp, hitme.cpp, meadows.cpp, nitedrvr.cpp, orbit.cpp, sbrkout.cpp, sshot.cpp, starcrus.cpp, videopin.cppand MESS drivers) [Dirk Best]. Update Windows OSD file functions to preferred more modern versions. All still available on XP and later [Brad Hughes]. Allow software selected from UI to install slot defaults. Remember to load software when the system name doesn't change [AJR]. Made Alt+Arrow minimize or maximize value (ui\sliders.cpp) [MooglyGuy].
 - 0.171              : Added emu\language.cpp/h, ui\auditmenu.cpp/h, cmddata.h, cmdrender.h, ctrlmenu.cpp/h, custmenu.cpp/h, custui.cpp/h, datfile.cpp/h, datmenu.cpp/h, defimg.h, dirmenu.cpp/h, dsplmenu.cpp/h, icorender.h, inifile.cpp/h, moptions.cpp/h, optsmenu.cpp/h, selector.cpp/h, selsoft.cpp/h, simpleselgame.cpp/h, sndmenu.cpp/h, starimg.h, toolbar.h, uicmd14.png and utils.cpp/h. Make internal mousepointer (that big orange one) smaller and less jaggies (ui\ui.cpp) [hap]. Initial import of MEWUI to MAME. Fixed search path for snapshots. The video mode in the menu display options are now obtained directly from the settings. Grouped display of external DAT file information in a single view. Fixed crash clicking on the DATs icon in the toolbar if there is no info available. Allocate and draw icons only if availab. Fixed search in filesel, dirmenu and swlist. Added option to create mame.ini to minimal UI [Dankan1890]. Allow dat files in the root by default [Justin Kerk]. Added UI parameter, option simple gives back old style start screen, features for configuration and in game stays same as with new. Fixed "Can't unpause emulation when SHIFT key is mapped to Pause function", it's now configurable. Keep ui options separate from emulator ini file. TODO: Need fixing saving of some core settings that could be changed by UI. Moved some options to ui.ini. Save mame.ini options only if they are updated in UI. Made -cc creates ui.ini as well. MAME related settings are saved on request only. Added save to simple UI (ui\simpleselgame.cpp). Removed the creation of cache file 'info_', and also removed 'Screen Type', '(no)Samples' and 'Stereo' filters. TODO: Pending to restore them in a proper manner. Standard menu now correctly handle the double click of the mouse. Draw FPS counter even in menus. Added option in the "Customize UI" menu for selecting the language [Miodrag Milanovic]. Fixed text in custom colours setup screen [Robbbert]. Added new options: -[no]exit_after_playback (default=no) and -[no]record_input (default=no). Added new UI shortcut to save current timecode (default F12). Videosnaps patch (additional file to write: gamename.inp.timecode). Translated variable names and comments to english language [Michele Fochi]. Fixed ROM-less games like breakout cannot be started from internal UI (MT06135). Added support for autofire under cheat menu and available only if cheats activated [Michele Fochi].
 - 0.165              : Reduced tagmap lookups in emu\emuopts.c [Wilbert Pol]. Removed dumb menuless_mode in ui\sliders.c [MooglyGuy].
 - 0.164              : Make 'game' and 'machine' match. It makes no sense to say a CHD for this 'game' is incorrect when using CHD images of HDs for a computer system in MESS (emu\ui\ui.c) [Cowering].
 - 0.163              : Fixed corruption in MAME UI when a game status and a pop message appear at the same time [Robbbert]. When accessing the internal File Manager for a system with available softlists, let the softlist item be highlighted by default to make navigation faster (ui\filesel.c) [Fabio Priuli]. Added emulation options for comm settings (emu\emuopts.c) [SailorSat]. Move UI mode key out of SDL options into generic options [Vas Crabb].
 - 0.161              : Avoid infinite loop in ui\ui.c when word-wrapping. This commit fixes an infinite loop in draw_text_full(), happening when there is not enough space to draw even a single a char before trying to word-wrap [Luca Bruno].
 - 0.160              : Don't crash if no memory for bitmap. More graceful exit will occur when next malloc() fails, and condition might be temporary (font\font_windows.c) [Peter Ferrie]. Made the mandatory image menu a bit more foolproof, by not allowing a reset. Until a file has been selected (ui\filemngr.c) [Fabio Priuli].
 - 0.158              : Added emu\cliopts.c/h, osd\modules\lib\osdobj_common.c/h, ui\devopt.c/h, ui\cheatopt.c/h, ui\inputmap.c/h, ui\sliders.c/h, ui\slotopt.c/h and ui\videoopt.c/h. Changed ui\imginfo.c/h to ui\info.c/h. Removed osd\osdepend.c. Fixed for real the wrong confirmation menu being prompted when leaving file creation. Also, better backspace support in the file creation menu (so that it work on Mac too) (imagedev\floppy.c, ui\filesel.c and imgcntrl.c). Added "Reset" option to Dipswitch and ConfSettings menu, as well as to the File Manager, for consistency with other menus where an hard reset is of help. Fixed Diplocation drawing so that it remains on screen also when highlighting switches without locations. While at it, I have also cleaned up a bit the handling of "Reset" in the slot and bios menus (ui\filemngr.c and miscmenu.c). Minor improvement to UI Tape Control menu, so that when multiple cassettes are available it is clear which drive controls are displayed (see e.g. (MESS) sol20 or pet2001 with "-tape2 c2n" slot). Also cleaned up some function names and better described the usage of the devctrl.h base class. Converted (MESS) UI barcode reader menu to use devctrl base class so to avoid the need of an intermediate menu where to select the reader to act on. Start displaying the device tag close to input names for the dynamical inputs which use PORT_DEVICE, so to avoid some weird quirks in the input menus when slot devices are modified (ui\miscmenu.c). Added "[Internal]" string to slot options that are not user-configurable and fixed some internal options displayed as "scrollable" (ui\miscmenu.c). Simplified Image Information code and made it fully display for systems with many image devices. Note: Compare old and new with a system like smssdisp to see what the "fully display" refers to. Splitted UI code for input mapping and slot option menus from miscmenu. Slightly reworked the UI File Manager initial menu to show which device each media belongs to, so that if you change slot options (e.g. adding further floppy drives to the emulated machine) you can more easily spot which image is currently mounted in each drive. Next, I plan to group media switches by owner, so to avoid unnecessarily long menus. Re-arranged File Manager a little bit, so that image devices are grouped by owner, like Inputs / Dips / Configs menus. Added barebone menu for device-specific options. click on any slot device option to see whether it is currently mounted or not, and which additional options depend on the selected value. Eventually, mounted devices should be configurable from this menu. Fixed bug where slot options set via internal UI did not properly create their sub-options. To see the bug, try to manually set from the UI "com" in a PC ISA port or "multitap" in the SMS driver in an old build, then reset (to apply changes) and re-enter the Slot Options menu just to see that the sub-options (the com serial ports and the multitap joypads) are not configurable because the core was not "informed" of their addition. no bug was present if the options were set from command line or from QMC2, so it was not so easy to spot the issue. Stop the game selector reporting systems with no roms as missing files. When launching systems with mandatory carts, either from command line or from the game selector, prompt the user with the file manager menu so that he can mount a game where needed, instead of killing emulation with an error. It is now finally possible to launch nes and snes and a2600 (and a few more) from the internal system selector! also MESS doesn't error out anymore if you launch such systems with no carts mounted from command line. In short: emulation finally behaves as users typically expect! Centralized game info and image info menus to a common source file (creatively named ui\info.c). Improved File Manager so that attempts to launch softlist entries without having the necessary files don't kill emulation but simply display a message to the user. Allow -str run to skip the file manager for systems with mandatory carts. Fixed bug where software items that shall create new image devices (e.g., passthru carts) or new slot options, failed to do so when loaded through the File Manager in the internal UI. To see the bug, try to launch with previous code nes with no options, then mount ggenie cart and, after the reboot, try to mount any other game in the -cart2 media switch. System will reboot, but only ggenie remains mounted. Alternatively, launch c64 and manually mount cbmieee from the UI. After reboot the serial slot options in the Slot Options menu are not configurable, because the core was not "informed" of their addition, and any cart you try to mount in -cart2 will be ignored, because the new media switch is not acknowledged by the core. Once again, from command line everything was fine, and thus the issue was hard to spot. Splitted a few more menu entries from miscmenu.c to separate files, so to avoid having too much assorted stuff in miscmenu.c (now it is down to a reasonable size). Added BIOS settings and keyboard/keypad inputs in the device option menu (ui\devopt.c). Slight improvement on device input ordering + small cleanup (ui\inputmap.c and sliders.c). The ordering is still not optimal, imho, but at least if you launch SMS with a lphaser and a paddle you don't get anymore their input mixed in the menu. I will probably get back to this after next release. Minor fix + additions to the barcode reader emulation (machine\bcreader.c) [Fabio Priuli]. Converted back osd_interface into a pure interface. The previous version just exhibited any member of osd_interface to the core. This one limits core access to osd to those functions originally specified. There is room for improvement going forward here in the design. Left FIXMEs where appropriate (emu\clifront.c). OSD Updates: OSD can now use OPTION_COMMAND; added execute_command handler to osd_interface. Moved list_network_devices and list_midi_devices to OSD. Avoid inline OSD calls in header file (emu\devfind.c) [Couriersud].
 - 0.155              : Moved tagged_list:: out of tagged_list to make it catch-able / handle add_exception / updated exception handling UNIDASM to match the main one and return a proper exitcode in case of an error (emu\clifront.c). Do not start tagmap lookup counting until everything is initialized / tagmap lookups are now properly shown for each execution when running multiple sets from built-in UI instead of only when exiting MAME completely (emu\clifront.c, machine.c and lib\util\tagmap.c/h) [Oliver Stoeneberg]. Fixed init order on software item load (ui\imgcntrl.c) [Miodrag Milanovic].
 - 0.154              : Removed ui\bbcontrl.c/h. Small core_strwildcmp() clarification (emu\clifront.c). Fixed some memory leaks in OSD (osd\osdepend.c). Improved exception reporting in cli_frontend (emu\clifront.c) [Oliver Stoeneberg]. Bump UI gfx viewer column limit up (ui\viewgfx.c). Fixed brightness sliders in drivers that use black_pen() and/or white_pen() (emu\render.c) [Alex Jackson]. Merged of new menubar code. Really got tired of looking at the text 'UI Select' and 'UI Cancel' in a blood red dialog, especially given how easy this was to fix (ui\ui.c). Fixed benign but incorrect usage of instance variable (ui\menubar.c). Now highlighting menu items ancestral to the selection. First level menus are now considered ancestral for highlighting purposes. Readding support for breaking into the debugger (ui\emenubar.c). Readding single step capability. ScrLock no longer is a menu key; it will now enable/disable keyboard menu shortcuts [Nathan Woods]. Removed minimum width/height options, if menus are unusable at that size user should make window bigger [Miodrag Milanovic]. Fixed unpause (ui\emenubar.c). In the File Manager, if the path is invalid, show the list of drives instead of an empty menu (ui\filesel.c) [Robbbert]. Reverting to classic ui due to lot of issues, as much as I hate reverting some else code. Removed not used OPTION_MEMCARD_DIRECTORY (emu\emuopts.c). Made osd_interface base class for OSD and moved initialization for each subsystem in it as virtual calls. Moved MIDI handling in base class. Cleaned running_machine of information of next machine. All is cleaned after exiting of running_machine so debugger window is removed as well till next machine is started. Made osdmini to compile [Miodrag Milanovic]. Use the flag set by the GAME/CONS/COMP/SYST macro to parse additional optional ini files: GAME = GAME_TYPE_ARCADE -> arcade.ini, CONS = GAME_TYPE_CONSOLE -> console.ini, COMP = GAME_TYPE_COMPUTER -> computer.ini and SYST = GAME_TYPE_OTHER -> othersys.ini. I've had a few requests to do this and it seems simple enough to leverage the flags we already have [David Haywood]. Reorganized OSD, handling more sound output systems and debuggers, defaults left same as before. Created osd_options as base option class for non-system specific options. Fixed error in command line not being visible due to buffering, also cleaned some other (emu\clifront.c). Placed parsing properly so warnings are displayed, was bug for a longer period (emu\clifront.c). Slots are now taken in consideration even if defined in ini only (emu\clifront.c and emuopts.c) [Miodrag Milanovic]. Fixed selected crosshair graphic does not display properly [QMC2].
 - 0.153              : Added machine\bcreader.c/h and ui\barcode.c/h, ui\imgcntrl.c/h. ui_menu-handle_events check was the wrong way around, causing another event to be popped after a stop request [hap]. Added emu\ui\devctrl.h, mainmenu.c/h and selgame.c/h. Changed emu\ui.c/h to emu\ui\ui.c/h, emu\uigfx.c/h to ui\viewgfx.c/h, emu\uiimage.c/h to ui\filemngr.c/h emu\uimain.c/h to ui\miscmenu.c/h, emu\uimenu.c/h to emu\ui\menu.c/h and emu\uiswlist.c/h to ui\swlist.c/h. Splitted emu\uiimage.c/h into ui\bbcontrl.c/h, ui\filesel.c/h, ui\imginfo.c/h and ui\tapectrl.c/h. More UI changes (commenting, bool etc) and game selector refactoring (ui\selgame.c). Cleanups of emu\ui.c/h, video.c/h and tapectrl.c/h. Refactoring and cleanup of tapectrl.c/h and bbcontrl.c/h and created base class. Move C++-ifications. Cleanups of ui\viewgfx.c and some minor refactorings. Cleanups to the file selector menus (ui\filesel.c). Changed to follow MAME OOP conventions; we now have a ui_manager class. Made handlers static methods (ui\ui.c). Const correctness (ui\ui.c). Miscellaneous cleanups (ui\menu.c), also added some accessors. Minor refactorings (ui\ui.c). Factored out quit/confirmquit logic into ui_manager::request_quit(). Adding minimum width/height options; defaulting to '0' so there is no change in behavior (the menubar branch will have different defaults) (emu\emuopts.c and render.c). Factored ui_menu_control_device_image into ui\imgcntrl.c [Nathan Woods]. Fixed MAME debug compile (video\ssv.c; #include "ui.h") [Osso]. Disable startup screens for JSMESS (the method we were previously using to skip them had unwanted side-effects) (emu\ui.c) [Justin Kerk]. Added generic barcode reader emulation: The code accepts sequences of digits in UPC-A, EAN-13 and EAN-8 format, stores them in both byte format and in pixel format; it is up to the driver to implement the correct transfer protocol. Added UI menu to enter barcodes via keyboard. It only gets activated if the running machine has a barcode device. The latter change was coordinated with Nathan, so it shall not create problems with his UI reorganization. Added emulation of the barcode reader for (MESS nes_bandai) Datach Joint ROM System unit, making playable most games using it [Fabio Priuli]. Adjustment to -listdevices output to allow for more depth and better separation between device name and description in extreme cases (emu\clifront.c) [Tafoid]. Fixed better ui\devctrl.h [Miodrag Milanovic].
 - 0.150              : Improved -listdevices display, sorting by tag and showing device hierarchies (emu\clifront.c) [Aaron Giles]. Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
 - 0.149u1            : Added a text change to the "RETURN" menu line ("Return to Prior Menu" -> "Return to Previous Menu"; emu\uimenu.c) [Mamesick].
 - 0.149              : Let's increase approx matches for gamenames from 10 to 16 (emu\clifront.c and softlist.c) [hap]. Added a new option -statename which allows to specify the location of state saving, relative to -state_directory (emu\emuopts.c) (whose usage remains unchanged). Syntax is basically the same as snapname, allowing for the  / character as path separator, %g as the driver name, and %d_[media] as the image name mounted in the "media" device. For example, using -statename foo/%g when running "mame wrally" will store save states into the folder sta/foo/wrally/ ; using -statename %g/%d_cart when running "mess nes -cart smb" will store save states into the folder sta/nes/smb/ ; using -statename %g/%d_cdrm when running "mess pce -cart cdsys -cdrm draculax" will store save states into sta/pce/draculax/ Specifying a media switch which is not available (e.g. %d_cdrm in a c64) or a media switch where no image is mounted (e.g. %d_cdrm in pce while playing a hucard game) will revert the option to its default value %g and save states will be stored in sta/*gamename*/ as in previous versions. Needless to say, this option is very useful with home computers and consoles in MESS since it allows to have 36 save slots for each game instead of 36 for the whole system library. Notice that a clean compile is required, due to the addition to the running_machine class [Fabio Priuli]. Adding recently added commands to official documentation. Updated windows related documentation [Tafoid].
 - 0.148u5            : Autoboot command support added (emu\emuopts.c and machine.c) [Ben Geeves, Miodrag Milanovic]. Added new line support for autoboot command (emu\machine.c) [Miodrag Milanovic].
 - 0.148u3            : Print proper message on -listslots in case there are no slot options available, like in some dummy slots (emu\clifront.c) [Miodrag Milanovic].
 - 0.148u2            : Avoid slots without user configurable options to write their configs at exit (emu\emuopts.c) [Fabio Priuli]. Don't save out internally determined settings to .ini files (emu\emuopts.c). Slightly clearer and safer. Re-evaluate slot options after loading .ini files in emu\emuopts.c. Be a bit more fine-grained in when to mark slot options as internal (emu\dislot.c, emuopts.c and lib/util/options.c) [Wilbert Pol]. Clear 7z file cache on exit (emu\clifront.c) [Oliver Stoeneberg].
 - 0.148u1            : Use slot interface names for filling current values in slot menu, because using command line options produces garbage at least on OS10.6.8. Fixed handling of slot options which have only internal options available (and hence are not configurable by the end-user) (emu\uimain.c) [Fabio Priuli]. Faster enumeration during -verifyroms (emu\clifront.c) [Peter Ferrie]. Reduced tagmap lookups in ui_update_and_render() and changed ui_is_menu_active() to bool (emu\ui.c/h) [Oliver Stoeneberg].
 - 0.147u2            : TAB menu: Moved "Analog Controls" to under "Input (this xx)", and renamed "Driver Configuration" to "xx Configuration" (xx is Game in MAME, and System in MESS) [hap]. Added verifysoftlist command for verifying software availability for separate software lists (emu\clifront.c) [Wilbert Pol].
 - 0.147              : Make ui_active a user option [hap]. Made cmd line parameter parsing going into unlimited levels (emu\emuopts.c and lib\util\options.c/h) [Miodrag Milanovic]. Updated DOCS config.txt and windows.txt with recent commands that were never added to documentation as well as some clarifications [Tafoid].
 - 0.146u5            : Removed not used type (emu\uimenu.h). Make mouse_bitmap[] const in emu\ui.c. When menus are active, enable mouse on full screen. Made UI mouse cursor optional (default is off for now), in games with clickable artwork cursor is visible, application is not taking mouse control anymore [Miodrag Milanovic]. Small optimization to ui_draw_text_full() and ui_draw_text_full() [Oliver Stoeneberg].
 - 0.146u4            : PORT_ADJUSTER now accepts PORT_MINMAX as well [Couriersud].
 - 0.146u1            : Make fix slots not available by command line. Fix for internal ui crash on dips menu (emu\uimain.c) [Miodrag Milanovic]. If a game has no diplocations, don't draw an empty box in the dipswitch menu (emu\uimain.c) [Fabio Priuli].
 - 0.145u8            : Fixed Game select UI hangs when using cursor keys [Couriersud]. Made UI for BIOS selection where applicable, and moved info about current system and default BIOS to device_t class [Miodrag Milanovic]. Fixed none/default toggle for game-specific configs (emu\uimain.c) [Aaron Giles].
 - 0.145u6            : Fix for feature name XML output in softlist (emu\clifront.c) [bobz].
 - 0.145u4            : Tafoid added Driver display in both the game select UI as well as the gameinfo screens which should prove helpful. hap fixed menu refresh on entering. This fixed GUI last menuitem shows "Return to Game" instead of "Return to Prior Menu". Aaron Giles fixed display of driver name under MSVC. Some minor cleanup in that function.
 - 0.145              : Miodrag Milanovic fixed game info screen.
 - 0.144u5            : Dumbify the menus and add a control layer (uiimage/diimage) [O. Galibert].
 - 0.144u4            : hap fixed changing INC and DEC inputs, results in .cfg file issue. Olivier Galibert fixed changing INC in UI menu changes DEC instead and [UI] Box no longer drawn around physical DIP locations.
 - 0.144u3            : Added src\emu\uimain.c/h.
 - 0.143u4            : hap fixed refreshspeed activating when not needed in all games and drivers.
 - 0.143u3            : Miodrag Milanovic added socket support to windows OSD.
 - 0.142u5            : Added confirm_quit option (defaults to off) (emu\emuopts.c). When on, pressing ESC you are prompted with a 'confirm quit' screen rather than directly quit emulation [MamePlus Team, Mamesick, Fabio Priuli].
 - 0.142              : If we get an error parsing options, see if there was no command and what looks like an invalid system name. In that case, provide suggestions for the system name instead of reporting the options error [Aaron Giles].
 - 0.141u4            : hap decreased color saturation and alpha of internal fake shifter layout to make it less distracting. Make shift/alt+right work on channel volume sliders (fractions between 0 and 1 were always rounded down) [hap].
 - 0.141u3            : Alex Jackson added information screen output for any game known to have bad or missing data in order to better inform the user as to the reason their emulation may not work as expected.
 - 0.141u1            : Changed the Analog Controls menu to only list controls selected in the Driver Configuration [Derrick Renaud].
 - 0.140u3            : Miodrag Milanovic fixed multiple escapes keypresses needed to exit MAME.
 - 0.140u1            : Aaron Giles created new class osd_interface to house OSD callbacks. Added new module osdepend.c with default empty implementations. Changed mame_execute() and cli_execute() to accept a reference to an osd_interface which is provided by the caller. Updated SDL and Windows OSD to create an osd_interface-derived class and moved their OSD callbacks to be members. Make osdmini build again [Aaron Giles]. Aaron Giles added support for OSD-generated fonts. The OSD is queried first to see if it owns a given font (based on the name), and if it does, it is responsible for generating bitmaps on the fly as characters are requested. Aaron Giles added new option -uifont to specify the UI font. It can be set to a filename, in which case a BDF font will be loaded. It can also be set to a font name (assuming the OSD support is present), in which case the OSD font by that name is used. The default value is 'default' which can be used by the OSD to substitute a default font or by the OSD, which will default to ui.bdf as before. In all cases, it falls back to the built-in font by default if none of the previous options works. NOTE: On Windows, the OSD will default to Tahoma as the font name. Also on Windows, font names can be specified with [b] to indicate bold or [i] to indicate italic. Use "default" font for artwork elements as well. Make UI backgrounds a bit more opaque. Fix crash when passing NULL filename to OSD code [Aaron Giles]. Aaron Giles added the ability to choose a different name for the UI font.
 - 0.139u3            : Aaron Giles added -bench <emulated-seconds> option to standardize benchmarking.
 - 0.138u3            : Natural keyboard status saved in options when changed [Robbbert].
 - 0.137u2            : Bryan Ischo added a check for the OPTION_READCONFIG option before executing the code which would attempt to incorporate configuration file settings into the current configuration, because if OPTION_READCONFIG is set to false, then there is no reason to even try to do this as every single configuration file will be ignored (because config files have been turned off by OPTION_READCONFIG).
 - 0.136u4            : Miodrag Milanovic correct default assignment of F10 as the default throttle on/off key for MAME. The #ifdef MESS is needed here due to it's unique old/new UI setup.
 - 0.136u2            : UI menu interface changes [Couriersud]: All ui functions now expect a render_container. Removed all macros referencing render_container_get_ui. ui_menu_alloc now is passed a container to which to render the menu.
 - 0.134u4            : Dirk Best changed CPU clock display in the UI to display multiplied/divided clocks instead of raw clocks.
 - 0.133u5            : Couriersud and Aaron Giles renamed osd_profiling_ticks() to get_profile_ticks(). Moved implemention into inline functions in eminline.h and the ei* functions.
 - 0.133u4            : Aaron Giles removed osd_is_bad_read_ptr function.
 - 0.132u4            : Mr. Do fixed sets with added Shifters (running with the Shifter changes orientation in vertical games).
 - 0.131u1            : Changed UI to ignore selection from lightguns when off screen. This stops selection of Gun X Gun Y if you move the gun out of range [Derrick Renaud].
 - 0.131              : Fixed bug where repeating axis values were being selected for button input in UI. When using RawInput - Fixed UI selection of Gun axis so Gun 1 is not always selected with the desired gun [Derrick Renaud].
 - 0.130u4            : Derrick Renaud fixed UI when modifying the inc/dec/analog fields of an analog control in sequence. Derrick Renaud fixed analog settings to return to default when IPT_UI_SELECT (enter) pressed. Fixed misplaced brackets, allowing upper/lower case extensions for crosshair graphics and ldplayer CHD files.
 - 0.130              : Aaron Giles fixed "Working clones" display problem.
 - 0.129              : Aaron Giles fixed rendering of slider controls so it doesn't overlap when menus get large. Aaron Giles added new frontend option -listbrothers. This will list all "brothers" of a given driver, meaning those drivers that come from the same source file, along with their parent names if they are clones. If a wildcard name is specified for the driver, then the first driver in a given source file will trigger a list of his brothers, and any other drivers in the same source file which match the wildcard will be flagged.
 - 0.128u5            : Made non-critical UI warnings yellow instead so that they stand out [BarnacleEd]. Aaron Giles re-enabled the OSD key for master volume control. All other sliders are still only accessible via the menus. Fixed core input automatic enable options in emuopts.c.
 - 0.127u7            : Stephane Humbert removed unneeded UI keys by removing the constants. Readded UI_ON_SCREEN_DISPLAY to be changed again in the "Inputs" menu.
 - 0.127u6            : Stephane Humbert removed unneeded UI keys: UI_ON_SCREEN_DISPLAY (there is now a "Slider Controls" menu), UI_ADD_CHEAT, UI_DELETE_CHEAT, UI_SAVE_CHEAT, UI_WATCH_VALUE, UI_EDIT_CHEAT, UI_RELOAD_CHEAT (these keys belonged to the old cheat engine).
 - 0.127u1            : Nathan Woods fixed problem that would cause the "Return To Prior Menu" menu item to not stick if one is calling ui_menu_reset() with UI_MENU_RESET_REMEMBER_POSITION, and that menu item is selected. Aaron Giles changed slider controls into a menu. For now, removed the old direct access mechanism; instead, you must access the sliders via the main menu. While in the menu, you can use the ~ key to turn off the menu display and leave only the bar display, in order to see more of the screen. Aaron Giles fixed annoying behaviour of highlighted entries in minimal UI.
 - 0.127              : Oliver Stoenberg use machine in uigfx.c where it's already available.
 - 0.126u5            : Aaron Giles added new flag to menu items: MENU_FLAG_DISABLE, which means the item will be visible but not selectable.
 - 0.126u4            : Aaron Giles added support for DEL as well as BS for backspacing in the game select menu. Also limited input to ASCII characters. Aaron Giles restored previous behavior that allowed popmessage() messages to overlay menus and other UI.
 - 0.126u3            : Nathan Woods added the ability to pass an optional destructor to ui_menu_alloc_state(). Aaron Giles fixed menu handling so it doesn't swallow the tab key.
 - 0.126u2            : Aaron Giles made dipswitch renderings consistent regardless of UI aspect.
 - 0.126u1            : Nathan Woods and Aaron Giles added new module uiinput.c which manages input for the user interface. The OSD is responsible for pushing mouse events and character events to this interface in order to support mouse movement and text-based input (currently only used for the select game menu). Added support for navigating through the menus using the mouse. Aaron Giles redesigned the UI menus so that they can maintain a richer state. Now the menus can be generated once and reused, rather than requiring them to be regenerated on each frame. All menus also share a comment eventing system and navigation through them is managed centrally. Rewrote all the menus to use the new system, apart from the cheat menus, which are now disabled. Reorganized the video menu to make it easier to understand. Aaron Giles converted UI startup screens to use astrings.
 - 0.126              : Couriersud fixed scrolling speed in case a cheat dat has invalid (i.e. 0) settings.
 - 0.125u9            : Couriersud fixed Fatal Exception on In-Game Menu
 - 0.125u3            : Aaron Giles fixed behavior of toggle switches so that they don't lose their value when the UI is up. They also can now be used for multibit DIP switch settings in which case they toggle through all the options. Added new functions input_field_select_next_setting() and input_field_select_previous_setting() which can be used to iterate properly through DIP switches. Fixed the behavior for cases where conditional ports are in play (you could get stuck). Changed uimenu.c to call these instead of implementing its own. Aaron Giles changed uimenu.c so that hitting ENTER on a DIP switch resets it to its default value. This is analagous to how the OSD sliders behave. Nathan Woods changed text used to specify a menu separator in uimenu.c, and added a #define for the new string.
 - 0.124u4            : Nicola Salmoria changed UI to allow volumes higher than 2.0.
 - 0.124u2            : Oliver Stoenberg cleaned up the machine usage in the OSD/Windows files and added the running_machine parameter where possible.
 - 0.124u1            : Changed winwork.c from using hand-built scalable locks to using standard Windows CriticalSections for now, to hopefully address. Couriersud fixed cfg file corruption if joystick is not connected; itemclass now part of token if item is not found. Settings for joysticks which use a custom item id will still be lost. A fallback has to be provided here since those will use a token generated from the input item name.
 - 0.124              : Aaron Giles de-deprecat-ed ui.c.
 - 0.123u6            : Fixed switchres causes Exception at EIP=009413BF: ACCESS VIOLATION. Fixed launching games from in-game [TAB] menu 2-3 times in a row throws access violation.
 - 0.123u5            : Nicola Salmoria fixed loading mixer settings when the driver default value is calculated.
 - 0.123u4            : SailorSat fixed display of screen information so that it shows live information, not just the original configurations.
 - 0.123u3            : Aaron Giles fixed "game info screen" for games with multiple screens with different resolutions.
 - 0.123u2            : Changed game information to display info about all screens [Aaron Giles].
 - 0.122u7            : Made the text displayed by the various UI sliders more intelligent. Basically, it will only print an index for an item if there are multiple of a given type [Zsolt Vasvari]. Atari Ace fixed freezes in the MAME UI list game.
 - 0.122u6            : Removed obsolete emu\uitext.c/h and all references to it [Aaron Giles].
 - 0.122u4            : Aaron Giles fixed GUI game list.
 - 0.122u3            : Aaron Giles removed ui_popup(), thanks to Oliver Stoeneberg's suggestion. Drivers should always be using popmessage() instead (has been this way for a while). Augmented popmessage() so that you can pass NULL to immediately dismiss any messages.
 - 0.121u4            : Dirk Best added new VIDEO_TYPE_NONE to indicate that there is no screen, and fixed internal UI displays to ignore resolution parameters if it is specified.
 - 0.120u1            : Couriersud and Vas Crabb changed osdcore.h to include osinline.h and allow for external inline definitions of synchronization primitives. Also added a new work queue hint WORK_QUEUE_FLAG_HIGH_FREQ which indicates that we should spin aggressively waiting for new items.
 - 0.119u4            : Aaron Giles simplified the osd_work implementation. Removed the concept of shared work items. Added new function osd_work_item_queue_multiple() which allows efficient queueing of large numbers of work items. Changed previous osd_work_item_queue() function into an inline that calls the new function.
 - 0.119u3            : Christophe Jaillet fixed error messages output from option.c. The OSD layer is now required to supply to additional synchronization primitives: osd_compare_exchange32() and osd_compare_exchange64(). These primitives should implement an atomic compare and exchange of 32-bit and 64-bit values, respectively. Added implementations of these functions to the Windows OSD layer [Aaron Giles]. Defined two new inline functions that are built on the new OSD primitives: osd_compare_exchange_ptr(), which performs an atomic compare/exchange on a pointer of the appropriate size, and osd_sync_add() which atomically adds a value to a location in memory [Aaron Giles].
 - 0.119u2            : Nathan Woods created an options_output_diff_ini_file() API, which is similar to options_output_ini_file(), but only outputs the options which are different than a base core_options. Changed INI outputting (and hence the -cc option) to omit headers that do not contain any options.
 - 0.118u6            : Aaron Giles made -autoframeskip aware of the -speed setting.
 - 0.118u5            : Aaron Giles added new parameter -refreshspeed (-rs for short) which dynamically adjusts the -speed parameter to keep the effective refresh rate below that of the lowest screen refresh rate.
 - 0.118u2            : Aaron Giles added new experimental control for overall emulation speed. This lets you specify how fast/slow the gameplay should happen relative to the original. -speed 1.0 means run at normal speed. -speed 2.0 means run at 2x speed. -speed 0.5 means run at half speed. Note that the sound pitch is shifted as a result. If you are running early Namco games that normally run at 60.60Hz, you can run them at -speed 0.99 and it should run at under 60Hz, which should prevent sound stuttering if your monitor is not capable of greater than 60Hz refresh rates. If this turns out to be useful, future versions may support a -speed refresh parameter that automatically tweaks the speed to keep you under your monitor's refresh rate. NOTE: If you are experiencing sound stuttering due to not being able to run your display at >60Hz, please give the -speed option a try. You should be able to run MAME at a small emulation speed decrease in order to get the game under your monitor's refresh rate.
 - 0.118              : Nathan Woods fixed bug in options handling introduced with recent changes.
 - 0.117u3            : Moved tools\png2bdc.c to src\build\.
 - 0.117u2            : Further tweaks to the game selection UI [Aaron Giles]: Disabled the tab key. Added hook for general input configuration from the menu. Split set names from friendly names into left/right columns. Added a background to the descriptive names of clones. If you start with the game selection menu, hitting Esc to exit a game brings you back to the menu rather than quitting immediately. Fixed logic so that INI files are reloaded for each game. Aaron Giles changed menu rendering a bit. Added a background hilight to more strongly emphasize the current item. Added rendered arrows to indicate more items on the top/bottom and to indicate selection options in the DIP switch menus. Changed hilighting to be a bit less garish. Fixed repeat rates on keys to no longer be tied to the framerate. Added support for page up/page down generically in menus. Also made pause toggle work while menus are visible. Cleaned up options.c code. Added priority levels to options as they are set. New options are only accepted if they have greater or equal priority to a previous change. Added new function options_revert() to revert options below a given priority to their defaults. Changed options_get_string() so that it always returns a valid string (never NULL). Invalid strings are returned as empty strings.
 - 0.117u1            : Added emu\drivers\empty.c. Aaron Giles added "empty" driver which is used to host the game selection screen when no valid game is selected. Added experimental new minimal game selection user interface. This interface can be accessed if MAME is started with no parameters, or via the main menu by choosing "Select a New Game". This interface allows you to select a game driver by typing in the name of the game. As you type, MAME's fuzzy name matching code will list the top 15 selections that match. The interface will only display games that it finds in your rompath. Added support for frame update callbacks, similar to pause and exit callbacks but called at the same time as osd_update(). Changed osd_init() to no longer return a value. OSD initialization should now rely on fatalerror() to report fatal initialization problems.
 - 0.115u2            : Aaron Giles changed png2bdc to support multiple input PNGs.
 - 0.113u4            : Nathan Woods created WINOPTIONS_* constants for Windows OSD options.
 - 0.113u3            : Changed src\emu\options.c/h to src\emu\emuopts.c/h.
 - 0.113u2            : Aaron Giles changed the Windows OSD work code to only allocate events for items when necessary, in order to conserve system resources. Added a 'flags' parameter to osd_work_item_queue() and defined one new flag: WORK_ITEM_FLAG_AUTO_RELEASE, which means that the work item should be automatically released when completed. Added remaining Unicode characters up to 0100h in the built-in font. Moved support for the following options into the core: -state <x>, autosave, playback <file>, record <file>, mngwrite <file>, wavwrite <file>, rotate, ror, rol, autoror, autorol, flipx, flipy, artwork_crop, use_backdrops, use_overlays, use_bezels, brightness <x>, contrast <x>, gamma <x>, pause_brightness <x>, antialias, beam <x>, flicker <x>, sound, samples, volume <x>, ctrlr, log, debug, debugscript <file>, bios <x>, cheat and -skip_gameinfo.
 - 0.113u1            : Added emu\uismall.png and tools\png2bdc.c. Nathan Woods added a call winwindow_ui_exec_on_main_thread() to allow code on the window thread to cause a function to be executed on the main thread. Aaron Giles moved throttling, frameskipping, fast forwarding and timing into the core. Removed the equivalent code from the Windows OSD layer. This now relies on options being set for controlling these features by the OSD layer via options.c. Deprecated the old osd_get_fps_text() function. Changed osd_update() to take a parameter indicating whether or not the frame was skipped. Added new function osd_sleep() to the OSD core timing library. Added a new mechanism for building in fonts. A new tool, png2bdc can convert a specially formatted PNG file into a binary cached MAME font. This cached font can be embedded into MAME. A new default small UI font is now included, and built via this process to replace the old hard-coded one. The new font is proportional, so there is better use of limited screen real estate in small video modes. Some balancing/ tweaking of the actual font still needs to be done, and some basic functionality still needs to be added to png2bdc. Consider this a work-in-progress.
 - 0.113              : Aaron Giles defined several new exit codes for "unknown game" and "invalid config" and changed the Windows OSD layer to output them. Removed obsolete joystick calibration junk from the osdepend layer. If anyone needs this functionality, I will look into providing a way for the OSD code to add menus in the UI.
 - 0.112u4            : Added support for more flexible word wrapping with CJK characters. Also added wrapping on hyphens [MAME Plus! team, Aaron Giles]. Aaron Giles fixed sound skip if -rdtsc option is enabled.
 - 0.112u3            : Rewrote throttling code to be more forgiving of OSD-level glitches and uneven frame rates. Fixed garbage in fonts on some systems [Aaron Giles].
 - 0.112u2            : Aaron Giles changed font scaling again. Fonts 24 pixels tall and above are scaled the old way. Fonts smaller than that are scaled via integral scale factors and adjusted the new way.
 - 0.112u1            : Added src\osd\osdcomm.h. Aaron Giles made UI font size computations more flexible. This ensures that fonts are scaled vertically by an integral factor and should produce nice proportions for most fonts now. Made osd_uchar_from_osdchar a member of the osdcore file library.
 - 0.112              : Nathan Woods added osd_rmfile to the osdcore, replacing calls to remove().
 - 0.111u6            : Defined new osd core function osd_is_absolute_path(). Changed behavior of core fileio so that absolute paths are identified and search paths ignored in that case [Nathan Woods].
 - 0.111u5            : Aaron Giles fixed font aspect ratio on non-1:1 resolutions. Added mechanism to cache a binary format of BDF fonts for improved loading speed. Also added a bit of progress when loading huge BDF fonts so that you know what's happening.
 - 0.111u4            : Aaron Giles added support in the user interface to render all text assuming it is UTF-8 encoded. This means that UTF-8 encoded Unicode names can be used in in-game descriptions, etc. But first you will need a unicode capable BDF font. Fixed several bugs in the Windows implementation of the OSD work item interfaces.
 - 0.111u3            : Zsolt Vasvari changed uimenu.c to allow displaying DP switch banks which have gaps (unused switches) in them. These switches are now grayed out. Aaron Giles separated "core" OSD function definitions to osdcore.h. Added more extensive documentation. Created a new library called osdcore, which is now built and linked to each executable. Moved all definitions of expected components of osdcore into new header file osdcore.h, and added consistent documentation for them all. Removed osd_tool.c, and moved the necessary parts of its functionality into osdcore. Defined a new set of interfaces for osdcore which creates an abstract interface for queueing work items to be potentially executed on a secondary thread. Implemented the Windows versions of these routines, but have not done any testing yet. Separated Windows OSD core routines into individual files, as folows: windir.c  - directory-related core OSD functions, winfile.c - file-related core OSD functions, winmisc.c - miscellaneous core OSD functions, winsync.c - synchronization-related core OSD functions, wintime.c - timing-related core OSD functions and winwork.c - threading-related core OSD functions. Created new osdmini directory with minimal implementations of all the OSD core routines. These can be used to stub in functionality or as a starting point for new ports.
 - 0.111              : Derrick Renaud properly removes the "Autocenter Speed" from the UI when not used.
 - 0.110u3            : Aaron Giles added new option -fontpath to control where the font files are loaded from.
 - 0.109u5            : Nicola Salmoria fixed subtle bug in the UI menu handler that only manifested on MinGW-based compiles.
 - 0.109u2            : Aaron Giles improved documentation in osdepend.h to better describe some of the functions and provide a general overview of how things work. Removed unused osd_readkey_unicode function. Some enhancements to the options manager [Aaron Giles]: Added a simpler options_init for startup. Added support for internal options. Added support for multiple unadorned options. Moved core options definitions into the core options.c (note that the default INI path no longer includes $HOME/.mame since that is not cross-platform; *nix platforms will need to explicitly override that default in their OSD code). Added accessor to set the default value of a given option. Changed error reporting so that errors are tracked internally and reported only once.
 - 0.109u1            : Aaron Giles redesigned the OSD file I/O interfaces to be simpler and more straightforward. Also simplified the core's file I/O routines and included some functionality that was previously left to the OSD layer.
 - 0.108u2            : Nathan Woods fixed options_output_ini_file() and options_output_ini_mame_file() to properly handle string options containing spaces.
 - 0.107u3            : Aaron Giles added new option -video none which can be used for CPU benchmarking without the overhead of the video system. Added options -screen, -aspect, -resolution, and -view which apply to all windows. These values can be individually overridden for each specific window by using the existing -screen<n>, -aspect<n>, -resolution<n> and -view<n> options.
 - 0.107u2            : Some cleanups in the new UI/video code to make MESS happy [Nathan Woods]. Aaron Giles fixed bug that prevented save/restore from working in the UI.
 - 0.107u1            : Replaced src\ui_text.c/h and usrintrf.c/h with src\ui.c/h, uigfx.c/h, uimenu.c/h and uitext.c/h. Aaron Giles massively rewrote the user interface to rely on the new rendering systems. Broke the UI into multiple pieces (ui.c, uimenu.c, uigfx.c). The code is now verging on readable. Renamed ui_popup to popmessage across the code, and implemented popmessage in mame.c. This breaks the dependency between the core driver code and the user interface in almost all cases. Added a red background to serious warning messages in the vain hope that people might take better notice. Added new function configure_screen() which can control the width, height, visible area, and refresh rate of each screen. This function allows for widths and heights larger than what were specified in the game driver, so you no longer have to specify the maximum width and height in the driver, but can instead specify a typical width and height. This function supercedes the old set_visible_area() and set_refresh_rate() functions. The former has been rewritten to call configure_screen(), while the latter has been removed entirely.
 - 0.107              : Aaron Giles fixed gamma and brightness ranges in the UI to match the limits from the command line.
 - 0.106u12           : Aaron Giles fixed bug that caused the UI to be impacted by command-line brightness, contrast and gamma controls. Changed the on screen display so that pressing ENTER resets a value to its default. Moved all options to a single central location in windows\config.c. Cleaned up and reordered the options more logically.
 - 0.106u11           : Aaron Giles added X and Y offset/scale controls for each screen. This allows you to control the actual position of the screen within its container. In order to see beyond the game-configured visible area, the game must have set up the screen size to be larger than the core visible area. The Williams drivers have been updated as an example. Eugene Jarvis mentioned that if you adjust your monitor, you can see the stack in Robotron off to the right, and now you can in MAME as well. The values configured in the OSD are saved in the config file for each game. Added brightness, contrast and gamma controls per-screen in the on-screen display section of the UI. This requires a change to the OSD rendering code to use lookup tables when copying RGB data to textures. Default values can be specified via the -brightness, -contrast, and -gamma command line/configuration options. Note that these options only affect screen areas of the final output and have no effect on artwork or the UI. The values configured in the OSD are saved in the config file for each game. Added full screen equivalents of the brightness, contrast and gamma controls. Unlike the screens-specific options, these only work in full screen mode using DirectX, and apply globally, affecting artwork and user interface as well. They are controlled via the -full_screen_brightness, -full_screen_contrast and -full_screen_gamma options. Added new video option to move the user interface to secondary screens. The selected screen is saved in the video configuration.
 - 0.106u10           : Aaron Giles added support for remembering the selected view, rotation and artwork enabled states in the game's cfg file. Aaron Giles added rudimentary progress displays during ROM loading and graphics decoding so you have something to look at instead of a black screen.
 - 0.106u9            : Aaron Giles added "fast forward" function (defaults to the INSERT key). While holding this key down, the frameskip is temporarily maxed out and throttling is turned off. This is useful for skipping over parts of the emulation. Added support for pausing/unpausing while showing graphics and tilemaps. Fixed some glitchiness in font displaying where they would switch in and out of scaled modes due to rounding errors. Changed the initial UI screens to only compute their text a single time. This reduces the CPU usage greatly when displaying some of the "game doesn't work" warnings. Removed options.use_artwork from the global options. This is now directly configured by the OSD layer. Added "left half" and "right half" to the Darius layouts so you can stretch three screens over two, though you need to explicitly set them either in the UI or using the -view0 and -view1 parameters on the command line.
 - 0.106u7            : Aaron Giles improved font logic so that small fonts are scaled more appropriately at low resolutions. It's not perfect, but works well for most games when running with the new DirectDraw option, which always renders games at minimum resolution.
 - 0.106u8            : The UI is now limited to a single screen [Aaron Giles].
 - 0.106u5            : Added experimental OSD locks [Aaron Giles]: osd_lock_alloc() allocates a lock. osd_lock_acquire() acquires a lock, blocking until success. osd_lock_try() tries to acquire a lock and returns whether or not it succeeded. osd_lock_release() releases a lock. osd_lock_free() frees memory used by a lock. If the OSD layer is not using multiple threads, these can just be stubbed out (return TRUE for osd_lock_acquire and fake the rest). Aaron Giles fixed ESC key not cancelling out of initial UI screens. Nathan Woods fixed bug where the gamename was reallocated out from under us by the new config system.
 - 0.106u3            : Added src\options.c/h. Rewrote the options parsing code to be more flexible and generic. A new core source file options.c provides the ability to add and maintain a database of key/value pairs, which can be queried at runtime. Reconnected all existing frontend options through this code. Bounds checking on options for the old renderer is pretty loose, and several more complicated options have been disconnected as a result. If you are still running with the old renderer, be careful [Aaron Giles].
 - 0.106u1            : Aaron Giles reorganized the user interface code to better support the new render system.
 - 0.105u4            : Giuseppe Gorgoglione fixed UI positioning when artwork is enabled.
 - 0.105u1            : Nathan Woods moved calls to ui_set_visible_area() into set_visible_area() to work around timing problems when they are called at separate times during a single frame.
 - 0.104u7            : Aaron Giles added code to the UI to sort the per-game inputs in a standard order.
 - 0.104u3            : smf replaced -high_priority with -priority, you can now specify from -15 to 1. The default is -15 as this makes Dell laptop keyboards work. It still won't raise the priority if running with the debugger, but it will lower it. Fixed a subtle bug at the same time as -high_priority was only working when you used rdtsc.
 - 0.100u4            : Aaron Giles changed ui_popup to display longer by default for longer messages. Added "Uptime" to the bookkeeping info displayed in the UI. Nathan Woods updated usrintrf.c to work better with MESS.
 - 0.97u1             : Samuele Zannoli added home/end key support in the history display.
 - 0.99u3             : Removed src\datafile.c/h. Removed the internal display of history.dat. Cramming this kind of data into MAME's limited UI is not really useful, and viewing the history.dat information is supported by many frontends and websites. Significant overhaul of the user interface infrastructure [Aaron Giles]: All user interface rendering is now cached until the end and rendered in one pass. A large number of extraneous and redundant functions have been removed and replaced with a smaller set of more flexible APIs. Global access to the UI fonts and colortables is now gone, they are private to the user interface code. All global user interface function names have been normalized. Most importantly, usrintf_showmessage is now ui_popup. Pause behavior has been redefined; instead of sitting in a tight loop, the code proceeds normally, but the CPU execution system does not advance time. Code for the menus has been reworked; some menus are temporarily not available (cheats, memory cards).
 - 0.99u1             : Rewrote the configuration reader/writer code to be more generic and easier for other subsystems to plug into. This necessitated a rewrite of the way the existing code reads config data. As a result, your game.cfg files will be invalid after this update. Your default.cfg and existing controller-specific .cfg files should work fine [Aaron Giles].
 - 0.96u2             : Aaron Giles swapped On Screen Display and Config Menu items so that accidental key configuration changes don't kill your ability to get to the menu by default. Curt Coder added the ability to clear an input configure via the delete key (inptport.c).
 - 0.96               : Aaron Giles added explanation that left/right joystick wiggle works on "OK" screens.
 - 0.93u1             : UI Changes [Nicola Salmoria]: Now shows grouped consecutive identical CPUs and sound chips in the game information screen, so games like Gyruss fit again. Bumped the MAX dip switches that can be handled by the dip switch menu to 256 (and adds bounds checking so it doesn't crash anyway).
 - 0.90u3             : Chris Kirmse added support for a new command line parameter, -screen, that specifies which screen to draw on (if the user has more than one).
 - 0.85               : Aaron Giles fixed bug with new command line options when using -createconfig. Fixed bug that prevented default controls that were set to "None" from saving/restoring properly.
 - 0.84u5             : Aaron Giles improved the CFG file format.
 - 0.84u4             : Aaron Giles changed the format of .cfg files to use XML. All old .cfg files are useless, just toss them away. This should allow for easier backwards compatibility in the future.
 - 20th July      2004: Aaron Giles - After struggling to patch up the input port system with the recent changes, I've finally come to the conclusion that it has been hacked and patched way too much over the years so I am doing a serious cleanup/reworking. While I'm at it, the .CFG files are moving to XML format. Next release should be a big barrel of laughs while the kinks get ironed out.
 - 0.84u3             : Aaron Giles added the ability to tweak the refresh rate if -cheat is enabled. Use SHIFT to modify by 0.1fps, CONTROL to modify by 0.01fps, and ALT to modify by 0.001fps.
 - 0.84u1             : Aaron Giles removed support for older format CFG files and support for "cheat" ports and "reset CPU 0" ports.
 - 0.81u4             : OSD 'NO EXECUTE' support [Aaron Giles]: This patch introduces two new OSD functions: osd_alloc_executable() and osd_free_executable(). For most platforms, these can just map to malloc and free. However, starting with WinXP SP2, if you are running on a processor that supports the NO_EXECUTE bit (currently only 64-bit AMD chips), standard user-mode memory allocations won't allow you to put code in them and execute it. Since this is exactly what x86drc.c does, I've added the two functions above. On Windows, these map to calling VirtualAlloc and VirtualFree, which allow you to specify the read/write/execute states of the pages thus allocated.
 - 0.77u3             : Nathan Woods cleanups the UI string support, primarily to more easily support MESS specific strings without modifying MAME files. Also removed uistring_shutdown(), which is made unnecessary by auto_strdup().
 -  5th December  2003: Nathan Woods cleaned up the UI string support, to help MESS functionality.
 - 0.77               : Nathan Woods added a handful of comments to uifontdata, changed character 14 to a solid circle; previously this character was blank and unused and miscellaneous changes within #ifdef MESS.
 - 0.75u1             : BUT fixed default.cfg saving.
 - 0.74u2             : Fixed Config saving bug [BUT].
 - 25th September 2003: BUT fixed a bug where default key and mixer settings wouldn't get saved.
 - 0.74               : Stefan Jokisch fixed User-Interface bug which was causing problems setting controls for some of the players. Improved loading of MAME 0.72 cfg files (prevents Mixer settings corruption) [Stefan Jokisch].
 - 14th September 2003: Stefan Jokisch added a little sanity check to the .cfg file loading, to prevent further problems with .cfg files that have been corrupted.
 -  6th September 2003: Nathan Woods sent in a patch that moves the .cfg file handling out of inptport.c into its own source file.
 -  4th September 2003: Stefan Jokisch fixed a bug that caused the volume settings get corrupted when loading old .cfg files.
 - 0.72u1             : Changed DIP-Menu display if no dipswitches are defined in the driver instead of flashing a blank menu when you try and enter it [Paul Priest]. Nathan Woods parameterized the setdipswitches() call; so that a menu that looks like the DIP switch menu can easily be made with different IPT_* values (MESS has a configuration menu that functions a lot like the DIP switch menu). Added a small fix to allow the UI to be drawn if the artwork system is active but no artwork is present (not an issue for MAME).
 - 10th August    2003: Paul Priest changed the user interface so that the DIP menu item is not displayed if the game does not use DIP switches.
 - 0.70u2             : Renames display_fps() to ui_display_fps() and makes it non-static [Nathan Woods].
 - 0.70u1             : Added four new calls to control showing the fps count and the profiler (src\usrintrf.c) [Nathan Woods]: void ui_show_fps_set(int show), int ui_show_fps_get(void), void ui_show_profiler_set(int show) and int ui_show_profiler_get(void). Fixed some problems with the new alt. BIOS code (src\common.c, src\info.c) [Chris Kirmse, Paul Priest].
 - 0.70               : Improved BIOS selection code, now -bios japan can be used with the NeoGeo driver for example [Paul Priest].
 - 0.69               : UI code for discrete sound engine now encapsulated within '#if HAS_DISCRETE' (src\usrintrf.c). Changed some #ifdef MESS specific strings (src\ui_text.c/h). Minor tweaks within #ifdef MESS code [Nathan Woods]. Added -bios option [Paul Priest].
 - 0.67               : New options -autoror/-autorol. They rotate the screen only if the game is vertical; useful with "pivot" LCD monitors [Paul Priest].
 - 0.66               : New option -high_priority to increase the thread priority so MAME runs better while other programs are running. It is off by default because enabling it might make MAME use too much CPU time.
 - 31st October   2002: Nathan Woods merged in some minor user interface related changes.
 - 0.61               : Major redesign of the OS interface for display update [Aaron Giles] (Important for porters). Removed VIDEO_SUPPORTS_DIRTY flag, osd_mark_dirty(), osd_set_visible_area(), osd_allocate_colors(), osd_modify_pen(), osd_debugger_focus(), osd_set/get_gamma() and osd_set/get_brightness(). osd_create_display() now takes an extra parameter rgb_components and osd_update_video_and_audio() now takes a mame_display pointer
 - 0.59               : Some changes to use less CPU time when it's not needed. Use -nosleep to disable this behaviour during gameplay [Aaron Giles].
 - 25th February  2002: Olivier Galibert made the full screen key configurable in Windows and fixed a few other user interface bugs.
 - 0.37b4             : A few changes were made to allow run time changes to the visible area, and to simplify the OS dependant code by moving some functionality to the core: * Added visible_area to struct RunningMachine. Drivers must now use Machine->visible_area instead of Machine->drv->visible_area. The field in struct MachineDriver has been renamed default_visible_area and it should normally be used by the core only. * New function set_visible_area() that can be used by drivers to change the active display area at run time. * New function osd_set_visible_area() used to tell the OS dependant code the portion of the bitmap that has to be drawn on screen. It is passed coordinates relative to the actual bitmap, so no further processing is required for rotated games. The OS dependant code is allowed to display a smaller portion of the bitmap if necessary, but it must not draw a larger portion (which might contain garbage). The function must call set_ui_visarea() to tell the core the portion of the bitmap which is actually visible (which might be smaller than requested), so the user interface can be drawn accordingly. * osd_update_video_and_audio() takes a bitmap parameter so must not be hardwired to draw Machine->scrbitmap. * New fields vector_width and vector_height in struct GameOptions. The OS dependant code must initialize them to force different resolutions for vector games. If left at 0, the default 640x480 is used. * osd_create_display() must no longer create the screen bitmap, this is done by the core. It must only create the display screen / window, and return 0 on success. Note that the width and height parameters passed are now the dimensions of the visible area, not of the bitmap as they were before; therefore the function only has to create a screen / window of the requested size, without further processing, and without peeking into the drv->visible_area field. This applies to osd_set_display() as well. * Changed osd_new_bitmap() and renamed it osd_alloc_bitmap() to avoid confusion with old drivers. The function is the same as before but it must not swap width and height for vertical games - this is done by the core. osd_new_bitmap() and osd_free_bitmap() must not be called by drivers, they are reserved to the core. Drivers must call the equivalent bitmap_alloc() and bitmap_free() which take care of rotation for vertical games [Nicola Salmoria].
 - 0.37b2             : Added src\ui_text.c/h. First pass for multi language support with external translation files [Brad Oliver]. Extended the internal font to support characters 128-255 (ISO Latin-1) [Juergen Buchmueller].
 - 0.36b16            : Removed some obsolete fields from struct GameOptions. Added vector intensity control to the On Screen Display (for vector games) [Mathis Rosenhauer].
 - 0.36b13            : Alongside the AND key sequences introduced in the previous beta, it is now possible to have OR and NOT sequences. For recording OR key/joy sequences in the key/joy setup menu simply press UI_SELECT (usually ENTER) after the first recorded sequence. Don't press any UI_UP/UI_DOWN/UI_CANCEL keys beetwen the two sequences. To insert a NOT key/joy simply press it two times. The first obvious use for this is to wire button 1 to both the joystick and mouse button [Andrea Mazzoleni].
 - 0.36b4             : You can single step while the game is paused, press Shift+P to advance to next frame [Phil Hopely].
 - 0.35               : Added OSD_KEY_PRTSCR, OSD_KEY_LWIN, OSD_KEY_RWIN, OSD_KEY_MENU. Also moved OSD_KEY_RCONTROL, OSD_KEY_ALTGR, OSD_KEY_PAUSE.
 - 0.35RC1            : The Pause key can be changed from the "Keys (defaults)" configuration menu [Nicola Salmoria].
 - 0.35b13            : Moved mixer control out of streams.c and into the new mixer.c. Now the On Screen Display can be used to change the volume of any channel, not just ones handled by streams.c. The configuration is also saved on exit and is automatically reloaded the next time you start the game [Nicola Salmoria].
 - 0.35b10            : Added src\datafile.c/h. Changed format of the history database [John Butler]. Added menu option to configure the default joystick settings (like the default keys) [Nicola Salmoria].
 - 0.35b8             : Added src\window.c/h and HISTORY.DAT. Added a "Game History" entry to the menu. Data is fetched from the file HISTORY.DAT. Thanks to Brian Deuel, Neil Bradley and the Retrocade dev team for allowing us to use Retrocade's game history database [John Butler].
 - 0.35b6             : The user interface is rotated by -rol and -ror [Nicola Salmoria].
 - 0.35b2             : The key to change frameskip is now F9 instead of F8 [Nicola Salmoria].
 - 0.35b1             : The configuration save format has changed. You may just as well delete all of the cfg/*.cfg files, since they won't be loaded. Old .inp files will not work either. The good news is that the default key assignments can now be modified, so you don't have to change them for all the games. The code is a quick hack put together in fifteen minutes, but it's bettern than nothing. It will be improved in future versions. Exported info_cpu_name(), info_sound_name() and other similar functions from info.c so they can be used by usrintf.c and by anyone else who needs them [Nicola Salmoria].
 - 0.34RC2            : Joystick calibration is available in the Tab menu [Bernd Wiebelt].
 - 0.34b5             : Improved the user interface. Use "the key on the left of 1" (tilde on some leyboards) to turn on the On Screen Display which lets you change Volume, Gamma Correction, Brightess, and independently set the volume levels of the sound chips. Tab still brings up the setup menu, which is now asynchronous [Nicola Salmoria].
 - 0.34b2             : New function osd_on_screen_display() to show text over the game screen [Nicola Salmoria].
 - 0.34b1             : You can proceed from the "press OK to continue" screen by pushing left then right. You can also immediately quit by pressing ESC [Nicola Salmoria].
 - 0.33b2             : Some game information is displayed in the introduction screen [Nicola Salmoria].
 - 0.31               : New -norotate option. This is supposed to disable all internal rotations of the image, therefore displaying the video output as it is supposed to be (so you need a vertical monitor to see vertical games). However, many drivers still don't use MAME centralized rotation, but instead rotate the image on their own, so -norotate has no effect on them. In some cases, the image will be upside down. To correct that, use -norotate -flipx -flipy, or use the Flip Screen dip switch if available [Nicola Salmoria]. Improved mame.cfg and commandline parameter handling [Valerio Verrando, Maurizio Zanello, Bernd Wiebelt]: Added a few new config options (look into mame.cfg). In mame.cfg, a [gamename] section can override global config options. In the [directories] section, replaced ROMS and SAMPLES options with "rompath" and "samplepath", these take a standard DOS path as argument (for example rompath=\callus;\raine;\retrocade;\mame\roms). This is option is also available on the commandline and in the [gamename] section. Removed support for -savecfg. Removed support for -width (e.g. -640) to select the resolution. You have to use -widthxheight (e.g. -640x480). Frontend authors are advised to use the new -resolution widthxheight semantics. "resolution" is also a mame.cfg option now. Tweaked resolutions are directly selectable. (DOS) Wildcard support for the frontend commands: "mame * -verifyroms"    will check all your existing romsets. "mame a* -listfull" will list all games starting with "a". Removed -vesa1, -vesa2b, -vesa2l. -vesa will try VESA 2.0 and fall back automatically. Playback data is stored in INP/gamename.inp. A boolean option can be specified as -option, -nooption, -autooption.
 - 0.30               : When the -vsync option is specified, the program checks whether the video mode is compatible with it (i.e. whether the video refresh rate is a multiple of the target frame rate), and fails otherwise. Some sensible default values for -vgafreq are built-in and automatically picked when -vsync is requested. It is also possible to successfully use -vsync with scanline video modes. Note that for VESA modes you might have to configure your card in order to make it use the 60Hz refresh rate [Nicola Salmoria]. Support for default configuration file. Start MAME with the -saveconfig parameter, and the current configuration will be saved to mame.cfg, becoming the default. You can still override the mame.cfg settings giving parameters on the command line [Valerio Verrando].
 - 0.29               : Two new OSD_KEY definitions: RCONTROL and ALTGR. CONTROL has been replaced by LCONTROL. Added Gamma correction controls. Use Shift + Numeric pad +/- to change it. There are some games which are too dark on the default setting, instead of using the monitor settings use these controls to brighten the picture. Gamma correction also affects colors, like the girders in Donkey Kong [Nicola Salmoria]. Moved configuration and high score files to the CFG and HI subdirectories [Nicola Salmoria]. They are not stored in the games subdirectories. I have provided a batch file (MOV.BAT) to automatically move your old settings in the new directories. Just start it from inside the MAME directory. It will spit out some error messages for missing files, don't worry and let it finish its job. Having configuration files in a separate directory makes it easier to keep ROMs in .zip files. This is already done by some front-ends, but you can do it from the command line as well, just use this batch file. PKUNZIP must be in your path. The .zip files must be in the MAME directory and named after the game (i.e. pacman.zip). But even better, if you have ZipFolders or ZipMagic installed, MAME will automatically look into the .zip or .zif directory. ZipFolders and ZipMagic are trademarks of Mijenix Corporation. You can download a trial version from www.mijenix.com. I am in no way associated with Mijenix Corp.
 - 0.28               : Since there are now many games which don't run at 60fps (e.g. Popeye and the vector games), F11 was confusing and lead people to think the emulation was slow, while it was running at the correct speed. F11 now  displayes the percentage of the speed of the real machine. 100% is the correct speed, 200% is twice as fast, 50% is half as fast [Nicola Salmoria].
 - 0.27               : Jarek Burczynski changed showcharset() in usrintrf.c. Now you can use PGUP and PGDN to scroll through a charset which doesn't fit in the screen. You can now turn off speed throttling (F10) even on games which use audio streaming (i.e. all the ones with 8910 or Pokey sound chips) [Nicola Salmoria]. Pressing ESC in all menus returns to the previous menu instead of quitting [Nicola Salmoria].
 - 0.25               : src\usrintrf.c/h. Maurizio Zanello provided a better interface between MAME and frontends. And now you can select frameskip rate even while playing, without have to exit. Volume can be controlled with keypad PLUS and MINUS keys. Time to use proper MAME fonts. Mirko Buffoni draw a good looking complete set of chars to be used for messages and menu system in MAME. Nicola changed the entire set of drivers and implemented a user interface sublevel (file is USRINTRF.C). Mirko Buffoni changed the system configuration of each game. Now a game saves all vital informations (DSW, KEY, and JOY settings) in a unique file with .CFG extension. A backward compatibility is provided, so the first time MAME read previous settings and saves them in the .CFG file at exit/reset.
 - 0.24               : New option in the setup menu: "CREDITS". It displays a list of the people who contributed to the current driver. I have surely left out many people, and apologize in advance for that. If you contributed to a driver and your name doesn't appear in the list, please let me know. Since many people asked for this and Bernd Wiebelt was so kind to do me this gift for my birthday [Mirko Buffoni], MAME has now -rotate option. You'll have to turn your monitor (or your head (!) ;). Bernd Wiebelt provided new Vesamodes: 320x240 and 512x384. You can select a mode either by -X (e.g. -640) or -XxY (e.g. -640x480). Also fixed a bug that caused -vesaskip 0 not to run properly. Also added -rotate option. Also, any vesa mode in combination with -noscanlines option can be used to achieve correct aspect ratio on most monitors. This method is of course slower, and can work flawlessy on P166+ class. Changed the PAUSE key to Scrl-Lock key. This permits to redefinite the P key for playing.
 - 0.23               : MAME option: -nofm = disable FM sound synthesis (if you don't have Adlib/Sb card).
 - 0.21               : Sound is freezed now during GFXView, Pause and dipswitch settings.
 - 0.20               : Changes in MAME.C: Added -list option. This is useful for mantaining the readme file. It lists currently supported games. Thanks to Zanello Maurizio for suggestion.
 - 0.15               : Many people requested a way to syncronize with the video beam, to avoid jerkiness [Nicola Salmoria]. Here it is: -vsync. It should be used together with -noscanlines, and possible -vgafreq to adjust the frame rate to be as close as possible to 60fps (use F11 to check the actual frame rate). Note that this, unlike the default timer based sync, will NOT downgrade nicely if your system is not fast enough. Bernd Wiebelt provided new code for -vesascan, and implemented the new "-vesaskip n" mode. It uses a 640x480 screen instead of the 800x600 used by -vesascan, and allows you to scroll the visible area using the PGUP and PGDOWN keys.
 - 0.13               : Keith Smethers suggested to add -vgafreq n command line parameters, to select the VGA clock frequency. This may reduce flicker, especially in the 224x288noscanlines mode. WARNING: THE FREQUENCIES USED MIGHT BE WAY OUTSIDE OF YOUR MONITOR RANGE, AND COULD EVEN DAMAGE IT. USE THESE OPTIONS AT YOUR OWN RISK.
 - 0.12               : Bernd Wiebelt suggested to add a new option: "-vesascan". It uses a VESA 800x600 screen to simulate scanlines. It is much slower than the other video modes. Use this if you want scanlines and the default video mode doesn't work.
 - 0.10               : Thanks to Valerio Verrando, now -noscanlines works on Pac Man and the other games using a 224x288 screen. If you have problems with the default video mode try this one, it will hopefully solve them.
 - 0.09               : F12 to take a snapshot of the gfx set (displayed using F4) now works. F11 is now a toggle, also added F10 to turn off speed throttling (toggle as well) [Nicola Salmoria].
 - 0.08               : You can view the game graphics pressing F4. Use cursor keys to change graphics set/color, F4 to return to the game [Mirko Buffoni]. Removed the "-nosound" command line switch, replaced it with "-soundcard n" which allows to bypass the audio driver selection menu. Use "-soundcard 0" to turn off sound [Nicola Salmoria].
 - 0.02               : MAME options [Nicola Salmoria]: -frameskip n  skip frames to speed up the emulation. For example, if the game normally runs at 60 fps, "-skipframe 1" will make it run at 30 fps, and "-skipframe 2" at 20 fps. Use F11 to check the fps your computer is actually displaying. If the game is too slow, increase the frameskip value. Note that this setting can also affect audio quality (some games sound better, others sound worse).
 - 0.01               : MAME options [Nicola Salmoria]: -vesa = use standard 640x480x256 VESA mode instead of custom video mode, -noscanlines = use alternate video mode (not availble in all games), -nosound = turn off sound, -nojoy = don't poll joystick and -log = create a log of illegal memory accesses in ERROR.LOG. Emulator keys: 3 = Insert coin, 1 = Start 1 player game, 2 = Start 2 players game, Tab = Change dip switch settings, P = Pause, F3 = Reset, F11 = Activate fps counter, F12 = Save a screen snapshot and ESC = Exit emulator.



 8.1  FILE SYSTEM

 - 0.283              : Handle "." directory and going up to or up from it. This improves directory navigation in the MAME UI file manager (util\zippath.cpp) [AJR].
 - 0.278              : Align allocation for directory entry structure in osd_stat (file\winfile.cpp). Updated signature for osd_stat (file\stdfile.cpp) [Vas Crabb].
 - 0.276              : Internal overhaul. Replaced custom reference counting wrapper with std::shared_ptr. Renamed fsblk_t::block_t::copy to write and use it in a few more places. Added fsblk_t::block_t::read. Renamed fsblk_t::block_t::offset and rooffset due to name collisions and privatize these helper functions. Renamed fsblk_t::fill to fill_all for clarity's sake (formats\fsblk.cpp) [AJR].
 - 0.275              : Replaced fs::err_t enum with a standard error condition category. Also replace "invalid" error with more specific values (formats\fsblk.cpp) [AJR].
 - 0.267              : Fixed core_file failing to propagate write errors (util\corefile.cpp) [Vas Crabb].
 - 0.264              : Changed output size of load to size_t (util\corefile.cpp). Work around spurious maybe uninitialised warning with certain GCC versions (util\unzip.cpp) [Vas Crabb].
 - 0.262              : Added support for Zstandard compression (method 93) (util\unzip.cpp) [Vas Crabb].
 - 0.260              : Added formats\fsblk.cpp/h. Filesystem code refactoring. Separated fs::block_t and fs::filesystem_t to a new source file and header (formats\fsblk.cpp). Removed inclusion of flopimg.h from fsmgr.h [AJR].
 - 0.259              : Use helpers from multibyte.h (util\unzip.cpp) [AJR].
 - 0.255              : Updated to LZMA SDK version 22.01. Updated util\unzip.cpp for latest LZMA SDK [Vas Crabb].
 - 0.252              : Minor logging improvement (util\unzip.cpp) [AJR].
 - 0.250              : Fixed integer promotion issue in ZIP16 member header handling (util\unzip.cpp) [Vas Crabb].
 - 0.249              : Fixed path_append and path_concat of >2 arguments (util\path.h) [AJR].
 - 0.246              : Removed a now-unnecessary cast to std::string (util\zippath.cpp) [Nathan Woods].
 - 0.244              : Use visitors with variants where it makes sense (formats\fsmeta.cpp) [Vas Crabb].
 - 0.243              : File handling cleanup: Removed fgetc, fgets and ptr methods from device_image_interface. Removed the core_file::buffer method to read an entire file into memory and rewrite emu_file::hashes to not depend on it. Make core_in_memory_file a final class; now that buffering is gone, core_osd_file no longer subclasses it but a new superclass that retains some common methods. Renamed the offset and length methods used internally in core_file implementations to index and size due to frequent clashes with parameter names. Converted comments in util/corefile.cpp to C++ style. Added a new overload of the hash_collection::compute method which hashes data from a random_read stream, reading it into memory one chunk at a time. As a result, the hash_collection::begin and hash_collection::end methods have been removed as obsolete (similar methods are now used internally only). Enhanced error messages for the frontend media identifier when it encounters file errors [AJR].
 - 0.241              : Treat WinImage compressed disk images (*.imz) as ZIP archives (mame\media_ident.cpp) [Justin Kerk]. Removed optional second argument of path_iterator::next (emu\fileio.cpp) [AJR].
 - 0.240              : Moved filesystem library into separate namespace and use shorter uX type names there [AJR].
 - 0.239              : Added formats\fsmeta.cpp/h. Filesystem code cleanup: Eliminated dependencies on emu.h. Replaced most fatalerror calls and floptool's emu_fatalerror class with standard exception classes. Use range-based std::string constructors in some methods. Moved filesystem metadata handling to a separate source file (formats\fsmeta.cpp). Eliminated src\emu as an include path for libformats (necessitates kludge in (MESS) formats\ti99_dsk.cpp) [AJR].
 - 0.237              : Made behaviour of trying to open things inside archives a bit more consistent, fixed another bug with root paths. Fixed two issues affecting Windows: Browsing from a location inside an archive causes MAME to hang. Files inside archives are not listed (util\zippath.cpp) [Vas Crabb].
 - 0.236              : Added util\path.cpp/h and util\utilfwd.h. Use std::optional to make code clearer (util\unzip.cpp). Replaced core_file's build-in zlib compression with a filter. Added option to supply abstract I/O interface to util\unzip.cpp and util\un7z.cpp rather than filename [Vas Crabb]. Fixed recently-introduced path-trashing bug in zippath_resolve (util\zippath.cpp) [AJR].
 - 0.235              : OSD_WINDOWS isn't a safe way to detect Windows target, and OSD_* macros must not be used outside libocore/libosd (util\zippath.cpp) [Vas Crabb].
 - 0.228              : Changed puts to take a std::string_view parameter (util\corefile.cpp and emu\fileio.cpp). Adopt std::string_view as the input parameter type for most functions (this necessitates some explicit copying to std::string since other APIs have not been updated yet). Remove zippath_parent_basename, whose implementation was utterly broken and fortunately unused. Fixed unintialized variable issue in zippath_resolve. Eliminated one internal helper function (util\zippath.cpp) [AJR].
 - 0.201              : Fixed off by one error with leap years (util\timeconv.h) [AJR].
 - 0.194              : Converted zippath directory to a C++ interface (ui\filesel.cpp, imgcntrl.cpp, util\zippath.cpp and debugger\debugimgui.cpp) [Vas Crabb].
 - 0.190              : Defer decoding DOS timestamps (util\unzip.cpp) [Vas Crabb].
 - 0.182              : Updated zlib to 1.2.11 [hap].
 - 0.182              : Updated zlib to 1.2.9 [Miodrag Milanovic].
 - 0.180              : Updated LZMA to 16.04 (security and portability fixes) [Vas Crabb].
 - 0.178              : We introduced a 16-char limit to parent sets, for eg. nintendo vs prefix, or when you're short 1 or 2 letters [hap].
 - 0.177              : Converted a number of zippath calls that took 'const char *' to std::string (imagedev\floppy.cpp, emu\diimage.cpp, ui\filesel.cpp, ui\floppycntrl.cpp, ui\imgcntrl.cpp and util\zippath.cpp/h). Changed int *beginpos/*endpos to std::string::size_type *beginpos/*endpos and other cleanups for util\zippath.cpp [Nathan Woods]. Made path_iterator copy search path to fix use-after-free (emu\fileio.cpp and mame\cheat.cpp) [Vas Crabb]. Now reporting Win32 ERROR_INVALID_NAME as osd_file::error::NOT_FOUND (file\winfile.cpp) [Nathan Woods].
 - 0.176              : Readding overloads that take a std::string& parameter for the result (emu\diimage.cpp, ui\imgcntrl.cpp and util\zippath.cpp/h). Introduced running_machine::compose_saveload_filename() function to convert a filename (for state save/load) to a fully qualified path (emu\machine.cpp) [Nathan Woods].
 - 0.175              : Added util\timeconv.cpp/h. Supply modified time for files in archives (lib\util\un7z.cpp). Introduced util\timeconv.cpp, moved code from un7z.cpp into it, and implemented win_time_point_from_filetime() in terms of it [Vas Crabb].
 - 0.174              : Updated to LZMA 16.0 [Vas Crabb].
 - 0.173              : Archive handling improvements: Improved error handling in 7zip file I/O code. Fixed reading 7zip files >=4GB on LP32/LLP64 targets. Updated to LZMA SDK to 15.14, supports new 7zip features. Stop relying on local hacks to LZMA SDK. Supported most ZIP64 features excluding directory compression and LZMA-compressed files in ZIP archives. Supported Info-ZIP UTF-8 file name fields. Fixed phantom files/directories when browsing archives. Report archive handling errors [Vas Crabb].
 - 0.172              : Removed lib\util\un7z.h. Make zip_file and _7z_file classes rather than having free functions everywhere. Hide zip/7z class implementation behind an interface, no longer need to call close() to send back to the cache. Don't dump as much crap in global namespace. Added solaris PTY implementation. Improved variable expansion for SDL OSD - supports ~/$FOO/${BAR} syntax. Rearranged stuff so the same things are in file module for all OSDs. Moved file stuff into its own module. 7z/zip open and destruct are still not thread-safe due to lack of interlocks around cache access. Directory functions still need to be moved to file module. SDL OSD may not initialise WinSock on Windows. * Removed confusing method from vectorstreams that hide base_ios method (fixes disassembly view). * Allow std::string to pass through core_file unmolested (reduces temporary allocations). * Make zip/7z instances of same class with uniform interface. * zippath browsing is broken at the moment. This is another step towards transparent archive support. It's now possible to access zip and 7z archives with the same code. Nothing is taking advantage of it yet. There's now some very similar code in fileio.cpp and clifront.cpp that could be folded at some point. Fixed zippath browsing and allow zippath to browse/load 7zip. 7zip romcmp. Fixed boundary check on parsing ZIP ECD. Make emu_file archive searh order CRC+path, CRC+partial path, CRC, path, partial path and fold some redundant code. Try next archive type if file not found, not just on open error (emu\fileio.cpp). Fixed file naming issue when creating new image from internal file manager with media loaded (thanks BIOS-D for reporting). Modernised much of the file handling code: Made core_file, osd_file and avi_file and polymorphic classes. Moved osd_file implementations to shareable OSD module code. Made zip/7z implementations of archive_file with common API. Prefer destructors over explicit close functions. Made APIs supply smart pointers. Pass std::string though lots of APIs rather than C string pointers. Added methods for flushing user-space file buffers. Made archive_file create/destroy thread-safe. Fixed buffer overrun when walking zip ECD. Fixed some resource leaks in file handling code. Fixed edge cases where incorrect error code was returned on Windows. Added Solaris PTY implementation. Support ~/$FOO/${BAR} expansion with SDL OSD. Made emu_file handle zip and 7z archives identically. Search archives with CRC+path, CRC+partial path, CRC, path, partial path when loading ROMs/artwork/cheats/etc. Added support for 7z archives via zippath API. Support 7z archives for fullpath loading and media file manager. Made romcmp tool support 7z archives [Vas Crabb]. Moved windows\winfile.cpp/h to osd\modules\file\. Fixed narrowing error with GCC if LARGE_INTEGER is a union (modules\file\winfile.cpp) [Carl]. Fixed handling of return codes from newer Windows APIs. Fixed a handle-leak in Windows stat implementation. Return actual error code when path creation succeeds but file creation doesn't (modules\file\winfile.cpp) [Vas Crabb].
 - 0.166              : Removed direct zlib dependency in code [Miodrag Milanovic].
 - 0.162              : Added a function to truncate filese (util\corefile.c) [Dirk Best].
 - 0.158              : Added integral version of expat, flac-1.2.1, jsoncpp, libjpeg 8c, lzma sdk, mongoose, portmidi, softfloat, sqlite3, WinPcap SDK and zlib in 3rdparty folder and full code of portmidi. Applied changes same as on previous source. Fixed compile and cleanup includes [Miodrag Milanovic].
 - 0.154              : Return an error when trying to use a .7z file with zippath - for now [Oliver Stoeneberg]. Don't crash on 0-length files (util\corefile.c) [O. Galibert].
 - 0.151              : Fixed crash in debug builds (lib\util\zippath.c) [somebody, Curt Coder]. Allow write-only files to be opened by external programs while MAME still has them open (matches POSIX semantics, useful for log files). This was approved by Aaron (osd\windows\winfile.c). Page not found handling, sends a 404 error (emu\webengine.c) [Firehawke].
 - 0.150              : Updated zlib to 1.2.8 [Oliver Stoeneberg].
 - 0.149              : When creating a new file from the File Manager, require the user to enter an extension too. This matches the behavior from command line where launching files of a create-able media (e.g. tapes or memory cards) without extension is always interpreted like launching from softlist, while launching it with an extension actually creates the file if it does not exist yet [Fabio Priuli].
 - 0.148u1            : Fixed DEBUG compilation of lib\zlib\zutil.h. Disabled stupid zlib trace message with DEBUG (lib\lib.mak) [Oliver Stoeneberg].
 - 0.148              : Enabled multi-threading (mame -mt) by default on Windows. Fixed unitialized memory in osd_file (windows\winfile.c) [Oliver Stoeneberg].
 - 0.146u4            : Added lib\zlib\gzlib.c, gzread.c, gzwrite.c, gzclose.c and gzguts.h. Removed lib\zlib\gzio.c. Updated zlib to 1.2.7. Renamed zconf.in.h to zconf.h.in [Oliver Stoeneberg]. Don't build 64 bit functions in src\lib\zlib\adler32.c when the prototype isn't defined in the .h [Phill W.].
 - 0.145u1            : Added lib\util\un7z.c/h. Added LZMA codec and .7z container support [David Haywood, R. Belmont].
 - 0.144u3            : Putted an handling error where filenames are too long [Chad].
 - 0.142              : Fabio Priuli improved File Manager usage (in the internal UI) (uiimage.c) by catching char inputs and searching for matching names among files and directories.
 - 0.141u4            : Aaron Giles changed File-IO system to accept just a raw searchpath instead of an options/option name combination. path_iterator::next() now takes an optional filename to append to the path [Aaron Giles].
 - 0.138u2            : Added lib\util\zippath.c/h.
 - 0.133u5            : Aaron Giles added new function mame_fclose_and_open_next() which will close a file and then keep searching the searchpath for the next valid file. Did some internal rearranging in fileio.c to make this work.
 - 0.131              : Fabio Priuli fixed frontend messages to leave enough space for clone longer names.
 - 0.129u6            : Fixed handling of corrupt archives [Couriersud]: Corrupt files in archives now generate an error. Archive files ending in "/" will not be tested for crc - skip path entries. Added new flag FILE_OPEN_NO_PRELOAD to skip decompressing on open. This is used in audit.c, which only tests whether files exist. Added error checking to all calls to load_file_zipped.
 - 0.129u4            : Olivier Galibert relaxed 8 letter setname limitation for clone sets - this is designed to make it easier to add simple suffixes to clone names without truncating the original set name, it isn't designed to be abused and used as an alternate description.
 - 0.128u6            : Aaron Giles updated the fcompress APIs to allow for specifying a compression level.
 - 0.123u1            : Nathan Woods added the ability to pass absolute paths to mame_schedule_save() and mame_schedule_load().
 - 0.117u2            : Aaron Giles added new functions core_filename_extract_base() and core_filename_ends_with() to corefile.h.
 - 0.113u2            : Aaron Giles renamed mame_file_error to file_error, since it is used throughout the code including the utilities.
 - 0.112u1            : Added src\lib\util\corefile.c/h. Aaron Giles split some functionality from fileio.c into new module corefile.c, which can be used by utilities to get unicode support and fopen-style file I/O built on top of the OSD routines. Rebuilt fileio.c on top of the core file code. Added mame_core_file() to get the underlying core_file object from a mame_file so it can be used with png and xmlfile code.
 - 0.111u3            : Nathan Woods removed file I/O functions from osd_tool.h in favor of the ones in osdepend.h. Updated tools accordingly. Added new flag OSD_FLAG_CREATE_PATHS to the open command.
 - 0.110u1            : Aaron Giles added new field Machine->basename which is used to describe the path used for various file accesses. This is a helper for MESS, and should not have any user-visible changes. The file accesses affected are: configuration (cfg) files, snapshots, debugger comments, NVRAM and memory cards.
 - 0.109u2            : Aaron Giles fixed bug that caused false positive ZIP filename matches.
 - 0.109u1            : Aaron Giles rewrote unzip.c to return richer errors and generally behave better.
 - 0.106u4            : Now properly extracting path from driver name and adding it to the rompath so that drag & drop of ZIP files works once again [Aaron Giles].
 - 0.103u5            : Nathan Woods fixed osd_fopen error reporting to return the correct value if you hit MAX_OPEN_FILES.
 - 0.103u2            : Lawrence Gold fixed fileio.c buffer overrun.
 - 0.99u2             : Updated to the latest zlib [Atari Ace].
 - 0.97u5             : Included patch to zlib for buffer overrun bug [Santeri Saarimaa].
 - 0.90u2             : Upgraded to zlib 1.2.2 [Santeri Saarimaa].
 - 0.84u3             : Andrea Mazzoleni fixed the generic_fopen() function to ensure that a rom CRC is present before using it. Otherwise, for NO_DUMP roms an uninitialized string variable is used in the search.
 - 0.81u9             : Andrea Mazzoleni changed file handling behavior, adding a one character buffer.
 - 0.81u8             : Nathan Woods fixed small fileio problem.
 - 0.81u4             : Nathan Woods added in a new (windows only) mode for opening files whereby files can be opened for read/write, but changes are not actually not written to the original file but rather to a temporary file. This trick is used by the MESS testing facility so that tests do not mutate the images they operate on. Small cleanups.
 - 0.80u2             : Nathan Woods changed MESS specific file type from FILETYPE_CRC to FILETYPE_HASH.
 - 0.78               : Removed 8.3 ROM filename limitation [Olivier Galibert].
 - 0.71u3             : Nathan Woods fixed a bug in mame_fgetc() when reading characters between 0x80 and 0xFF (src\fileio.c).
 - 17th June      2003: Nathan Woods sent a small patch to the Windows file I/O functions, changing the file read mode to support reading files opened by MAME in other programs too.
 -  5th June      2003: Paul Priest fixed a memory leaking bug in the .ini file reading functions.
 - 0.69               : New mame_fputs(), mame_vfprintf() and mame_fprintf() functions (used in osd_rc_write()) above (src\fileio.c). Removed some no longer relevant MESS globals. Unicode enabled (i.e. - compiles under #define UNICODE) (windows\fileio.c) [Nathan Woods].
 - 21st January   2003: Chris Kirmse sped up the data file handling.
 -  9th December  2002: Aaron Giles removed attribute caching in the core file I/O functions.
 -  1st December  2002: Chris Kirmse added a function to the Windows file I/O that helps MAME32.
 - 25th November  2002: Aaron Giles improved file read performance in the Windows version.
 - 24th November  2003: Nathan Woods merged some MESS code in the file I/O functions.
 - 0.70u2             : In osd_fopen(), if a file is opened with mode "r", FILE_SHARE_READ will be passed to the dwShareMode parameter of CreateFile(). This allows other programs to read any files that MAME opens for read only [Nathan Woods].
 - 22nd November  2002: Aaron Giles cleaned up the Windows file I/O and path handling.
 - 21st November  2002: Aaron Giles changed the file I/O to happen mostly in the core instead of the OS dependant part, and he modified the routines to automatically generate the snap, cfg, NVRAM etc. paths if they are missing.
 - 18th November  2002: Rene Single fixed the bug in datafile routines that caused some missing information.
 - 27th February  2002: Aaron Giles fixed some more problems in the updated file routines.
 - 19th February  2002: Aaron Giles cleaned up the file I/O functions in the Windows version and added support for hard disk images.
 - 0.37b2             : New filetypes that must be supported by the OS dependant code: FILETYPE_HIGHSCORE_DB, FILETYPE_HISTORY, FILETYPE_CHEAT and FILETYPE_LANGUAGE. New functions: osd_readkey_unicode, osd_fgetc, osd_ungetc, osd_fgets, osd_feof and osd_ftell. New filed in struct Gameoptions: language_file. The OS dependant code must initialize it if it wants to use a translation file [Brad Oliver].
 - 0.35RC1            : Removed src\inflate.c/h.
 - 0.35b13            : The zlib library is required to build MAME, it can be downloaded from http://www.cdrom.com/pub/infozip/zlib/.
 - 0.35b12            : OSD_FILETYPE_MEMCARD for memory cards [Fabrice Martinez]. Memory card support in the NeoGeo driver. Card data is saved to the MEMCARD directory (you have to create it). Use the TAB menu to access the memory card options [Fabrice Martinez].
 - 0.34b6             : Added src\inflate.h.
 - 0.34b4             : New file types for osd_fopen(): OSD_FILETYPE_STATE and OSD_FILETYPE_ARTWORK. New unzip interface. New zip directory cache and filename cache (the latter only in the DOS version) [Andrea Mazzoleni].
 - 0.33b7             : Modified the code so that to start a game you can use a) the full game name as listed in "mame -listfull" or b) any ordered subset of the characters used in the full game name. So you can start Asteroids Deluxe like: MAME "Asteroids Deluxe" !note the quotes!, MAME astdelx and MAME adlx. The less characters you use, the more likely you'll be surprised which game actually gets choosen [Bernd Wiebelt].
 - 0.31               : Added src\unzip.c and inflate.c. Native .zip file support [John Butler]. New commands -verifyroms and -verifysamples. They check an existing ROM set for missing and incorrect ROMs, and for missing samples. You can use "mame -verifyroms *" to check all your romsets [Tormod Tjaberg].
 - 0.29               : Replaced file related functions (fopen(), fread() and so on) with osd_ equivalents. This avoids a good amount of hacking in the Mac port; plus it allows some system specific extensions, like supporting ZipMagic/ZipFolders under Windows 95 [Nicola Salmoria].



 8.2  STATE / HIGH SCORE SAVING

 - 0.284              : Use multibyte.h helpers instead of playing fast and loose with alignments (emu\save.cpp) [AJR].
 - 0.283              : Fixed mixed space/tab indentation (plugins\hiscore\init.lua) [Vas Crabb].
 - 0.280              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Carl].
 - 0.278              : Be consistent with dummy save state var name (easy to grep if the workaround is obsolete in the future) [hap]. Removed device_sound_interface from mixins that require device to register members for saved states (emu\device.cpp). Finalise saved state registrations before loading configuration - network devices no longer leak timers (emu\machine.cpp) [Vas Crabb].
 - 0.276              : Fixed some things causing save states to be unportable: Don't save block stride as it depends on alignment rules (emu\save.cpp). Don't send display orientation to machine outputs (windows\winmain.cpp) [Vas Crabb].
 - 0.274              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Carl].
 - 0.267              : Added support for Game & Watch 'Donkey Kong Jr (New Wide Screen)' and Tandy Radio Shack Color Computer 'Zonx' (plugins\hiscore\hiscore.dat) [udance4ever]. Added delay to ballbomb/lupin3 entry to fix saved hiscore loading (plugins\hiscore\hiscore.dat) [Mike Sheehan].
 - 0.264              : Made illegal save state registrations always fatal (emu\save.cpp) [Vas Crabb]. Fixed renamed sets (plugins\hiscore\hiscore.dat) [Carl].
 - 0.263              : Added filename to save/load state message (emu\machine.cpp) [hap].
 - 0.259              : Fixed renamed sets (plugins\hiscore\hiscore.dat) [Carl].
 - 0.257              : Fixed detection of software item lines (plugins\hiscore\hiscore.dat) [GregWeil].
 - 0.256              : Updated changed sets (plugins\hiscore\hiscore.dat) [Carl].
 - 0.250              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer]. Use path concatenation utility function (ui\state.cpp) [Vas Crabb].
 - 0.248              : Resort hiscore.dat and set changes (plugins\hiscore\hiscore.dat) [Carl].
 - 0.242              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.241              : hiscore.dat update (plugins\hiscore\hiscore.dat). Added megaman2h, fixed gtmr, gtmra, gtmro and gtmrusa (1000 Miglia: Great 1000 Miles Rally) and added clones gtmrb and gtmro [Carl].
 - 0.237              : Changed the hiscore plugin to save inside the "hiscore" folder in the plugin data directory. The old hiscore path setting has already been removed from MAME for some time. This means the plugin was always saving in the "hi" folder in the working directory with no way to change it, which is problematic on Linux and macOS, particularly for distro packagers. There are lots of plugin and UI changes in this release, so we may as well get this out of the way now. Also made it possible to change the "timed save" option from the Plugin Options menu, and save that in the data folder, too [Vas Crabb].
 - 0.234              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.233              : Allow saved states to be deleted from the internal UI (ui\state.cpp) [Vas Crabb].
 - 0.230              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.229              : Updated changed set names (plugins\hiscore\hiscore.dat) [Carl].
 - 0.228              : Better hiscore parsing and other improvements (plugins\data\data_hiscore.lua) [Carl].
 - 0.227              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.226              : Sample rate now saved as part of the stream (emu\sound.cpp). Fixes distorted sound in sfrush and sfrushrk when loading from save state [Aaron Giles].
 - 0.225              : hiscore.dat: Removed Gauntlet. The high scores are in the NVRAM, these cause more problems then they are worth. Fixed set names [Carl]. Added support for saving arrays of attotimes and renamed macros to make purpose more obvious [Vas Crabb].
 - 0.224              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer]. Cleaned up save/load state menu code. Fixed display names for states saved with keyboard keys. Wait for at least one frame with no keys pressed before saving/loading. Fixes save state menu saves too quickly if activated by Joystick buttons [Vas Crabb].
 - 0.223              : Updated changed set names in plugins\hiscore\hiscore.dat [Carl].
 - 0.221              : Added template save/load code (emu\save.cpp) [Vas Crabb]. hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.220              : Fixed 'Viewpoint' entry in plugins\hiscore\hiscore.dat [Carl].
 - 0.218              : Made read_config in hiscore LUA plugin more robust (plugins\hiscore\init.lua) [Andrea].
 - 0.217              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer]. Allow saving members of structures in n-dimensional arrays, even if the members themselves are n-dimensional arrays - see qsoundhle.cpp for an example of loops disappearing. This can greatly reduce the number of save state registrations in some cases (emu\save.cpp and mame\luaengine.cpp). Work around MSVC overload resolution issue in save_item/save_pointer (emu\device.h and save.h). Added save/restore output values in save states. Save states should not be break when changing output. Also get rid of a few dozen output().set_value(...) calls in favour of output finders. This has the detrimental effect that outputs used in layouts will get the default value from the last element in the last view that uses them _after_ devices are started. If drivers/devices set initial output values on start rather than reset this could cause a problem [Vas Crabb]. Fixed old parsing errors (plugins\hiscore\hiscore.dat) [Carl].
 - 0.216              : Fixed renamed set in hiscore.dat [Carl]. Print the name of non-fundamental save_items when fatalerroring, for easier debugging (emu\save.h) [Ryan Holtz].
 - 0.215              : Fixed flytiger entry in hiscore.dat [Carl].
 - 0.213              : Change workaround (emu\save.h) [hap]. Fixed makai high scores (hiscore\hiscore.dat) [Carl].
 - 0.212              : Print all duplicate savestate entries found rather than bailing after the first one (emu\save.cpp) [Ryan Holtz]. hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.210              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.207              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer]. Added history command (plugins\console\init.lua and 3rdparty\lua-linenoise\linenoise.c). Added start delay (plugins\hiscore\init.lua) and use emu.time [Carl].
 - 0.206              : Updated hiscore.dat set changes [Osso].
 - 0.204              : hiscore.dat update (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.202              : Eliminated register_postload in sound\msm5232.cpp, okim6376.cpp, spkrdev.cpp and vlm5030.cpp [AJR]. Updated hiscore.dat [Leezer].
 - 0.201              : Optimised start up by delaying the state save sort and check for duplicates until all the devices have been started. This has the most visible effect on vgmplay because it registers over thirty thousand state save entries [smf].
 - 0.200              : Updated hiscore.dat [Leezer].
 - 0.198              : Updated hiscore.dat [Leezer]. Make hiscore\sort_hiscore.lua much faster [Carl].
 - 0.197              : Fixed cpu tags and print detailed errors (hiscore\hiscore.dat and init.lua) [Carl].
 - 0.196              : Updated hiscore.dat [Leezer]. Added handhelds that have high scores [Carl].
 - 0.194              : Updated hiscore.dat [Leezer].
 - 0.193              : Rewind feature and RAM savestates. How RAM states work: Implemented using util::vectorstream. Instead of dumping m_save.m_entry_list to file, it writes them as binary to vectorstream. Compression is not used, as it would slow down the process. The header is written as usual, also in binary. When a state is loaded, the savestate data gets binary-read from vectorstream. How rewind works: Rewind is optional, it can be turned off through MAME GUI while not running. Rewind capacity is available there too. Rewind step hotkey is available from the standard hotkey menu. In the debugger you have the "rewind" command ("rw" shortcut) that works the same as the hotkey. Every time you advance a frame (pause step), rewinder captures a RAM savestate of the frame you were at. It does the same when you do step into/over/out in the debugger. Every time it captures a new state (and when you unpause), it marks as invalid all its states that go after the current machine time, because input might change, so they are not relevant anymore. It keeps their buffers allocated though, for future use. When rewinder runs out of allowed amount of savestates it can have, it invalidates the first state in the list and tosses its unique_ptr to the end of the list, then it uses its buffer to capture a new state. When you hit the rewind step key, or use "rewind" command in the debugger, it loads a state that is immediately before the current machine time. Invalid states between valid ones are not allowed to appear, as that breaks rewinder integrity and causes problems. Rewinder keeps its own set of ram states as a vector of unique_ptr's. All rewinder operations and errors get reported using machine().popmessage(). icount was missing from the savestates. When you load a state, icount (*icountptr) would remain whatever it was before loading, messing with the remaining cycles and with the amount of code executed per run() call. This introduced non-determinism and badly influenced usage of savestates while debugging. machine().time() would also return wrong values after that, since it adds remaining cycles (emu\diexec.cpp). Reset scheduler savestate to what it was for years before rewind. Changing saved variables should be done after thorough testing. right now, adding some vars breaks some machines, adding other vars breaks others. Switch to megabyte-wise capacity. Savestate size greatly differs between machines, relying on state count is unstable. Switch to internal indexing. No longer depends on inaccurate machine time. Rewind accelerator key in debugger (Ctrl+F11). Report capacity hit (once), with some useful info. Make error reports saner. Mention rewind and rewind_capacity in the docs [feos]. Updated hiscore.dat. Removed duplicate sets, debug print and merged identical entries [Leezer, Carl].
 - 0.192              : Added option to hiscore.ini to only_save_at_exit (hiscore\init.lua) [Carl].
 - 0.191              : Updated hiscore.dat (plugins\hiscore\hiscore.dat) [Leezer].
 - 0.190              : Updated hiscore.dat [Leezer].
 - 0.189              : Updated hiscore.dat [Leezer]. Fixed new load/save state menu does not respect -statename [Nathan Woods].
 - 0.188              : Updated hiscore.dat [Leezer]. Moved save state registration to interface post start. Plays nicely with device_missing_dependencies exceptions. Frees implementation from having to call save state registration method. Improved save state support in devices that neglected to call method. Explicit sizes for enums and enum class used in save states, one should always do this to maximise save state compatibility. Fix up a couple in src\mame as well [Vas Crabb].
 - 0.186              : Refactoring/cleanup to state load/save handling: Changed running_machine::schedule_[load|save]() to take 'std::string &&' instead of 'const char *'. Changed running_machine::saveload_schedule to be 'enum class' [Nathan Woods]. Updated hiscore.dat [Leezer].
 - 0.184              : Updated hiscore.dat [Leezer].
 - 0.183              : hiscore.dat plugin: Use videoram share for Missile Command scores so madsel isn't disturbed. Don't permit hiscore parse scripts to modify the shared environment or save any persistent data. Print_verbose unimplemented stuff [Carl].
 - 0.182              : Updated hiscore.dat [Leezer].
 - 0.181              : Updated hiscore.dat [Leezer].
 - 0.180              : Updated hiscore.dat [Leezer].
 - 0.178              : Updated hiscore.dat [Leezer].
 - 0.177              : Updated hiscore.dat [Leezer]. Make path expansion work on Win32 (hiscore\init.lua) [Carl]. Made hiscore path configurable by ini file, fix .hi file path resolution [Roberto Benfatto]. Fixed regression in save states (emu\emumem.cpp) [Osso].
 - 0.176              : Simplified memory management for save states and states [Miodrag Milanovic]. Added optional value to prefill for software that clears ram and add examples (plugins/hiscore/hiscore.dat and hiscore\init.lua). Make hiscore.dat sorter stable so everything isn't rearranged every time [Carl]. Updated hiscore.dat [Leezer].
 - 0.175              : Fixed Sega X-Board games, improved error and more fixes (plugins\hiscore\hiscore.dat and init.lua) [Carl]. Load save state preparations: A number of changes and refactorings in preparation for a new load/save state menu. Most notably, I am C++-ifying osd_directory (now osd::directory) and changing osd_stat() to return std::unique_ptrosd::directory::entry. Take note that this change completely omits POSIX support, simply because I lack a development environment to support it. This will have to be done by someone else [Nathan Woods].
 - 0.173              : Checksum all the regions (plugins\hiscore\init.lua) [Carl].
 - 0.172              : Added plugins\hiscore\hiscore.dat, init.lua and plugin.json. Added hiscore plugin [Miodrag Milanovic]. Added support for softlist rom hiscores [Carl].
 - 0.171              : Allow load/save state slots to be bound to joystick buttons [Victor Vasiliev].
 - 0.161              : Completed state_save_register_item* removal [Osso, Miodrag Milanovic].
 - 0.159              : Give the device when available to the state save subsystem [O. Galibert].
 - 0.158              : Factor-out presave/postload dispatchers (emu\save.c) [Luca Bruno].
 - 0.156              : Don't execute a timeslice before loading a savestate from the command line (emu\machine.c) [Alex Jackson].
 - 0.154              : Don't state save icount in various cpu cores (cpu\am29000\am29000.c, avr8\avr8.c, cosmac\cosmac.c, dsp56k\dsp56k.c, hd61700\hd61700.c, mc68hc11\mc68hc11.c, superfx\superfx.c, tlcs90\tlcs90.c, tms32010\tms32010.c andtms32025\tms32025.c). rebuild_execute_list() after loading a saved state to ensure the order of execution remains consistent (emu\schedule.c). Fixes 0.153 savestate regressions in various drivers [Alex Jackson]. Please don't kill save states (emu\machine.c) [O. Galibert].
 - 0.148u5            : Save state cleanup, converted state_save_register_global* into save_item/save_pointer. Made save_items to be global in cases where needed (video\bfm_adr2.c) [Miodrag Milanovic].
 - 0.145u2            : Sandro Ronco fixed order of timer init and save state.
 - 0.142u5            : Aaron Giles fixed inverted check on anonymous timers prior to saving state. Also fix bug where we fail to ignore the permanent non-expiring anonymous timer. Added code to log timers, and we now log them at each save attempt as well as at restore time. Should fix most recent save state releated regressions.
 - 0.142u2            : Changed emu\state.c/h to emu\save.c/h.
 - 0.141u2            : Aaron Giles moved the state saving system to C++. For now the registration macros are still intact. The new state_manager class has templatized methods for saving the various types, and through template specialization can save more complex system types cleanly (like bitmaps and attotimes). Added NAME() macro which is a generalization of FUNC() and can be used to wrap variables that are registered when directly using the new methods as opposed to the previous macros. Aaron Giles added new mechanism to detect proper state save types. This is much more strict and there will likely be some games/devices that fatalerror at startup until they are remedied. Spot checking has caught the more common situations.
 - 0.140              : Aaron Giles fixed all sets using -autosave: "auto.sta" can mistakenly be erased.
 - 0.135u4            : Aaron Giles got rid of explicit resource tracking for state saving. Now we just use the auto_ allocators, since registration is restricted to initialization.
 - 0.129u1            : Aaron Giles fixed a deadlock when using -state with -mngwrite/-aviwrite.
 - 0.128u7            : Aaron Giles fixed autosave (games using autosave segfault on startup).
 - 0.128u6            : Aaron Giles removed the concept of state saving tags, which was a hack to get save states to work with multiple CPU cores. Simplified the state saving system as a result, performing the operation in a single pass and without allocating a full blob of memory. Also enabled minimal compression.
 - 0.128u5            : Save state system improvements [Aaron Giles]: Changed save state system to accept machine parameters where appropriate, and to keep all global variables hanging off the machine structure. Once again, this means all state registration call sites have been touched: state_save_register_global* now takes a machine parameter, state_save_register_item* now takes a machine parameter and added new state_save_register_device_item* which now uses the device name and tag to generate the base name.
 - 0.128u4            : Aaron Giles added "tag" parameter to state_save_register_item_* calls. Removed state_save_combine_module_and_tag() function in favor of passing the tag when registering. Revisited all save state item registrations and changed them to use the tag where appropriate.
 - 0.127u1            : Couriersud added save state for discrete node->output to ensure that input nodes save states.
 - 0.125u2            : Aaron Giles fixed saved states do not properly adjust to changes in -samplerate.
 - 0.124u2            : Aaron Giles reduced the number of save state callback types from 3 to 1. The only remaining form is the one that takes a pointer parameter. Added macros for STATE_PRESAVE and STATE_POSTLOAD to define common functions. Added machine parameter to these functions. Updated all drivers and CPU/sound cores to use the new macros and consolidate on the single function type. As a result pushed the machine parameter through a few initialization stacks.
 - 0.123u6            : Made it a fatalerror to register save state callbacks at the wrong time if the current driver claims to support save states [Aaron Giles].
 - 0.123u2            : Zsolt Vasvari added state_save_combine_module_and_tag(). Its purpose is to create a unique name for state saving purposes in modules that are tag based (no index).
 - 0.115u4            : Zsolt Vasvari changed save state code to not save any palette information if no palette is used.
 - 0.114u3            : Aaron Giles changed location of save state files. Now they are placed in the <savestate>/<gamename> directory. Auto-generated save state files have the name "auto.sta". All other save state files are named <slot>.sta.
 - 0.108u2            : Aaron Giles fixed MAME freezes when you try to load a saved state (missile.c, cloud9.c and ccastles.c).
 - 0.107u2            : Adam Bousley fixed save state support in pacman.c, namcond1.c, mcr68.c, arkanoid.c, taito_b.c, blktiger.c and system1.c.
 - 0.107u1            : Removed src\hiscore.c/h.
 - 0.105u2            : Nathan Woods added PAIR and PAIR64 as valid save state types.
 - 0.105u1            : Aaron Giles added stricter type checking for save state registrations (only works in GCC). Changed memory save state registration so it doesn't register for saving memory areas that overlap memory regions. This means that drivers which rely on extra memory regions for RAM will need to fix that before supporting save.
 - 0.104u9            : Undo the use of timers to trigger save/restore of states. This leads to one less timer in the system, and hence will break the save states from previous versions. The current save state system is extremely sensitive to such changes, unfortunately. This will be addressed in a future version [Aaron Giles].
 - 0.104u3            : Aaron Giles added #include "state.h" to driver.h. This means most driver files no longer need to explicitly include it. Went through and removed it from most drivers. Save state registrations should be performed in DRIVER_INIT or (preferably) in the _START callbacks; they should be avoided in the _RESET callbacks if possible. Save state changes [Aaron Giles]: Audited the use of save state registrations throughout the code, switching most cases over to using the state_save_register_global or state_save_register_item macros to simplify the code. Deprecated the save_state_register_<type> calls since nearly all cases can be automatically handled by the macros. For odd cases, there is now a save_state_register_memory call which is generic. Simplified the save state logic, allowing for unlimited instances and reducing the complexity of the code. This breaks existing save states. Sorry, I'll try not to do it again.
 - 0.104u2            : Aaron Giles added new function state_save_register_bitmap to simplify bitmap saving.
 - 16th February  2006: Aaron Giles - Part 4: In this final article in the series on adding save state support to MAME drivers, I will walk through the process of adding support to a basic driver. Although there were a number of great suggestions for which driver to look at, all the proposed drivers had a large number of games and some hidden complexities that would hide the fundamentals I am trying to illustrate here. So for this example, we will add save state support to the Return of the Jedi driver. To follow along, you will need MAME 0.104u2. The first step in adding support to a driver is to identify what files are relevant. For Return of the Jedi we have the obvious file drivers\jedi.c. There is also a matching jedi.c in the vidhrdw directory, so we will need to look at that as well. These are our starting points. From there, we should determine what the dependencies are. If a driver depends on code elsewhere in the MAME system, we need to make sure that that code also has save state support. The easiest way to do this is to look at the #includes at the top of each file. In drivers\jedi.c, we see that it references the m6502 CPU core (cpu\m6502\m6502.h), the TMS5220 sound core (sound\5220intf.h), the POKEY sound core (sound\pokey.h), and some generic video hardware functions (vidhrdw\generic.h). Doing my homework, I searched the CPU and sound cores to see if there were any state_save functions being called. The 6502 and TMS5220 already had support built-in. I did this before 0.104u2 was released and found that the POKEY emulator was lacking save state support, so I added it quickly to make sure we would be able to make this work. We'll have to wait until we look more closely at the video system before we can determine what functions in vidhrdw\generic.c were used.
 - 14th February  2006: Aaron Giles - Part 3: Consider this a "sidebar" to the save state fundamentals articles. Part 4 will work through the driver example. This brief article is meant to explain the new and improved memory banking changes that went into MAME a little while back. In the "old days", let's say you had a banked ROM which you loaded like this: ROM_LOAD ( 0x0c000, 0x1000, CRC(...) SHA1(...) ) and ROM_CONTINUE( 0x10000, 0x7000 ). This is a common way of loading a banked ROM. Bank 0, which lives in the first 4k, is loaded at the address where the CPU actually reads data from. The remaining banks are loaded outside of the CPU's address space (in this case, the CPU is an 8-bit CPU with a 16-bit address space, so it can't access memory beyond 0xFFFF). Then you would need to map the memory where the ROM appears in the address space, as well as a handler for actually changing the banks. Let's say it looked something like this: AM_RANGE( 0xc000, 0xcfff ) AM_ROMBANK(1) and AM_RANGE( 0xffff, 0xffff ) AM_WRITE( bank_select_w ).
 - 12th February  2006: Aaron Giles - Part 2: So, after reading part 1, you now know that in order to save the state of a driver, you need to register with the save state system all the bits of memory that need to be preserved. The next obvious questions is, how does it actually work? As I mentioned before, all registration must occur in the window between early initialization and just after the driver's MACHINE_INIT callback is called. The reason for this is simple: after that point, the game is actually up and running, and the user can request a save at any point thereafter. Before a request to save the state can actually transpire, the state of the system must meet a few basic requirements. Usually these are met within a few milliseconds of the save state request, so it is usually not noticeable what is happening under the covers. To begin with, a save will only occur in between timeslices of CPU execution. That is, the state will only ever be saved at the start of a round-robin timeslice of the CPUs. This reduces the chances that any CPU will be in an odd state. The second major requirement is that there can be no "anonymous" timers active in the system. What is an anonymous timer? It is any timer that is set using the timer_set call. Timers created this way are one-shot disposable timers and are intended primarily for things like timer_set(TIME_NOW)-style synchronization callbacks. Some games (including many I've written unfortunately) will cascade these anonymous timers by calling timer_set in the callback from a previous timer_set. This means that at any given instant, there is always at least one anonymous timer pending, and you will get an error after 1 second if the system can't get to a state where there are no pending anonymous timers. (The solution to this problem is to create a timer at init time using timer_alloc and then use timer_adjust on that timer to get the same behavior). Once these requirements are met, the actual save can occur.
 - 31st January   2006: Aaron Giles - Part 1: Before adding save state support to a driver in MAME, it's important to understand how the overall save state system works. But first, a word of warning: it's been said in the past that adding save state support to a driver is easy. Let me clarify that by saying: adding save state support a driver is relatively easy if you know C well. How do you know whether or not you know C well? Read onward, and I'll explain. The basic concept of saving the state of any emulator involves first identifying all the information that represents the current state of the system, and then writing that data out to disk in some fashion for later retrieval. There are many ways this can be done. Let's look at the first step: what comprises the set of data that needs to be saved in order to fully represent the state of an emulated system? Some obvious candidates are: 1. The registers and internal state on each CPU, 2. Information about what each sound chip is doing, 3. The contents of all RAM (including video, palette, sound RAM) in the system, 4. All timing information, 5. The state of any peripheral devices (EEPROMs, IDE controllers, etc.), 6. The currently selected memory bank for banked RAM/ROM and 7. The state of any driver-specific devices. Fortunately, due to MAME's modular design, a lot of this is taken care of centrally. For example, many common CPU cores already have built-in support for saving their registers and internal state. Many common sound chip emulators do likewise. Similarly, the MAME core handles saving the contents of all RAM and timers. And many peripheral devices can save their state as well, as long as they have some sort of init() function that is called to set them up. This leaves memory banks and driver-specific devices as the two main things that need to be managed manually for each driver.
 - 0.101u1            : Deferred state loading until all anonymous timers have cleared. This fixes issues where the timers would fire after the load and would clobber data that was just loaded. Changed timer_alloc_ptr-style timers so that the pointer parameter is supplied at allocation time and is not changeable. This makes these timers more easily supported in save states [Aaron Giles].
 - 0.101              : Aaron Giles hanged the timing of save state bank registration so that dynamically installed banks will work properly. Added new generic macros to state.h to make it simpler to do save states. Use state_save_register_global(var) to register a driver-related global variable. Use state_save_register_item(module, instance, var) to register other variables with specific module and instance names. Converted the MCR and Cinematronics vector saves over to this. As a result, save states for games will be incompatible with prior versions of MAME.
 - 0.100u4            : Aaron Giles added new option -autosave which automatically loads a game at startup and saves it at exit time for any game which is explicitly marked with GAME_SUPPORTS_SAVE. For other games, this option has no effect. Added new driver flag: GAME_SUPPORTS_SAVE, to indicate drivers which have save state support that is supposed to work. Attempting to save state on a game without this flag will give a warning. Save state-related bugs may be filed against drivers with this flag set.
 - 0.99u7             : Aaron Giles fixed crash when running games whose CPU core did not support save states.
 - 0.99u6             : Aaron Giles fixed crash that was introduced with the state saving updates in 0.99u5.
 - 0.99u5             : Significant changes to the save state system [Aaron Giles]: Added alternate save state pre-/post-load function types that take integer or pointer parameters. Updated several sound cores and other files to take advantage of this. Made state handler registrations track like other scoped resources (timers, memory) so that registrations can occur as late as MACHINE_INIT time. Added logic to detect registrations after MACHINE_INIT time and prevent saves in that case. Added logic to detect when CPUs or sound chips haven't registered anything to save/load. When this happens, info is logged to error.log and saves/loads are disallowed. Allocated timers are now automatically saved and restored as part of the save state. The global time is now restored as well as a bunch of CPU execution state. This should produce more reliable restores. Added logic to defer saves until all anonymous timers have cleared. If a driver uses many anonymous timers it may not be possible to ever successfully save, so the operation will time out after one second. Before restoring, the machine is now reset. This gives a more consistent environment for the load to occur. Re-enabled save state support for YM2151. Added save state support to the classic Namco sound system. Added save state support to the samples sound system. Removed anonymous timer usage in machine\scramble.c.
 - 0.99u4             : Tim Lindner fixed the state save facility play better on multisession ports if initialization fails.
 - 0.95u3             : smf increased MAX_INSTANCES to 56 in src\state.c.
 - 0.94u4             : BUT fix crash games using FM sound chips when you load state.
 - 0.84u5             : Andrew Gardner added generic support for save states on games using the generic bitmap video hardware. Also converted a number of drivers over to using that system.
 - 0.80u3             : Nathan Woods changed options.savegame to be a string (src\windows\config.c). If this is a one character string, then the save state is loaded as before. If it is a larger string, then cpu_loadsave_schedule_file() is used. Also added a state_save_check_file(); a call that front ends can use to validate a state save file (src\state.c).
 - 24th March     2004: Nathan Woods sent in a few changes to the save state system, adding support for validating state files and loading arbitrarily named files.
 - 17th March     2004: Bryan McPhail fixed another state saving related crash that happened in YM2610 games that don't use external sample ROM memory, for example Gun Frontier.
 - 0.78u6             : Olivier Galibert added save state support for 64-bit data types.
 - 0.78u5             : smf added Save state loading from command line. Adds -state to the windows version. The code was already in the core to handle it, all this patch does is allows you to set options.savegame Not sure how reliable it is, it worked for galaxian.
 - 0.78u4             : Aaron Giles fully integrated save/restore memory blocks. Before, the save/restore system had its own memory map walking routines. That's gone now. Instead, memory blocks are registered as they are allocated by the dynamic memory allocator. Note that this will likely cause save states to be bigger than they were before (and certainly, they will not be compatible), but disk space is cheap, live with it.
 - 27th November  2003: Leon van Rooij fixed the state saving support in the YM2610 sound core.
 -  2nd May       2003: Nathan Woods updated the 6821 PIA init function to support save states.
 -  7th January   2003: Bryan McPhail added save state support to V20, V30 and V33 CPU cores.
 - 12th July      2002: Nathan Woods adding save state capability to the TMS34010 CPU core.
 -  9th July      2002: Bryan McPhail fixed a crash that happened if you tried to save a state but didn't have the directory.
 - 24th June      2001: inside out boy added DIP switch settings and state saving to the Solomon's Key driver.
 -  7th June      2001: David Graves added save states, coin lockouts and counters to the Superman driver.
 - 31st May       2001: Tatsuyuki Satoh added state saving support to the FM sound core.
 - 30th May       2001: Shiriru added state saving support to the Cave driver and did many other fixes.
 - 23nd May       2001: David Graves added state saving support to the Asuka driver.
 - 21st May       2001: David Graves added state saving support to World Grand Prix and fixed some graphics problems.
 -  5th May       2001: David Graves added state saving support to the Taito H system driver.
 - 29th April     2001: Nathan Woods added state saving support for the 6821 PIA chip.
 - 23rd April     2001: David Graves added state saving support to Top Speed and did some minor cleanups.
 -  8th April     2001: Olivier Galibert fixed the state saving code to work in multisession environments.
 -  3rd April     2001: Jarek Burczynski added state saving support to the YM2151 sound core.
 -  2nd April     2001: Jarek Burczynski added state saving support to ADPCM and OKIM6295 sound emulation cores.
 - 30th March     2001: David Graves and Jarek Burczynski fixed a few bugs and added state saving support to Rainbow Islands, Rastan and Operation Wolf.
 - 27th March     2001: Olivier Galibert fixed multi-z80 games that were broken because of a bug in the save state routines.
 - 26th March     2001: Olivier Galibert changed the keys that are used for state saving.
 - 25th March     2001: David Graves added state saving support to the Operation Thunderbolt driver.
 - 22nd March     2001: David Graves fixed some bugs in the Taito F2 drivers and added state saving support to Taito F2 and Darius drivers, but it still needs some work.
 - 12th March     2001: Olivier Galibert fixed a small save state bug which occurred with drivers using multiple identical CPUs. Brad Oliver fixed the state save routines to be proper ANSI C code.
 -  8th March     2001: Marco Cassili fixed some dip switch settings in Rolling Thunder and Konami Twin16 games.
 -  6th March     2001: Juergen Buchmueller fixed some bugs in the state saving functions, added support for them to the DECO Cassette system driver.
 -  5th March     2001: David Haywood added state saving to the Sega C2 driver, fixed some small bugs in it and also added state saving to Ninja Kid. Olivier Galibert fixed a bug in the 6502 core which was introduced by the saved states support, and some Taito games that were broken because of some bugs in the state saving code.
 - 25th February  2001: Olivier Galibert added save states support, which works in Xexex, X-men and Bomb Jack already. However, every driver needs to be updated to include the save states.
 - 0.36               : High score saving is no longer directly supported. It requires an external file called HISCORE.DAT, which will be provided and maintained separately from MAME. Without that file, nothing will be saved to the /hi subdirectory. We cannot guarantee at this time that all future versions of HISCORE.DAT will work with this version of MAME. EEPROM, battery-backed RAM or other types of non-volatile memory are still directly supported, and saved to the /nvram subdirectory. This doesn't necessarily mean high score support, it is often used only for game configuration.
 - 0.36RC1            : Added src\hiscore.c/h. Preliminary support for HISCORE.DAT [Phil Stroffolino].
 - 0.36b14            : Removed *hiscore_load and *hiscore_save from the GameDriver structure. To manage nvram/eeprom/cmos/etc the new *nvram_handler in struct MachineDriver must be used. High score save is temporarily disabled. It will be added again in a future release using an external .dat file [Nicola Salmoria].
 - 0.36b12            : To all people that submitted high score save updates: high score save is on hold. No additions will be made for the time being. In the near future, high score support will be removed from the executable to an external file, much like the cheat.dat one. We are looking for a volunteer to maintain that file.
 - 0.35b7             : Added src\state.c/h.
 - 0.34RC1            : The high score save format has changed in some games to make it cross platform. The old scores for those games will be lost. If you see garbage in the high score table, or otherwise strange behaviour, delete the .hi file.
 - 0.31               : High score load/save is disabled when -record or -playback is used. This prevents undesired side effects [Nicola Salmoria].
 - 0.30               : High score and configuration save now support ZipFolders/ZipMagic to directly use .zip archives. If you want to use this feature, make sure there are no HI or CFG directories, otherwise the files will be saved there, not in the.zip archive [Valerio Verrando].
 - 0.29               : IMPORTANT: CONFIGURATION AND HIGH SCORE SAVE FILES HAVE BEEN MOVED. MAKE SURE YOU MOVE THE OLD ONES TO THE NEW DIRECTORIES "CFG" AND "HI". This will be done automatically by the provided batch file mov.bat, but PLEASE read on for details.
 - 0.13               : Nicola Salmoria added the most frequently asked feature: High Score saving. Check the table at the beginning of readme.txt to see which games already support it. High scores are also reset-proof: you can reset the game by pressing F3 without losing them. To reset the high scores to their default, just delete xxx\xxx.hi where xxx is the game name. Note that hi score saving will NOT work if the default hi scores have been modified in the ROMs. Use the original ROMs. Changes to struct GameDriver to accomodate the high score saving functions. I also moved the decryption pointers at the end, so it is not necessary to explicitly define them as 0 when they are not needed. Check driver.c to see how high score handlers should be written. hiscore_load() is called every vblank until it returns nonzero; this allows it to wait for the hi score table to be fully initialized before replacing it. To avoid saving an incomplete table, hiscore_save() is called only if hiscore_load() previously returned nonzero.



 8.3  CHEAT ENGINE

 - 0.263              : Added the global cheat enable toggle to the menu. Indicate if no cheats were found. Moved global cheat enable to the bottom. Fixed reset(reset_options::REMEMBER_REF) with add/remove favorite (ui\cheatopt.cpp) [hap].
 - 0.227              : C++17 string handling updates (without charconv so as not to break GCC 7). cheat.cpp: Removed some c_str() calls that became unnecessary a while ago [Vas Crabb].
 - 0.201              : Fixed incorrect "On/Off" color on "AutoFire Status" screen (ui\cheatopt.cpp) [kunikuni, AJR].
 - 0.184              : Added load_cheatfiles to frontend\mame\mame.cpp/h, emu\main.h and emu\machine.cpp [Pugsy].
 - 0.183              : Fixed crash on loading invalid cheats, MAME now logs an error and continues [Vas Crabb].
 - 0.177              : Made path_iterator copy search path to fix use-after-free (emu\fileio.cpp and mame\cheat.cpp). Cleanup mame\cheat.cpp [Vas Crabb]. Fixed -debug -cheat crash (mame\cheat.cpp) [MooglyGuy].
 - 0.175              : Using std::vector<std::unique_ptr<xxx>> instead of simple_list<xxx> in Cheat engine (mame\cheat.cpp) [Miodrag Milanovic].
 - 0.173              : Moved emu\cheat.cpp/h to frontend\mame\.
 - 0.163              : Improved cheat support for games in softlist. XML cheats for home systems should now be stored in a subfolder (or a compressed archive), named after the software list, inside the cheatpath. this allows for loading cheats for consoles / home computers without interfering with arcade cheats when games have identical shortnames. For instance, loading Galaga in NES allows now to use its specific cheats even if a galaga.xml is available in the arcade cheat.7z (previously you'd get an error due to the arcade cheat referring to a cpu not present in the NES) [Pugsy, Fabio Priuli].
 - 0.154              : Fixed uninitialized auto (debug\express.c); should fix instances where a game with cheats active using multiple expressions in one action crashes at start [m4st4].
 - 0.141u1            : Fabio Priuli added support for cheats with software list shortnames.
 - 0.140u3            : Pugsy added a 'changed by' search to the cheat engine.
 - 0.140u1            : C++-ified the cheat engine [Aaron Giles].
 - 0.138u4            : Aaron Giles fixed bad loop condition that shows up with -cheat enabled. This fixed the out of memory crash using -cheat in many sets.
 - 0.138u3            : Miodrag Milanovic updated cheat loading to support image devices (moved implementation from MESS), use only CRC of first found image.
 - 0.136u1            : smf fixed hitting F6 without -cheat trigger causes crash.
 - 0.134u2            : Sandro Ronco added simple system for auto-detecting cheat-worthy RAM areas. Memory references can now explicitly specify logical or physical access by prepending with an 'l' or 'p'. Logical remains the default. Example: ppb@1000 = physical program space byte at address $1000. ldw@2000 = logical data space word at address $2000. Changed cheat finder to explicitly reference physical memory when writing out new cheats [Aaron Giles].
 - 0.134u1            : Pugsy fixed F6 cheat toggle behavior. Sandro Ronco added byte swap to the cheat search.
 - 0.134              : Pugsy hooked up F6 again as a global cheat enable/disable. Sandro Ronco added "increase or equal" and "decrease or equal" options to the new cheat commands.
 - 0.133u5            : Pugsy added 'Reload All' option to the cheat menu and enabled display of cheat comments from within the cheat menu. Press the SPACE key to toggle display. Sandro Ronco added some basic cheat search functionality to the debugger, allowing searches on various memory sizes. Aaron Giles changed cheat search so that it loads *all* cheat files in all search paths. Note that it is easy to end up with duplicate entries this way. Some currently disabled code is present which filters out duplicates, but the logic for doing this is quite unclear with the presence of text-only cheats, which is why the code is disabled for now.
 - 0.131u3            : Pugsy added LSHIFT and RSHIFT as alises to << and >> for cheat files.
 - 0.130u2            : Pugsy fixed crash due to recent cheat engine changes.
 - 0.130u1            : Pugsy changed the One-Shot List or Selectable value cheats to display "Set" instead of "Off". Also stopped the cheat options being activated in order when you are going through the possibilities in this case. These cheats are now activated by pressing ENTER after you have chosen an option. This fixed MAX_ARGUMENTS doesn't seem to work.
 - 0.127u3            : Aaron Giles added built-in "Off" states to the cheats with parameters. This is also the default state, obviating the need for a default value. Removed the "default" attribute as a result. Switching from "Off" to another state first executes the "on" script followed by the "change" script. Switching to "Off" from another state executes the "off" script. While not off, the "run" script is executed each frame. Aaron Giles moved reset to default behavior in the cheat menu to IPT_UI_CLEAR.
 - 0.127              : Aaron Giles added cheat functions frombcd() and tobcd() to convert numbers to/from BCD format. Changed "Activate" to "Set" in the menus.
 - 0.126u5            : Aaron Giles fixed bug that prevented the cheat engine from working when the debugger was disabled. Aaron Giles updated cheat parser to preserve the format of attribute values used for cheat parameters and items. Aaron Giles added support for information-only cheat items, which will be displayed in the menu but which are not selectable and have no action associated with them. Empty information-only items are automatically converted to menu separators.
 - 0.126u4            : Changes to the cheat.xml format [Aaron Giles]: New tag <comment> (within <cheat>) is read and preserved when saved. Removed variable attribute from <parameter>; it is now assumed to be 'param'. Added default attribute for <parameter>. Added new variable 'frame' accessible from cheat scripts. This can be used in the conditional to prevent execution on every frame, or for other effects (like displaying temporary messages). Added new variable 'argindex' which is the index when processing an <argument> with a count attribute greater than 1. Reinstated the cheat menu. It now displays all loaded cheats and allows for them to be activated. All known cheat behaviors should be working now. Cheats are toggled on/off with the left/right arrow keys. Oneshot cheats are activated by hitting enter. Pressing enter on other cheats resets them to their default values. Changed cheat escaping to automatically escape && & < and <= to and band lt and le.
 - 0.126u3            : Aaron Giles added new option 'cheatpath' to specify one or more paths for cheat files. Removed old option 'cheat_file'. Aaron Giles removed old cheat.c/h and replaced them with code that will read and write the new XML-based cheat format using the new cheatpath option (cheats still need to be enabled in order to load at all). Note that the cheats are not implemented yet, but they are fully parsed. To test saving, whenever a cheat file is successfully loaded, it is immediately written back out as 'output.xml' to the cheat directory for validation.
 - 0.126u1            : NOTE: The cheat engine is disabled as of this version. It is currently undergoing a desperately-needed complete redesign and rewrite from scratch. By the time 0.127 is ready, we should have support for the vast majority of existing cheats working once again.
 - 0.126              : Couriersud fixed scrolling speed in case a cheat dat has invalid (i.e. 0) settings.
 - 0.125u9            : Updated cheat system [ShimaPong]: Roll back older periodic function. Now standard/old format work in this function. Otherwords, several operations which doesn't exist in older function and added recently are now disabled. Separated load_cheat_code() to 3 indipendent functions and added new cheat options, "Load New/Standard/Old Format Code" (Default : load all format codes). NOTE: Delete all cheat options in the database before start or reload default options (Shift + Reload key) in cheat general menu. Added format strings structure to accept huge size strings in loading a database to prevent from breaking other strings. Changed Link in new format. Label code is now "Link-Label" and sub-label is "Label-Sub-Link", "Standard-Link" is no longer label. Added choose_label_index() to manage label selection. Fixed build_label_index_table() to prevent from crashing and disabled to build label index table in case of standard/old format. Fixed memory free problem in case of standard/old code. Fixed several reported/found bugs.
 - 0.125u7            : Updated cheat system [Shimapong]: Merged 3 different search menu functions to search_main_menu(). Added new cheat options, "Vertical/Horizontal Key Repeat Speed". NOTE: Delete all cheat options in the database before start or reload default options (Shift + Reload key) in cheat general menu. Changed assignment of Entry for Activation Key and Pre-enable command code. Now there are check the tag in comment field instead of index number. But it's only for new format command and old is as before. Added tag output in save_activation_key() and save_pre_enable(). Cleaned up save_cheat_options() to output description. Changed memory read function in watchpoints. No longer "Debugger" watchpoint mis-hit "Cheat" watchpoint. Fixed several reported/found bugs. Renamed funcitons/enum based on coding guidlines. All functions are completed in this update.
 - 0.125u5            : Updated cheat system [ShimaPong]: Changed the function of default memory read in case of the search to prevent from crashing if a game uses cpu_spinutil(). Now basically used do_memory_read() instead of do_cpu_read() (Try to search in actfancr between this and previous version). NOTE : It's not fundamental solution but no longer crash. Cleaned up read_data() and write_data(). Cleaned up save/load routine and added open_cheat_database(). Added new menu "Cheat Commands" into the cheat main menu the following commands are supported in this menu: * Reload cheat code (the same as Reload Database key), * Cheats ON/OFF (the same as Toggle Cheat key), * Watchpoints ON/OFF (the same as Shift + Toggle Cheat key), * Save description (save the title of the game) and * Save raw code (save raw cheat code with new format). Fixed several bugs which has found in testing. Renamed functions based on coding guidlines.
 - 0.125u4            : Updated cheat system [ShimaPong]: * Locked search region when malloc fails to allocate gigantic memory instead of fatal error. Also locked zero malloc error in case of search speed = all memory in 32-bit CPU. And added search region range checker to lock a search region with a big risk. * Fixed a bug that old code is always converted to specified separator in enable/disable menu. * Refined new cheat format. - Rewritten cheat format again. Newest format is ":gamename::type::address::data::extend_data: (description:comment)". Expanded type field now requires 10 bytes (not 8 bytes) and it divides internal cpu (2 bytes) and type (8 bytes) parameters. - Removed VWrite, VRWrite. The flag of Value Selection is merged into expanded type field now. - Added CBit (Condition Bit). This checks bit in read data then set or clear bit in case of true. - Rearranged cheat code viwer based on newest cheat format. * Fixed unworking Load Old Format option. If you want to load old or older format code, set it (default is OFF). * Renamed functions/structures based on coding guidlines. All structures and included parameters are completed. * Merged resize_*_no_dispose() into resize_*(). * Removed the hack of search region for SH-2 CPU because required region is now set as expected without this hack.
 - 0.125u3            : Updated cheat sytem drastically [ShimaPong]: * Supported (preliminary) new cheat format: Added new operations: PDWWrite, RWrite, VRWrite, CWrite, Move, Branch, Loop and Popup. Added new options: ValueSelectNegative, Return, AddressReadFrom and DataReadFrom. Added cheat variables. You can store data with Write or Move operations and read as an address or data from each fields. Added condition check for CWrite, Branch and Popup operations. Added new custom codes: Separator and Layer. Supported Shared Code [MESS ONLY]. Different machine shares common code for a game. * Allowed mixed label-select or user-select with standard code. * Added label selector menu for label-selection code. * Added extend comment displayer for multi-line comments. * Added command menu for cheat list and watchpoint. Easy selectable cheat commands in this menu. * Added debug view menu [DEBUG BUILD ONLY]. It displays internal info to debug cheat system. * Supported unique separator by ui_draw_menu() in several menus. * Added user defined search region. You can set free memory range from cheat database. * Enhanced error check for cheat code to prevent from unexpected working. Error code is locked. If you select this code, the analyser works instead of the code activater. * Enhanced value input with keyboard-less. Cheat edit key gives new input system in several menus Left/right keys moves the edit cursor and up/down keys changes a value. * Added cheat command save, reload and reset in option menu. * Supported address shift in searching. Now searchable default region in TMS340*0 cpu games (Trog, Smash T.V. etc). * Refined cheat menu handling with function pointer called cheat_menu_handler. * Added format strings table to manage in an integrated fashion. * Deleted unused hacks of default search region for Neo Geo and TMS34010. * Refined code based on MAME coding guidelines: Renamed many functions/structures/constants. But not complete due to too many items. Converted small but often used functions to INLINE. Fixed a comparison in case of 0 or NULL. Added missing function prototype for several functions.
 - 0.122u7            : Aaron Giles changed one of the cheat calls back to using more generic switch detection so they can be triggered via joysticks.
 - 0.122u4            : Aaron Giles fixed enter an address into the cheat system doesn't work.
 - 0.111u3            : Stephane Humbert fixed cheat searching.
 - 0.111u1            : Third round of numerous improvements to the cheat engine [ShimaPong]: NOTE: Delete old command code and save it newly in Options menu. * Operation: Added preliminary direct Program Space accessor. You can hack custom handling ROM code (eg encrypted segas16b.c games). But it has several problems. And added watchpoint display for Program Space. Added new operation, "Write if Match". The cheat engine writes value only when read value matched reserved value which is stored in extend data field. * Search menu: Added 3rd search mode, "Minimum Search Mode". It's more simple than Classic Mode. Also added search memory initialize with ui_clear key and extended value edit with arrow key in this mode. Added "View Last Results", "Restore Result", "Region Selection" items to the advanced search menu. * Result viewer: Don't open this menu to avoid MAME crash in case of no search region like sms.c in HazeMD. Added quick page switch by left/right arrow key. Also changed functions for several keys in this menu. Improved no result page skip. But incomplete because doesn't skip first or last page even if no result. * Code loading: Ignored to load old format code by default. If you need to load, choose "Load Old Format" item in Options menu. * Input: Fixed activation key save on Enable/Disable menu. Fixed key handling for watch code addition from watch list menu to cheat list. Now it works with ctrl + save cheat key on the watch list menu. Enabled ui_clear key in editing a value (clear data) and on watch list menu (reset all watchpoints). * Option: Added preliminary Debug option to check internal data. Added command code save. You can save command code with save cheat key in Options menu. * Others: Added quick menu switch. It is assigned to ui_zoom in/out keys. This function works in Enable/Disable, Add/Edit, Search and Watchpoint menus. Rearranged several items on the menus.
 - 0.110u1            : Numerous improvements to the cheat engine again [ShimaPong]: * Operation: Mounted copy prevous value. Defined link extension bit in type field. Improved one shot operation when restore previous value is available. * Menu: Major update for classic search menu. Arranged the cheat general menu a bit. Improved item display for selection type code on the code edit screen. Added entry index parameter to EditCheatMenu(). * Watchpoint: Added watchpoint for ROM region. Improved adding watch from cheat list. * Activation key: Added save activation key. Added 2nd activation key. Added show activation key message option. * Others: Refined command code format.
 - 0.108u5            : Numerous fixes to the cheat engine [ShimaPong].
 - 0.108u4            : Nicola Salmoria fixed UI for cheat system watchpoints, making them usable again.
 - 0.107              : ShimaPong fixed all watchpoints via the cheat engine are lost during the menu opened on 0.106u1 or later.
 - 0.106u5            : Aaron Giles fixed Cheat menu display problems and -cheat_file option.
 - 0.104u4            : Ian Patterson fixed cheat timer to fire at the correct rate. Also fixed initialization order to work around dependency on the video/UI system.
 - 0.99u4             : Aaron Giles added memory card and cheat menus back into the system.
 - 0.95               : Thorwak added 24-bit cheat finding support.
 - 0.94u1             : Atari Ace fixed cheat.c typo + other.
 - 0.83               : Ian Patterson fixed cheat engine bug preventing assignment of controller buttons as activation keys.
 - 21st December  2003: Martin Adrian submitted an update to the cheat system adding support for favourite cheats and not loading the cheat file until it is used.
 - 0.75               : Nathan Woods moved the MESS specific code into a separate module, reducing #ifdef clutter.
 - 0.69               : Minor change to the MESS specific code [Nathan Woods].
 - 18th April     2003: Ian Patterson sent in an update to the cheat engine, fixing some bugs and adding a few new features.
 - 14th November  2002: Stephane Humbert re-added a small fix to the cheat engine.
 - 25th September 2002: Ian Patterson added new cheat types and fixed some bugs in the cheat engine.
 - 11th June      2002: Ian Patterson sent in a small bug fix to the cheat engine.
 - 0.60               : Complete rewrite of the cheat engine [Ian Patterson].
 - 11th April     2002: Ian Patterson sent in a new, completely rewritten cheat engine that allows for much more flexible cheats than currently.
 - 0.56               : Updated the cheat engine [Ian Patterson].
 - 29th September 2001: Ian Patterson added support for NVRAM modification in the cheat engine, and he fixed a memory violation bug in it as well.
 - 25th July      2001: Ian Patterson updated the cheat engine with a few new features.
 - 19th June      2001: Ian Patterson fixed some cheat engine compilation problems.
 - 16th June      2001: Ian Patterson updated the cheat engine, adding ROM area writes and support for more cheats.
 - 0.37b15            : Rewritten the cheat engine [Ian Patterson].
 - 19th April     2001: Ian Patterson submitted an updated version of the cheat engine, including a lot of bugfixes and functionality enhancements. inside out boy sent a fix for playing back inp files on certain games.
 - 0.37b2             : Massive rewrite of the cheat system user interface. This is still a work in progress [Brad Oliver].
 - 0.36b10            : Support for gzipped (NOT zipped) cheat files. Uncompressed files still work [Mathis Rosenhauer].
 - 0.34b8             : Several changes to the cheat system, you'll have to download a new cheat database if you want to use it [Stephane Humbert].
 - 0.34b5             : Changes to the cheat system [Stephane Humbert]: 15 active cheats instead of 10. Free memory before the start of a new search. Possibility of searches in CPUs other than 0: A question is asked to the user to choose a CPU (0 default) when he starts a new search and the game has more than one CPU. Possibility to view watches for CPUs other than 0. CPU is displayed with the watches. Possibility to change the CPU of a watch by pressing 9 (previous CPU) and 0 (next CPU). Possibility to copy a cheat code by pressing F4. Possibility to rename the cheat filename by pressing F5. Possibility to save all the cheat codes to disk by pressing F6. Possibility to remove all the cheat codes from the active list by pressing F7. In the edit cheat, on the data line: Home sets the value to 0. End sets the value to 0x80. Possibility to use to use Home, End, PgDown and PgUp to select a cheat code in the list. Data is saved on 2 hex digits (%02X).
 - 0.34b4             : Some improvements to the cheat system [Stephane Humbert]: Possibility of "circular" values in search method 1: If you press OSD_KEY_LEFT or OSD_KEY_DOWN when value is 0, it turns to 0xFF. If you press OSD_KEY_RIGHT or OSD_KEY_UP when value is 0xFF, it turns to 0. Added the possibility of toggling the watches display ON (Insert) and OFF (Del). Possibility to work on another cheat file (CHEAT.DAT is just the default one) by using option "-cheatfile xx". Added new types of cheats: 20-24: same as 0-4 but they force bits to 1. 40-44 : same as 0-4 but they force bits to 0.
 - 0.30               : Several changes to the cheat subsystem [James R. Twine, Marc Lafontaine].
 - 0.29               : Added cheat.c/h. Added a "Pro Action Replay"-like cheat finder. It is only available when -cheat is specified on the command line [Marc Lafontaine].
 - 0.28               : New command line option: "-cheat". Cheats like the speedup in Pac Man or the level skip in many other games are disabled by default. Use this switch to turn them on [Nicola Salmoria].



 8.4  CHEAT PLUGIN (LUA)

 - 0.265              : Make string.char and string.format available to cheats (cheat\init.lua) [Logan B].
 - 0.249              : Overwrite existing hotkeys if all hotkeys are cleared, fixes GitHub #10387 (cheat\init.lua) [Vas Crabb].
 - 0.242              : Don't try to call a handler for the previous menu option (plugins\cheatfind\init.lua) [Carl].
 - 0.231              : Fixed XML cheat loading (plugins\cheat\init.lua) when emulation is launched with an image option specified (e.g. mame nes -cart smb) or by loading directly one part of the software (e.g. mame a600 amigaocs_flop:lslarry2:flop1) [Fabio Priuli]. Fixed getting arbitrary screen (plugins\cheat\init.lua) [Carl]. Fixed XML cheats which use multiple spaces (plugins\cheat\cheat_xml.lua) [Szunti, Carl].
 - 0.230              : Fixed missing LUA API changes (plugins\cheat\init.lua). Fixed selection (plugins\cheat\init.lua) [Carl].
 - 0.229              : Fixed watch and write (plugins\cheatfind\init.lua) [Carl].
 - 0.228              : Migrate remaining XML cheat code for LUA API changes (plugins\cheat\cheat_xml.lua). Fixes cheats show errors attempting to activate [Vas Crabb].
 - 0.227              : Fixed menu item not updating visually when disabling a cheat with UI Left (plugins\cheat\init.lua). Fixed not finding the first screen after screen enumerator was exposed as an object rather than using a table (plugins\cheatfind\init.lua) [Vas Crabb].
 - 0.225              : With game genie codes try 32k NES banks then fall back to 8k and warn with 6 char codes and banked prg [Carl].
 - 0.218              : Strip the leading colon from device names as necessary in order to avoid doubling of the root colon (plugins\cheat\cheat_xml.lua) [Ryan Holtz, DjDiabolik].
 - 0.217              : Permit entry of cheat names (plugins\cheatfind\init.lua). Loading fixes (plugins\data\data_command.lua, data_marp.lua and load_dat.lua). Various fixes (plugins\data\data_hiscore.lua and load_dat.lua) [Carl]. Removed an unnecessary separator is displayed at the top of the cheat menu (ui\cheatopt.cpp) [Osso].
 - 0.216              : Some simplifications and bugfixes (plugins\cheatfind\init.lua). Show pressed buttons when setting hotkeys (plugins\cheat\init.lua). Permit input sequences (plugins\autofire) [Carl].
 - 0.214              : Added time functions to cheat sandbox (plugins\cheat\init.lua) [Carl].
 - 0.207              : Fixed address step when shift is negative (plugins\cheatfind\init.lua) [Carl]. Cheat Finder Usability Improvements (plugins\cheatfind\init.lua): 1. Changed visual indications to make it nicer & quicker to use. 2. Added selectable automatic pause capability to the cheat finder menu. 3. Allows the Test/Write poke to be changed. 4. Added another cheat format capability for cheat.simple (write support only) [PugsyMAME].
 - 0.205              : Fixed typo (plugins\cheatfind\init.lua) [Carl].
 - 0.204              : Fixed XML writer (plugins\cheatfind\init.lua) [Carl].
 - 0.202              : Fixed memshares and aligned search option in plugins\cheatfind\init.lua [Carl].
 - 0.198              : Fixed opcode space (plugins\cheat\cheat_xml.lua). Translate debugger expressions by space index as the debugger does (plugins\cheat\cheat_xml.lua). Handle the case where the ui prepends the list name to the list entry name [Carl].
 - 0.197              : Work around small issue in conversion (plugins\cheat\cheat_xml.lua) [Carl].
 - 0.196              : Use print_error to make testing easier (plugins\cheat\init.lua). Search any address space (plugins\cheatfind\init.lua) [Carl].
 - 0.195              : Read whole block (plugins\cheatfind\init.lua) [Carl].
 - 0.194              : Fixed table lookup in plugins\data\database.lua [Oliver Stoeneberg]. Added reporting of database errors (plugins\data\database.lua and data_marp.lua) [Firewave]. Don't pollute the namespace and use emu.print_error (plugins\data\data_marp.luam database.lua and load_dat.lua). Fixed plugins\cheatfind [Carl].
 - 0.193              : Fixed sentence building by concatenation, and at the same time collapse two translatable strings to one (plugins\cheatfind\init.lua) [Vas Crabb].
 - 0.191              : Bail if database not open (plugins\data\data_marp.lua). Added input sequence cheats (plugins\cheat\init.lua). Fixed 'no xml or simple for ram_device cheat' [Carl].
 - 0.190              : Fixed is_oneshot() (cheat\init.lua). Fixed cheats driven by <parameter, left arrow doesn't change displayed value (see MT06658) [Carl].
 - 0.189              : Added plugins\data\data_marp.lua, database.lua, plugins\gdbstub\init.lua and plugin.json. Catch errors in cheat scripts and preliminary breakpoint/watchpoint 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 [Carl].
 - 0.188              : Added plugins\cheat\keycodemap.lua. Fixed NESS Game Genie decoder and link simple cheats (plugins\cheat\cheat_simple.lua). Added UI support for joystick hotkeys (plugins\cheat\init.lua). Poll for setting hotkeys. Create dirs. Popmessage for hotkey setting [Carl].
 - 0.187              : Added plugins\cheat\cheat_json.lua and keycodemap.lua. Changed plugins\cheat\cheat_simple.lua to simple_conv.lua, cheat_xml.lua to xml_conv.lua and xml_to_json.lua to conv_cheat.lua. Added hotkey support to cheat plugin. Be more careful with unpack (plugins\cheatfind\init.lua). Added NES, SNES, Genesis and Game Genie support to cheat plugin. More Game Genie and NES Action Replay cheat format decoder [Carl].
 - 0.176              : Added cheat\simple_conv.lua. Added logical address space accessors to LUA engine, use by default in translated cheats (plugins\cheat\xml_conv.lua). Better error handling (plugins\cheat\init.lua). Added address_to_byte and optional arg for physical address space to LUA engine to disable address shift. Cheats created with the cheatfinder won't work with the builtin cheat finder if the cpu has an address bus that isn't 8bits unless the addresses are fixed up. Added simple cheat file format. Added operand size to simple cheat and write cheats from cheatfind into simple file. Added name cheats [Carl].
 - 0.175              : Added share accessors to LUA engine. Search share regions (plugins\cheatfind\init.lua). Don't turn off cheat.script unless on [Carl].
 - 0.174              : Indent the output (plugins\cheat\conv_cheat.lua and cheatfind\init.lua). Handle multiple cheat paths and missing dir in write back. Reverse operator order and add value comparison. Make menu layout much more flexible [Carl].
 - 0.173              : Added cheatfind\init.lua, cheatfind\plugin.json. Added cheat LUA plugin. Added LUA cheat finder library. Added basic menu for cheatfind. Make ram scan work. Added width and endian awareness. Run same operation over a batch of data. Preliminary support to inject cheats for testing. Added safe table functions to sandbox. Added game time for cheats which want a time delay. Load multiple files and fix load failure. Changed match behavior and add on screen watches. Added bitwise comparisons to cheatfind. Fixed machines with >1 ram regions [Carl].



 8.5  SCREENSHOT / MNG / INP / WAV / AVI

 - 0.277              : Added Hypervoice support and stereo output for WonderSwan sound (virtual\vgmplay.cpp) [cam900]. Make AVI able to do more than stereo (util\aviio.cpp) [O. Galibert].
 - 0.276              : Give visual feedback for playing/paused and loop state (virtual\vgmplay.cpp) [Vas Crabb].
 - 0.274              : Use embedded SVG for button labels (layout\vgmplay.lay) [Angelo Salese].
 - 0.270              : Fixed error popmessage param index (imagedev\snapquik.cpp) [hap].
 - 0.259              : Code cleanup (util\aviio.cpp): Use multibyte.h functions and std::swap. Turn most macro constants into enums and move them down into classes. Changed comments to C++ style. Use std::clamp (util\aviio.cpp) [AJR].
 - 0.255              : Changed list description to reflect the nature of the files (hash\vgmplay.xml) [ArcadeShadow].
 - 0.254              : Fixed an object leak on unload. Also changed some other media image devices to use smart pointers (imagedev\avivideo.cpp) [Vas Crabb]. Improved AVI framerate accuracy (emu\recording.cpp) (Numerator values above 0x3fff'ffff have support issues currently, specifically, YouTube will refuse to process an MP4 with it, and it's a pretty common container) [feos].
 - 0.253              : Workaround for 7759 MD pin write (virtual\vgmplay.cpp) [hap].
 - 0.249              : Use std::string_view for filename (render\aviwrite.cpp) [AJR].
 - 0.247              : Added 60 new entries (hash\vgmplay.xml) [VGMRips.net, Tafoid].
 - 0.246              : Added 40 new entries and 5 updated entries (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.245              : Added 162 new entries and 6 updated entries (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.242              : Added 56 new entries (hash\vgmplay.xml) [vgmrips.net, Tafoid]. Removed outdated comments. Fixed compatiblity for old VGMs (drivers\vgmplay.cpp) [cam900].
 - 0.241              : Added 35 new entries and two shortname corrections (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.240              : Added 25 new entries, 17 updated entries and one name change (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.238              : Added 10 new entries and 1 updated entry (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.237              : Added 44 new entries and 3 updated entries (hash\vgmplay.xml) [vgmrips.net, Tafoid]. Set file names via -snapname when exiting in -seconds_to_run. Note: The '-str' option will write a screenshot to the system's snapshot directory with the file name determined by the '-snapname' option (emu\video.cpp) [kmg].
 - 0.236              : Added 31 new entries (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.235              : Fixed automatic sizing of snapshots/recordings (emu\render.cpp). This fixes bad scaling on snapshots and recording when using -uesx and forced scale factors [Antonio Giner].
 - 0.234              : Added 22 new entries (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.232              : Extended the snapname templates to allow for a timestamp %t option, so to allow for alternate ways to organize the generated snaps (emu\video.cpp) [Fabio Priuli]. Ensure all writes to Yamaha FM chips are spaced by 1 cycle. The old FM cores did not really require this spacing and didn't implement the busy flag, so many VGM captures have multiple writes stacked in the same cycle. This won't work with the new cores, so this kludge helps ensure we don't end up with ugly playback on existing files (drivers\vgmplay.cpp) [Aaron Giles]. Updates of tracks and/or metadata from the most recent pack releases (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.230              : Fixed buffer overflow (drivers\vgmplay.cpp) detected by Coverity Static Analysis (software) [Robbbert]. Fixed some shortnames to match MAME. Assorted metadata fixes (hash\vgmplay.xml) [Tafoid].
 - 0.229              : Added 32 new entries [vgmrips.net, Tafoid].
 - 0.228              : Simplified snapshot/quickload callback parameters. Removed some uses of auto_alloc_array (imagedev\snapquik.cpp) [AJR].
 - 0.227              : Added 47 new entries from most recent package release + some shortname consistency fixes (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.226              : Added 43 new entries and updated 24 entries based on recent releases. Adjusted a few short names to correct some badly applied machine tags (hash\vgmplay.xml) [vgmrips.net, Tafoid].
 - 0.225              : 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 [Vas Crabb].
 - 0.224              : Added 40 new entries (hash\vgmplay.xml) [vgmrips.net, Tafoid]. Fixed a good number of entries for correct shortnames, increased description info and filled in "no_data" fields. Added proper dates to nearly all ?? YEAR fields. Fixed dozens of short names to better match MAME's softlist metadata. Enhanced some descriptions for many Sega titles - properly denoting the actual console when possible (hash\vgmplay.xml) [Tafoid].
 - 0.223              : Support SAA1099 stereo output to VGM player (Reference: Pinout, datasheet) [cam900].
 - 0.222              : Fixed frame sync regression (emu\machine.cpp, recording.cpp and util\png.cpp). Fixes recorded MNG and WAV files are out of sync [hap].
 - 0.221              : Added emu\recording.cpp/h. Added multiple spectrogram visualization modes. Fixed DC offset issue and added more visualization modes. Added rate controls and hold button (drivers\vgmplay.cpp) [Ryan Holtz]. Project2612 releases consisting of many New and Updated entries (hash\vgmplay.xml) [Tafoid]. Added 24 new entries from most recent release (hash\vgmplay.xml) [vgmrips.net, Tafoid]. Refactoring of AVI/MNG recording code: Initial refactor of AVI/MNG movie recording, consolidation of copy and paste code, hiding of AVI/MNG behind interfaces. Extracted recording specific code out of emu\video.cpp and put into emu\recording.cpp. Took the opportunity to move slightly more logic out of video.cpp into recording.cpp. Consolidated frame counting logic [Nathan Woods].
 - 0.220              : Added 3rdparty\wdlfft\fft.c/h and sound\vgm_visualizer.cpp/h. Added a visualizer to VGM player. Cleanup and updated packs (hash\vgmplay.xml) [vgmrips.net, Tafoid]  Provides a waterfall, spectrograph and VU view [Ryan Holtz, Justin Frankel]. Changed the VGM visualiser to use single-precision float which is the default for WDL FFT. GCC's loop vectoriser can make better use of SSE with single-precision maths and the extra precision shouldn't be needed for the visualisation [Vas Crabb].
 - 0.219              : Fixed YMF262 handling and YMF278B volume [cam900]. Fixed reported badly formatted/invalid characters from labels (hash\vgmplay.xml) [Tafoid]. Mark few fake VGZ files as bad_dump (hash\vgmplay.xml) [Angelo Salese].
 - 0.218              : Updated 7 entries to match the vgmrips release [Tafoid]. Fixed -aviwrite/-mngwrite crash with screenless systems. Can record video with noscreens. Need to use default frame rate for screen-less MNG recording as well [Oliver Stoeneberg, hap].
 - 0.216              : Fixed invalid std::vector<> lookup in util\aviio.cpp. This fixes a case where: m_soundbuf_samples == processedsamples, processedsamples > 0 and processedsamples * stream->channels() == m_soundbuf.size(). In this scenario, the std::memmove() would do nothing (moving zero bytes), but the operator[] on the second parameter to std::memmove() overflows the array. This can be benign in optimized builds (because the third parameter to std::memmove() is 0), but on debugging builds this can cause an assert [Nathan Woods]. Fixed a buffer overrun in wavwrite (buffer half requried size). Slightly reduced dependencies and overhead in wavwrite [Vas Crabb].
 - 0.215              : Added imagedev\avivideo.cpp/h. Added an image device to provide looping uncompressed AVI frames as input [Ryan Holtz]. Fixed AVI framerate. MAME was setting up AVI before devices have properly launched, so default 60fps was used, which resulted in skipped frames in the video if machine's framerate is above 60 (btoads), and presumably duplicate frames for machines below 60fps (haven't tested). Now every frame that is generated is also present in the video [feos]. Don't crash on buffer overflow and increased max AVI size (util\aviio.cpp) [hap].
 - 0.214              : Fixed crash in VGM player [cam900].
 - 0.212              : Modernized imagedev\snapquik.cpp delegate and removed MCFG macro. Added functionality to read RGB24 and YUV420p uncompressed video frames (util\aviio.cpp) [Ryan Holtz].
 - 0.210              : VGM player: Fixed volume. Make stereo output when chip can be stereo output. More correct behavior (not overall chip count related) - but noisy, comments for now. Fixed VGM player crashes when sliders selected [cam900].
 - 0.209              : Volume Multipler support [cam900].
 - 0.207              : Enabled sub-second snapshot timers. Switch to attotime and accept doubles (imagedev\snapquik.cpp) [Peter Ferrie]. Make the delay for snapshot/quickload an attotime and allow implicit zero. Removing the MCFG macros properly requires changing the pattern for the delegates [Vas Crabb]. Added most recently released vgmrip packs (hash\vgmplay.xml) [Tafoid].
 - 0.206              : Case sensitivity training for INI: Further standardization of the formatting. Correct filtering instructions (docs\source\advanced\bgfx.rst, advanced\devicemap.rst, advanced\glsl.rst, advanced\hlsl.rst, advanced\multiconfig.rst, advanced\paths.rst, advanced\shiftertoggle.rst, commandline\commandline-all.rs, commandline\sdlconfig.rst, commandline\windowsconfig.rst and initialsetup\installingmame.rst) [Firehawke].
 - 0.203              : Support extra clocks in extended header, for cases like Super Locomotive that has two chips with different clock speeds [smf].
 - 0.202              : Added HuC6280, Sega 32x, SN76496, YM2203, YM2608, YM2610, YM2612 and Y8950 support to VGM player. Added detection of bad NES rips where no audio channels are enabled. Updated messages to make it clear that the hacks are required due to bad rips. When a bad 32x rip is detected then both the left and right channels are enabled. Report incorrect header size and replace with default [smf].
 - 0.201              : Added hash\vgmplay.xml. Added X1-010 support to VGM player [cam900]. Added support for C140, OKIM6258, SCSP, Y8950, YMF262 and YMF278B to VGM player. Added QUICKLOAD and software list support to VGM player. Start all clocks at zero and reset all sound chips on a song change. Note: This is damn sensitive code (emu\schedule.cpp and sound.cpp), and generates differences all over the place we don't really explain. The changes should be justified by themselves and tested in collaboration with Tafoid to ensure the differences are not a problem. Don't try to update m_totalcycles on devices with a zero clock, as it will crash (emu\schedule.cpp).All header sizes are valid for all versions from 1.50 on, as long as header has at least 64 bytes. If the VGM data starts at an offset that is lower than 0x100, all overlapping header bytes have to be handled as they were zero. Preliminary hook up of YM2610. Fixed OKI 6295 clock. Fixed VGM player don't crash on YM3438 songs. Updated warning checks. Skip writes for data that hasn't been loaded, fixes crash in Wally wo Sagase. Trigger the clock hacks on specific values, to avoid causing problems with correct files. Added all sound chips (including multiple instances supported by the vgm format) & all chips have been reordered into the vgm chip id order. ES5503/SAA1099/VSU now work but the other new additions are greyed out (these will require work to the sound cores themselves). WonderSwan sound is working now. Sound is muted when songs end. Finished hooking the UPD7759 up to VGM player [smf]. Updated hash\vgmplay.xml to include all major packages makers (VGMRips, SMSPower and Project2612), now consisting of over 3100 game entries. Great effort has been made to keep package shortnames consistent to their source origin (arcade or machine softlist). All information in the individual package's readme files were carried over into the hash file. Further refinement will be done later to fill in missing dates, publishers and other information. While there are still some sound chips not handled by vgmplay, the vast majority of these will have accurate playback [Tafoid].
 - 0.200              : Added GA20 support to VGM player. Fixed NMK112 banked table mask. Added RF5C68/RF5C164 support. Added PCM Write handler. Fixed PCM write command and address of chips. Reduced address space usage [cam900]. Added sound cores to mame\virtual.lua [Vas Crabb].
 - 0.199              : Added layout\vgmplay.lay. Added Stop, Pause, Play, Restart and Loop controls to VGM player. Added rudimentary layout using default font symbols to provide clickable buttons for the new media controls recently added. The cursor doesn't seem to show up, but I'm sure one of the layout wizards can quickly remedy that [Ryan Holtz]. Added LEDs to VGM player [Vas Crabb].
 - 0.196              : Implemented Sega PCM interface registers in VGM player [cam900]. Removed first_screen usage from render\aviwrite.cpp [Ryan Holtz]. Use QSound DSP emulation in VGM player [Vas Crabb]. Disable POKEY and QSound devices if not required [AJR].
 - 0.195              : Added K051649 support to VGM player [cam900].
 - 0.194              : Added HuC6280 stereo, K054539, NMK112, dual OKIM6295 and Qsound support to VGM player. Cleanup of duplicated code using templates and device finder arrays (drivers\vgmplay.cpp) [cam900, AJR].
 - 0.193              : Added preliminary YM2608 OPNA support for VGM player [Angelo Salese].
 - 0.190              : Fixed a longstanding INP playback desync bug caused by a rand() call in the MAME core (emu\ioport.cpp) [Angelo Salese, hap].
 - 0.189              : 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) [Angelo Salese].
 - 0.188              : Added YMF271 and YMZ280B support to VGM player. VGM player: Added sound cores needed to allow virtual subtarget to compile (YMF271 and YMZ280B; scripts\target\mame\virtual.lua). Fixed playing .vgm/.vgz files containing 2 X POKEY. Fixed clock speed for dual POKEY. Produce error message when nonexistent file specified rather than create a spurious empty file and segfault trying to read it [AJR].
 - 0.180              : Changed the vgmplay disassembler to use 'std::ostream &' [Nathan Woods].
 - 0.177              : Added scripts\target\mame\virtual.lua, drivers\vgmplay.cpp, mame\virtual.flt and virtual.lst. Preliminary VGM player. Use: ./mame vgmplay -bitb file.vgm/vgz. Lots of chips missing, no visualization, no control of anything, no volume control either and no sound shutdown on end of file [O. Galibert]. Added AY-3-8910, C352, DMG APU, HuC6280, K053260, MultiPCM, NES APU, OKI6295, POKEY, SN76496, YM2203, YM3812, YM2413, YM2612 and YM3526 to VGM player [Ryan Holtz].
 - 0.176              : Direct3D HLSL: Use aviwrite to record avi movies (d3d\d3dhlsl.cpp). Use common infrastructure in aviwrite.c instead of equivalent local code. The target textures used by the HLSL movie recorder are now allocated only when recording is ongoing. Removed shaders->begin_frame() and shaders->end_frame() hooks from the main Direct3D rendering loop. Set default HLSL movie name to hlsl.avi [Giuseppe Gorgoglione]. Added generic fix for -aviwrite (util\aviio.cpp; Captured AVI video from Super Hang-On shows only sound, no image). Fixed dimension of high-res snapshots (Alt + 12) and AVI records (Alt + Shift + F12) when screen dimension is swapped (d3d\d3dhlsl.cpp). Fixed copy of texture data to bitmap in BGFX. Changed AVI dimension to a lowest integral multiple of 4 (2 was still to low for most video players, e.g. VLC). Added audio to AVI record in HLSL. HLSL AVI record now uses window dimension instead of snap dimension. This fixed unable to view recorded video in Car Polo made with -video bgfx/-window [ImJezze]. Make ioport_list a map instead of unordered_map, should fix INP incompatibilities across compilers and platforms [Barry Rodewald].
 - 0.173              : Moved emu\sound\wavwrite.cpp/h to lib\util\. Create final snapshot on -str runs even for screenless systems (emu\video.cpp). Fixes MT04965 [Osso].
 - 0.172              : Make avi_file a class that's held with smart pointers, encapsulate various AVI I/O structures. Fixed stack smash bugs in INP read/write and better encapsulate the INP header I/O code (thanks Tafoid for reporting), fix divide-by-zero in pathological case of zero-frame recording [Vas Crabb].
 - 0.168              : Removed unused import and undefined name 'e' in PNG encoder/decoder (build\png.py) [Mike Naberezny].
 - 0.164              : Updated png.py to drj11/pypng (https://github.com/drj11/pypng/) [Mike Naberezny].
 - 0.158              : Changed build\png2bdc.c to build\png.py and png2bdc.py. Converted png2bcd tool to Python [Andrew Gardner].
 - 0.156              : Added command-line option -[no]snapbilinear to control binlinear filtering for snapshots (enabled by default). This is mainly for making testruns and debugging faster - could also be used to speed up -aviwrite usage though [Oliver Stoeneberg].
 - 0.154              : MNG is now written when -mngwrite is used together with -aviwrite [Oliver Stoeneberg].
 - 0.153              : Introduced a toggle_record_movie() method [Nathan Woods]. Timers now execute at the end of each timeslice instead of at the start, as they did prior to MAME 0.141u2 (emu\schedule.c). This fixed .INP playback fails (Out of Sync) when paused during recording [Alex Jackson].
 - 0.152              : We don't need to filter out CTRL+F12 when taking snapshots, it's been like this since r20381 (Add preliminary vector post-processing; MAME 0.148u1) (when the HLSL toggle was put there) but the HLSL toggle has since been moved. Technically we shouldn't need to filter out ALT+F12 either, but it seems to be hardcoded somewhere else in the code to take a 4 segment HLSL snap? [David Haywood]. Moved all windows-only input "NOT" rules to osd/windows. Changed windows fullscreen video from alt-f11 to shift-alt-f12. Added windows fullscreen toggle ralt-enter (heh, i didn't know that ((A AND B) OR (A AND C)) rules were possible) [hap].
 - 0.149u1            : Added tools\pngcmp.c. Added pngcmp to tools [Oliver Stoeneberg].
 - 0.148u4            : SNAPSHOT_LOAD and QUICKLOAD_LOAD made members, still need to cleanup (imagedev\snapquik.h and drivers\jaguar.c/h) [Miodrag Milanovic]. Fixed compile (imagedev\snapquik.c) [R. Belmont].
 - 0.146u2            : Miodrag Milanovic fixed call device line write handlers (emu\ioport.c). This fixed zaxxon and congo INPs do not play back correctly.
 - 0.141u1            : Added emu\imagedev\snapquik.c/h.
 - 0.140              : Aaron Giles fixed setting 'snapname %g' does not allow snap to be saved with F12.
 - 0.139u4            : Since PNG writing is used for MNG as well, switch back to default compression instead of best compression in order to keep the performance reasonable. Enable wavwrite (and aviwrite) sound even if -nosound is specified [Aaron Giles].
 - 0.137u1            : When the usage is printed, the name displayed was "png2bdf" instead of "png2bdc"; this changes it by retrieving the name of the executable at runtime, so it will always be correct now [Christophe Jaillet].
 - 0.128u5            : Aaron Giles fixed dipswitch settings are not being stored in INP files. Old INP files had to be broken. Since they were already broken, the corefile module was enhanced to support streaming compression, and the new INP files are output and processed compressed [Aaron Giles].
 - 0.127u6            : Aaron Giles fixed -aviwrite which produces faulty files and files over 2 gigs sometimes get cut off.
 - 0.127u1            : Aaron Giles fixed bug when writing AVI files with more than one RIFF chunk. Added missing chdman error messages when extracting to an AVI file.
 - 0.125u7            : Aaron Giles explicitly disabled overlays for non-native snapshots (native snapshots already had them disabled).
 - 0.125u6            : Aaron Giles improved AVI and MNG recording to properly duplicate/skip frames as appropriate to keep the correct framerate. Aaron Giles added new function video_get_view_for_target() which selects a view based on a command-line parameter and the configuration. Changed Windows OSD code to use this instead of its own logic. Changed -snapview to share the logic as well, enabling 'auto' as a -snapview option. Aaron Giles added new option: -snapsize, which lets you specify the target resolution for snapshots and movies. The existing behavior is still the default: create snapshots and movies at native pixel resolutions. Aaron Giles added new option: -snapview, which lets you specify a particular view to use for rendering snapshots and movies. The existing behavior is still the default: use a special internal view and render each screen to its own snapshot in its own file. When using this option to specify a view other than 'internal', only a single snapshot file will be produced regardless of how many screens the game has.
 - 0.125u3            : Aaron Giles added new option -snapname which lets you provide a template for how snapshot names are generated. See config.txt for details.
 - 0.125u1            : Added uncompressed AVI recording [Aaron Giles]: Extended aviio to be able to write RGB bitmaps. Unfortunately, the only option is fully uncompressed, which means the resulting AVIs are *HUGE* and may not play correctly in realtime due to high data rate. The intention is that these uncompressed AVIs are post-processed by other utilities to compress the video and produce a realtime playable result. Added new command-line option -aviwrite which works just like -mngwrite, except it produces AVIs and streams sound to them. Updated documentation accordingly. Shift+F12 still produces MNGs for now, though this might change in the future. Modified fileio.c to retain the full pathname to the file so that it can be queried while the file is open.
 - 0.124u2            : Rewrote INP recording from scratch [Aaron Giles], since all old INPs are broken anyways. Header now includes timestamp, which overrides the default time base for MAME's system time. Each frame recorded now gets a timestamp. Analog ports are recorded once per frame and interpolated. Analog port calculations are all done in fixed point for consistent results. A bunch of other minor tweaks in the input port code. NOTE: There may still be a few changes to the final INP format.
 - 0.123u1            : Barry Rodewald correct the initial detection of extended INP files.
 - 0.121u4            : Nathan Woods fixed crash in mngwrite if the game does not have a palette.
 - 0.116u3            : Nathan Woods fixed potential double free in PNG code.
 - 0.115u1            : David Haywood added support for playback of "extended" INP files that are commonly found on compete sites.
 - 0.112              : Oliver Stoeneberg fixed memory leak with -wavwrite switch.
 - 0.111u1            : Buddabing fixed MNG recording.
 - 0.110u1            : Aaron Giles changed naming of screenshots. They are now created in separate folders per game, with numeric names 0000.png, 0001.png, etc.
 - 0.109u4            : Buddabing fixed memory leak when writing MNG files. Nathan Woods normalized realtime clock accesses across drivers. Now ensure that realtime clocks are reset when recording/saving INP files.
 - 0.109u3            : Aaron Giles fixed option -ftr, a snapshot is saved on exit without the png extension.
 - 0.109              : Mathis Rosenhauer fixed PNG code so that it doesn't NULL terminate tEXt chunks.
 - 0.108u5            : Aaron Giles rewrote the PNG reading/saving code, improving error reporting and simplifying the code significantly.
 - 0.108              : Rene Single fixed bug that prevented in-game MNG recording from working.
 - 0.107u4            : Aaron Giles changed snapshot taking code to render the particular screen to a temporary render target. This allows vector games to have snapshots again. Fixed MNG recording which doesn't work.
 - 0.106u11           : Nathan Woods fixed a couple of bugs in the new screenshot taking code.
 - 0.106u10           : Nathan Woods cleaned up screenshot taking code and re-connected the debugger command that created them.
 - 0.106u8            : Screenshots are now properly rotated again. Also, MAME now saves one screenshot per visible screen for multi-screen games (i.e., Cyberbal will write two PNGs per snapshot taken if both screens are visible) [Aaron Giles].
 - 0.104u3            : New option -mngwrite, which records an MNG movie of the game from the get-go and allows you to specify a target filename [Buddabing].
 - 0.99u10            : Aaron Giles fixed bug in INP recording that crashed MAME.
 - 0.99u7             : Mathis Rosenhauer fixed MNG recording size.
 - 0.99u4             : Aaron Giles fixed MNG recording problem that was introduced in 0.99u3.
 - 0.99u2             : Mathis Rosenhauer added MNG recording support (shift+F12 by default).
 - 0.94u2             : Nathan Woods changed wavwrite type from 'void *' type to an opaque pointer 'wav_file *' in src\sound\wavwrite.c.
 - 0.93u2             : Derrick Renaud fixed -wavwrite (windows\sound.c).
 - 0.90u2             : Chad Hurwitz fixed multiple port recording (src\inptport.c).
 - 0.87u1             : INP changes [Barry Rodewald]: Basically, reading/writing analog port data every single time interpolate_analog_port() isn't a good idea, especially since it's called every time readinputport() is. I've just moved the analogue port reading/writing into the for loop, so analogue ports are only read/written if the port is actually is analogue.
 - 0.84u4             : Because of the extension to 32-bits, all existing INP files are invalid. MAME now writes 4 bytes per INP entry instead of 2.
 - 0.84               : smf added a new option in the Windows version: -wavwrite to save sound output to a WAV file.
 - 0.81u4             : Nathan Woods replaced a #ifdef MESS/#else/#endif combo with a usage of the APPNAME macro (src\png.c).
 - 24th February  2004: Nathan Woods fixed taking screenshots with artwork and wrong colors that sometimes happened when changing to fullscreen mode.
 - 0.79               : Stefan Jokish fixed crash when taking screenshots of rotated vector games.
 -  8th October   2003: Nathan Woods fixed a screenshot handling bug that affected Space Invaders.
 - 0.74u1             : McPhail MAME now recognises off-screen shots with the Act-Labs gun in a way which works better with certain drivers (Area 51 etc,) [Bryan McPhail].
 - 14th July      2003: Nathan Woods improved the snapshot saving cleanup patch.
 - 0.71u2             : Changed way Snapshot code works [Nathan Woods].
 - 12th July      2003: Nathan Woods sent in another patch cleaning up the snapshot saving system.
 - 29th June      2003: Nathan Woods cleaned up the screen snapshot system to be more logical.
 - 27th August    2002: Luis Faria submitted a fix for the black & white screenshots and the vector game screenshot crashes.
 - 20th February  2002: Aaron Giles fixed an audit problem that caused problems when finding files by the CRC32, and he fixed snapshot handling and memcard saving in it.
 -  2nd October   2001: Mathis Rosenhauer fixed the bug which caused vector games to save incorrect screenshots.
 - 0.53               : Added sound\wavwrite.c/h.
 - 19th July      2001: Mathis Rosenhauer fixed screenshots of games that use less than 256 colors.
 - 27th April     2001: Mathis Rosenhauer added core functions for MNG (animated PNG) video capturing.
 - 28th March     2001: Lawrence Gold changed some function definitions in the screenshot routines.
 -  1st March     2001: Mathis Rosenhauer fixed screenshots in the direct color modes.
 - 0.37b4             : Fixed save_screen_snapshot() to save VIDEO_PIXEL_ASPECT_RATIO_1_2 games with the correct aspect ratio. Also introduced save_screen_snapshot_as(). Porters are STRONGLY ADVISED to use one of these functions to save screen shots, instead of providing their own. Note that osd_save_snapshot() now takes a bitmap argument, so it must not be hardwired to save Machine->scrbitmap (overlays wouldn't be saved otherwise) [nathan].
 - 0.36b8             : [DOS] Support for ZIPped input files (-playback) and artwork. Well, PNG won't compress very well, but I added it anyway [Juergen Buchmueller].
 - 0.36b4             : Screen shots can be saved while the game is paused [Phil Hopely].
 - 0.35b13            : PNG save support. save_screen_snapshot() may be called by osd_save_snapshot() to save a standardized shot. Under DOS, .png files go to the SNAP directory [Mathis Rosenhauer, Mike Haaland].
 - 0.35b5             : Added a header to .inp files (same as MAME32). With the additional header, the user no longer needs to specify the game name when playing back .inp recordings [Mike Haaland].
 - 0.34b4             : Added src\png.c.
 - 0.31               : High score load/save is disabled when -record or -playback is used. This prevents undesired side effects [Nicola Salmoria]. In the DOS version, screen snapshots are saved as "gamename.pcx" (the first one) and "nameNNNN.pcx" (the following ones), no longer the too generic "snapNNNN.pcx" [Nicola Salmoria].
 - 0.30               : New options, -record and -playback. They allow you to record, and later playback, joystick input. Useful to document certain bug reports, or to show your friends how good you are. The default directory for screen snapshots (F12) is now PCX instead of the current directory, so make sure you create it or snapshots will not be saved [Valerio Verrando].



 8.6  ARTWORK / LAYOUT

 - 0.284              : Correct .lay files with text alignment issues on Linux (layout\*.lay). Added artfont option for changing default font of .lay files text elements. Fixed text align issues with wide width font (emu\emuopts.cpp and emu\rendlay.cpp). Replaced use of slash/backslash text for diagonal lines with SVG (layout\*) [hap].
 - 0.281              : Make hit test priority match visual order. Also made order of parsing view element more logical (makes interation with parameter elements less confusing). Some layouts have been updated, others still need work (emu\rendlay.cpp) [Vas Crabb]. Do a 2-pass for updating artwork clickable zone input field state. Fixes Artwork held input is released after crossing overlapping clickable zone edge of same input field. No need to do std::transform here. Yoda style for loop like the surrounding source (emu\render.cpp). Changed legacy marquee UI toggle to Marquees instead of a 2nd Backdrops. Removed invert flag from 7seg element and added inverted 7seg outputs to mpu4 (the only driver that used this flag) (emu\rendlay.cpp) [hap].
 - 0.265              : Added clickthrough attribute (misc internal artwork) [hap]. Allow layout views to control pointer display (emu\rendlay.cpp and ui\ui.cpp). Got rid of the "clickable artwork" system flag (emu\gamedrv.h) [Vas Crabb]. Disable orange mouse pointer (false positive clickable artwork detection) (misc internal artwork). Removed vertical widescreen views (shifter overlay). Removed orange mouse pointer/block clickable input (shifter overlay). Added opaque shifter option (shifter overlay) [hap].
 - 0.262              : Removed obsolete text bg rect in layouts (layout\xxx.lay) [hap].
 - 0.258              : Removed unneeded comment on clickable artwork [hap].
 - 0.250              : Fixed locale-sensitive number handling (emu\rendlay.cpp), fixes locale setting causes .lay parser error in (MESS) ChessSystem R30 and Kasparov Renaissance [Vas Crabb].
 - 0.249              : Some layouts need more scales on the same texture (emu\render.h) [O. Galibert].
 - 0.246              : Removed scripts\target\mame\ci.lua and mame\ci.lst. Added scripts\xslt\list-system-sources.xslt and mame\ci.flt. More quality of life features for new source layout: Added support for wildcards in .flt filter files. You'll need to quote them to avoid /* being parsed as a comment initiator, like "seta/*.cpp" on a line including the quotes. Added an XSLT filter for listing system driver sources, like mame -lx | xsltproc scripts/xslt/list-system-sources.xslt. Converted the ci subtarget (which isn't really used much) into a .flt rather than .lua and .lst files [Vas Crabb].
 - 0.236              : Updated the example layout links to point to 0.235 - this means there's now an example of embedded SVG (techspecs\layout_files.rst) [Vas Crabb].
 - 0.232              : Use self-closing tags for bounds and color elements [Vas Crabb].
 - 0.227              : Added docs\source\techspecs\layout_script.rst and luareference.rst. Added links to some internal layouts that demonstrate various features (docs\source\techspecs\layout_files.rst) [Vas Crabb].
 - 0.225              : 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 <bezel> 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 <bezel> 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 [Vas Crabb].
 - 0.223              : Don't add parent set external artwork if artwork found (emu\render.cpp) [hap].
 - 0.216              : Make internal layout compression type a scoped enum (only zlib is supported still, but at least the values aren't magic numbers now) [Vas Crabb].
 - 0.213              : Allow inputmask=0 when inputraw=1 for canceling input listener section (build\complay.py) [hap].
 - 0.212              : Make layout format more flexible: * There is no longer a concept of "layers" - there are only screens and elements. * Elements are now instantiated with <element ref="...">. * Screens and elements can have explicit blending mode specified with blend="...". * Default blending mode for screens is "add" and default for other elements is "alpha". * Other supported modes are "none" and "multiply". * This removes the options to enable/disable layers individually - use views instead. * Legacy layouts can still be loaded and support won't be removed for at least a year. The current artwork model is over-stretched. It's based on a Space Invaders cabinet model, and isn't applicable to a lot of the systems MAME emulates now. The fact that MAME has to switch to an "alternate" mode to deal with games like Golly! Ghost! without requiring pre-matted bitmaps shows that the Space Invaders model wasn't even adequate for general arcade use. It shows in that for a lot of the systems that heavily depend on artwork, people just seem to randomly choose layers for elements until they get something that works. Also, the fact that MAME will switch to an alternate (Golly! Ghost!) mode depending on the combination of elements is a trap for people learning to make artwork. There are cases that the current approach of implying the blending mode from the layer doesn't work with. Examples include LEDs behind diffusers (requires additive blending for layout elements), and mutliple stacked LCD panels (requires RGB multiplication for screens). For configurability, it's now a lot easier to make multiple views using groups. For example, if you want to make it possible to hide the control panel section of your layout, you can put the control panel elements in a group and create views with and without it. I will gradually migrate the internal artwork to use the new approach. I have an XSLT stylesheet that helps with this, but I'm not comfortable adding it because it isn't a complete solution and it still requires manul steps. I wanted to get the re-worked pointer handling done sooner so I could push them both at the same time, but unfortunately various things have prevented me from progressing as quickly as I wanted to. Sorry guys, that stuff's going to have to wait. Don't crash when a layout references a conditional I/O port field. Handle layouts that wanted screens to be opaque. if you have a layout with only screens and need to add, mark them explicitly. haven't tracked down the lightgun pointer issue yet (emu\rendlay.cpp) [Vas Crabb]. Removed TEXFORMAT_PALETTEA16. Some simple screen ind16 -> rgb32 conversions (drivers\kinst.cpp and sbrkout.cpp) [Ryan Holtz]. Fixed fatalerror with PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32) | PRIMFLAG_BLENDMODE(BLENDMODE_RGB_MULTIPLY). Renamed draw_quad_argb32_multiply to draw_quad_rgb32_multiply since it actually doesn't multiply per pixel alpha (emu\rendersw.hxx) [hap].
 - 0.208              : Added inputraw to Compressed internal layouts (build\complay.py). Correction and added inputraw notes (techspecs\layout_files.rst) [hap].
 - 0.200              : Allow layouts to specify screen tags rather than indices - makes order of instantiation irrelevant in Model 1 etc. Allow per-device internal layouts. Input and screen tags are now resolved relative to a layout's owner device. Easy way to demonstrate is with: mame64 intlc440 -tty ie15. Previously you'd only get the IE15 terminal's layout and you'd be unable to use the INTELLEC 4/40 front panel. Now you'll get the choice of layouts from both the system and the terminal device in video options. Allow user variables and repetition in layouts, also add a few more predefined variables. Allow repeating elements and groups - useful if you need e.g. a lot of numbered labels, but it limits complay.py's ability to check for invalid references as it can't evaluate expressions [Vas Crabb]. Disabled multiple constructor warning for rendlay.cpp (scripts\genie.lua) [smf].
 - 0.197              : Cleaner handling of layout parsing errors (emu\rendlay.cpp and layout\noscreens.lay) [Vas Crabb]. Removed underscores from template parameter names (emu\emupal.h) [AJR].
 - 0.194              : Added fallback_artwork and override_artwork as MAME options to allow default artwork to be loaded. Removed debug testing code. Allow loading of built-in layouts even if override_artwork is specified. Allow loading of fallback_artwork if only default view have been found. Fixed order of built-in layouts with regards to fallback_artwork as agreed upon the forums. Changed |= true to = true, and changed override artwork so it only checks for default.lay if the <machine name>.lay is not found (emu\render.cpp and emuopts.cpp) [phulshof].
 - 0.188              : Made scripts do substantial validation of layouts at build time (scripts\build\complay.py). Removed vestigial exception class. Comment out problematic parts of internal layouts detected by build-time validation (layout\checkma5.lay, mmerlin.la and tisub.lay) [Vas Crabb].
 - 0.180              : Rewrote complay.py to parse/minify layout XML. Doesn't make much difference to executable size, but it catches XML errors at build time rather than waiting for you to try the system [Vas Crabb].
 - 0.173              : Added scripts\build\complay.py. Compressed internal layouts [David Haywood]. Python 3 compat (Compressed internal layouts) [Mike Naberezny]
 - 0.172              : Moved emu\ui\util render_load_jpeg to emu\rendutil. This also adds simple support for loading JPG in external artwork [hap].
 - 0.160              : Fixed TypeError exception in file2str.py [Reed]. Changed dangerous variable name in file2str.py [Andrew Gardner]. Fixed Python 2 compatibility (build\file2str.py) [Vas Crabb]. Send error messages to stderr instead of stdout (chdtest.py) [Mike Naberezny].
 - 0.158              : Make file2str.py compatible with Python 2.5 [Couriersud].
 - 0.157              : Converted build\file2str.c to Python file2str.py [Miodrag Milanovic].
 - 0.155              : Fixed props for MAME/MESS layout files [Tafoid].
 - 0.153              : Added support for horizontal 'belt' reels which may be needed for future AWP titles. To invoke, added an attribute "beltreel" to the reel element in the layout, and set it to 1. (emu\rendlay.c) [James Wallace].
 - 0.147u2            : Added support for folding rects diagonally, allowing you to draw right-angled triangles (use <orientation> to flip/rotate them). Better use yes/no instead of 1/0. Make a triangle/poly primitive (emu\rendlay.c) [hap]. Got rid of generic color overlays, almost all of them were used by only 1 game each (ho20ffff.lh, ho2eff2e.lh, ho4f893d.lh, ho88ffff.lh, hoa0a0ff.lh, hoffe457.lh, voffff20.lh and hoffff20.lh) [hap].
 - 0.146u5            : Properly detect click on artwork buttons when in fullscreen mode. Added internal mouse cursor visible in menus and when clickable artwork is used. Since there is no clear way to determine if mouse should be shown or not, I am putting a new flag (GAME_CLICKABLE_ARTWORK) [Miodrag Milanovic].
 - 0.145u1            : hap added support for simple text alignment in layout files, defaulting to center eg. align to the left of the textbox like this: <text string="hello there" align="1">.
 - 0.145              : Guess at a fix for clickable artwork [Aaron Giles].
 - 29th January   2012: Mr. Do - WAY back a while ago, as of MAME 0.110u1, Aaron made a change to the artwork layout loading, so that a game will also look for "default.lay" rather than "gamename.lay. In the end, this makes things easier to update, play around with other artwork files, etc. For whatever reason, I never changed everything over back then. Well, now they're done; the LAY file in every game has changed from gamename.lay to default.lay. PLEASE DON'T download every artwork file again; you'll waste 1.49GB of bandwidth. Just grab the update file below (along with the 10 games that show updated 2012-01-25) and use the current DAT file and CLRMAME to fix all your files. The file below also includes the DECO artwork and Neo Geo artwork mentioned above, so CLRMAME can fix those for you also (and save you from downloading 152 files).
 - 0.144u7            : Fixed several rendering issues with artwork, introduced in the recent changes. Also, did a pass through the code to take advantage of new methods available on rectangles. Fixed disk artwork rendering [Aaron Giles].
 - 0.143u3            : Added layout\quadhsxs.lay. Default layout for 4 screens systems added [Robbbert].
 - 0.142u4            : Initial frameworking for upcoming artwork updates [Mr. Do].
 - 0.140              : Aaron Giles fixed artwork cropping not working correctly.
 - 0.132u5            : Aaron Giles introduced new feature -burnin, which can be used to generate a PNG that represents the overall brightness seen during the course of running a game. This PNG can be used as a fake "bezel" that overlays the screen via the artwork systems (with a low alpha, say 0.1 or 0.2) to simulate running a game with a monitor that has been burned in from another game.
 - 0.127              : Aaron Giles added the ability to configure the overlay position and scale parameters at runtime. Added OSD menus to control them. Added logic to save/restore the data in the game's configuration file.
 - 0.117u3            : Moved tools\file2str.c to src\build\.
 - 0.117u2            : Dirk Best added support for 14- and 16-segment LED displays to the MAME artwork system.
 - 0.116u1            : Improved GCD computations in the rendlay.c code [Christophe Jaillet].
 - 0.115u4            : Aaron Giles added support for scaling graphics layouts automatically. The X and Y scale factors are specified in the gfx_decodeinfo structures. Updated the MCR driver to use this feature.
 - 0.113              : Changed file2str to be built into the obj directory [Aaron Giles].
 - 0.112u1            : Changed file2str to work for any binary file and output the data as an array of bytes rather than a string [Aaron Giles].
 - 0.111u6            : Moved src\file2str.c to src\tools\.
 - 0.110u1            : Aaron Giles changed artwork layout loading to load either gamename/gamename.lay or gamename/default.lay. The latter is preferred, and allows for easier reuse of layouts between games.
 - 0.109              : Aaron Giles changed artwork loading to be on-demand rather than all up-front. Also added a message during artwork resizing/loading so it's more clear what is going on.
 - 0.108u2            : Aaron Giles changed the behavior of the led7seg primitive. It now no longer takes a state value but accepts states from 0-255, allowing independent control over all 7 segments and the decimal. Ordered the segments according to standard order. Updated the Turbo driver to do its own BCD decoding via an LS48 decoder to control the segments directly. This will break existing layouts using the led7seg primitive.
 - 0.107u4            : Aaron Giles added new layout element component type "led7seg", which constructs a 7-segment LED in an element in a layout. This is commonly used for external score and timer displays. See maxaflex.c for an example. Aaron Giles added built-in layouts for Turbo, Subroc 3D, Buck Rogers, Atari Football, Atari Baseball and Super Speed Racer using the new primitives.
 - 0.107u3            : Aaron Giles removed the -artwork option to avoid confusion. If you want to run without any artwork, use -view standard instead.
 - 0.107u1            : Removed src\artwork.c/h.
 - 0.106u12           : Aaron Giles added gapless variants to the dual and triple screen layouts. Fixed -effect none to longer produce an error message.
 - 0.106u11           : Aaron Giles fixed the rendering order so that overlays mixed with backdrops work as expected. Note that over-rendering backdrop pieces (like gollygho does) may not be supported in the future. Added a new command line option: -effect <filename>, which specifies a PNG file that is loaded and used as an RGB multiply overlay. This allows for scanline and RGB aperture mask effects. These overlays rotate with the game screens and only affect the game screens, not any of the other artwork. They also only run at the raw resolution of the render_target. This means in Direct3D or GDI modes, they map 1:1 to the pixels on your screen. In DirectDraw mode, they map 1:1 to the source pixels of the image (for DirectDraw, you can use -prescale n if you want an n:1 mapping; for example, you would probably want -prescale 2 if using a 2-pixel-tall scanlines overlay).
 - 0.106u10           : Aaron Giles fixed inheriting of artwork files from parent. Made all solid single-color overlays standard pieces that can be easily reused. Converted all the internal layouts into .lay files and updated all remaining drivers to use the new layouts.
 -  2nd July      2006: Aaron Giles - I've been looking through the MAME source for games that were previously using the artwork system to dynamically update non-screen elements. I started off doing Turbo (http://aarongiles.com/turbo.zip) (as mentioned previously) and Discs of Tron (http://aarongiles.com/dotron.zip), which a number of people have been asking about. There were a couple of glitches in the new system which showed up when I did the Discs of Tron artwork, so you will need to wait for u10 to actually use the layout file linked above and have it all working. Then I moved on to Golly Ghost (http://aarongiles.com/gollygho.zip). Wow. Color me seriously impressed with the folks who put this one together. The quality of the artwork is very nice and it all works very well with the game graphics overlaid. And now that the artwork scales to your screen resolution (assuming you are using Direct3D), it looks absolutely amazing. I'm hoping to get a few more games updated, specifically Gorf, Spy Hunter, and Sky Diver, before I put out the next release.
 -  1st July      2006: David Haywood - Aaron recently added the functionality to MAME allowing for games which use multiple screens to render each individual screen to a different physical monitor, or, if you so desire window. I've been going through the drivers in MAME updating them to make use of this new functionality, some examples are Subs, Bijokko Gakuen, Rock'N MegaSession and Jong Tou Ki. Updating the Megatech driver caused further problems as the old Genesis / Megadrive emulation was relying on rather hacky functions to get the current beam position. I've decided to make another attempt at rewriting the Genesis emulation, this may however lead to nothing as I've never been satisfied with past efforts.
 - 0.106u9            : Aaron Giles added get/set calls to control layers on a per-target basis. This allows for dynamic control of visibility of artwork layers and the option to crop to the screen. Added menu items to control these options. Removed options.use_artwork from the global options. This is now directly configured by the OSD layer. Cleaned up handling of layout dependencies in the makefile.
 - 0.106u8            : Added src\file2str.c. Aaron Giles changed the way built-in layouts are handled. There is now a new layout directory in the source which contains actual .lay files. These are converted at compile time into .lh files which are #included by various drivers and then referenced. The built-in set of horizontal, vertical and dual screen layouts are also handled this way now instead of being dynamically generated. In order to support things like "native" aspect ratios, a limited form of variable substitution is now done on most of the XML attributes when they are read. Improved default layout selection. For multiscreen games on a single monitor, the default layout will show all screens at the same time. For multiscreen games on multiple monitors, the default layouts will select one screen per game. Added MDRV_DEFAULT_LAYOUT to specify a default layout at the machine driver level.
 - 0.105u4            : Giuseppe Gorgoglione fixed UI positioning when artwork is enabled.
 - 0.103u5            : Aaron Giles rewrote artwork scaling function to compute accurate sum over all contributing pixels. This produces better results when scaling high resolution artwork down to lower resolutions. Kept existing bilinear filter for scaling low resolution art to higher resolutions.
 - 0.95u3             : smf added rudimentary support in artwork.c for resizing after a visible area change
 - 0.89u4             : BUT fixed the artwork070u4 bug (Some games get turned red when using artwork. Most likey anything using VIDEO_RGB_DIRECT and/or VIDEO_NEEDS_6BITS_PER_GUN. Ex.: spcinv95. Fix from BUT: artwork.c in function compute_rgb_components: change memcpy(rgb_components, rgb32_components, sizeof(rgb_components)); to memcpy(rgb_components, rgb32_components, sizeof(rgb_components[0]) * 3); artwork070u4ora)
 - 0.79u3             : Nathan Woods changed artwork_override_screenshot_params() so that its functionality will kick in whenever the artwork system is active, even without artwork pieces. And introduced a static artwork_system_active(); a call to check to see if the artwork system is active.
 - 31st December  2003: Erik Sipman submitted a modification to fill black borders with artwork without changing the resolution.
 - 0.75               : Nathan Woods fixed a screenshot handling bug (src\artwork.c) that affected Space Invaders.
 - 0.72u1             : Nathan Woods fixed crashing bug with clones (src\artwork.h).
 - 0.71u3             : This patch adds some minor callbacks to the artwork system in order to enable some MESS specific functionality without polluting artwork.c with a bunch of ugly #ifdef MESS's [Nathan Woords].
 -  6th June      2003: SirPoonga re-submitted the artwork filling edges support.
 - 13th April     2003: Sir Poonga submitted a new artwork option that crops the artwork just enough to make it fill the screen.
 -  2nd October   2002: smf fixed the -nobezel command line parameter to function correctly.
 - 15th July      2002: Valerio Verrando fixed the artwork functions to accept more than one path for the artwork files.
 -  9th July      2002: Brad Oliver fixed an artwork crash that happened with disabled bezels.
 - 0.61               : Completely redesigned the artwork handling [Aaron Giles]. Any game can now use artwork, with no specific support in the driver. Configuration is done with external .art files. -[no]artcrop -- crops artwork to the game screen area only, -[no]backdrop -- enables/disables backdrop art, -[no]overlay -- enables/disables overlay art and -[no]bezel -- enables/disables bezel art.
 - 11th June      2002: Aaron Giles fixed a bug in the new artwork system.
 -  6th June      2002: Aaron Giles fixed some more artwork bugs.
 -  4th June      2002: Aaron Giles fixed several artwork support bugs.
 - 30th May       2002: Aaron Giles fixed the artwork-related command line parameters.
 - 26th May       2002: Aaron Giles fixed a few artwork bugs.
 - 25th May       2002: Aaron Giles fixed another two bugs in the new artwork functions.
 - 24th May       2002: Aaron Giles fixed another crash bug in the new artwork functions.
 - 23rd May       2002: Aaron Giles fixed yet another load of bugs in the new artwork functions, and he added support for blit-time rotation which may or may not speed up some games, but it will at the very least make it easier to write custom drawing routines.
 - 21st May       2002: Aaron Giles optimized a few things in the new artwork system.
 - 18th May       2002: Aaron Giles fixed yet another pile of bugs that were caused by the artwork updates.
 - 17th May       2002: Aaron Giles fixed several bugs that were caused by the artwork updates.
 - 16th May       2002: Aaron Giles sent in a massive update to the artwork system, which is now much more flexible and easier to use.
 -  5th April     2002: Zsolt Vasvari added support for scaling graphics to allow higher resolution for artwork.
 - 30th January   2002: Aaron Giles fixed a crash with the artwork functions. Zsolt Vasvari made the artwork functions a bit faster
 - 27th September 2001: Mathis Rosenhauer added support for artwork that is of different size or position than the game graphics.
 - 0.55               : Fixed green tinge over the background artwork in armora, astdelux and clone, bzone, warrior and starcas.
 - 25th August    2001: Mathis Rosenhauer fixed yet some more issues in the artwork functions.
 - 23rd August    2001: Mathis Rosenhauer fixed a crash bug in the artwork functions.
 - 21st August    2001: Mathis Rosenhauer added software alpha blending support to the artwork functions.
 - 17th July      2001: Mathis Rosenhauer removed 8bpp artwork support and cleaned up the artwork code.
 - 16th April     2001: Mathis Rosenhauer fixed another artwork system problem.
 - 0.37b7             : Backdrops are handled by the core like overlays, specific support in the drivers is no longer necessary [Mathis Rosenhauer].
 - 0.37b3             : Major redesign of the artwork support. All the drivers need to do is call overlay_create() or overlay_load() and the rest is handled by the core. Opacity/translucency support in 16-bit mode. Check out Space Invaders for example, the colored strips that make up the overlay is faintly visible under the black areas [Mathis Rosenhauer, Zsolt Vasvari].
 - 0.37b1             : Support for 24-bit artwork [Mathis Rosenhauer].
 - 0.36b12            : Artwork files can be stored in a .zip file. That way you can have eg. both spacewr1.png and spacewr2.png in one file spacewar.zip [Juergen Buchmueller].
 - 0.36b8             : [DOS] Support for ZIPped input files (-playback) and artwork. Well, PNG won't compress very well, but I added it anyway [Juergen Buchmueller].
 - 0.35b8             : Switches -noartwork and -nosamples to turn off artwork or sample loading [Valerio Verrando].
 - 0.34b4             : Added artwork.c/h. New file types for osd_fopen(): OSD_FILETYPE_STATE and OSD_FILETYPE_ARTWORK. Preliminary backdrop support in Discs of Tron. The background image must be called ARTWORK/DOTRON.PNG [Mathis Rosenhauer, Brandon Kirkpatrick].



 8.7  MULTI-LANGUAGE

 - 0.282              : Updated Chinese (Simplified) translations. The revision refers to the Windows 11 Chinese Simplified menu buttons and option titles, many places are still not perfect, modify it again and again! (Chinese_Simplified\strings.po) [Gently28]. Fixed error in Last-Translator (Chinese_Simplified\strings.po) [hap].
 - 0.280              : Updated Japanese translations (Japanese\strings.po) [Fujix]. Added Polish translation (Polish\strings.po) [Onmp314].
 - 0.278              : Added Belarusian translation [holub].
 - 0.277              : Updated Swedish translation [Daniel Nylander]. Correct some Chinese UI translations [aGuGu]
 - 0.272              : Ukrianian translation updated to actual 0.270. There were minor cosmetic corrections and translating empty problematic strings [StanleyKid-22].
 - 0.263              : Updated Russian UI translation [Arbars]. Correct some Russian translations [holub]. Updated copyright years (language\*\strings.po) [Vas Crabb].
 - 0.261              : Fixed some editing errors in Turkish UI translation [Vas Crabb].
 - 0.260              : Updated Turkish UI translation [Kadir Eksi]. Correct grammar of several German UI message translations [Soenke Joppien].
 - 0.253              : Updated Czech and Slovak UI translations [Milan Galcik]. Removed some obsolete outdated translations (Czech\strings.po) [Vas Crabb].
 - 0.252              : Updated Japanese UI translation (+ analog input etc). Added new message translations and fixed some spelling inconsistencies (language\Japanese\strings.po) [K2-git]. Updated Chinese UI translations [YuiFAN]. Updated Ukrainian UI translation [Stanley Kid]. Updated Greek UI translation [BraiNKilleRGR]. Filled in a few Chinese translations [Vas Crabb].
 - 0.251              : Fixed some errors in Brazilian Portuguese translation [cd4053b, Wellington Uemura].
 - 0.250              : Updated Brazilian Portuguese UI translation [Felipe]. Updated Czech and Slovak translations [Milan Galcik]. Updated Greek UI translation [BraiNKilleRGR].
 - 0.249              : Updated German UI translation [Raf Tacker, darkstar]. Updated Ukrainian UI translation [Stanley Kid].
 - 0.248              : There's a menu item for copying a device ID to the clipboard and associated success/failure messages. There's the menu item for setting the software list file search path. One of the lines in the software selection menu heading has changes as it could be interpreted as implying it showed a software list name [Vas Crabb]. Updated Chinese UI translations [YuiFAN]. Updated Ukrainian UI translation [Stanley Kid]. Updated Greek Translation [BraiNKilleRGR].
 - 0.246              : Updated Chinese UI translations. Made parent/clone terminology consistent in Chinese translations [YuiFAN]. Updated Brazilian Portuguese translation [Felipe].
 - 0.245              : Updated translations and cleaned up a little [Vas Crabb]. Updated Greek translation [BraiNKilleRGR]. Updated Ukrainian translation [Stanley Kid, Vas Crabb]. Updated Czech and Slovak translations [Milan Galcik].
 - 0.243              : Added Ukrainian UI translation [Stanley Kid]. Updated simplified Chinese translation for autofire button name format [kongmao45678]. Updated Greek translation for autofire button name format [Vas Crabb].
 - 0.239              : Updated the Czech and Slovak translations [Milan Galcik]. For translators, the new messages are mostly previously existing messages with wording adjusted for clarity (e.g. referring to "media" rather than "ROMs" in several places, as things like disk and tape images are included). It's also possible to localise the "???" dipslayed for an input without a valid name, but that should never actually appear in practice [Vas Crabb]. Updated Chinese (Traditional and Simplified) translations [YuiFAN]. Updated Greek translation [BraiNKilleRGR].
 - 0.238              : Added util\language.cpp/h. Regenerated message catalog sources. For translators, the new strings are mostly: The names of the inputs provided by the OS-dependent layer for things like fullscreen and video features. These show up in the user interface inputs menu. The names for automatically generated views. These show up in the video options menu - test with a system with a lot of screens to see more variants. The input macro plugin UI. A few format strings for analog input assignments. A few strings for the about box header. Removed obsolete messages from Brazilian Portuguese translation. Updated localisations for UI changes in 0.238. For tranlators, the main changes are: The former "device mapping" menu is now "input device options" and includes the input provider module options. The analog controls menu (where sensitivity, auto-centre, etc. is configured) is now localisable. The timecode logging features (used when making gameplay videos) have been moved to a plugin, and display messages are localisable. There are a few extra messages for the autofire and input macro plugins to handle cases where a configured input is not present. The timer plugin has options to show wall clock time (real time elapsed according to host OS clock) or emulated time [Vas Crabb]. Updated Greek translation [BraiNKilleRGR]. Updated Chinese translations [YuiFAN]. Updated Brazilian Portuguese translation [Felipe]. Added partial Slovak translation [Milan Galcik].
 - 0.237              : Updated Chinese translations [YuiFAN]. Re-generated translations for I/O port names. Trying to collect messages from everything at once hits some limit in xgettext and causes messages to be lost no, so I've split it up by the second-level source directories. For some reason xgettext thinks overloaded LUA functions are blasphemy, so that has to be worked around, too. Made some corrections to Chinese localisation after discussion with YuiFAN. Fixed syntax errors in translation files (Chinese_Simplified\strings.po and Chinese_Traditional\strings.po). Fill in Japanese names for main player buttons (language\Japanese\strings.po) [Vas Crabb]. Updated Greek translation [BraiNKilleRGR].
 - 0.234              : Updated Brazilian Portuguese translation [Felipe].
 - 0.233              : Re-generate localisations [Vas Crabb]. Updated Chinese translations (language\Chinese_Simplified and Chinese_Traditional) [YuiFAN]. Updated Greek translation [BraiNKilleRGR].
 - 0.231              : Updated Dutch translation. Added all missing strings for the Dutch language. Also made spelling and meanings more consistent after testing the menu's with previous translations [Jos van Mourik].
 - 0.230              : Updated Portuguese-Brasil [Chrystian Rafael Rubio de Melo].
 - 0.227              : Fixed Portuguese_Brazil translation errors [Masc Guy].
 - 0.226              : Updated Turkish translation [Kadir Eksi].
 - 0.216              : Don't attempt to load a translation file if the language setting is empty (mame\language.cpp) [Vas Crabb].
 - 0.212              : Updated Turkish translation [Kadir Eksi].
 - 0.209              : Updated Greek translation [BraiNKilleRGR]. Updated Brazilian Portuguese translation [Wellington Uemura]. Updated Chinese (simplified\traditional) translations [YuiFAN].
 - 0.208              : Regenerated localisation files [Vas Crabb].
 - 0.207              : Updated Brazilian Portuguese translation (better description of what MAME is really doing) [Wellington Uemura].
 - 0.202              : Updated Korean translation [Neius].
 - 0.201              : Created a full Norwegian translation [Imre Kristoffer Eilertsen].
 - 0.198              : Added Korean translation. There're still tons of lines to do, but it's a start [Neius]. Updated Chinese translation [YuiFAN]. Updated Greek translation [BraiNKilleRGR]. Updated Dutch language strings [Jos van Mourik]. Updated translation for Brazilian Portuguese [Wellington Uemura]. Updated German translation [Raf Tacker]. Updated Japanese Language [Katsuhiko Kagami]. Updated Spanish strings [A. Viloria].
 - 0.196              : Updated Chinese (simplified/traditional) translations [YuiFAN]. Updated Brazilian Portuguese translations [Wellington Uemura]. Updated French translations [noxx09]. Updated Spanish translations [A. Viloria]. Updated Dutch translations [Jos van Mourik].
 - 0.195              : Updated Turkish translation [Kadir Eksi]. Updated translation for Brazilian Portuguese [Wellington Uemura].
 - 0.194              : Clean up and improved comments for some Chinese names. Hong Kong titles should probably be Cantonese. Regenerated localisations (Multi-Language) [Vas Crabb]. Updated German translation [Raf Tacker]. Updated Dutch translations [Jos van Mourik]. Updated Greek translations [BraiNKilleRGR].
 - 0.193              : Updated French translation [SSTSylvain]. Updated Brazilian Portuguese translation. All translation updated to follow GNOME Translation Rules for Brazilian Portuguese, this are the same rules for other Linux Distributions, Manuals, etc. Now we can avoid translation conflicts (http://br.gnome.org/GNOMEBR/ErrosFrequentes and http://br.gnome.org/GNOMEBR/GuiaDoTradutor) [Wellington Uemura]. Updated Italian translation [theheroGAC].
 - 0.192              : Updated Greek translation [BraiNKilleRGR]. Portuguese (PT-PT) translation fixes [pmos69]. Updated Spanish translation [A. Viloria]. Updated Dutch translation [Jos van Mourik].
 - 0.191              : Updated strings.po for Japanese [Katsuhiko Kagami]. Added LUA translation to makefile and regenerated translations [Carl]. Updated Chinese translations [YuiFAN]. Updated Greek translation [BraiNKilleRGR]. Updated German strings [Raf Tacker]. Improved localisation: Changed makefile rules to treat mame.pot as a target so rules can depend on it. Put mame.pot inside the build directory so it will get cleaned. Couldn't get xgettext to scrape LUA and C++ in the same command and still remove stale strings. Use larger strings and format specifiers to fix some localisation issues: Issue with "None" lacking context in Russian and Turkish translations. Issue with "Not implemented" changing depending on the noun in Serbian. Issues with LUA plugins not allowing for languages with different grammar/punctuation. Use lj and nj digraphs for Serbian translations, transliterate a string I missed from Cyrillic [Vas Crabb]. Updated Russian translation [Nikita Zimin, MetalliC]. Portuguese (Portugal) translation [Pedro Simoes].
 - 0.190              : Updated Russian translation [MetalliC]. 100% complete Dutch translation [Jos van Mourik, Vas Crabb]. Updated Turkish translation [Kadir Eksi]. Italian language 100% translated [Tharabas17].
 - 0.189              : 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 [Vas Crabb]. Updated Chinese (simplified/traditional) translations [YuiFAN]. Updated Portuguese (Brazil) translation [Ashura-X, Felipe Sanches]. Updated Greek translation [BraiNKilleRGR]. Updated Spanish translation [A. Viloria]. Updated most of Japanese translation. Patch up German translation [Vas Crabb]. Updated Italian translation [TheHeroGAC, Vas Crabb, Tharabas17]. Updated Serbian and Serbian (Cyrillic) translation [Miodrag Milanovic, Vas Crabb]. Updated German translation [Rene Single]. Salvage some of Russian translation [Vas Crabb]. Updated Swedish translation [Joakim Larsson Edstrom]. Updated Russian translation [MetalliC]. Updated Turkish translation [kadireksi].
 - 0.187              : Attribution correction for Hungarian language translation [Tafoid].
 - 0.186              : Updated Hungarian language localization [Lothar Serra Mari].
 - 0.181              : Update Catalan translation to 361t, 133u [Jordi Mallach].
 - 0.180              : Updated German translation [Lothar Serra Mari].
 - 0.177              : Catalan translation updates [Jordi Mallach]. Updated Spanish strings [A. Viloria].
 - 0.176              : Updated and fixed translation files [dankan1890]. Updated Chinese translations [YuiFAN]. Pick off some Japanese string translations, improvements welcome [Vas Crabb]. Updated Brazilian Portuguese [Ashura-X]. Fixed Chinese_Simplified & Chinese_Traditional translation files [dankan1890]. Updated Greek translation [BraiNKilleRGR].
 - 0.175              : Updated French/Belgian language files [Mevi]. Small update of Italian translation [AntoPISA].
 - 0.173              : Moved emu\language.cpp/h to frontend\mame\. Initial Catalan translation [Jordi Mallach]. Updated Portuguese (Brazil) [Ashura-X]. Czech language translation [Karel Brejcha]. String Translate for Chinese (Traditional / Simplified) [YuiFAN]. Updated German GUI translation [Lothar Serra Mari]. Spanish translation updated [A. Viloria]. Updated Greek translation [BraiNKilleRGR]. Updated Japanese translation [Katsuhiko Kagami]. Updated Italian translation [Fabio Priuli]. Updated Serbian translations [Miodrag Milanovic].
 - 0.172              : Updated/Fixed Russian translation [MetalliC]. Updated French translation [Benjamin Siskoo, JacKc]. Updated Japanese translation [Katsuhiko Kagami, Vas Crabb, Gridle]. Updated Chinese (Traditional / Simplified) translation [YuiFAN]. Spanish translation for UI strings [A. Viloria]. Added Greek translation [BraiNKilleRGR]. Portuguese-Brazil translation update and reviewed [Ashura-X, Felipe Sanches, cuavas]. Some fixes/Update to the German translation [Lothar Serra Mari, Raf Tacker]. Convert Portuguese_Brazil localization file to UTF-8 [Balrog]. Added/Updated some fields in Italian translation [AntoPISA, Angelo Salese, Fabio Priuli]. Clean up Japanese translations a little. Be more consistent spacing/punctuation. Removed some bad translations that are worse than nothing. Added/updated a few translations [Vas Crabb]. Added French (Belgium) per request, used French as starting point. Make translation will now remove fuzzy translations and will not merge those as well. Added IGNORE_BAD_LOCALISATION flag. Serbian translation. Converted Serbian Latin to Cyrillic (Serbian_Cyrillic\strings.po) [Damjan, Miodrag Milanovic]. French (Belgium) translations [Mevi]. Sensibly improve the Castilian Spanish translation. Follow the Spanish capitalization rules, optimize space and use correct grammar, complete missing translations [Swyter]. Added Dutch translation [Wilbert Pol].
 - 0.171              : Added multi-language support for MAME (language\Afrikaans, Albanian, Arabic, Basque, Belarusian, Bosnian, Bulgarian, Burmese, Catalan, Chinese_Simplified, Chinese_Traditional, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, French_Canada, Georgian, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, Portuguese_Brazil, Romanian, Russian, Serbian, Serbian_Cyrillic, Slovak, Slovenian, Spanish, Spanish_Mexico, Swedish, Thai, Turkish, Ukrainian and Vietnamese). Added sample language to show display in cyrillic use MAME -lang "Serbian (Cyrillic)". Added ability to work with static text translation [Miodrag Milanovic]. Chinese Simplified and Chinese Traditional translation [YuiFAN]. Russian translation [MetalliC]. German translation [Raf Tacker]. Japanese translation [Fujix, Katsuhiko Kagami]. Italian translation [Angelo Salese, AntoPISA, Fabio Priuli]. Serbian Cyrillic translation [Miodrag Milanovic]. Portuguese (Brazil) translation [Ashura-X].



 8.8  VALIDITY CHECKS

 - 0.278              : Added check for systems marked as supporting saved states that use devices lacking saved state support (besides slot cards) (emu\validity.cpp) [Vas Crabb]. Validate device input defaults. Also do input validation on non-default slot options (emu\validity.cpp) [AJR].
 - 0.261              : Disallow zero-length regions in ROM definitions and software lists (emu\validity.cpp and emu\softlist_dev.cpp) [AJR].
 - 0.253              : Drop support for libc++ 6 altogether - it's missing std::unordered_map::extract (emu\validity.cpp) [Vas Crabb].
 - 0.252              : Added check to catch I/O port fields using UI input types (emu\validity.cpp) [Vas Crabb]. Be a bit more paranoid with null pointer checks and also disallow empty strings in BIOS definitions (emu\validity.cpp) [AJR].
 - 0.248              : Validate slot cards only once per device type during 'quick' validation passes, which were taking rather long for some drivers (e.g. (MESS) at.cpp) (emu\validity.cpp) [AJR].
 - 0.239              : Report refresh rate <1hz as error in validity check [hap].
 - 0.236              : Disable a validity check using an MSVC language extension when using Clang in MSVC ABI mode (emu\validity.cpp). Disable broken validity tests when detected (libc++ 6 std::is_invocable_r doesn't work on MFP for incomplete class) (emu\validity.cpp) [Vas Crabb].
 - 0.229              : Ensure validation of device tags in non-default slot options (emu\validity.cpp) [AJR].
 - 0.225              : 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) [Vas Crabb].
 - 0.223              : Added checks for bilinear filter vector routines (emu\validity.cpp) [Ted Green].
 - 0.216              : Added rudimentary validity checking for address_space_config objects (emu\dimemory.cpp) [AJR].
 - 0.211              : Fixed -validate errors detected and assured it passes xmllint (hash\cd32.xml) [Tafoid]. Be more verbose when validating device type (emu\validity.cpp) [AJR].
 - 0.205              : Make validity checker warn about configured maps for nonexistent spaces (emu\dimemory.cpp) [AJR].
 - 0.199              : Improved validation and fixed formatting (emu\diexec.cpp and screen.cpp) [Ryan Holtz, Vas Crabb, AJR]. Replaced machine().device with subdevice for NVRAM installation [AJR].
 - 0.196              : Fixed count_leading_zeroes(0) C fallback (osd\eminline.h). Test all 32 results from count_leading_zeros() & count_leading_ones() (emu\validity.cpp) [smf].
 - 0.193              : Prevent insane recursion when multiple slot devices have the same tag (emu\validity.cpp) [AJR].
 - 0.190              : MAME -validate will now report an error if no matches occur. Added a natural keyboard validation to check for valid natural keyboard (uni)codes [Nathan Woods]. Fixed exit status (emu\validity.cpp) [Vas Crabb].
 - 0.189              : 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 [Vas Crabb].
 - 0.188              : Removed validation check - it causes MSVC release builds to crash, and the things it flags usually get detected elsewhere (emu\validity.cpp) [Vas Crabb].
 - 0.187              : Added validation check for contradictory flags, fix things it caught. Attempt basic validation of slot cards. Note that this currently segfaults on anything ISA and probably other stuff. For example, any of the following will crash: MAME -valid c386sx16, MAME -valid 386i and MAME -valid b128. Pushing before dinner so others can take a look. Improved code for instantiating slot devices for validation. Fixed region validation for slot devices. Fixed the missing default subslot devices on slot card validation [Vas Crabb]. Fixed vas' problem, region_length() is expected to return 0 if the region doesn't exist, not crash [Olivier Galibert]. Further improvements to slot option validation: All slot options are now validated whether or not they are user-selectable. This has already exposed a bug in one MSX-Audio device. Slots within slots, however, get added for validation only if they are declared fixed. Various Commodore floppy drives have been affected by this, since it doesn't look as if the current FDC emulation allows for detachability. Improved validation checking for address ranges (emu\addrmap.cpp) [AJR].
 - 0.186              : Perform unitmask checking during validation in non-debug builds (emu\addrmap.cpp). Misc validation fixes: Make single-driver command-line validation work again. Removed some now-redundant checks related to device name validity (including the slot test, which also made assumptions that some (MESS) TI99 bus devices now break) [AJR].
 - 0.185              : Changed the validity checks to have its own emu_options. This comes from a regression reported by Tafoid whereby the following command line "mame coco wildcat" would report the following error, which was not really fatal because it happened within validation: Driver t4426 (file coco12.cpp): 1 errors, 0 warnings Errors: Fatal error Unknown slot option 'pak' in slot 'ext'. My changes to option processing changed emu_options to put image and slot options in their own arrays, and I expect those image/slot options to be pertinent to the active driver. However, driver validation was passing the emu_options associated with the main emulation to validation specific maching_config for other drivers. This changes validate_one() to always use a fresh emu_options with each individual validation. Changed validity_checker to keep a fresh emu_options for validation purposes. This seems to solve the performance problems introduced by PR#2221 while keeping with that PR's goals of not using the "runtime" emu_options for purposes of validation [Nathan Woods].
 - 0.184              : Added a new addrmap.cpp validation intended to catch AM_REGION declarations not tied to anything meaningful [Nathan Woods].
 - 0.177              : Validity checking improvements: Always print the name of each driver checked with -validate -verbose, and print before beginning the check to help detect crashes. Fixed already_checked test so that softlists get validated the first time, not every time but the first. Removed #include "validity.h" where not required. attotime::from_double cannot be constexpr because it uses floor [AJR].
 - 0.170              : Fixed errors from faulty merge (emu\validity.cpp). Some more validity checking improvements: The -validate command now accepts an optional string, validating only matching drivers. This has proven useful for debugging. The default is to validate all drivers as usual. Devices' names are tracked when validating their auto-finders [AJR].
 - 0.169              : Refactoring memory map validity checking [AJR].
 - 0.164              : Added basic signed integer arithmetic tests to core validation (emu\validity.c) [Alex Jackson]. Actually return an error when the validity check fails [Dirk Best].
 - 0.161              : Fixed empty input tag on validity test error message (emu\machine.c) [?].
 - 0.159              : Allow uppercase characters in ROM names so we can more accurately represent the labels. This is a major bugbear for PCB owners, who are annoyed that we insist they take the time to note every label only for us to then convert everything to lowercase. This just seems to be another legacy leftover from the old days of MAME before we cared so much about label accuracy, and there's no real reason for us to do it as it damages our documentation. This change has been requested multiple times by multiple people (emu\validity.c) [David Haywood].
 - 0.155              : Unregister OSD_OUTPUT_CHANNEL hooks when validity_checker is destroyed - fixes logging of unhandled exceptions in validation (emu\validity.c) [Oliver Stoeneberg].
 - 0.149u1            : Core validation message were never shown (emu\validity.c) [Oliver Stoeneberg].
 - 0.148u4            : Made required/optional device finder part of validation (emu\device.c/h, machine\netlist.h and validity.c). Keep naming consistent (emu\device.c) [Miodrag Milanovic].
 - 0.146u1            : Perform validation after reading ini file and check system name, fixes issues with ramsize option [Miodrag Milanovic].
 - 0.144u7            : Completely rewrote the validity checking mechanism [Aaron Giles]. The validity checker is now a proper C++ class, and temporarily takes over the error and warning outputs. All errors and warnings are collected during a session, and then output in a consistent manner, with an explicit driver and source file listed for each one, as well as additional device and/or I/O port contexts where appropriate. Validity checkers should no longer explicitly output this information, just the error, assuming that the context is provided.
 - 0.141u3            : Aaron Giles added core_options to device_validity_check() so they can be used to validate things.
 - 0.138u2            : Aaron Giles moved many validity checks out of validity.c and into the device interface classes. For example, address space validation is now part of the memory interface class.
 - 0.136u1            : Atari Ace added some missing header declarations and static qualifiers. Added validity.h to the core for consistency as well as an explicit foo.h in each foo.c.
 - 0.135u3            : Aaron Giles added validity check that AM_BASE_MEMBER and AM_SIZE_MEMBER items point within the bounds of the driver_data structure.
 - 0.135u2            : Aaron Giles added new module tagmap which is a simple hashed string map. Updated device and input port lists to use the tagmap for tag searches. Also removed the whole "quark" thing from the validity checker in favor of using the tagmaps.
 - 0.133u2            : Atari Ace updated romload.c and validity.c to not rely on global variables.
 - 0.131u1            : Changed validity check allocations to not rely on auto_alloc* anymore because they are not done in the context of a machine [Aaron Giles].
 - 0.127u3            : Added checks to ensure that tags used for CPUs, sound chips, regions and devices follow some basic rules: They should be less than 15 characters long, be all lower-case, and only contain letters, numbers, underscores, or dots (no spaces). This is to ensure that they can be used properly in debugger expressions and don't get too long or unwieldy to type (even 15 chars is rather long). Fixed up all tags in the system that failed these checks [Aaron Giles].
 - 0.127              : Aaron Giles added validity check to ensure that AM_READ_PORT() macros reference valid ports. Fixed several cases where the check failed. Aaron Giles added validity check to ensure that ports referenced by a condition actually exist. Fixed a case where this was violated.
 - 0.126u4            : Aaron Giles added expression validation callback to verify names for CPUs and memory regions. Extended error codes to report incorrect memory spaces, memory names or memory sizes. Added verification callback to the debugger to validate CPU and memory region names, as well as verifying that a requested address space exists for a given CPU.
 - 0.126u3            : Atari Ace added more validation to the address map detokenization, in order to catch cases where multiple read/write handlers are assigned to a range. Fixed cases in the code that failed these checks.
 - 0.126u2            : Aaron Giles added validity checks to ensure no duplicate sound or CPU tags. Fixed several duplicates.
 - 0.126              : Nathan Woods added per-device and per-CPU validity checks.
 - 0.125u7            : Aaron Giles fixed input port read validation. The previous check was way too aggressive, and prevented CUSTOM_INPUT handlers from reading other ports. This one sets an "all clear" flag as soon as the configuration data is loaded.
 - 0.125u6            : Curt Coder added a validity check against reading input ports at init time.
 - 0.124u4            : Wilbert Pol changed the inline validity checks to work around GCC bug #35885.
 - 0.124              : Aaron Giles added validity check to ensure input port tags don't have duplicates. Fixed several drivers where there were duplicates.
 - 0.123u4            : Added some validation of the interrupt setup to validate.c. Zsolt Vasvari added validity check that screenless drivers cannot have a VBLANK interrupt. Aaron Giles added validity checks to ensure that the devices referenced actually exist.
 - 0.120u3            : R. Belmont fixed casting issues in new inline validity checks.
 - 0.114              : Aaron Giles added validity checks to ensure that LSB_FIRST and PTR64 are set correctly for the current platform.
 - 0.113              : Fixed all analog controls for the newly enabled validity checks [Derrick Renaud].
 - 0.111u6            : Ernesto Corvi improved validity check for coinage order so that it prints out the correct order if an error is detected.
 - 0.111u4            : Nathan Woods added a validity check that input port names are valid UTF-8 strings.
 - 0.111u3            : Nathan Woods added code to validate that banks are only set to point to memory that has been allocated via auto_malloc(). Currently disabled pending further review.
 - 0.111u1            : Nathan Woods added validity check for zero refresh rates.
 - 0.108u3            : Firewave added some minimal validation on the sample rate configuration parameters.
 - 0.105u1            : Aaron Giles added a warning during validity checks to point out empty memory regions. These should either be eliminated or marked with an explicit fill value (ROMREGION_ERASE00 or ROMREGION_ERASEFF) to clear the warnings.
 - 0.104u8            : Aaron Giles added -validate command to perform system-wide validation and exit with a proper errorcode.
 - 0.104u6            : Nathan Woods added validity checks to ensure CPU core completeness.
 - 0.104u5            : Nathan Woods added several validity checks related to display variables. Aaron Giles fixed bug that caused a full set of validity checks even on release builds.
 - 0.101u5            : Added src\validity.c. Rewrote most of the validity checks so the full set now completes in well under 1 second, minus I/O time from paging in data. Also added region size checking versus memory maps to the validity checks. Moved all validity checks to a new file validity.c [Aaron Giles].
 - 0.101              : Aaron Giles added validity check to ensure driver names are 8 characters or less.
 - 0.100u3            : Aaron Giles removed -skip_validitychecks option now that the time to execute the checks is not as bad. Paul Priest changed validity checks to use hashes for speed. Also changed them to only run on the drivers in the source file of the current game, rather than on all games, in non-debug builds. And fixed the coinage sorting check so that it doesn't depend on the linker to order the strings in a particular way.
 - 0.88               : Derrick Renaud added a runtime option to disable validity checks (-[no]skip_validitycheck). That forces MAME to skip doing the code validity checks. The default is OFF (-noskip_validitychecks). This new option will default to doing the test and force you to confirm you do not want to use it. This way users can test their submissions easily and then speed things up when confirmed ok. NOTE: DO NOT disable the checks when submitting code.
 - 0.87u2             : Nathan Woods created a MAME_VALIDITYCHECKS macro that when defined, can specify whether validity checks should be run. If undefined, it defaults to running the validity checks. This will facilitate turning off validity checks in MAME derivative projects. Please DO NOT turn these off if you are making changes to the MAME source, any changes which fail the validity checks will be rejected.



 8.9  AUDIT

 - 0.273              : Print error message when decompression fails (tools\romcmp.cpp) [AJR].
 - 0.255              : Work around issues when no ROMs are shared with immediate parent. The issue occurred when a system with no ROMs or only bad dumps had an immediate parent with no ROMs in common. This is another thing broken by the attempts to hide "missing" ROM sets from audits (mame\audit.cpp). Fixes (MESS) StrongARM Risc PC does not start from the UI [Vas Crabb].
 - 0.234              : Filling out missing hashes for commented ROM_LOADs when known [Tafoid].
 - 0.231              : Option -romident has no use for mediapath, but it does use hashpath [hap].
 - 0.228              : Changed string processing to use std::string_view parameters. Added sum16 type (lib\util\hash.cpp and hashing.cpp). Added -h option to print hashes and 16-bit sums for all files (tools\romcmp.cpp) [AJR].
 - 0.227              : Fixed another annoying edge case (mame\audit.cpp) [Vas Crabb].
 - 0.226              : Fixed failure to recognise device ROMs that use continue/ignore load commands (mame\audit.cpp). Better heuristics for matching shared ROMs. This should address at least some of the remaining issues from MT07410 and GitHub #7314. If this causes issues like MT07756 to reappear, it will need to be fixed/reverted before release [Vas Crabb].
 - 0.225              : Fixed ROM sets incorrectly reported as not found by partially reverting MAME 0.224 (Fixed audit finding sets that you don't have) [Vas Crabb].
 - 0.224              : Fixed audit finding sets that you don't have when: 1. A clone has a rom that hasn't been dumped but it has the same name as a rom in the parent that has been dumped. 2. If roms are the same between parent and clone but loaded differently. 3. If parent has all the roms in the clone & you have neither set but you have a device rom that is used [smf].
 - 0.188              : Improved -romident performance by dynamically allocating large arrays at device_start time (sound\ay8910.cpp, audio\taito_en.cpp and video\powervr2.cpp) [Phil Bennett].
 - 0.186              : Improvements to ROM comparison (tools\romcmp.cpp): Identify plain ASCII text files as such. If a ROM has the same data in each half, print the hashes for that. Avoid buffer overruns. For calculating address masks, don't assume file size to be a power of 2. Fixed tools\romcmp.cpp regression with identifying bits stuck high [AJR]. Bug fix to -romident and aux verb cleanup. Fixed a bug where resolved slot/image options would choke -romident (reproducible in MAME 0.185 with 'mame64 -romident coco.zip'). 'mame64 -romident' no longer crashes. Resurrected auxverb_cleanup_and_romident_bugfix. Changed usage for -romident and minor cleanups. Supporting auxverbs in any order [Nathan Woods]. ~67% improvement of device walk in -verifyroms (mame\clifront.cpp). -validate complains if device shortnames exceed 32 characters. -listroms and -verifyroms accept multiple names/patterns [Vas Crabb].
 - 0.184              : Fixed null pointer bug when -verifyroms is used without a driver spec (mame\clifront.cpp) [AJR]. Substantially speed up -verifyroms, hack other verbs temporarily while device data is being refactored. Greatly improved performance of -romident on multiple files (mame\clifront.cpp and media_ident.cpp). This hashes all the files upfront, then does the expensive driver/software scan only once. It also walks all devices so it can identify ROMs for slot devices that aren't inserted by default [Vas Crabb].
 - 0.183              : Fixed Hashing helper classes (util\hashing.h) [Vas Crabb].
 - 0.176              : Moved emu\hash.cpp/h to lib\util\hash.cpp/h.
 - 0.173              : Moved emu\audit.cpp/h to frontend\mame\.
 - 0.169              : Make -verifyroms verify sub-devices like mpu401 and c2040fdc (emu\clifront.cpp) [qmc2].
 - 0.168              : Fixed hash getter compare (emu\hash.h) [Miodrag Milanovic].
 - 0.163              : Fixed a crash occurring when trying to mount a CHD from the internal UI (emu\audit.c and ui\imgcntrl.c) [Fabio Priuli].
 - 0.162              : Slightly optimized -romident so that each software list is parsed only once instead of as many times as the number of drivers it is attached to. Also, removed the implication that files with (size != power of 2) are to be skipped, since we now want to identify also tapes and floppies and not only ROM binaries. Check device roms only once when using -romident. this does not help as much as the softlist change, but there was no reason to keep the old unoptimal behavior [Fabio Priuli].
 - 0.159              : Better performance for -verifyroms on samba share (emu\audit.c and fileio.c) [qmc2].
 - 0.156              : Fixed poteotential -validate crash with invalid softwarelist XML. Actually report softwarelist XML parsing errors in -validate. Fixed softwarelist validation errors [Oliver Stoeneberg].
 - 0.154              : Print a summary at the end of romident, instead of garbage (emu\clifront.c) [Robbbert].
 - 0.152              : Increased max number of files in tools\romcmp.c and allow compare of any size file (not all roms are power-of-2) [Robbbert].
 - 0.149u1            : Removed lib\zlib\example.c and minigzip.c. Removed unused examples from zlib folder [Oliver Stoeneberg].
 - 0.149              : Fixed software list CHD verification (emu\audit.c) [qmc2].
 - 0.148u5            : Allow -romident to properly handle zipfiles inside a directory (emu\clifront.c) [Fabio Priuli].
 - 0.148u3            : Added the parent software to the searchpath when verifying software list entries (emu\audit.c) [Wilbert Pol].
 - 0.147u1            : Added -verifysoftware command [Wilbert Pol].
 - 0.146u5            : Audit considers a NO DUMP rom to be shared if it has the same name as a parent/device rom [Phill W.].
 - 0.145u2            : Be more rigorous about parsing invalid hashes. Report them only through validity checking. If detected normally, do a best-effort attempt so that things like CRC(1) SHA1(1) can be used to force reporting of proper checksums [Aaron Giles]. David Haywood fixed -romident to work with .7z archives. verifyroms looks in parent sets again. The bug caused clone sets to be listed as bad when you didn't have them as it thought every rom was shared with the parent [Phill W.]. Removed need for *_dev.lst files. Enforced short names for slot card devices. Updated validation, romverify and listxml output accordingly. Slotoptions now also contain shortnames so it's possible to link slot option and device [Miodrag Milanovic]. Slightly modified verifyroms to handle properly no-roms devices verification (wrong report message was output) (clifront.c) [Fabio Priuli]. Previous check gave false positives, also slot devices can gave empty rom regions so that have to be marked on output. Reverted some checks back and fixed few more cases [Miodrag Milanovic].
 - 0.145u1            : Added lib\util\hashing.c/h. Aaron Giles removed redundant hashing code, use hashing.h instead. Removed overabstraction in hash.h; it's ok to hard code the two types of hashes we have. Even adding another one would not be very difficult. Tafoid changed sample pack names for alphamc07 -> equites and aristmk4 -> 3bagflvt to match up sample to an actual setname. Started making some individual rom name adjustments, assisting those who decide to use parent-only romset merging, a more likely event now with added .7z solid archiving.
 - 0.145              : David Haywood fixed -verifysamples.
 - 0.143u5            : Only report samples audit result for sets with required samples [Fabio Priuli]. Fixed segfault when using -verifysamples [Fabio Priuli].
 - 0.143u3            : Romident format fix [O. Galibert].
 - 0.143u2            : If a rom is bad for a clone but is good for the parent then it doesn't count towards the clone being found. optimized also_used_by_parent & uses the length as well as hashes [smf].
 - 0.142u1            : Aaron Giles created media_auditor object to wrap all the auditing functions in audit.c. Updated all users to the new interface. Note that the new auditing mechanism is slightly out of sync with the romload code in terms of finding ROMs owned by devices, so it may mis-report some issues until the new ROM loading code is in. Aaron Giles added concept of a per-device searchpath. For most devices, their searchpath is just the short name of the device. For driver_devices, the searchpath is driver[;parent[;bios]]. This searchpath will eventually be used by the rom loader to find ROMs. For now it is used by the media auditor only.
 - 0.141u4            : Fixed enormous memory consumption when iterating through all drivers like -romident does [Aaron Giles].
 - 0.138u2            : Added emu\hashfile.c/h. Romident can now identify chd's [smf].
 - 0.135u2            : Added set name to -romident [smf].
 - 0.131u3            : The logic for detecting merged roms did not check all the rom sources in the parent, leading to cases where roms from devices aren't detected as merged (e.g. ldv1000 in superdqs). This fixes it [Atari Ace].
 - 0.123u6            : Fixed -verifysamples: Inconsistent handling of missing sample sets.
 - 0.126u1            : Nicola Salmoria fixed memory leak in romcmp.
 - 0.117u1            : Aaron Giles changed audit interfaces to take a game_driver * instead of a game index.
 - 0.113u1            : Nathan Woods fixed a crash when verifying samples when a sample has a NULL name. BUT fixed sample audit to report all missing samples.
 - 0.112u1            : Ben Rudiak-Gould improved ZIP file searching to look first for name + CRC match, second for CRC-only match, and lastly for name-only match.
 - 0.111u6            : Moved src\romcmp.c to src\tools\.
 - 0.111u1            : Nathan Woods moved a chunk of platform specific code out of chdcd.c and romcmp.c into the osd_tool code.
 - 0.110u2            : Aaron Giles fixed crash bug in romcmp when comparing ZIP files.
 - 0.110              : Fixes auditting sets where all the roms in the clone are also in the parent [smf].
 - 0.109u4            : Mamesick fixed several audit bugs introduced with the rewrite.
 - 0.109u2            : Nathan Woods fixed assertion when auditing systems with no samples or ROMs. Aaron Giles fixed -romident with ZIP files.
 - 0.109u1            : Aaron Giles rewrote audit.c to simplify the code and not rely on extraneous functions that were in the old file I/O system.
 - 0.106u3            : Hobbes@Play fixed a subtle auditing issue when both parents and clones had NO_DUMP ROMs in their manifests.
 - 0.105u1            : Aaron Giles changed -romident option so that it returns errorlevels based on how many ROMs were identified (0=all files identified, 1=all files except some non-ROM files identified, 2=some files identified, 3=no files identified).
 - 0.104u4            : Nathan Woods added sanity checking to the set_visible_area() call to ensure it is not set larger than the screen bitmap.
 - 0.100u2            : smf fixed error message when auditing optional files.
 - 0.95u6             : Brad Oliver improved auditing error reporting internally (src\audit.c).
 - 0.84               : Logiqx added missing SHA1 checksums to several ROMsets.
 - 0.80u2             : Nathan Woods added hash_data_insert_printable_checksum() call. Made things more const correct (hash.c/h).
 - 0.77u3             : Added SHA1 Information to remaining drivers [David Haywood].
 - 0.71u3             : Nathan Woods added a new function, hash_verify_string(), that takes a string and checks to see if it is a valid hash string. Added a consistency check that uses hash_verify_string() to make sure all of the hash strings are valid (src\mame.c).
 - 0.71u1             : Stefan Jokisch fixed MAME not looking in Parent directory for Hard Drive Images.
 - 0.70u2             : Nathan Woods sent in a patch to better support optional ROMs in the audit functions.
 - 0.69               : Removed strupr() in favor a manual implementation, because it is non-ANSI (src\hash.c). Removed private prototypes of crc32(), in favor of #include <zlib.h>. Put #ifndef _STDINT_H around typedefs for uint32_t and uint8_t (apparently these are already defined on the Mac) (src\sha1.h) [Nathan Woods]. Fixes for cases where no good dump is known but a file is found (src\audit.c) [BUT]. Fixed a problem where a NODUMP rom was reported as found even if it didn't exist in the rompaths (src\fileio.c) [HobbesAtPlay].
 - 19th May       2003: Farfetch'd fixed a bug in the audit routines that caused erroneous reports about undumped ROMs.
 - 0.68               : Added src\sha1.c/h and src\hash.c/h. SHA1 hash support, including various new command line options [Farfetch'd].
 - 0.62               : TESTDRIVER's are now part of the database used by -romident and -isknown [Nicola Salmoria].
 - 27th March     2002: Aaron Giles fixed the problem in auditing samples and artwork in the Windows version.
 - 20th February  2002: Aaron Giles fixed an audit problem that caused problems when finding files by the CRC32, and he fixed snapshot handling and memcard saving in it.
 - 0.36b11            : [DOS] New command -verifysets, this verifies all available games and reports their status (good/best available/bad). Also changed the format of the -verifyroms output. Some frontends might need small adjustments to parse the new output [Bernd Wiebelt].
 - 0.35b13            : Removed src\crc32.c.
 - 0.34b6             : Clone sets are not reported as missing by -verifyroms if only the parent set is present [John Butler].
 - 0.34b4             : Switched to CRC-32 for file integrity checks. The old custom checksums are no longer used [John Butler, Bernd Wiebelt]. Completed the transition to CRC32 checksums [John Butler, Bernd Weibelt]. When using zipped files, ROMs are automatically retrieved even if they don't have the expected name (provided they have the correct CRC-32, of course). You'll never have to rename files any more (though you might have to rename zips [Nicola Salmoria]. New command -listcrc. It lists the CRC-32 for all the supported ROMs. 00000000 means that the ROM is known to be bad [Nicola Salmoria].
 - 0.34b3             : Added src\romcmp.c. New -romident option. Use "MAME -romident dirname" to identify unknown ROM sets. CRC-32 checksums for most files are in place [Bernd Wiebelt]. Improved unzip code robustness when dealing with corrupt archives [John Butler].
 - 0.34b2             : Added src\crc32.c. Support for CRC-32 checksums instead of MAME's custom ones. The actual CRCs will be added later to the drivers [John Butler].
 - 0.33b4             : Fixed crash in -verifyroms which occurred in beta 3.
 - 0.33b3             : Added src\audit.h.
 - 0.31               : Added src\audit.c. New commands -verifyroms and -verifysamples. They check an existing ROM set for missing and incorrect ROMs, and for missing samples. You can use "mame -verifyroms *" to check all your romsets [Tormod Tjaberg].



 8.A  LISTXML/INFO

 - 0.284              : Added 'tag' attribute to Info XML '<device_ref>' elements. Added entry in DTD for '<device_ref tag="...">' (mame\infoxml.cpp) [Nathan Woods].
 - 0.276              : Recursively discover device types when filtering output. Don't waste time/memory collecting device types when not filtering. Added null check (mame\infoxml.cpp). Set option strict for JavaScript code (scripts\minimaws) [Vas Crabb].
 - 0.270              : Removed Python 2 support (scripts\minimaws\minimaws.py). Use python3 superclass method call syntax (scripts\minimaws\lib\*.py) [Vas Crabb].
 - 0.268              : Fixed deprecation warning in Python 3.11 (CGI module deprecated) (scripts\minimaws\lib\wsgiserve.py) [Vas Crabb].
 - 0.258              : Consolidated source file path formatting in one place (mame\infoxml.cpp) [Vas Crabb].
 - 0.254              : Thread device processing. Gives about a 10% speed improvement overall and avoids the need to mess with the locale of the ultimate output stream (mame\infoxml.cpp) [Vas Crabb].
 - 0.253              : Let command-line romident identify media inside ZIP archives [Wilbert Pol].
 - 0.252              : Replaced implementation of normalize_string with similar one in infoxml.cpp that returns a new std::string instead of a static buffer (mame\infoxml.cpp, util\xmlfile.cpp and mame\clifront.cpp) [AJR].
 - 0.251              : Fixed bug where copyInto failed to copy nodes (util\xmlfile.cpp) [Vas Crabb].
 - 0.250              : Got rid of custom allocator functions that have alignment issues and no longer provide value (util\xmlfile.cpp) [Vas Crabb].
 - 0.245              : Work around an MSVCPRT shortcoming with promise types (see e.g. GitHub #9665) (mame\infoxml.cpp) [Vas Crabb].
 - 0.238              : Fixed locale issues in -listxml [Vas Crabb].
 - 0.237              : Optimized the multithreading strategy for -listxml. The previous algorithm would spawn tasks but wait for them in sequential order. This is not necessarily optimal, and with these changes we will respond to whichever task completes first. This triples the speed of a full -listxml on a (Quad Core 2) computer (mame\infoxml.cpp) [Nathan Woods]. Changed geometry of disclosure triangles (MiniMAWS scripts\minimaws\lib\assets\disclosedown.svg and discloseup.svg). Fixed up schema for software list notes, made software list notes display initially collapsed (scripts\minimaws\lib\*). More cleanup on the FAQ page (usingmame\commonissues.rst) [Vas Crabb]. Added software list and software notes to MiniMAWS (scripts\minimaws\lib\*) [Wilbert Pol].
 - 0.236              : Added scripts\minimaws\lib\assets\disclosedown.svg and discloseup.svg. Better equality for devices (MiniMAWS scripts\minimaws\lib\dbaccess.py and wsgiserve.py). Updated Doxygen configuration to be based on up-to-date template, updated bootstrapped theme so it doesn't 404 (still won't work due to lack of support for jQuery smartmenus). Made table sort widgets (and the code behind them) less ugly (scripts\minimaws). Added disclosure triangle controls to many sections (scripts\minimaws) [Vas Crabb].
 - 0.233              : Strip CR characters showing at the end of each history.xml line under Linux (plugins\data\data_history.lua) [Julian Sikorski].
 - 0.231              : Properly clear history data when loading new file (plugins\data\data_history.lua) [Carl].
 - 0.229              : Added a few more driver flags to -listxml output (Driver requires artwork, unofficial, nosoundhardware and driver incomplete) [Nathan Woods]. Make -listmedia compatible with grep/find. Examples: List all systems with .tap support: mame -listmedia | find ".tap" and list all systems with paper tape reader: mame -listmedia | grep (ptap [Robbbert].
 - 0.228              : Added plugins\xml\LICENSE.txt, xml\init.lua and xml\plugin.json. C++ comment conversion (util\xmlfile.cpp). Added get_attribute_string_ptr method that distinguishes between empty strings and absent attributes without falling back to C strings (util\xmlfile.cpp) [AJR]. Use history.xml and added XML parser for it (plugins\xml\init.lua and plugin.json). Removed logging and fixed query (plugins\data\data_history.lua) [Carl].
 - 0.222              : First completed pass of commandline parameters. Get the audio latency numbers right and add PortAudio info. FreeSync/GSync information cleanup. Added tip for keyboardprovider (commandline\commandline-all.rst and usingmame\commonissues.rst) [Firehawke].
 - 0.218              : Fixed attribute order in software_lists output. Fixes QMC2 software list display [Couriersud]. The software list device is identified by its tag, the name is tells you which list it will load XML attributes are order-insensitive - compliant validators (e.g. libxml2's xmllint) accepted the XML how it was before. It would be better if parsers didn't enforce rules that don't exist [Vas Crabb].
 - 0.217              : Added minimaws\lib\assets\digest.js. MiniMAWS: Load and index some software list data (no way to display it yet). Also fix up some software lists with duplicate part features. Added rudimentary listing of software lists to web UI and work around a python issue on loading; also fix up more software list issues. Fill in software list pages and load software list ROM information. Added software list support to web-based romident. Identify software list dumps in CLI as well. Refactored digest code and identify fixed bit patterns. Reduced network operations when initially loading a machine page. Added rudimentary software lists to machine pages. Display software lists for selected slot options on machine pages (scripts\minimaws). Output software lists for devices (mame\infoxml.cpp). This will at least let a front-end work out that a slot card allows the use of an additional software list (e.g. spectrum -exp plusd enables spectrum_mgt_flop.xml) [Vas Crabb].
 - 0.216              : Changed frontend\mame\info.cpp/h to infoxml.cpp/h [Vas Crabb].
 - 0.215              : Added minimaws\lib\assets\romident.js. Load ROMs and disks and added a romident subcommand (scripts\minimaws\minimaws.py). Added WEB interface for identifying ROM dumps. Chromium doesn't like in-place modification of returned JSON data. Easier mod_wsgi deployment. Allow read-only database connections to be passed between threads [Vas Crabb].
 - 0.213              : Refactored info_xml_creator::output(): The two variations of output() no longer duplicate logic. No longer relying on driver_enumerator::config() to create machine_config objects. Because driver_enumerator would cache all objects created, we would needlessly hog memory. Simplifies listxml by collapsing the newly introduced enum info_xml_creator::devices_disposition into a bool. Changed info_xml_creator to use std::ostream. We are now passing the stream to every function, rather than sloppily keeping it in a member variable. Speeding up -listxml by performing the heavy lifting asynchronously. Changed info_xml_creator to not use std::endl. Ensuring that devices emitted by -listxml are sorted. This is primarily to make the output be deterministic. Moved most of the implementation of info_xml_creator to anonymous namespaces. This is to keep things isolated to a single translation unit as much as possible [Nathan Woods]. strtok is not reentrant (mame\info.cpp) - it's not safe to call it any time you might be multi-threaded [Vas Crabb].
 - 0.208              : Updated UI and XML output for additional emulation status flags [Vas Crabb].
 - 0.206              : Added scripts\xslt\list-bios.xslt, list-runnable-tree.xslt and list-runnable.xslt. Added some example XSLTs that operate on -listxml output. Treat *.xslt as XML (tools\srcclean.cpp). Updated some documentation and get the MAME and legacy MESS pages more in sync (docs\man\mame.6, mess.6 and source\commandline\commandline-all.rst) [Vas Crabb].
 - 0.201              : Adjusted indentation of DTD to better reflect structure (mame\info.cpp). It currently looks like condition is an orphaned child of sound when it has no relation to it [pxdnbluesoul].
 - 0.197              : Show RAM options in XML output that can actually be controlled from the command line - the others are practically useless (machine\ram.cpp and mame\info.cpp). Expose RAM size in "minimaws" [Vas Crabb].
 - 0.195              : Added support for multiple patterns and devices to -listfull verb. (mame\clifront.cpp and commandline\commandline-all.rst) [Vas Crabb].
 - 0.194              : Use C locale for int/float in XML files (util\xmlfile.cpp) [Vas Crabb].
 - 0.191              : Removed deprecated attributes from -listxml output and DTD (mame\info.cpp). Expose condition for dipswitches, configuration entries and adjusters. This eliminates ambiguities between settings with different conditions and allows a frontend/tool to generate a dipswitch preview (emu\ioport.h). Reduced number of calls to fprintf - saves overhead of setting up the formatting engine (mame\info.cpp) [Vas Crabb].
 - 0.190              : Fixed warning message (ui\info.cpp). Start adding stuff for iterating ROM entries in a more C++ way without needing to allocate everywhere, improved performance of -listxml by another 10% or so [Vas Crabb].
 - 0.189              : Added scripts\minimaws\minimaws.py, lib\__init__.py, auxverbs.py, dbaccess.py, htmltmpl.py, lxparse.py, wsgiserve.py, lib\assets\common.js, machine.js, sortasc.png, sortdesc.png, sortind.png and style.css. 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. "minimaws" 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/. JavaScript performance can drop when sorting really big tables, e.g. the list of all source files, or the list of machines in some of the fruit machine drivers. This update doesn't expose machine\device information, just consolidating what's there. The wsgiref server is adding headers to prevent caching. 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. Show compatible slots for devices. Demonstrate slot card BIOS selection. Added buttons for restoring default BIOS/slot card, clean up and comment the JavaScript a bit more. Added support for INI options preview and explicit defaults [Vas Crabb].
 - 0.188              : XML listing enhancements: The -listxml command will try to find and list any devices whose shortnames are specified on the command line. Any number of devices can be listed at once, and wildcards will be compared against device names as well as driver names. DTD output for -listxml, -listsoftware and -getsoftlist can be disabled by a new -nodtd option. It remains enabled by default [AJR]. Make XML file a class of its own managed with smart poitners. Added a method for copying part of an XML tree into another tree and use it to fix Cocoa debugger fatal error [Vas Crabb].
 - 0.186              : Allow multiple patterns/names for -listxml. Make -listxml instantiate slot devices in slots rather than under the machine root. Fixed -listxml output stops with many sets (agat.cpp, c64.cpp, c128.cpp, ec184x.cpp, iskr103x.cpp, ksys573.cpp, pet.cpp, poisk1.cpp and ti99_4ev.cpp). Fixed a Coverity (software) error (mame\info.cpp) [Vas Crabb].
 - 0.184              : Include devices in -listxml with * or no argument (mame\clifront.cpp) [AJR].
 - 0.182              : ROMs over 2 GB no longer reported as negative size in XML (mame\info.cpp) [AJR].
 - 0.181              : XML refactoring: Moved stuff to namespace util::xml. Scope down some enums. Split config load/save delegate types. Make config load take const so it can't mangle data [Vas Crabb].
 - 0.173              : Moved emu\info.cpp/h to frontend\mame\. Listxml output fix (port->tag()) [O. Galibert]. Improved documentation of input devices in the -listxml output, since having just a generic 'number of buttons' is rather pointless in the context of home systems with configurable controllers (being them keyboards, keypads or joypads). Now the various controllers are listed separately with the number of buttons they have. Frontend authors who relied on the "buttons" attribute of the input node for any kind of filter shall now scan all available controllers and take the maximum among their "buttons" attribute (possibly discarding keyboards and keypads if they want) to recover the old value. Started to acknowledge PORT_16WAY inputs in -lx, since they were reported as 8-ways so far. First attempt to fix the longstanding issue about inputs owned by devices being always tagged as P1 inputs in -lx. This proposed solution increases the field.player() value whenever the owner device changes, unless the input is a keyboard: in this way we correctly number pads and other controllers connected via slot devices to consoles/computers, at price of tagging as 3-player games a few arcades (e.g. those in cubo.cpp) which have two controllers + a touchscreen attached through a separate device [Fabio Priuli]. Fixed wrong default BIOS outputted with -listxml command [dankan1890].
 - 0.169              : Replaced strlen(device->shortname())!=0 with device->shortname()[0]!='\0' in emu\info.cpp (increased listxml output ==> 18%) [MASH, Balrog].
 - 0.168              : Fixed randomly different results for e01/e01s in -listxml output (bus\econet\e01.c) (MT06048) [Osso].
 - 0.163              : Worked around missing sub-devices in -lx output (emu\info.c) [Fabio Priuli].
 - 0.160              : Removed relative folders in src (for future use) (emu\info.c) Miodrag Milanovic].
 - 0.155              : Devices with samples shall specify sampleof too [Fabio Priuli].
 - 0.153              : Fixed -listxml DTD [Oliver Stoeneberg]. Removed unselectable slot options (SLOT_INTERFACE_INTERNAL) from the -listxml output [Curt Coder].
 - 0.151              : Removed DISK_ISOPTIONAL macro in favor of identical ROM_ISOPTIONAL (emu\info.c) [Oliver Stoeneberg]. Small fix for -listxml dumps regarding output of DIP switches [Andreas Singer].
 - 0.150              : Added info on input port and analog port definitions (emu\info.c). This is to provide some definition of the structure of input ports as they are logged in INP files. Would allow external programs to determine how many input ports there are, and under which ports analog ports are located [Barry Rodewald]. Fixed missing devices from XML (excluding legacy cpu) (emu\cpu\m68000\m68000.h, m68kcpu.c, machine\mcf5206e.c, awboard.c, fd1089.c, fd1089.h, fd1094.c, naomibd.c, naomibd.h, naomig1.c, naomig1.h, naomigd.c, naomim1.c, naomim2.c, naomim4.c, naomirom.c and video\sega16sp.c/h).
 - 0.149u1            : Expand listxml output with all devices having shortname (so all except cpus are in) and references to them. Ignore just samples when displaying sample device itself, since it gets first attached sample in XML [Miodrag Milanovic].
 - 0.148u4            : Updated -lx to account for on-device samples (required by NES carts using samples due to currently undumpable NEC D7755C/D7756C) [Fabio Priuli]. When looking into merge sets look just root device [Miodrag Milanovic].
 - 0.148u3            : Added sourcefile name for devices to emu\info.c [Miodrag Milanovic].
 - 0.148u2            : Optimized info_xml_creator::output_switches() (improves -listxml speed in DEBUG build by about 40%) and optimized -listxml [Oliver Stoeneberg]. We have a policy for naming conflicts. The suspect is, some of these are from dumpers being lazy and incorrectly naming things to fit the existing romdefs mind you, others are bootlegs where there are no real labels (drivers\8080bw.c, bestleag.c, dynduke.c, funworld.c, galdrvr.c, gei.c, headonb.c, legionna.c, mystwarr.c, nbmj9195.c, pacman.c, phoenix.c, segas16b.c, seibuspi.c, sprint2.c, srumbler.c, suna8.c and wecleman.c) [David Haywood, Brian Troha].
 - 0.148u1            : Added -lr as an alias for -listroms [Robbbert].
 - 0.148              : Skip non-configurable slot options in -listxml [Fabio Priuli].
 - 0.147u1            : Fixed lib7z portability problems that resulted in memory trashing in some configurations [R. Belmont].
 - 0.146u4            : Updated expat to 2.1.0 [Oliver Stoeneberg].
 - 0.146              : Fabio Priuli added screen tags to XML output, so that it is possible to easily identify which screens depend on optional devices (mostly of use in MESS, for its slot options, but eventually handy for PC-based arcades too).
 - 0.145u7            : Miodrag Milanovic fixed for default attribute in slotoption of XML output.
 - 0.145u3            : Fabio Priuli fixed listxml and validation.
 - 0.145u2            : Fix for device_ref tag in listxml [Miodrag Milanovic]. Several fixes and additions to listxml output [Fabio Priuli]:* Appended to XML info about devices which can be optionally mounted to slots. * Added a description attribute to slotoption to show which devices can be mounted in each slot. * Added to XML info of cpus/inputs/image/slots which are relative to devices (e.g. CPUs or Dipswitches in the device itself). * Tags of elements directly attached to the root_device do not display anymore the root colon (slot tags were already behaving in this way); elements attached to optional devices use tags starting with colon (to be interpreted as a relative tags which gets appended to the device tag, when such a device is selected in a slot). * Modified when necessary output routines to pass a root_device and a root_tag as parameters, in order to simplify output of relative devices and avoid duplicated code. * Updated DTD according to the new elements and attributes. These changes allow frontends to know in advance how drivers can be configured through the various slot options (by matching option descriptions with device descriptions), without the need to run -lx with the various slot combinations. This is especially of use if a device adds e.g. dipswitches or image devices (like additional floppy drives or additional slot expansions), but also if one wants to know e.g. how many sound channels a soundcard would add to a pc driver, or which kind of screen parameters would be added by a specific choice of video card. Additional cleanup for device info output made possible by Micko's work + renamed slot "shortname" attribute to "devname" to make clear it is the name of the device to be mounted. Made consistent the loops through subdevices.
 - 0.145u1            : Olivier Galibert fixed slots output in listxml.
 - 0.143u3            : Changed listxml command to output device roms too [Miodrag Milanovic].
 - 0.142u6            : Fabio Priuli added basic display of slot info in -lx (info.c). Tafoid added a fix for -listclones displaying parents as clones when it uses a BIOS.
 - 0.142u1            : Aaron Giles created info_xml_creator object to wrap all the info generation functions in info.c. Converted the file to C++ and cleaned up the input processing code.
 - 0.141u4            : Aaron Giles fixed wrong merge data in -listxml output for some sets.
 - 0.141u1            : Marking mechanical games as such in XML [Miodrag Milanovic].
 - 0.139u4            : Aaron Giles fixed bug where multiple sampleof attributes could be output, resulting in invalid XML.
 - 0.139u2            : Fabio Priuli fixing listxml year output (it was skipped if the year contains a '?').
 - 0.139              : Atari Ace added search all parents of a clone for merged ROMs to emu\info.c.
 - 0.138u2            : devlegacy.c, clifront.c, info.c [Miodrag Milanovic]: Created legacy image device. Moved opresolv implementation from MESS. listmedia is option is available in MAME too. listxml output now contains image devices. Miodrag Milanovic added support for image devices parameters to emuopts.
 - 0.137u2            : Fabio Priuli added keyboard and keypad controls to XML output.
 - 0.137u1            : Oliver Stoeneberg made the identation of the CPU device in -listdevices the same like the others (clifront.c).
 - 0.136u4            : Miodrag Milanovic moved print_game_categories into info.c, since it can be used by any driver anyway.
 - 0.136u1            : Oliver Stoeneberg added the mameconfig version to the -listxml output.
 - 0.136              : Oliver Stoeneberg added additional information to the dipswitches and configurations sections in the -listxml output.
 - 0.134u1            : listxml changes [Oliver Stoeneberg]: Added an "optional" flag for rom/disk entries to -listxml output. Removed the obsolete "dispose" flag from the DTD in the -listxml output.
 - 0.131u4            : Fabio Priuli added configuration settings and analog adjusters to XML output (see e.g. mario or crbaloon). Also, added port categories for MESS.
 - 0.126u5            : Aaron Giles modified xmlfile.c to accept integer values in decimal or hex. The default is decimal. Numbers may be prefixed by '#' for decimal values, or by '$' or '0x' to indicate hexadecimal values. Also added function xml_get_attribute_int_format() to return the format of the attribute, so that it can be later replicated.
 - 0.126u3            : Aaron Giles updated -listxml to output region class and tag for each ROM entry. Aaron Giles updated xmlfile.c to specify the line number for each node, for more accurate error reporting.
 - 0.126u2            : Aaron Giles changed -listxml to now output the tag names for CPUs and sound chips.
 - 0.125u8            : Couriersud fixed all output commands (-listxml, -cc, -listfull, ETC) crash with error.
 - 0.125u5            : Aaron Giles fixed -listxml still crashes.
 - 0.125u4            : Made it possible to pass a NULL errorbug to input_port_config_alloc(). Fixes -listxml crashes [Nathan Woods].
 - 0.124              : Aaron Giles changed xmlfile.c to pass in memory handlers to expat so that our memory overrides are properly managed.
 - 0.123u4            : Oliver Stoeneberg added the new display types to the listxml DTD.
 - 0.123u3            : Couriersud updated info.c to output raw video parameters (pixclock, htotal, hbend, hbstart, vtotal, vbend and vbstart) via -listxml if they have been given.
 - 0.123u2            : Aaron Giles normalized info.c style and simplified some of the code.
 - 0.118u5            : MASH fixed missing PLD region in -listxml.
 - 0.117u2            : Aaron Giles improved -listxml output to reflect new BIOS flag. New attribute isbios="yes" indicates that a given game is a BIOS.
 - 0.114u1            : Firewave added debug attribute to the XML output.
 - 0.106u13           : Some more fixes for the DTD in the -listxml output [Krick].
 - 0.106u12           : Removed src\xml2info.c and xml2info.txt. Aaron Giles removed xml2info utility. The -listinfo format was retired over 2 years ago. It is time to move on. uRebelScum added multiple input controls in -listxml output for games with more than one type. Added pedal control type. Added more info on analog controls as defined in the driver: minimum, maximum, sensitivity, keydelta and reverse. This required the 'control' attribute in the XML to be moved into an element. There can now be more than one 'control' element in the input section. Krick improved the description of screens in -listxml. Multiple screens are now listed, each with their own attributes. Rotation is now fully specified (rather than just vertical/horizontal). The width and height now describe the raw game screen before any rotation.
 - 0.106u11           : MadSkunk changed XML output so that BIOS sets, ROM sets and disks are output in the defined order.
 - 0.106u10           : Aaron Giles updated -listxml output to display information for multiple screens.
 - 0.106u8            : Aaron Giles and Buddabing changed -listxml to accept a wildcard gamename like most other frontend options to limit which games are output.
 - 0.104u3            : Nathan Woods added an optional xml_parse_options parameter to xml_file_read() and xml_string_read(), to provide options for preserving whitespace, error reporting and parser setup.
 - 0.104u2            : Aaron Giles added new function xml_read_string, which allows for parsing of internal strings into XML trees.
 - 0.101u4            : cutebutwrong added MAME build information to the listxml output and updated xml2info to handle the save state tag.
 - 0.101u3            : Oliver Stoeneberg fixed DTD in the -listxml output.
 - 0.100u4            : Buddabing improved accuracy of joystick types reported in -listxml.
 - 0.99u1             : Added src\xmlfile.c/h.
 - 0.95u2             : Improved gamelist.txt generation code [Buddabing, Atari Ace].
 - 0.94u1             : Updates to XML output [Logiqx].
 - 0.89u4             : Rene Single fixed bug 074u1ora (Games that start with parentheses in their description show up twice with using -listfull & -listgames. For example mmcamera).
 - 0.85               : Logiqx added sourcefile attribute to the -listxml output.
 - 0.84u4             : MAME now requires the expat library for XML support. This is included in the distribution, and is built automatically by default. You can comment out BUILD_EXPAT in the main makefile to disable this behavior and link against a precompiled version if you wish. Similarly, zlib has been modified to do the same thing and is now included with the MAME source. Comment out the BUILD_ZLIB flag to turn off this behavior and link against a precompiled lib [Aaron Giles].
 - 0.84u3             : Andrea Mazzoleni changed the "driver.status" entry in -listxml to summarize all the status entries allowing frontends to completely ignore all the other flags.
 - 0.84u2             : Change 'graphic preliminary' to 'graphic imperfect' in listxml output.
 - 0.84u1             : Fujix changed listxml to output all game flags.
 - 0.84               : Aaron Giles removed -listinfo option now that xml2info produces fully correct output. Two minor fixes to xml2info so that 'mame -listxml|xml2info' matches 'mame -listinfo' exactly [Logiqx].
 - 29th February  2004: Andrea Mazzoleni updated the -listinfo output a little.
 - 0.78u1             : BIOS roms no longer need to be added to info.c [Paul Priest].
 - 19th October   2003: James Bright submitted a modification to the -listxml function to also list the memory maps of the driver.
 - 0.71u2             : Added missing resources.
 - 0.69u3             : Andrea Mazzoleni fixed some problems in the makefile for the xml2info program.
 - 0.69a              : Added src\xml2info\xml2info.c, xmlparse.c, xmlrole.c/h, xmltok.c/h, xmltok_impl.c/h, xmltok_ns.c, utf8tab.h, ascii.h, asciitab.h, expat.h, iasciitab.h, intconfig.h, internal.h, latin1tab.h and nametab.h. Optional XML output and XML to info converter (see xmlinfo.txt) [Andrea Mazzoleni].
 - 0.69               : Substitutes in the -listinfo output the strings "nodump" and "baddump" with "flags nodump" and "flags baddump" [Andrea Mazzoleni].
 - 21st May       2003: Andrea Mazzoleni fixed the "merge" element in the -listinfo output.
 -  4th February  2003: Paul Priest fixed a bug in -listinfo that caused it to report a too high number of players supported.
 - 16th November  2002: Andrea Mazzoleni fixed -listinfo with MD5 checksums.
 - 31st October   2002: Aaron Giles fixed the -listinfo output for HD images and added optional XML output.
 - 13th June      2002: Robin Merrill fixed a small omission in -listinfo.
 - 0.71u2             : Added missing resources (src\info.c).
 - 10th July      2001: Bernd Wiebelt fixed a command line bug with the -log parameter.
 -  3rd June      2001: Andrea Mazzoleni updated the -listinfo system, adding some extra information.
 - 23rd February  2001: Logiqx submitted some fixes to the -listinfo output.
 - 20th January   2001: Stig Remnes and Valerio Cannone fixed -listinfo to list the PC10 and CVS resources.
 - 0.34b8             : Added src\info.c/h and info.txt. New -listinfo command to give details on all of the supported games [Andrea Mazzoleni].
 - 0.33b7             : New -listclones command, which lists in two columns the clones and the game they are clone of [Nicola Salmoria].
 - 0.33b6             : New -listgames command, which lists all games along with production year and manufacturer (data has not been entered yet so most of the fields are ????). Also -noclones option which removes clones from -list, -listfull etc. (clones data has not been entered yet so this is not complete) [Nicola Salmoria].
 - 0.33b3             : New -listdetails option, to create a detailed list of drivers and the hardware they use [Santeri Saarimaa].
 - 0.27               : In common.c, new function printromlist(), used by loadroms() and mame.c. (-listroms) [Nicola Salmoria].



 9.   OTHER DRIVERS/TOOLS

 - 0.282              : Fixed a typo in the documentation for the default values for the 'comm_localport' and 'comm_remoteport' flags: 15122 -> 15112 (docs\source\commandline\commandline-all.rst) [Christian Brunschen].
 - 0.276              : Fixed paper size selection for building MAME PDF documentation. Also set paper size to widespread A4 for dist.mak and CI (github\workflows\docs.yml, dist.mak and docs\Makefile) [gfernval, Vas Crabb].
 - 0.275              : Correct lenght->length typo [hap].
 - 0.273              : Updated copyright years to 2025 (docs\source and language\*) [Vas Crabb]. Rearranged README.md sections and updated links. Updated brief instructions for compiling with Visual Studio. Added repobeats activity graphs. Linked CI badges to workflow pages (README.md). Removed obsolete reference to MESS [Dirk Best].
 - 0.273              : Get rid of 'MACHINE_IS_SKELETON' / 'MACHINE_IS_SKELETON_MECHANICAL' - cfr. https://github.com/mamedev/mame/pull/13090#issuecomment-2551146118 for details (emu\gamedrv.h) [Angelo Salese].
 - 0.271              : Improved notes about DirectX SDK and added a link in compiling instructions. Also fixed typo "SDL" in place of "SDK" (docs\source\initialsetup\compilingmame.rst) [veganaiZe].
 - 0.270              : Added 32.2159_MHz_XTAL (emu\xtal.cpp). C++ style comments, remove list of xtals that could be purchased via digikey in 2008 (emu\xtal.cpp) [hap].
 - 0.267              : Added sections with recommendations for submitting machines that require media and/or user intervention to start up (docs\source\contributing\index.rst) [R. Belmont].
 - 0.266              : Added docs\source\techspecs\cpu_device.rst. Bumped version, as features that are not in a released version of MAME are now documented (docs\source\*) [Vas Crabb]. Documented taps and contention/interruptibility (docs\source\techspecs\memory.rst) [O. Galibert].
 - 0.265              : Updated RTD to 2.0.0 and removed dependency on jQuery (docs\themes\sphinx_rtd_theme) [Firehawke].
 - 0.264              : Get rid of swlist folder (docs\swlist\*) [Angelo Salese]. Removed [TTL] and [BET] tags in titles (misc drivers) [Osso].
 - 0.261              : Added option for Wayland support to compiling guide (docs\source\initialsetup\compilingmame.rst). Clarified behaviour of memory region read/write methods (docs\source\luascript\ref-mem.rst) [Vas Crabb].
 - 0.260              : Fixed many editing errors and spelling errors. Also fixed outdated link to contributing guidelines (docs\source\*). Fixed a number of grammatical errors and editing errors (docs\source\*) [Tom Cariello]. Normalized terminology for retitled bootlegs and hacks of arcade games, preferring "bootleg/hack of <title>" to "<title> bootleg/hack", which might be confused with bootlegger names or regions. Label a few more sets as hacks [AJR].
 - 0.257              : Added docs\source\luascript\index.rst, ref-common.rst, ref-core.rst, ref-debugger.rst, ref-devices.rst, ref-input.rst, ref-mem.rst and ref-render.rst. Removed docs\source\techspecs\luaengine.rst and luareference.rst. Moved Lua API reference to its own section (docs\source\luascript\*) [Vas Crabb].
 - 0.251              : Added CONTRIBUTING.md, docs\source\contributing\cxx.rst, contributing\index.rst and contributing\softlist.rst. Added preliminary guide for would-be contributors (docs\source\contributing\*) [Ryan Holtz, Vas Crabb, O. Galibert]. Expanded C++ guidelines following suggestions by P. Mackinlay [Vas Crabb].
 - 0.247              : Tweaked MAME icon: Use flat gradient style rather than embossed edges. Made rightmost stroke of the M thicker. Use a dark border to emphasise the outline on light backgrounds. Use flat style without anti-aliasing up to 64*64. Manually tweaked small sizes to preserve sharp mitres [Vas Crabb].
 - 0.242              : Added docs\source\usingmame\assetsearch.rst. Fixed a couple errors in the Technical Specifications. These seemed like copy paste errors in their contexts (techspecs\memory.rst and techspecs\object_finders.rst) [kmg]. Added page describing how MAME searches for media. Also made error messages for missing CHDs and missing files for software parts using the image file loader show search paths, and changed the (poorly named) bitbanger device to use the image file loader rather than the ROM loader for software items (usingmame\assetsearch.rst) [Vas Crabb].
 - 0.241              : Fixed broken links and added missing links in command line options index. Also removed documentation for an option that no longer exists and fixed some inconsistent terminology (docs\source\commandline\ and docs\source\debugger\) [Vas Crabb].
 - 0.240              : List MSYS2 packages required to build PDF documentation on Windows now that TeX Live is available (docs\source\initialsetup\compilingmame.rst). Added PDF documentation to dist.mak [Vas Crabb].
 - 0.239              : Added docs\source\_templates\versions.html. Implemented download links in docs theme. Modified the RTD theme to add PDF and EPUB download links in the left pane (docs\themes\sphinx_rtd_theme\versions.html). Refactor html docs build process to use new template and env variable [Firehawke]. Improved transliateration of a few game titles [Vas Crabb].
 - 0.236              : Update css for sphinx_rtd_theme to latest version, which includes selectors missing from old version (docs\source\techspecs\poly_manager.rst, docs\themes\sphinx_rtd_theme\static\css\theme.css). Update the RTD theme to the 1.0.0rc1 release. I noticed no issues building docs with this, and it includes sphinx 4 CSS fixes [Aaron Giles].
 - 0.232              : Added docs\source\initialsetup\configuringmame.rst. Docmumentation update/expansion [Firehawke, Vas Crabb].
 - 0.228              : Documentation update: Added note explaining that view options saved in machine CFG take precedence over INI/command line. Added prerequisites for building HTML documentation under MSYS2 and Fedora Linux. Explicitly mentioned that Ubuntu modifies GCC to enable "fortify source" by default in the relevant section. Removed obsolete reference to glibstdc++6. Re-formated compiling guide source (hard wrap at 80 columns, typographical quotes, code blocks for sample command lines) [Vas Crabb].
 - 0.225              : Get rid of a bunch of _Names - any name starting with an underscore followed by an uppercase letter is reserved [Vas Crabb].
 - 0.224              : Fixed compilation of docs for HTML and manfiles [Firehawke].
 - 0.223              : Added docs\source\healthwarning.rst. Updated RTD docs theme to 0.5.0 to fix search box (docs\themes\sphinx_rtd_theme). Preliminary work on -joystick_map redesign. Adjustments to phrasing for analog mapping (docs\source\commandline\commandline-all.rst). Added Health warning text [Firehawke].
 - 0.221              : Fixed smartquotes by disabling them: While smartquotes are somewhat configurable, it's better if we don't use them at all. Makes sure there are no hidden pit traps for the users (docs\source\conf.py) [Firehawke].
 - 0.217              : Updated MAME documentation: Added FAQ question about autofire with walkthrough of setup process. Added VSCode .gitignore for RST compilation temporary folder (docs/source/_build). Added a caveat about autofire+normal fire mapping. Added -lowlatency to the docs [Firehawke].
 - 0.211              : Make more use of the NODEVICE_LAN flag [Hydreigon].
 - 0.207              : Added images\MAMElogo.svg. Updated commandline\commandline-all.rst and initialsetup\compilingmame.rst docs [Vas Crabb]. Initial implementation of new logo for docs (images\MAMElogo.svg) [Firehawke]. Added svg->pdf conversion support (docs\source\conf.py) [Olivier Galibert].
 - 0.206              : Make informational verbs a bit more consistent, reduce copy/pasted code, a slight performance improvement for reading localisation files, and more documentation clean-up/correction/clarification (commandline\commandline-all.rst, techspecs\layout_files.rst, frontend\mame\clifront.cpp, clifront.h and language.cpp). Better documentation for compiling on Windows (initialsetup\compilingmame.rst). Make INI file loading examples match current behaviour at least (advanced\multiconfig.rst) [Vas Crabb]. Major formatting update for command line options (commandline\commandline-all.rst) [Firehawke].
 - 0.203              : Started commandline documents update to dismiss items no longer in source and start listing recently added commands. More work to come (docs\source\commandline\commandline-all.rst and commandline-index.rst) [Tafoid]. Fixed broken document structure (docs\source\techspecs\nscsi.rst): Those chapter numbers are auto generated by sphinx. Fixed the chapters not been bold like the rest of the documentation. Fixed chapter numbers not in sync with the rest of the documentation. Changed the last two chapters to keep up with the document consistency. Fixed bold for nscsi_full_device [Wellington Uemura].
 - 0.195              : Terminology cleanup of docs commandline section (docs\source\commandline\commandline-all.rst). More docs work: Escapes, debugger update. Missed a couple escape sequences. A little more escaping, acronym fixes, fixed oddity in symlist. Updated debugger internal help to match docs. Lowercasing for CPU in command parameters, fix casing on ASCII (docs\source\debugger\breakpoint.rst, cheats.rst, expressions.rst, general.rst, watchpoint.rst, tools\imgtool.rst and debug\debughlp.cpp) [Firehawke].
 - 0.194              : Added docs\source\commandline\commandline-index.rst. Overhaul commandline section of docs, includes index with linkable anchors (docs\source\commandline\commandline-all.rst): The first set of commandline overhauls. Correct case on headings, further improvements to index and spelling fix. More updates to the index and cleanup to the commandline stuff. More core options in the index. Finished multiplatform commandline index. Completion of first revision commandline index. Basic anchor links for FAQ page (docs\source\usingmame\commonissues.rst) [Firehawke].
 - 0.193              : Documentation update (docs\source\techspecs\device_rom_interface.rst) [smf].
 - 0.187              : Include -output option in documentation (docs\source\commandline\commandline-all.rst) [Michael.S.G].
 - 0.187              : Verify some same label different hash (sldh) rom parts and commented following established procedures [Tafoid].
 - 0.178              : Added docs\source\usingmame\aboutromsets.rst. Added ROM management for newbies (aboutromsets.rst), FAQ entry on common problems with unofficial builds [Firehawke].
 - 0.165              : Sorted dynax games by ID and added some missing IDs (mame\arcade.lst; ddenlovr.c, dynax.c, hnayayoi.c and royalmah.c) [Luca Elia].
 - 0.159              : Tidy up some Sega S16 stuff in mame.lst, the 'decrypted' comment was misleading (and as we've figured out/dumped the keys to almost every FD1094 we have a set for, irrelevant) There are various decrypted bootleg/suicide repair sets being used on PCBs today tho, a couple were dumped recently [David Haywood]. Added GAME_MECHANICAL flag to a few drivers that should have had it (drivers\mpu4avan.c, mpu4bwb.c, mpu4concept.c, mpu4crystal.c, mpu4empire.c, mpu4mdm.c, mpu4misc.c, mpu4mod2sw.c, mpu4plasma.c, mpu4sw.c, mpu4union.c, sumt8035.c and wms.c) [Fabio Priuli].
 - 0.157              : Uppercase hash cleanup (MAME/MESS drivers) [Tafoid].
 - 0.156              : Misc cleanups (drivers\atarigt.c, cybertnk.c, djmain.c, hng64.c, magicard.c, model2.c, nightgal.c, sfbonus.c, includes\exidy440.h, hng64.h, midyunit.h, machine\midyunit.c, video\cps1.c, exidy440.c, konamigx.c, nycaptor.c and segas32.c)
 - 0.155              : Doing a round of (__x) removals, put in a comment for same-label-different-hash and added // sldh [hap]. Noted confirmed instance where same data existed under different labels as a comment for Circus Charlie, thanks Porchy [Tafoid].
 - 0.154              : Assorted set name corrections (duplicates) and macro changes to match up to actual use. Cleared redundant GAME( entries in galaxian.c and left notes in drivers that will eventually be merged. Examined/adjusted mame.lst for orphaned sets and invalid entries. Added commented entries in mame.lst to match missing roms as well as already existing macros in drivers and eliminating redundancies [Tafoid].
 - 0.153              : Misc cleanups (audio\scramble.c, drivers\cdi.c, gaplus.c, naomi.c, qix.c, scobra.c, scramble.c, includes\scramble.h and machine\cdi070.c/h) [Osso]. Lopsided centiped.c, psikyo4.c and seta2.c gamelists [hap].
 - 0.149u1            : Correct common typo on Seta PCB numbers (drivers\champbwl.c, srmp2.c, taito_x.c and tnzs.c) [Luca Elia].
 - 0.145u6            : Document Kee Games games in the time it was already fully owned by Atari (dragrace.c, firetrk.c, quizshow.c, sprint2.c, tank8.c and ultratnk.c) [hap].
 - 0.144u1            : Modernized address maps for most skeleton drivers [Fabio Priuli].
 - 0.143u9            : kanikani fixed listing of switches used by gambling games.
 - 0.143u3            : Further major organization, documentation and addition of numerous (over 800) gambling / Fruit machine titles covering multiple systems [David Haywood].
 - 0.143u2            : Fixes for variable shadowing [Oliver Stoeneberg].
 - 0.142u6            : Fixed typo in lib\util\opresolv.c.
 - 0.142u1            : Eliminates the extern variables from atarimo video core, in order to remove a significant source of AM_BASE macros.
 - 0.141u4            : Allow serial receive without ES enabled [Couriersud]. Atari Ace updated nmk/olympia/pacific/pce/phoenix/rare/seibu/seta to driver_devices. Atari Ace updated sigma/stern/subsino/tatsumi/tch/tecfri/technos/tehkan to driver_devices. Atari Ace converted namco/thepit/toaplan/unico/upl/valadon/veltmjr/venture/vsystem/zaccaria to driver_device. Also simplified unico and disentangled gridlee from balsente. Atari Ace converted asteroid/bzone/funworld/itech8/kongambl/legionna/leland/quakeat/quizpun2/segas24/twincobr/warpwarp to driver_device. Atari Ace convert cclimber/galpani2/gticlub/namcond1/pacman/seibuspi/tetrisp2/vicdual to driver_device.
 - 0.141u3            : Eliminated global/static variables in a number of Konami/Sega drivers by introducing/using driver_device classes. Eliminated global/static variables in a aristocr/atlus/bfm/bmc/capcom/cinemat/dataeast drivers by introducing/using driver_device classes. Eliminated statics/globals in drivers jpm/kaneko/maygay/meadows/merit/metro/midcoin/midw8080/midway/msx/namco. Convert dooyong/edevices/eolith/exidy/gaelco/gottlieb/igs/itech/jaleco drivers to driver_device. Converted nichibut/nintendo/nix drivers to use a driver_device [Atari Ace].
 - 0.141u2            : Atari Ace eliminated static/global variables in a number of Atari drivers by moving them into a driver_device. Atari Ace eliminated global/static variables in a number of Taito/Irem drivers by introducing/using driver_device classes. Aaron Giles migrated allocated buffers to arrays in the driver_data classes of several drivers.
 - 0.141u1            : Added mame\layout\pinball.lay. Cleaned up clocks of mid to late 80s Nichibutsu non-Mahjong games. Though not completely accurate yet, this should improve music speed and DAC audio pitch a bit [hap].
 - 0.140              : Aaron Giles fixed games/drivers with no screen: When you exit MAME, you do not get control back.
 - 0.139u2            : Various SNK drivers now use driver_data [Atari Ace]. Harmony added a set of macros to minimize the amount of copy/pasting necessary to convert a device to the new style.
 - 0.138u4            : wallyweek added *IX man pages for MAME and utils.
 - 0.138u3            : Miodrag Milanovic imported image related utils from MESS into \lib\util. hap fixed all sets using stereo sound: Right speaker is louder than left speaker.
 - 0.138u1            : Cleaned up company names [hap].
 - 0.137u1            : Tafoid updated DIPs based on Stephh's notes and fixed location status. Added GAME_NO_COCKTAIL flag until flip screen is implemented.
 - 0.136u4            : John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). Angelo Salese correct visible area and timer speeds to make the fix up some audio/video problems. O. Galibert hooked up vblank and just enough controls to pass error screens.
 - 0.136u3            : Tafoid cleaned up comments refering to old driver names, and updated clone names in drivers from 0-K.
 - 0.136u1            : PsikyoFan added lots of comments relating to 56-pin Mahjong interface and Psikyo SK-G001 interface PCB based on discussion with Alien_Mame and documents from other Mahjong PCBs.
 - 0.135u3            : Atari Ace cleaned-up several drivers; added missing prototypes and removed dead ones, marked non-exported functions as static and removed cases of #include "deprecat.h".
 - 0.135u2            : Cleaned up many driver data structs [Fabio Priuli]: Dropped almost completely the use of generic sizes with struct members. Reduced as much as possible accesses to cputag calls during emulation (they are now mainly concentrated at MACHINE_START & DRIVER_INIT). Phil Bennett removed some rogue occurrences of 'x1snd' resulting from device tag mass-change.
 - 0.135u1            : Fabio Priuli added a MDRV_EEPROM_NODEFAULT_ADD macro for drivers which do not need default data size / data.
 - 0.135              : Aaron Giles updated most tools in src\tools to be straight BSD license.
 - 0.134u4            : Phil Bennett relaxed romcmp filename length restriction.
 - 0.134u1            : Correct XTAL value for XTAL_32_768kHz to 32768 Hz (emu\drivers\xtal.h) [ArcadeNUT].
 - 0.133u5            : Tafoid cleaned up drivers that write files which are not being actively developed. Also, commented our or changed the printf-ing of some messages to LOGERROR.
 - 0.133u4            : Tafoid fixed redundancy in clock speed assignments in some drivers by cleaning all divided by 1 (/1) instances.
 - 0.133u1            : Updated many clone names to use more than 8 characters [Yasuhiro Ogawa, Brian Troha, Tafoid, Fabio Priuli]. Fabio Priuli unified sets with unknown manufacturer to use all the same manufacturer <unknown>. hap fixed some inconsistencies with bootleg manufacturer names, eg. using Bootleg (big B), or using the original company if the rom is a bootleg.
 - 0.132u5            : Aaron Giles added new split tool (src\tools\split.c) that can be used for splitting giant files with per-file hashes and without corrupting them.
 - 0.132              : Tafoid and Fujix fixed a number of year listings known to be unknown or incorrect the current MAME source. The source for these changes come from the book: Arcade TV Game List (Edition: Domestic and Overseas, 1971 - 2005).
 - 0.131u3            : MooglyGuy eliminated SMH_* usage in all memory maps in drivers beginning with A and B.
 - 0.129              : Aaron Giles fixed MAME crashed on single monitor system if set to numscreens 2 in the *.ini.
 - 0.128u6            : Aaron Giles modified regrep to display the source file.
 - 0.126u5            : Andrew Gardner changed gfx memory region tags in obvious cases. Guru and Andrew Gardner added readmes for Cosmo, Don Den Lover, Beatmania (CHD dumping), Dragon Master, Gals Panic, Fantasia II, Grand Tour, New Dyna Blaster Global Quest, Daytona "To The MAXX" upgrade, Namco System FL, Great Sluggers, Gun Nail, Gun & Frontier, Elevator Action Returns, Battle Bakraid, Koro Koro Quest, Gigas (bootleg), Race Drivin', Hexa, IQ Block, Open Golf Championship, Macross Plus, Malzak, Puzzle Club, NAOMI, Puzzle Star, Puckman Pockimon, Raiden 2, Raiden Fighters 2 (single board), Light Bringer, Landmaker, Knuckle Bash 2, Mahjong Fight Club, Vivid Dolls, Tower and Shaft, Star Soldier Vanishing Earth, Stone Ball, Sky Lancer, Squash, Winning Spike, Versus Net Soccer, Undercover Cops, War Gods, Space Fever, Strikers 1945, Rohga, Super Eagle Shot, Treasure Hunt (stv), Tickee Tickats, Great 1000 Miles Rally 2 and Super Monaco GP.
 - 0.126u4            : Guru added README's for Galaga, The Outfoxies, Splatter House, Top Racer, Kyros No Yakata, Bombs Away, Meikyuu Hunter G, Crazy Kong, Moero Pro Yakyuu Homerun Kyousou, Lucky & Wild, Match It, Country Club, Enforce, Elevator Action, Chuka Taisen, The New Zealand Story, Buck Rogers Zoom 909, Head On, Victorious Nine, Youma Ninpou Chou, Pairs, Woodpecker, Slap Fight, Alcon, Tiger Heli, Superman, WWF Superstars, Area 51, Animalandia Jr, Avengers In Galactic Storm, Alien 3: The Gun, Aquajack and Missile Command.
 - 0.125u3            : Aaron Giles renamed EEPROM_* to eeprom_*. Updated all drivers accordingly. Typedef'ed a real eeprom_interface structure.
 - 0.122u5            : Zsolt Vasvari changed some function names to reflect parent set. Atari Ace changed Konami drivers to allocate and decode graphics using the same layouts. Removed the layout parameter from the decodechar() calls.
 - 0.122u2            : Verified a number of clock frequencies from real PCBs [Corrado Tomaselli, Zsolt Vasvari].
 -  5th July      2007: Aaron Giles - The Universal Platform, Part 2: In the previous article, I described how the Galaxian video hardware was designed around the concepts of a tilemap and sprites. This article goes into more details about how the hardware renders the tilemap, and where column scrolling fits in. To recap: a tilemap is a two-dimensional array of memory that describes how the video system displays the screen. Each "tile" in a tilemap is a fixed size (traditionally 8x8 pixels) and so to cover a 256x256 pixel screen, you need an array of 32x32 tiles. Now, on the Galaxian video hardware, the visible area of the screen is actually smaller than 256x256 - some of the top and bottom pixels are "blanked" to reduce the overall screen height to 224 pixels. This doesn't affect the underlying tilemap, which is still 32x32 tiles. But it does mean that some of those tiles are not visible. Now think about how the video signal is transmitted to the monitor. First, keep in mind that the video signal is generated one row at a time from top to bottom, left to right, in order. This means that in order to make the tilemap visible on the screen, the video hardware must, at each pixel location, look up which tile is specified by the tilemap RAM corresponding to that pixel (this is known as the tile index). Once it knows which tile index to display, it then must look up the actual tile graphics data in the tile ROMs, and output the appropriate pixel from the 8x8 tile graphics. This sounds like a lot of work, and it is. In fact, it's too much work to really do all of that on each pixel. So the hardware was optimized to be able to do it in realtime, by making some fundamental assumptions. On Galaxian hardware, each pixel of each tile can be one of four colors, requiring two bits of ROM data. The data for graphics can be stored in many different ways, but on Galaxian, they opted for a logical arrangement where each bit is stored in a separate ROM, and the bits are ordered in the same left-to-right, top-to-bottom order that the screen is rendered. The advantage of storing the graphics this way is that each row of tile graphics (remember, the tiles are 8x8 pixels) is exactly 8 bits wide, or one byte. And you can read one byte from a ROM all at once. Thus, on each scanline, the Galaxian tilemap hardware gets away with only looking up the tile index from the 32x32 tilemap RAM once every 8 pixels. It then uses that tile index to look up the appropriate row of tile graphics data once every 8 pixels, reading an entire row of data from the tile ROMs in one operation. Then, over the course of the next 8 pixels, it spools the data out one bit at a time from an internal data store. While it is doing that, it is also taking the time to figure out which tile is coming next so that it can immediately start outputting that tile once the current tile is finished. So, we are down to only needing to read tilemap RAM once every 8 pixels as we work our way across a given scanline. Further, we only need to look up the tile graphics once every 8 pixels as well. In order to do this, we compute which entry in tilemap RAM to look up by dividing the X and Y coordinates by 8 and rounding down, so that we fetch the tilemap entry at (X/8, Y/8). Once we read the tile index from RAM, we then need to look up the tile graphics from the appropriate row in the tile ROMs. The row number is just the remainder from dividing Y by 8. For example, if we are at pixel location (48, 17), then we would fetch the tilemap entry at (48/8, 17/8), or (6, 2). And we would fetch tile graphics from row number (remainder(17/8)) = 1 of the tile. Because of the way this works, the hardware designers realized that it was very easy to allow you to specify a number (let's call it the vertical scroll value) to be added to the value of Y before looking up the tile index and tile graphics. Doing this adds just a little bit of hardware, but gives you the ability to control the vertical scrolling of the tilemap. Take the example above again, but this time, let's add a vertical scroll value of 1 to all the Y coordinates. We are still at pixel location (48, 17) on the screen, but we will add 1 to 17 and use Y=18 in our calculations. So we look up the tilemap entry at (48/8, 18/8), or (6, 2) yet again - same as last time. But when we compute the remainder of 18/8, we get 2 instead of 1, meaning that we will display row 2 of the tile. This has effectively produced a scrolling effect of shifting that tile upwards by 1 pixel. The first question you might ask is, what happens when you have Y=255 and you add 1? You will end up with Y=256 and then where will you access the data for the tilemap? Without going into the finer details, the answer is that the value of 256 "wraps" around back to 0. Thus, if you slowly increase the vertical scroll value by 1 each frame, the screen will scroll upwards one pixel each frame and you will eventually see what used to be at the top of the screen appear at the bottom. This is due to the wrapping effect, where values above 256 have 256 subtracted from them. Because of this wrapping, it is often true that you don't want to have the entire tilemap visible, because once you scroll, you will immediately see the top appear at the bottom. This is why it is nice to have the extra non-visible tiles in the blanked out region of the screen. Now, having a vertical scroll value for the whole tilemap is pretty nifty, but on Galaxian they went a step further, and allowed you to specify a different vertical scroll value for each group of 8 pixels across. The reason this works well is clear if you look once again at what the video hardware is doing. It has to look up a new tilemap index and new tile graphics for each 8 pixel group as it scans horizontally across as scanline. Since it has to do these computations each time anyway, it doesn't add much complexity to pick a different vertical scroll value for each group, and it gives you a lot of flexibility. This is called "column scroll" because each column of the tilemap can have its own independent scroll value. However, even column scroll on a tilemap doesn't really provide enough flexibility for a complete game. So, in part 3 of this article, I'll dive into the sprites.
 - 19th June      2007: Aaron Giles - The Universal Platform, Part 1: It's interesting looking back at some of the early arcade game platforms and realizing just how much they share in common. Certainly, the Taito's classic Space Invaders hardware was a very popular generic platform which was adopted, copied, hacked and modified to support a large number of different games. Following on the heels of that success, Namco's Galaxian hardware design became its heir apparent. On the surface, both Space Invaders and Galaxian share a number of similarities. Both games were vertically oriented space shoot-em-ups. They both had a large number of invaders approaching from above, raining bombs on the player. They both had player ships that could only move left or right, and fired missiles up at the incoming invaders. Certainly when I was a kid and knew nothing about the hardware involved, I thought of Galaxian as a sort of super Space Invaders, since the Galaxians would actually swoop down to attack you, which seemed like a neat trick. From a hardware perspective, however, the two platforms were quite different. Sure, they both used the Zilog Z80 to power the gameplay (technically, Space Invaders was powered by an Intel 8080 CPU, which was the Z80's architectural starting point). But the video architecture was very different between the two. Space Invaders was based off of a very computer-like concept of a bitmapped display, where each pixel was carefully drawn one at a time by the main CPU. This had some nice advantages in that the game code had full flexibility on what to draw where. It also had the disadvantage that it required a lot of work to erase and redraw the player and enemy graphics each frame. If you ever look closely at the invaders, you will notice that they don't smoothly move all at once, but rather you can watch a ripple effect happen as they are updated in columns. This is because there wasn't enough CPU power to erase and redraw all those invaders on each frame. Keep in mind that a typical arcade game is approximately 256 pixels by 256 pixels, so even just clearing the screen requires 256x256 = 65,536 operations. If each operation takes 4 clock cycles, then that is about 1/4 of a second on a 1 MHz CPU! Now, in reality it's not quite that bad: because the display is black & white, each pixel only requires 1 bit, so you can pack 8 of them into one byte and reduce the number of operations by 8. Still, 1/32 of a second is still two whole video frames. In contrast, instead of a bitmapped display, Galaxian's video was built out of tilemaps and sprites, a video design that eventually became the norm for arcade games throughout the 80's and 90's. A tilemap essentially divides the screen area into a number of 8 pixel by 8 pixel squares. Rather than being able to draw each pixel independently, the game CPU instead chooses which one of 256 possible pre-designed 8x8 graphics tiles will appear in each square. These graphics tiles are stored in a separate ROM from the game code. Of course, one of the tiles is always a blank square, so to clear the screen, you would need to set each of the tiles to display the blank square. Taking the Space Invaders example above, a game with 256 by 256 pixels would need a 32 by 32 tilemap to cover that area with 8x8 graphics tiles. To clear the screen (i.e., set each tile to display the blank square), it requres 32x32 = 1,024 operations. At 4 cycles per operation, clearing the screen happens in a brisk 1/250th of a second for a 1 MHz CPU. Of course, you lose a lot of flexibility when switching from a bitmapped display to a tilemapped display, but you gain a lot in speed. The biggest limitation of tilemaps is that you can only position your tiles on 8-pixel boundaries. This makes it hard to smoothly animate anything because you can only move objects across the screen 8 pixels at a time, which is very chunky and distracting. To overcome these limitations, the Galaxian hardware included two additional features that gave the designers the flexibility they needed to produce smooth animation: column scrolling and sprites. I'll talk about those in Part 2.
 - 0.113              : R. Belmont and Aaron Giles fixed a number of BIOS-only drivers to not crash when run.
 - 0.106u13           : Added more previously dumped PLDs to a number of games [MASH].
 - 0.106u12           : Added a large number of previously-dumped PALs to various games across the whole source base [MASH].
 - 0.104u5            : Aaron Giles fixed memcards properly. They are no longer hardcoded for the NeoGeo. The implementation has moved to generic/machine.c, and a callback handler very similar to NVRAM is now supported in the machine driver definition. Cards are created per-game, so the memcard directory now has a subfolder per game with each game's cards stored underneath.
 - 0.103u3            : William Krick fixed leapyear calculation.
 - 0.103u2            : William Krick and smf fixed some Leap Year calculates.
 - 0.99u4             : Aaron Giles fixed crash when running vector games that was introduced in 0.99u3 (vidhrdw\vector.c).
 - 0.98u2             : Mamesick normalized names in Konami drivers according R. Belmont's wishes
 - 0.96u4             : Aaron Giles cleaned up several video drivers that were using non-auto memory allocation functions for bitmaps and memory (vidhrdw\dogfgt.c, hng64.c, lemmings.c, mjsister.c, tatsumi.c, ygv608.c (namcond1.c)).
 - 0.94u3             : Misc fixes [Nathan Woods].
 - 0.92               : HIGHWAYMAN added missing PROMs to many drivers.
 - 0.90u4             : Aaron Giles added standard set of Mahjong inputs.
 - 0.90u3             : Steve Ellenoff added some missing SHA1s.
 - 0.89u2             : Misc driver cleanups [Curt Coder].
 - 0.89u1             : Various cleanups [Atari Ace].
 - 0.87u4             : Olivier Galibert fixed bugs introduced in 0.87u3 causing Atari / Midway drivers to crash.
 - 0.85u2             : Rene Single removed the static MAX_DATAFILE_ENTRIES define, by retrieving the game count at runtime.
 - 0.84               : Logiqx added missing SHA1 checksums to several ROMsets. Nathan Woods added consistency checking for the year field.
 - 0.80u2             : Nathan Woods added hash_data_insert_printable_checksum() call and made things more const correct in src\hash.c.
 - 17th February  2004: Curt Coder sent in memory map conversions and DIP switch / input cleanups for various drivers.
 -  8th February  2004: Nicola Salmoria sent in another Namco update, converting drivers to the tilemap system, fixing some graphics priority problems.
 -  5th February  2004: Nicola Salmoria sent in another big Namco drivers update, fixing many bugs, improving the custom Namco sound chip emulation and converting drivers to the tilemap system.
 - 0.79               : Fixed most of the bugs caused by changes made in the .78 u cycle, please check any you reported to make sure [Aaron Giles + Various]. Updated many Atari / Midway drivers to use new style Memory Maps and cleaned them up [Aaron Giles].
 - 23rd January   2004: Aaron Giles cleaned up a bunch of Atari drivers.
 - 13th January   2004: Nicola Salmoria sent in a big Namco drivers update, converting them to tilemaps and merging a lot of the drivers, and documenting the easter eggs.
 - 0.78u1             : Paul Priest removed final traces of TESTDRIVER code.
 - 25th December  2003: Stefan Jokisch added some unused PROMs to a few drivers. Nathan Woods sent in another few miscellaneous patches to various files.
 - 0.77               : Aaron Giles fixed bad handling of EEPROM data in 32-bit mode (machine\atarigen.c - all Atari raster games). Implemented the MO command register and checksumming (vidhrdw\atarirle.c - early 90's Atari raster games). Motion object checksums work for growth games. Sprite/playfield priorities work for growth games. No more 6502 speedups.
 - 10th November  2003: Rene Single submitted a few manufacturer / year corrections.
 -  7th November  2003: Aaron Giles added graphics checksumming support to various Atari drivers and fixed sprite/playfield priorities in them. Rene Single added a sanity check for get_path_for_filetype.
 - 0.76u2             : Sebastien Volpe fixed aspect ratio calculation bug on some rotated games (galspnbl for example). Howard Casto added some input fixes.
 -  7th October   2003: Lawrence Gold sent in a patch that makes the usage of inline functions more consistent.
 - 0.72               : Various dipswitch fixes [Inigo Luja].
 -  8th August    2003: Rene Single submitted some corrections to manufacturer descriptions.
 - 24th July      2003: Nathan Woods sent in a patch that verifies hash strings to make sure they're valid.
 - 23rd July      2003: Martin Adrian submitted a bug fix for loading ROMs to non-existent CPU regions.
 - 16th July      2003: Aaron Giles added information about European slapstics to the slapstic emulation.
 - 0.71               : Curt Coder converted a bunch of drivers to tilemaps, fixed dipswitches etc.
 - 15th June      2003: smf fixed some slight errors in I/O port definitions in various testdrivers, unearthed by the recent ports sanity check addition.
 - 0.70               : Documentation updates [Santeri Saarimaa, Randolph, Leon van Rooij].
 - 20th May       2003: Brian A. Troha sent some fixes to the game and ROM set names.
 - 20th May       2003: Angelo Salese re-submitted some old submissions, updated to the current MAME version.
 - 18th May       2003: Paul Priest fixed a small bug in -crconly that might have caused problems.
 - 0.67               : Dozens of corrections to game description/flags [Toby Broyad].
 - 24th March     2003: Acho A. Tang resubmitted some old fixes.
 - 19th March     2003: Yorik submitted various small improvements to some old Capcom drivers.
 - 12th March     2003: Paul Priest sent in a patch to add auto-rotate for rotating monitors.
 - 10th March     2003: Toby Broyad sent in an update fixing most of the game names, years etc.
 -  2nd March     2003: Lawrence Gold fixed a slight ANSI/POSIX incompliance in datafile.c.
 - 20th February  2003: Smitdogg submitted fixes to 5 incredibly small bugs.
 - 20th January   2003: smf forwarded a small fix that allows using hidden UNC paths in the directory list.
 - 13th January   2003: David Haywood re-merged some old submissions with 0.63.
 - 18th December  2002: Guru fixed the filenames in Grobda, Baraduke and Metro-Cross.
 -  8th December  2002: Aaron Giles re-organized the Williams / Midway drivers a lot.
 - 26th November  2002: Zsolt Vasvari added sprite y-flip to all games and cleaned up a bunch of other small things.
 - 21st November  2002: Chris Kirmse fixed the ROM loading message displays for ports that include a GUI.
 - 16th November  2002: Stephane Humbert and David Haywood re-submitted some drivers and fixes that were omitted from 0.62.
 - 15th November  2002: Nicola Salmoria also did some related cleanups.
 - 0.62               : Aaron Giles fixed priorities in several Atari games.
 - 21st September 2002: Olivier Galibert improved the game information screen, combining multiple instances of identical processors to one entry.
 - 17th September 2002: Ryan Holtz submitted an addition of manual RGB levels control to the OSD menu.
 -  9th September 2002: Reip submitted some drivers with clone ROM sets added.
 - 29th August    2002: Steve Fewell submitted a fix for viewing clone ROM sets' history data.
 - 22nd August    2002: Steve Fewell submitted a better fix for the buffer overflow problems with the data files, now they are truncated.
 - 15th August    2002: Steve Fewell submitted a small change to the history.dat view to avoid crashing with big amounts of information.
 -  5th July      2002: Olivier Galibert fixed a few minor annoyances in 0.61. Kale re-submitted several fixes to various drivers.
 - 16th June      2002: David Haywood resubmitted some old clones.
 -  9th June      2002: Brad Oliver fixed a small logging problem.
 -  6th June      2002: MASH added a few clones.
 -  3rd June      2002: MASH submitted clone ROMs to two drivers. Bernd Wiebelt fixed verifying samples and updated the documents.
 -  1st June      2002: MASH submitted a few clones to various drivers.
 - 25th May       2002: Bryan McPhail fixed some memory leaks.
 - 22nd May       2002: MASH added various clone ROM sets to several drivers.
 - 15th May       2002: SUZ fixed screen refresh rates in a few drivers.
 -  2nd May       2002: Nicola Salmoria improved romcmp's bad address line detection and output message.
 - 13th May       2002: MASH submitted clones of Frogger on Scramble hardware and Ginga Ninkyouden.
 - 11th May       2002: MASH added some clone ROMs to a few drivers.
 -  9th May       2002: Chack'n submitted some input fixes to the Toaplan drivers and added a few clone ROM sets.
 -  6th April     2002: Phil Stroffolino sent in an update to the various Namco drivers, further abstracting the support of different emulated custom chips.
 - 24th March     2002: Phil Stroffolino started abstracting some of the newer Namco graphics chips for a more general level of support for them.
 - 22nd March     2002: Aaron Giles fixed a small bug in Atari drivers' memory allocation. Chack'n submitted some ROM filename fixes.
 - 25th February  2002: Ian Patterson also fixed a crash in the user interface.
 - 13th February  2002: Acho A. Tang submitted a major improvement to the old SNK games drivers, fixing a lot of bugs.
 - 12th February  2002: Stephane Humbert updated his various fixes for 0.58.
 -  8th December  2001: Brad Oliver sent in several fixes for 0.56.
 - 30th September 2001: Olivier Galibert added support for port-dependent user-configurable keys, for example for changing the fullscreen toggle key.
 - 15th September 2001: Andrea Mazzoleni fixed a ROM loading problem which may have caused slow loading or unwanted network accesses.
 - 14th September 2001: Aaron Giles fixed Battler fire buttons.
 -  8th August    2001: Aaron Giles merged the Final Romance and Pipe Dream drivers and fixed a few bugs in Final Romance.
 - 27th July      2001: Nicola Salmoria added nibble compare to romcmp.
 - 26th July      2001: Aaron Giles added support for automatically freeing pointers.
 - 16th July      2001: Zsolt Vasvari fixed several drivers that didn't handle full refresh screen updates properly.
 - 30th June      2001: Bernd Wiebelt updated the documentation.
 - 31st March     2001: Mike Coates changed the steady key code to be dependant of an option in MAME.CFG.
 - 28th March     2001: Panther fixed a bug with the handling of -romdir switch.
 - 13th March     2001: Olivier Galibert fixed some bugs in the EEPROM emulation code.
 - 0.37b3             : Gerardo Oporto fixed dipswitches in many games.
 - 0.22               : Minor fixes to some drivers.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Links
-----

Aaron Giles                  : http://www.aarongiles.com/
Al Kossow                    : https://x.com/bitsavers
Alex's Rom Dumping Project   : http://www.amusements-shop.com/
Andreas Naive                : http://andreasnaive.blogspot.com/
Andrew J. Gardner      (Drew): http://ajg.mameworld.info/
Andrew Welburn               : http://www.andysarcade.net/ + https://www.facebook.com/AndysArcade/photos
Andy Geezer                  : http://triplemoonstar.brinkster.net/segashed/blog/
Angelo Salese          (Kale): http://mamedev.emulab.it/kale/
Arcade Hacker  (Eduardo Cruz): http://arcadehacker.blogspot.com/
Arcade Heroes                : http://arcadeheroes.com/ + https://plus.google.com/+theatarian
Artemio Urbina               : https://x.com/Artemio
Asociacion RetroAccion       : https://x.com/retroaccion/
Bryan McPhail          (Mish): http://www.bryanmcphail.com/wp/
CaH4e3                       : http://cah4e3.shedevr.org.ru/ + http://forum.emu-russia.net/viewtopic.php?f=25&t=503
Caius                        : https://caiusarcade.blogspot.com/ + https://x.com/Caiusarcade
Charles MacDonald            : http://www.techno-junk.org/
ClawGrip                     : http://junglehunt.blogspot.com/ + http://clawgrip.blogspot.com/
Corrado Tomaselli   (Kold666): http://www.mameitalia.net/
Dave Widel                   : http://www.widel.com/
David Haywood          (Haze): http://mamedev.emulab.it/haze/ + https://x.com/MameHaze/ + https://nitter.net/MameHaze/
Devin Acker                  : https://www.youtube.com/@dacker23
Derrick Renaud               : http://derrick.mameworld.info/
Dirk Best              (Duke): https://redump.net/
Dr. Decapitator              : http://decap.mameworld.info/
Ed Fries                     : https://edfries.wordpress.com/
Fabio Priuli        (etabeta): http://mamedev.emulab.it/etabeta/
Frank Palazzolo              : http://avoidspikes.blogspot.de/
Guru                         : https://gurudumps.otenko.com/
Michael                 (hap): http://tsk-tsk.net/
Harmony                      : http://harmoniouscode.blogspot.com/
Howard Casto                 : http://forum.arcadecontrols.com/index.php?topic=101789.0
James Wallace      (JWallace): http://www.mameworld.info/agemame/ http://agemame.mameworld.info/
Jim Stolis                   : http://stolistic.blogspot.com/
Juergen Buchmueller          : https://github.com/pullmoll + http://pmbits.de/40587.html + http://pmbits.ath.cx/
Luca Elia                    : http://www.lucaelia.com/mame.php
Manuel Abadia                : http://www.manuelabadia.com/blog/
Matt Ownby's Cool Projects   : http://my-cool-projects.blogspot.com/
Miguel Horna         (ElSemi): http://nebula.emulatronia.com/
Mike McBike                  : http://www.wolfgangrobel.de/
Miodrag Milanovic     (micko): http://micko-wip.blogspot.com/
Museo Arcade Vintage         : https://x.com/Arcade_Vintage + https://museoarcadevintage.com/en/home-2/
Nicola Salmoria              : https://x.com/nsalmoria?lang=de + http://mamelife.blogspot.com/
Norbert Kehrer               : https://norbertkehrer.github.io/index.html
Paul Priest      (Tourniquet): http://tourniquet.mameworld.info/
Phil Bennett          (PhilB): https://x.com/PhilBennett3D/ + https://philwip.com/ + http://philwip.mameworld.info
Phil Stroffolino     (Stroff): http://www.machna.com/games/
Pierpaolo Prazzoli     (Reip): http://reip.mameworld.info/
R. Belmont            (Arbee): http://rbelmont.mameworld.info/
Ranger_lennier               : http://ranger.mameworld.info/
Razoola                      : http://www.cps2shock.com
Recreativas.org              : http://www.recreativas.org/
Richard Bannister            : http://www.bannister.org/
Roberto Fresca       (Robbie): https://robertofresca.com/ + http://robbie.mameworld.info/
Roberto Zandona      (Robiza): https://mamedev.emulab.it/robiza/
Ryan Holtz        (MooglyGuy): https://x.com/TheMogMiner/
ShouTime                     : http://shoutime.tumblr.com/ + http://collectedit.com/collectors/shou-time-213/arcade-pcbs-281
Siftware                     : http://softwarethis.com/arcade/index.php
smf                          : http://smf.mameworld.info/
Stefan Lindberg              : http://www.ym2149.com/
System11                     : http://blog.system11.org/ + https://x.com/system11b
TeamEurope                   : https://team-europe.blogspot.com
Tomasz Slanina          (Dox): http://www.slanina.pl/mame.html + http://doxdev.blogspot.com/
trap15, austere              : https://x.com/trap0xf + http://www.raidenii.net/
Twistedsymphony              : http://solid-orange.com/
Vas Crabb                    : https://arcade.vastheman.com/
Ville Linde                  : https://x.com/villedevs + http://vlinde.mameworld.info/


1Emulation.com               : https://www.1emulation.com/forums/portal  +  https://www.1emulation.com/forums/forum/127-arcade/
3D ARCADE                    : http://www.mameworld.info/3darcade/index.html
The Arcade Flyer Archive     : https://flyers.arcade-museum.com/
Flyer Fever                  : https://www.flyerfever.com/
Arcade Database              : http://adb.arcadeitalia.net/
Arcade PCB Fever   (Corrado) : https://arcadepcbfever.blogspot.com/
Arcade Reference Guide APP   : https://itunes.apple.com/app/id1178311507
Arcade Restoration Workshop  : http://www.arcaderestoration.com/
CAPS0ff                      : https://caps0ff.blogspot.com/ + https://x.com/Caps0xff
Catlist                      : http://www.progettoemma.net/?catlist
Cheat.dat             (Pugsy): http://www.mamecheat.co.uk/index.htm or http://cheat.retrogames.com/
Cheat.dat            (Wayder): https://wayder.web.fc2.com/  or https://ss1.xrea.com/nekoziman.s601.xrea.com/cheat/
ClrMamePro            (Roman): http://mamedev.emulab.it/clrmamepro/ + https://www.emulab.it/forum/index.php?board=6.0
Command.dat         (Procyon): http://www.progettosnaps.net/command/ + https://sites.google.com/site/procyonsjj/home/command-dat
Decapping Project            : http://arcade.vastheman.com/decap/
Discrete Logistics           : http://discrete.mameworld.info/
Dumping Union Page           : http://smitdogg.mameworld.info/du/donate.html
EMMA Italian Dumping Team    : http://www.citylan.it/wiki/index.php/Main_Page
EMMA (MAME Italia forum)     : http://www.arcademania.eu
easyEmu MAME Guide    (MrV2K): https://easyemu.mameworld.info/
GameInit.dat       (Robbbert): https://github.com/Robbbert/Startup + http://www.progettosnaps.net/gameinit/
Game Preservation Society    : https://www.gamepres.org/en/ + https://www.youtube.com/channel/UC8D4j4oqi-xGwVwEBPZCn4w
Games That Weren't           : https://www.gamesthatwerent.com/
HiScore.dat                  : http://highscore.mameworld.info/download.htm
History.dat       (Alexis B.): https://www.arcade-history.com/index.php?page=download
International Arcade Museum  : https://www.arcade-museum.com/
IV/Play             (John IV): https://john-iv.github.io/iv-play/ + http://www.mameui.info/Bench.htm
JAMMArcade                   : http://www.jammarcade.net/
Killer List of Video Games   : http://www.klov.com/
List of Undumped Games       : https://mamedev.emulab.it/undumped/index.php?title=Undumped
Mahjong in MAME              : http://mahjonginmame.com/
MAME                         : http://mamedev.org/ + https://x.com/mamedev_org
MAME Artwork         (Mr. Do): http://mrdo.mameworld.info/index.php + http://www.emu-france.com/utilitaires/17-mame-support-files/276-artwork-mr-do/
MAME Content Manager         : http://mcm.mameworld.info/
MAMEdev Discussions          : https://github.com/orgs/mamedev/discussions
MAME Documentation           : http://docs.mamedev.org
MAME FAQ                     : http://mamedev.org/devwiki/index.php?title=Frequently_Asked_Questions
MAME GIT REDUMP              : https://git.redump.net/mame/log/
MAME GITHUB                  : https://github.com/mamedev/mame/commits/master
MAME GIT                     : https://www.openhub.net/p/mame/contributors/summary
MAME Guide                   : http://easyemu.mameworld.info/
MAME Icons            (MAMu_): http://icons.mameworld.info/
MAME Italian Forum           : http://www.mameitalia.net/
MAME LUA Plugins/Scripts     : https://www.mameworld.info/ubbthreads/showthreaded.php?Cat=&Number=392265&page=0&view=expanded&sb=5&o=&fpart=1&vc=1
MAME Manual                  : https://docs.mamedev.org/_files/MAME.pdf
MAME Reddit                  : https://www.reddit.com/r/MAME/
MAME Samples       (AntoPISA): http://www.progettosnaps.net/samples_en.html
MAME Samples         (Twisty): http://samples.mameworld.info/
MAME Snapshots     (AntoPISA): http://www.progettosnaps.net/
MAME World                   : http://mameworld.info/
MAMEDEV Forum                : https://forum.mamedev.org/
MAME IRC channels            : https://libera.chat/ + ircs//irc.libera.chat:6697/#mame    https://www.mamedev.org/irc.html  Older: https://webchat.freenode.net/   Channels:#mame  or  #mame-dev
MAME Facebook                : https://www.facebook.com/mamedev.org/
MAME Twitter                 : https://x.com/mamedev_org/
MAME/MESS Guide       (Mucci): http://www.mameguide.info/
MAWS           (cutebutwrong): http://maws.mameworld.info/maws/
Mamescore         (ManicBart): http://www.mamescore.net/
MESS                         : http://www.mess.org + http://mess.redump.net/downloads
MESS Artwork                 : http://mess.redump.net/artwork + http://tsk-tsk.net/net/extart/
MESS Artwork          (hydef): https://drive.google.com/drive/folders/1Pv-LGpdKXlvgDXMEobhVfGbqVGA07v2a
MESS sysinfo.dat             : http://www.progettoemma.net/mess/
Museo del Recreativo         : https://museodelrecreativo.es/ + https://www.facebook.com/museodelrecreativo/ + https://x.com/museorecreativo + https://www.instagram.com/museodelrecreativo/
Museum of Soviet Arcade      : http://www.15kop.ru/en/
ProjectMESS                  : http://www.progettoemma.net/mess/
QMC2                         : http://qmc2.batcom-it.net/
Recreativas.org              : https://www.recreativas.org/
Recreativos Piscis           : https://x.com/recre_piscis + https://www.youtube.com/c/RecreativosPiscis/videos
Retroinvaders                : https://retroinvaders.com/index.php/es
Robby Roto (via MAME)        : https://chrome.google.com/webstore/detail/kcfbijoldkenmemnbbkjnpdhnijgahck
Romulus (ROM Manager)        : https://romulus.cc/
STARCADE Arcade Game Show    : http://www.starcade.tv/
System16               (Toby): http://www.system16.com/
TILT.IT                      : https://www.tilt.it
Typing Monkeys    (drewcifer): http://cs.sipr0n.org/
Undumped Wiki                : https://undumped.miraheze.org/wiki/Main_Page
unMAMEd       (Bobby Tribble): http://unmamed.mameworld.info/



Blogs:
------
arcadeinfo.de                : http://www.arcadeinfo.de/
arsTECHNICA                  : https://arstechnica.com/gaming/
The Arcade Blogger           : https://arcadeblogger.com/
Arcade Projects              : https://www.arcade-projects.com/forums/
associacio A.R.C.A.D.E.      : http://www.arcade.cat/en/we-are-a-r-c-a-d-e/ + https://x.com/arcadescat
AtariAge                     : https://forums.atariage.com/
Dragon's Lair Fans           : http://www.dragonslairfans.com/
EMUline                      : https://www.emuline.org/
JAMMA +                      : http://www.jammaplus.co.uk/
JAMMARCADE.NET               : https://www.jammarcade.net/pcb-repair-logs/
The Lost Media Wiki          : https://lostmediawiki.com
RETROJAPAN.NET               : https://retrojapan.net/
SEGABits                     : https://segabits.com/
PinballNovice                : http://pinballnovice.blogspot.com/
Video Game Museum & Blog     : https://www.videogamemuseum.com/
Vintage Arcade Gal           : https://www.vintagearcadegal.com/ + https://www.instagram.com/vintagearcadegal/
Vintage Arcade Preservation  : https://forums.arcade-museum.com/




Online Auction:
---------------
AArcadeMarket                : https://arcadesmarket.com/
CCollectors Weekly           : https://www.collectorsweekly.com/games/arcade
Dealsan UK                   : https://www.dealsan.uk/search/Arcade+pcb
eBay                         : https://www.ebay.com/sch/i.html?_from=R40&_trksid=p4432023.m570.l1313&_nkw=Arcade+PCB&_sacat=0
HOT ROD ARCADE               : https://hotrodarcade.com/
k0m.net                      : http://k0m.net/c/38/arcade-jukebox-pinball
kleinanzeigen.de             : https://www.kleinanzeigen.de/s-arcade-pcb/k0
LiveAuctioneers              : https://www.liveauctioneers.com/en-gb/search/?keyword=arcade%20game&sort=-relevance&status=online
PicClick US/UK/AU            : https://picclick.com/Popular/arcade-pcb  +  https://picclick.co.uk/?q=Arcade+game  +  https://picclick.com.au/?q=Arcade+PCB
PicClick DE/ES/FR/IT         : https://picclick.de/?q=Arcade  +  https://picclick.es/?q=Arcade+pcb  +  https://picclick.fr/?q=arcade+pcb  +  https://picclick.it/?q=arcade+pcb
Goal Ad                      : http://goalad.com/annunci-italia/Arcade
Gumtree                      : https://www.gumtree.com.au/s-electronics-computer/arcade/k0c20045r500
Satakore.com                 : https://www.satakore.com/buy-arcade-boards-pcb-jamma-video-games-on-the-store,,86,,video-game-store.html
Sekaimon                     : https://www.sekaimon.com/s/pcb%20rare/-/all
UKVAC                        : http://www.ukvac.com/
WorthPoint                   : https://www.worthpoint.com/inventory/search?query=arcade
Zeppy                        : http://www.zeppy.io/individual.php?keyword=Arcade&country_code=gb



Arcade:
-------
Starfighters Arcade          : https://www.starfightersarcade.com




YouTube Channels:
-----------------
Andrew Welburn (Andys-Arcade): https://www.youtube.com/user/hal9k2k6/videos
Angelo Salese          (Kale): https://www.youtube.com/@LordKale4/videos
The Arcade Blogger           : https://www.youtube.com/user/TheMissileCommander/videos
Arcade Database    (AntoPISA): https://www.youtube.com/c/ArcadeDatabase/videos
Arcade Heroes                : https://www.youtube.com/user/theatarian/videos
Arcade Hollywood             : https://www.youtube.com/channel/UCu3y7h6PxWi075Bd24YhYEQ/videos
Arcade Jason                 : https://www.youtube.com/channel/UCODLTJtRV-jYvmTx9YScCVQ/videos
Arcade Vintage               : https://www.youtube.com/channel/UCGjuccy8aefO78iINpG_YFw/videos
ArcadeHacker                 : https://www.youtube.com/@ArcadeHacker/videos + https://www.youtube.com/user/edcross0/videos
Ariane Fugmann    (SailorSat): https://www.youtube.com/user/Soft15kHz/videos
Asociacion RetroAccion       : https://www.youtube.com/user/retroaccion0/videos
Belike36                     : https://www.youtube.com/user/Belike36/videos
Blueeyes Wolf                : https://www.youtube.com/user/1004BLUEEYES/videos
Bob Zed  (MAME News)         : https://www.youtube.com/@bobzed5447/videos
Brian Jones                  : https://www.youtube.com/@brianjones1404/videos
Caius Fabricius              : https://www.youtube.com/channel/UC4Y4x24dKMxJsIl5RYlR59A/videos
cam900                       : https://www.youtube.com/user/cam90001/videos
Carl                         : https://www.youtube.com/@cracyc00
Carl                 (crazyc): https://www.youtube.com/channel/UC8v1GHPkrZ3zA-qfSw2Cp2g/videos
City Game                    : https://www.youtube.com/@VictorCityGame/videos
Classic Arcade Repairs       : https://www.youtube.com/channel/UCqWerKWr-3yHUHeYyEDVBXg/videos
ClawGrip                     : https://www.youtube.com/@ClawGrip/videos
Corrado Tomaselli            : https://www.youtube.com/user/kold666/videos
David Haywood          (Haze): https://www.youtube.com/@mamehaze/videos
DEmul                (p1pkin): https://www.youtube.com/@p1pkin/videos
Devin Acker                  : https://www.youtube.com/@dacker23/videos
Ed Fries                     : https://www.youtube.com/watch?v=SFkUgivTsWI
flama12333                   : https://www.youtube.com/@flamaalt-hx9io/videos
For Amusement Only e.V.      : https://www.youtube.com/@flipperarcade/videos
Game Preservation Society    : https://www.youtube.com/channel/UC8D4j4oqi-xGwVwEBPZCn4w/videos + https://www.facebook.com/gamepres/
Golden Child                 : https://www.youtube.com/channel/UCUYZKjgDnLH-LMG9QFkVyHg/videos
Guru                         : https://www.youtube.com/@g4z-kb7ct/videos
Hammy                        : https://www.youtube.com/@HammyArcade/videos + https://www.youtube.com/user/fearwontlookinmyeye/videos
Insert Coin                  : https://www.youtube.com/@InsertCoinArcade/videos
James Wallace      (JWallace): https://www.youtube.com/user/wentworthvideo/videos
Jean-Philip Desjardins       : https://www.youtube.com/@jean-philipdesjardins1536/videos
Jorge Silva                  : https://www.youtube.com/user/diversoes/videos
kmg                          : https://www.youtube.com/channel/UChYMf0ySf8zY3hj6QuAR2Sg/videos
Luca Elia                    : https://www.youtube.com/user/LucaEliaDotCom/videos
Luke Morse                   : https://www.youtube.com/@lukemorse1/videos
MAME                (MAMEdev): https://www.youtube.com/channel/UC-ynwwJKlNQipcym48qPI3A/videos
MAME games video   (Dark Moe): https://www.youtube.com/channel/UCChWEScysESbFjXgdFkrVBg/videos
Matt Ownby                   : https://www.youtube.com/channel/UCD35viP6T3JWWzYb5JUTklg/videos
MESSDrivers                  : https://www.youtube.com/@MESSDrivers/videos
Mindstorm88                  : https://www.youtube.com/@bsl88k
Museo del Recreativo         : https://www.youtube.com/@MuseodelRecreativo/videos
myarcade80                   : https://www.youtube.com/user/myarcade80/videos
Norbert Kehrer               : https://www.youtube.com/channel/UCEMDZwwWnSFxXJxakcX828g/videos
OBS GAME RESEARCH            : https://www.youtube.com/@OBSGameResearch/videos
OldComputers ES              : https://www.youtube.com/@oldcomputerses/videos + https://www.oldcomputers.es/
Phil Bennett          (PhilB): https://www.youtube.com/c/PhilBennett3D/videos + https://www.youtube.com/user/LambShanks/videos
Ricky2001                    : https://www.youtube.com/user/ricky2001mf/videos
Roberto Fresca               : https://www.youtube.com/@robertofresca7658/videos
Roberto Fresca       (Robbie): https://www.youtube.com/user/hrode/videos
Ryan Holtz        (MooglyGuy): https://www.youtube.com/channel/UCVnS-HQL-pzFku5ZVCGnvBA
Ryan Holtz        (MooglyGuy): https://www.youtube.com/channel/UCVnS-HQL-pzFku5ZVCGnvBA/videos + https://www.youtube.com/@mogemulation/videos
rzero9                       : https://www.youtube.com/channel/UCdHA6OSOSFidweFuzBsTggg/videos
Sarah Purohit                : https://www.youtube.com/channel/UCmB_dHHhC2nF3XPaBdlo7Sw/videos
startaq                      : https://www.youtube.com/@startaq/videos
Stefan Lindberg              : https://www.youtube.com/@betalningsmottagaren/videos
System11                     : https://www.youtube.com/@system11yt/videos
Tim Lindner                  : https://www.youtube.com/user/lindnertim/videos
Tomasz Slanina          (Dox): https://www.youtube.com/user/tslanina/videos
Trevor Brown         (TrevEB): https://www.youtube.com/user/trevoreb/videos
TSCHAK                       : https://www.youtube.com/@tschak909/videos
Video Game Esoterica         : https://www.youtube.com/channel/UCn2pQB4jsCTLUtx2NIkCvUg/videos
Ville Linde                  : https://www.youtube.com/user/VilleDevs/videos
VirtuaIceMan                 : https://www.youtube.com/@VirtuaIceMan/videos



Emulators:
----------
CALICE                         : http://calice.emuunlim.com/
CannonBall - OutRun            : https://github.com/djyt/cannonball/wiki
Computer Space Simulator       : http://www.computerspacefan.com/NewCompSpaceSim2.htm + http://move.to/moose
DAPHNE LASER disc              : http://www.daphne-emu.com/
DEmul                          : http://demul.emulation64.com/ or http://forum.emu-russia.net/viewtopic.php?f=25&t=503&start=999
DICE                    (Adam) : http://adamulation.blogspot.com/
FinalBurn Neo                  : https://github.com/finalburnneo/FBNeo/releases
HBMAME                         : https://arcade.mameworld.info/hbmame/ + https://hbmame.1emulation.com/ + https://github.com/Robbbert/hbmame
Kawaks                (Razoola): http://cps2shock.emu-france.info/
Nebula                         : http://nebula.emulatronia.com/
nullDC                         : https://github.com/skmp/nulldc + https://code.google.com/archive/p/nulldc/
Mach3 Emulation                : http://www.scottwaye.com/mach3/index.html
MAME builds           (MAMEdev): https://github.com/mamedev/mame/actions   ('Sign in' + Click on 'CI (Windows)' and then on a MAME post with a green check mark to download the mame-windows-gcc-XXXXXXXXXXXXXXX file)
MAME builds          (Ashura-X): http://ashura.mameworld.info/nightlybuilds/builds.html
MAME versions   (Ben Bruscella): https://sourceforge.net/projects/mame/files/mame/
MAME32/64             (John IV): http://www.mameui.info/
Makaron          (Deunan Knute): http://dknute.livejournal.com/
MAMEUI + Forum       (Robbbert): https://github.com/Robbbert/mameui + http://www.mameworld.info/ubbthreads/postlist.php?Cat=&Board=mameui
MAME ARCADE 32/64    (Robbbert): https://arcade.mameworld.info/ + https://github.com/Robbbert/abcdefg
MAME Classic           (Mr Ric): https://mameclassic.mameworld.info/
MAME for Raspberry Pi OS       : https://stickfreaks.com/mame/ + https://github.com/danmons/mame_raspberrypi_cross_compile + https://www.ninermame.org/setup/building/raspibuild
MAME4droid            (Seleuco): https://github.com/seleuco/MAME4droid-Current/releases + https://play.google.com/store/apps/details?id=com.seleuco.mame4d2024&hl=en
MAME Haiku                     : https://github.com/haikuports/haikuports/tree/master/games-emulation/mame
MESS/MESSUI          (Robbbert): http://messui.1emulation.com/ + https://github.com/Robbbert/messui
Model 2                        : http://nebula.emulatronia.com/descargas.php
Project64                      : http://www.pj64-emu.com/ + https://github.com/project64/project64
RAINE                          : http://raine.1emulation.com/download/latest.html
Retro Danuart MAME XP (StHiryu): https://retrodanuart.com/mamexp/
SDLMAME for Mac OS X           : https://sdlmame.lngn.net/
SDLMAME for Ubuntu             : https://sdlmame.wallyweek.org/  +  https://launchpad.net/~c.falco/+archive/ubuntu/mame
SDLMAME (Ashura)               : http://ashura.mameworld.info/nightlybuilds/builds.html
Supermodel                     : https://github.com/trzy/Supermodel + http://www.supermodel3.com/Download.html
Unit3D Pinball                 : http://www.unit3dpinball.net/ + http://www.vpforums.org/index.php?showtopic=27016
VAntAGE                        : https://greg-kennedy.com/vantage/
Virtual Laserdisc Project      : http://my-cool-projects.blogspot.de/ (Matt Ownby)
WinArcadia                     : http://amigan.1emu.net/releases/

#




(c) 2000-2026  M.A.S.H
