=============================================================================
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.150

Astro Ambush
23rd August 2006: Guru - Unfortunately I forget what it is or who sent it! Update: Mystery solved. Thanks to Tony for the PCB. He thought it to be a rare Omori PCB. Looking at the PCB markings, it's obviously not. It's a somewhat rare-ish version of Scramble called Astro Ambush running on a PCB made by Falcon. Dox made a couple of early shots...

Auscom Host Invaders CD
22nd February 2005: Guru - Auscom Host Invaders CD just arrived.

Baseball Heroes
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 Team Europe to help pay for some boards (like Basket LC/Bootleg). Thanks to a donation from Rene Single.

Battalion
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 PCB's 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 thanks to Stefan Lindberg.

Beatmania
23rd February 2012: Guru - Some nice items arrived from Japan this week. One Konami Beatmania III Dallas i-button security dongle (beatmania III Append Core Remix).
23rd February 2012: Guru - Some nice items arrived from Japan this week. Some Konami Beatmania II security dongles (beatmania IIDX 5th Style...).

BeeZerk and Gambling Game
24th August 2012: Smitdogg - Bad A Billy sent us another gambling game from VLC, the makers of BeeZerk. I'm not sure what the title is.
23rd June 2012: Smitdogg - Bad A Billy loaned us a BeeZerk PCB. He posted some pics here: http://www.fileswap.com/folder/wtsVjupU/?i=0

Bingo
28th November 2010: Smitdogg - I picked up some broken Bingo board but it has a bad rom.

Bishibashi Champ 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).

Caribbean Boule
13th October 2012: Charles MacDonald - I recently acquired some PCBs from Sega's "Caribbean Boule" (1991), a roulette game for eight players with electromechanical components. It's an interesting mix of old and new technology spread out over thirteen boards: Eight satellite boards that manage player inputs, audio, and drive their own medium resolution monitor. A video board which generates low-resolution video for a rear-projection television that all players can view. A game board that has a huge bank of TOSLINK fiber optic connectors and UARTs to network everything together. Three smaller PCBs to drive an operator's control panel, lamps, and relays. I was able to get one of the satellite boards and the game board, but not the video board; however the video board is a standard Sega X-Board so there's nothing new there. Let's delve into the hardware: The satellite boards are labeled "System M1" (1990) but have no relation to Model 1 in terms of having 3D capabilities: * 315-5292 tilemap chip with 64K of video RAM and 512K of tile RAM. * 315-5294 video mixing chip and 16K of color RAM. * 315-5242 color encoder; outputs 5:5:5 RGB. * 315-5296 programmable I/O chip (x2). * 315-5338A I/O and serial comms chip. * 68000 with 16K work RAM. * Z80 with 8K work RAM and * YM3438 FM sound chip. Two daughterboards plug into the satellite board; one is a communication board with Z80 and 8K work RAM, 2K dual port RAM, 82C51 UART and TOSLINK connector. The other has the audio amplifier, anti-pop muting circuit and unpopulated areas to drive large solid state relays. All satellite boards are identical; I bought the one that had slightly different handwritten A-revision labels while all others were the original version. Not sure why just one satellite unit out of eight would need a bug-fix though. The design reminds me of Model 1 which came out a year later; the serial-to-memory I/O chip that I thought was introduced with Model 1 showed up here first and the old System 24 parts are re-used in a similar way. I always find these intermediate steps beteween hardware platforms intriguing and this board fills in some blanks for me. The game board is from 1989 and has no system designation. It looks a lot more like older Sega board designs compared to the satellite board: * 68000 @ 12.5 MHz, 32K work RAM. * Z80, 8K work RAM. * YM2151 FM sound chip, uPD7759 ADPCM sound generator. * 315-5338A I/O and serial comms chip. * Bank of 11 UARTs and TOSLINK connectors and * 8255 PPI for I/O. It seems to run the entire game and shuttle commands to and from the other boards. I think it controls the electromechanical components like the roulette wheel and various sensors too. I also got the 195-page operator's manual that has more wiring diagrams and illustrations than one could imagine. No schematics of course. The video board seems to not do much; hardly any of the sprite ROMs are populated. It uses the same communication board as other X-Board games. The sound hardware isn't used and no sample or Z80 ROMs are specified in the ROM list. Going by the diagrams it connects to a RGB to S-Video converter, as the projection monitor only has S-Video input. Throwing in an entire X-Board just to drive a standard resolution display seems like overkill, but it's the only thing with a fiber-optic comms board Sega made at the time. Can we emulate this game? Well we still need the video board ROMs dumped, but perhaps communication can be faked so that the rest of the system works. Peformance should be an issue with 9 displays, 11 68Ks, and 17 Z80s. I can't even begin to imagine how incredibly costly this thing must have been when it was new. I guess there is good money in gambling games because it must have cost a small fortune.

Catherine Wheel
3rd September 2005: f205v dumped Catherine Wheel (Gamebar).

Champion League
15th May 2010: f205v dumped Champion League (Playmark 1998).

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)

Cherry Master X
11th January 2009: Roberto Fresca - Added a weird version of Cherry Master. The game is hidden into a Tetris game. Seems to be designed for locations or countries where gambling games are/were not allowed. The owner swear that the game boots in Tetris mode, but I got it booting in Cherry Master mode. Even when the gambling part is properly emulated, I flagged the game as not working till can figure out how to switch between games. Thanks to Kale that fixed the rom banking.

Cybersterra
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.

Coccinelle
23rd December 2006: f205v dumped Coccinelle (set 2) (Model Racing 1982).

Cosmic Invaders
27th January 2010: Smitdogg - We got a Cosmic Invaders (E-Coin) PCB thanks to MrGoodwraith. This one was produced by E-Coin. Andrew Welburn has a different Cosmic Invaders PCB that he will hopefully be dumping at some point but it isn't the E-Coin version and uses different size roms.

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.

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 Dou Di Zhu
22nd December 2008: Guru - I've actually dumped Crazy Dou Di Zhu. Watch Luca's page for more on that.
20th July 2008: Guru - Crazy Dou Di Zhu arrived from China. This is a mahjong game, thanks to bnathan and Dyq.

Crazy Dou Di Zhu II
23rd December 2008: Guru - I've dumped Crazy Dou Di Zhu II.
20th July 2008: Guru - Crazy Dou Di Zhu II arrived from China. This is a mahjong game, thanks to bnathan and Dyq.

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
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!

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).

Dinosaur King
11th May 2012: Smitdogg - Mark F. got Dinosaur King.

Disco Fever
8th May 2005: f205v dumped Disco Fever (5 balls).

Dong Fang Shen Long (Oriental Dragon)
22nd December 2008: Guru - I've actually dumped Dong Fang Shen Long (Oriental Dragon). Watch Luca's page for more on that.

Drummania 10th Mix Multi-Session
23rd February 2012: Guru - I've completed the dump of Konami's Drummania 10th Mix Multi-Session although you shouldn't expect to see any of the system 573 multi-session games emulated at a playable level any time soon.

Drum Mania V3
31st May 2012: Smitdogg - Got Drum Mania V3 disc.

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.

Exotic Dream
25th February 2005: Guru - Exotic Dream arrived, purchased by Randy from a PCB Shop. Thanks to the donators for keeping up the support.

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

Fire Hawk II
18th May 2013: Smitdogg - We got Fire Hawk II by ESD. But it turns out it's just another one of the million names Afega came up with for Guardian Storm. It's the China region version of Guardian Storm, basically. 3 roms didn't match so they might have tweaked out a lot of changes, I don't know.

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

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

Galaxy Force
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.

Gambling Games: A-Plan and 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).

Ggot Bi Nyu
6th June 2011: Guru - Some items arrived: Ggot Bi Nyu 1997 Barco. Thanks to gp-lee.

Ggot Bi Nyu special
6th June 2011: Guru - Some items arrived: Ggot Bi Nyu special 1997 SHINWHAJIN. Thanks to gp-lee.

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 Complete
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.

Golden Tee Fore Series
10th May 2009: Smitdogg - The remaining AT90S2313 chips have also been processed from Golden Tee Fore (#179, 181, 182, 183 and 184).
16th April 2009: Guru - The first of the decapped chips arrived today, for example the AT90S2313 for Golden Tee Fore Series Chip labelled 'G44-US-U(C)2003'. They were successfully decapped and the data extracted from the chips.

Gradius (Bubble Memory Version)
28th July 2007: Guru - The rare Konami's Gradius (Bubble Memory Version) PCB arrived yesterday from my top secret Agent in Japan. It's the Bubble Memory version of Konami's 'Gradius'. I had it air-expressed over to me due to the fragile nature of this system. It works great! It will probably be difficult to dump the bubble memory but I'm hopeful there is a way. So far I've dumped all of the ROMs/PROMs and documented the hardware. Special thanks to Vas Crabb for donating a massive US$800 so we could snap this up!

GTI Club - Corso Italiano
22nd December 2012: Ville Linde - GTI Club - Corso Italiano: Konami Viper hardware. Still has some severe texture problems. Not playable (hangs after car selection) (http://www.system16.com/hardware.php?id=584&page=1#888). First look at: http://www.youtube.com/watch?v=-7dzooq0G28

Guitar Freaks V3
31st May 2012: Smitdogg - Got Guitar Freaks V3 disc.

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.

Happy Fish
0.144u5: Lots of s3c24xx changes for future Happy Fish 302-in-1 and Palm Z22 (MESS) drivers [Tim Schuerewegen].
2nd June 2011: Smitdogg - BrianT got an obnoxious Happy Fish 2.0 board. I think it's a 302-in-1. Update (R. Belmont): Happy Fish 2 is a Chinese 302-in-1 MAME ripoff running on a Samsung S3C2440A (ARM9 system-on-chip) at 400 MHz. Googling around it seems people are not very impressed with how well it runs. We already support the S3C24xx series, so if there's not protection and so on it might be easy to get working. Just very slow.

Hide and Seek
23rd February 2012: Guru - Some nice items arrived from Japan this week. Hide and Seek (slot/poker).

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

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

Joy Stand Private
10th October 2005: Guru - Joy Stand Private arrived from Japan. Purchased by the Dumping Project Team.

Jumanji
25th November 2009: Filippo dumped Jumanji (International Amusement Machine).

Kkot bi Nyu
4th December 2012: Guru - A lack of updates here does not mean I'm doing nothing. Here's a list of the dumps since the last update: Kkot bi Nyu etc.

Kono e-Tako
4th May 2013: Smitdogg - We dumped Kono e-Tako.

Lacucaracha
29th September 2004: Tomasz Slanina - And now for something completely different ... (Pictures from Lacucaracha)

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.

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
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 Cafe Paradise
13th January 2009: Guru - A few packages arrived yesterday. From Japan we have Mahjong Cafe Paradise. Thanks to Dyq.

Mahjong Gorgeous Night
13th January 2009: Guru - A few packages arrived yesterday. From Japan we have Mahjong Gorgeous Night.

Mahjong Hanagokou Bangaihen SP
13th January 2009: Guru - A few packages arrived yesterday. From Japan we have Mahjong Hanagokou Bangaihen SP. Thanks to Dyq.

Mahjong Ougon No Pai
13th July 2005: Guru - Mahjong Ougon No Pai (Dynax 1991) received in a box with a pile of Dynax Mahjong games. Big thanks to BNathan for these.

Mahjong PCBs
21st February 2006: Guru - 6 Mahjong PCBs arrived, thanks to BNathan.

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.

Megatouch MAXX, MAXX-2K, MAXX-2K Plus Upgrade Kit...
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.

Megatouch MAXX Jade
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.

Megatouch Maxx Jade 2
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.

Megatouch Super 5000
2nd March 2010: Smitdogg - Thanks to Hurray Banana we got an upgrade kit for Megatouch Super 5000 (3000-00-01-R51). This is the first time I've found kits with rom updates. So an obvious question is, which other Megatouch games require a rom swap. I don't know the answer.

Megatouch XL
6th February 2010: Smitdogg - We got a motherboard for Megatouch XL.

Megatouch XL 5000
14th April 2010: Smitdogg - Thanks to TrevEB we got a full Megatouch XL 5000 (3000-00-01 R5B) kit.

Megatouch XL 6000
29th May 2010: Smitdogg - We got another version of Megatouch XL. It has PG3001-00-01-R02 printed on the disc and came with instructions for XL 6000, so I'm not sure yet if it's actually an alt version of the first XL release or if it's actually XL 6000. Probably the latter. Edit: It is XL 6000. It adds these games: Hooter, Trip Flip, Tennis Ace, Fast Lane, 3 Blind Mice, Super Route 66 and Route 66.

Megatouch XL Extreme
2nd March 2010: Smitdogg - Thanks to B. Sparks we got a disc for Megatouch XL Extreme (3000-00-01 R5E). And thanks to dopefishjustin we got an upgrade kit for Megatouch XL Extreme (3000-00-01 R5B). This is the first time I've found kits with rom updates. So an obvious question is, which other Megatouch games require a rom swap. I don't know the answer.

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 PCB's 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.

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.

Ms. Pac-Man
1st June 2012: Smitdogg - Next up in the box, well from the initials written on it it's some form of Ms. Pac-Man but hardly anything matches currently dumped roms so.

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.

Multigame ID
20th April 2011: f205v, Smitdogg and The Dumping Union dumped Multigame ID (Elsy)

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.

Otomedius
7th December 2012: Smitdogg - We got Otomedius by Konami, which is sort of a boobied-spiritual successor to the Gradius and Parodius series. It has had some sequels/ports to consoles but for whatever reason the original arcade version is very hard to come by. There is some warez rip loader version floating around the webs but obviously that isn't suitable for MAME. For MAME we need a 1 to 1 copy of the hard drive, a BIOS chip dump and the full specs. It runs on a PC based system put together by Konami.

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 Team Europe so they could pick up some really old and strange PCB's from Austria: World Cup '85 and Palla Volo.

Paradar
18th September 2007: f205v, Corrado Tomaselli and Gnoppi dumped Paradar (Italy).

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

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.

Police Trainer 2
4th June 2012: Smitdogg - We got Police Trainer 2. My supergun doesn't fully agree with the hardware so the video quality is in and out but it's a lot better than nothing.

Print Club
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.

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

Ring Riders
25th October 2011: Smitdogg - We got Ring Riders.

Rolling Extreme
20th May 2013: Smitdogg - CaH4e3 dumped the ssop70 chips on my Rolling Extreme board, so the dump is now complete. 
19th October 2010: Smitdogg - Mark F. donated a Rolling Extreme board. Guru has a broken one already but it uses roms he can't dump yet. It might be possible to get a good dump from it and it could turn out to be a different revision from this one, we're not sure yet. I could use some help with current acquisitions if anyone can help out. Edit: Thanks for help so far from ranger_lennier and D. Beneke.
20th September 2006: Dumping Project - Purchased Rolling Extreme (Gaelco). Thank go to the fivepeople who recently donated after the last request. A special thanks goes to Kevin.
13th July 2006: Guru - I received another PCB that Brian T. bought on eBay several months ago. The game is called Rolling Extreme by Gaelco. Unfortunately, I won't be dumping it. Here's why... It's a powerful beast using some 3D hardware comprising TMS 320C82 DSP, Chip Express D3PLUS-4 Graphics Generator, 2 FPGA's, a large amount of RAM and a few high-capacity maskROMs... and of course, everything is surface mounted. Most of the ROMs I can dump but there's a couple of SSOP70 ROMs (similar to what is used in the newer neogeo carts like MS5 and SVC and newer Playmark PCBs) which are 256Mbit or 512Mbit ROMs with 70 legs. These probably hold the graphics, which are connected to the [documented] TMS320C82 DSP. There is only 1 programmer that has support for those ROMs and unfortunately it's not one of mine. To fully dump this board would require purchasing that specific programmer (AU$1350) and the adapter (AU$350). That's probably too much to justify for one fairly average 3d skateboarding game, although there are probably more PCBs in the future that would use these similar ROMs. I certainly can't justify that myself for just one game that is unlikely to be emulated anyway (or at least emulated at a playable speed), so it will probably remain undumped forever unless someone wants to donate about au$1800 specifically for this purpose. Bear in mind that as I mentioned above, the newer Neogeo carts and Playmark single board games also use the same SSOP70 ROMs. So if purchased, this hardware could be used to dump most of the newer original Neogeo/Playmark games, if the Dumping Project were to acquire them. Oh, almost forgot to mention, in case you were wondering, the PCB is dead. There's a small plastic fan in the housing (similar to the crappy fans used on cheap PC 3D video cards) that has seized and the poor PCB cooked itself. The top of the large graphics chip is scorched and under the PCB, the green is a brownish-green colour directly under that chip too.... tell-tale signs of over-heating. That would have happened while the game was being operated on-site, so I'm sure the eBay scumbag who sold it as 'untested and sold as-is' would have known that too... hmmmm.
10th March 2006: Dumping Project - We made some great buys recently with the funds donated so far: Rolling Extreme (Gaelco, still in post if it makes it).

Roulette
20th September 2011: Roberto Fresca - We're working on another roulette game. Still preliminary, but at least we got a disclaimer and a test screen.

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.

Skins Game Tournament Edition
12th July 2012: Smitdogg - MrSinister sent us hard drive dumps for Skins Game Tournament Edition.

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.

Seishun Colorful Highschool
25th September 2006: Guru - Seishun Colorful Highschool arrived a few days ago from Japan with the latest PCB shipment. Thanks to Dyq and BNathan for the funds used to purchase most of the Mahjong games.

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

Smashing Drive
19th April 2013: CaH4e3 - Finally Guru dumped Smashing Drive, thanks! Still waiting for the second to last Hikaru dump - Star Wars Pod Racers!  There is some issues still, we are working on it.
19th July 2011: Smitdogg - We got Smashing Drive, one of my favorites...

Space Fighter I+II
18th February 2005: Guru - Space Fighter I PCB + Rom Upgrade for Space Fighter II arrived from Japan.

Stackers
12th September 2011: Smitdogg - We have won Tecmo Stackers with recent donations. It's on the way.

Star Horse Progress
8th July 2012: Smitdogg - We got Star Horse Progress, part of the long running (haw) gambling series. Progress is pretty much from the middle of the Star Horse series, which has been going on for more than a decade now. The newest one came out last year. Youtube: http://www.youtube.com/watch?v=-Xhp-Nmt_Ho

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 to make it look official even after it's taken apart is baffling, if it really has no direct ties to IGS in Taiwan.

Stunt Typhoon Plus
18th December 2012: Smitdogg - ShouTime got Stunt Typhoon Plus, an extremely rare racer from Taito. I don't have internal pics yet. From the outside it looks like Type Zero.

Super Triv
17th April 2012: Smitdogg - We got an unknown/undumped version of Super Triv.

Tekken 6
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.

Taisen Hot Gimmick Mix Party
26th March 2012: Smitdogg - We got Taisen Hot Gimmick Mix Party.

Taiyojidoki and Success
8th December 2012: Smitdogg - We picked up a very rare medal game called... I don't know what. It's by Taiyojidoki and Success.

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

Tatsunoko Vs. Capcom
29th March 2012: Smitdogg - gamerfan got us a boardset of Tatsunoko Vs. Capcom. The hardware is an alteration of the Wii. It's a shame they didn't release more games to this hardware for arcades such as Marvel Vs. Capcom 3. All the hard work was done already and it was just abandoned. The game appears to be stored in a single flash rom on the back of the motherboard and there is a chip on the front side that contains fonts and other things according to a quick Google search. It will be a while before it's running in MAME but you can find copies for consoles pretty easily. It's a fun game if you're into fighters. The gameplay is similar to Marvel Vs. Capcom 2.

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

Thrill Drive 3
6th June 2011: Guru - Some items arrived: Thrill Drive 3 (PS2-based with 40GB HDD). These PS2-based arcade games are failing quite a bit now and it's usually the PS2 motherboard that's at fault, along with the HDD. Almost impossible to repair and not easy to find another one working since they are the Japanese NTSC/J version. It's a good idea to not buy anything like this if you plan to run it privately in your home. My Sega Rally 2 built in 1998 is still going strong.

Trivia R Us
24th July 2012: Smitdogg - We got Trivia R Us. It looks a bit interesting despite the cheese. It's a trivia game running on a cherrymaster style board, which works out since cherry master button layouts could convert pretty well to trivia games. Additionally the board can switch between using buttons or a touch screen. Pretty cool. I thought it was old because the price was super cheap but apparently it's from 2009.

Tuning Race
24th August 2011: Smitdogg - Mark F. lent out a board set of Tuning Race.

Rizing Ping Pong
9th December 2012: Guru - A few months back I loaned a very rare Taito Type Zero game (Rizing Ping Pong - Taito 2002) from my good buddy Joey. I've just dumped it today and documented the hardware.

Ultra Champion
6th June 2011: Guru - Some items arrived: Ultra Champion 1995 Amed. Thanks to gp-lee.

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

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

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 (Free Enterprise Games)
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 something by 'Free Enterprise Games' on a Konami Scramble PCB.

Unknown (Elettronica Video Games)
31st January 2009: Pierpaolo Prazzoli - I've started working on an Italian prototype game found by Yoshi, a new MAME arcade operator friend. It was developed by Elettronica Video Games (or Electronic Devices). What is strange about this PCB, it's that it appears to be hand-made!

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 Amigo/Konami
18th May 2010: Smitdogg - We dumped and unknown game on Amigo/Konami Galaxian hardware.

Unknown gambling games (Burg Automaten 1995)
21st November 2009: Smitdogg - Team Europe got sn 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 poker game by Meyco
1st May 2010: Smitdogg - Siftware dumped a poker game by Meyco.

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 Seta
3rd October 2009: Smitdogg - Team Europe dumped an unknown Seta game (pic attached).

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

Virtual Pool
23rd August 2010: Smitdogg - We won Virtual Pool. All the money is spent and then some so if you feel the urge to donate, don't fight it.
21st August 2010: Smitdogg - I sold more dumped stuff so we have the money to bid on Virtual Pool now. I'm kind of up in the air about it, leaning more toward getting the others for decapping since we will be probably grandpas by the time it's running full speed but ranger_lennier wants Virtual Pool more and he's our biggest contributor and money talks.
19th August 2010: Smitdogg - I found out the Virtual Pool game runs on GT Fore hardware. I thought it was older than that... GT Fore hardware might not be emulated for a long while, so that makes it less attractive. On the other hand, it's rare as hell and might be our last shot, especially if it uses a hard drive.
19th August 2010: Smitdogg - There is a super rare Virtual Pool cab up for sale that we can pick up and dump if we get donations. Virtual Pool was made by Incredible Technologies and never went into full production. It's essentially a prototype were only a few were made and this might be our last shot at it. The Virtual Pool is starting at $500.

Warzaid
21st November 2009: Guru - I got hold of a Konami Warzaid cart and figured out how to clone it so it works on a real Konami Viper PCB. Still can't image it yet for MAME since CHDMAN can't copy some of the hidden data that the hardware looks for (the existing CHDMAN copy in MAME won't work on real hardware). But it's secured anyway.

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.

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 Team Europe so they could pick up some really old and strange PCB's 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).

Wyvern F0 (Taito 1985)
2nd September 2010: ShimaPong - I played this game just one time a long time ago and wonderd that an objects in air 'float' like a hologram. This game uses 2 CRTs and half-mirror. One CRT displays ground objects and other displays air objects and there are merged via half-mirror. Hologram effect is done via this system without 3D-glass. It is easy implimented by existing parts but an object reflected on half-mirror has semi-transparent and the color is mixed (for example, 'red' object flies over the 'blue' sea has 'purple' color). Also this game uses MSM5232 sound chip. Fantastic sound is provided by it. But sound emulation may be incomplete like other games (fstory, equites). Don't worry, OST is already released and some hacker will attempt to use MAME sample system to play it! The contents of the game is... 'Xevious' like. Player fighter has anti-air and anti-ground shots (so used 2 buttons), plus 'loop' button. When you use 'loop', the fighter has invincibility and back-scrool but it uses an energy (it recoveries automatically by slow degrees). And 2 power-ups, 'J' (Little-J) appears when you destroy J-doom and provides wide-range shooting and speed-up. 'B' is the barrier.
1st September 2010: Guru - Yep that's right, Wyvern F0 and Bygone are now secured. Note that the 2 PCBs shown in the above pic cost (the Dumping Union) US$6000. I loaned Smitdogg the money (I'm not a charity, people) and my Japanese contact bought them for us. This was a serious effort because the Wyvern F0 was sold as a whole cab which weighs a million tons. The cab had to be carted 1000 kilometers across Japan, which itself cost about $300 in fuel and tolls. I've sold at least US$1500 in PCBs via Smitdogg on eBay to help recover some of the money but the DU is in serious financial debt because of these purchases which of course will affect future DU purchases.

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.

ZunZun Block
26th March 2009: f205v dumped Zun Zun Block. This is an original Taito PCB, there are 3 PROMs on it.
23rd March 2009: Guru - ZunZun Block (Taito, 1979) arrived from Japan.




DRIVERS:

Anyworks
15th April 2012: Smitdogg - We got a system board that appears to be a venture between Sega and Anyworks (guess). I don't know much about Anyworks aside from they have collaborated with Atlus in recent years and dabbled in arcade games. The board appears to be a motherboard. There's an SD card slot that could fit games of several gigs but I'm not sure if it was used for that. The one rom chip on the board is huge (~132 MB). Which would be massive for a bios, so it could be a full game in there, like a medal or puzzle game. We'll find out shortly.

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
23rd February 2012: Guru - Some nice items arrived from Japan this week. Gahaha Ippatsudou 2 (Namco System 10).
23rd February 2012: Guru - Some nice items arrived from Japan this week. Tsukkomi Yousei Gips Nice Tsukkomi (Namco System 10).
23rd February 2012: Guru - Some nice items arrived from Japan this week. Taiko no Tatsujin 4 (Namco System 10 ROM board and CD). Note the CD for Taiko no Tatsujin 4 was dumped by Team Japump a few days ago.
23rd February 2012: Guru - Some nice items arrived from Japan this week. Taiko no Tatsujin 2 (Namco System 10 ROM board and CD). Note the CD for Taiko no Tatsujin 2 was dumped by Team Japump a few days ago.
23rd March 2009: Guru - Kono e Tako (Mitchell, 2003, on Namco System 10) arrived from Japan.
4th February 2009: Guru - GAHAHA Ippatsu-dou (Namco System 10) arrived. Thanks to M.F. for the donations.
27th November 2008: Guru - Taiko No Tatsujin 4 (Namco System 10) arrived this week, as part of our effort to clear out more of the stored items in Japan.
27th November 2008: Guru - Taiko No Tatsujin 5 (Namco System 10) arrived this week, as part of our effort to clear out more of the stored items in Japan.
28th May 2008: Guru - A couple of people asked about the Taiko No Tatsujin 6 PCB, so here's a few pics of it... The actual PCB is just your regular Namco System 10 job, which you can see here http://www.system16.com/hardware.php?id=540. There's an extra I/O board bolted to the main board used for RCA sound output and of course for controlling the drums. The game is _very_ strange and funny, especially the 'sausage men' or whatever the hell they are! I assume this thing would be very loud in an arcade. A cabinet pic is here http://en.wikipedia.org/wiki/Image:Taikonotatsujin.jpg
25th May 2008: Guru - A large box containing a complete Taiko No Tatsujin 6 (Namco System 10 with DVDROM) arrived recently from Japan via my contact. Unfortunately that box wiped out most of our postage funds so we're back to storing stuff in Japan again until we can get enough funds to post another box out to me.
18th March 2006: Guru - An unknown System 10 ROM board (possibly Taiko no Tatsujin 3) arrived late yesterday from Japan.

Namco System 12
6th June 2011: Guru - Some items arrived: Techno Drive (Namco System 12 hardware). Bought on ebay for too many dollars (R Belmont and I paid for it).
26th March 2011: Smitdogg - We picked up Techno Drive for Guru. It's a rare System 12 racing game with lots of minigames. gregf is crudely sketched on one of the instruction cards.
15th August 2009: Guru - Another package from Japan arrived with Attack Pla-Rail (Namco System 12), thanks to Team Japump.

Namco System 23
4th April 2013: Smitdogg - We got one of the last remaining undumped Namco System Super 23 games, Angler King.

Namco System 256
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).
20th March 2010: Guru - A couple of controversial items arrived here yesterday... Thanks to my good buddy Joey for the loan of a Time Crisis 4 main unit. Time Crisis 4 runs on Namco Super System 256. The main board appears to be identical to the regular System 256 but it won't run System 256 games so the actual difference is unknown. There's a small LAN board at the right and an extra sound board plugged in on the left side at the front (both are optional, it works without them too), plus a 40GB HDD sitting at the back. All the pieces are bolted to a single piece of wood which is especially nice because it has a little handle cut out at the top of the board for dumpers to easily carry it. The small board at the front in pic #1 is the I/O board. It contains only 1 microcontroller. However the game will boot with the regular Namco System 246 I/O board. I've done a reference video and that will appear on youtube soon. Note that this is not an emulation target, at least not yet and possibly not for several years.
18th March 2006: Guru - A Magic Gate security dongle (Capcom/Banpresto 2003 - Namco System 256 hardware) arrived late yesterday from Japan.

NAOMI / Atomiswave System
23rd February 2012: Guru - Some nice items arrived from Japan this week. Shakatto Tambourine! Motto NoriNori Shinkyoku Tsuika!! (2K1 SPR)(GD-ROM and security PIC).
1st July 2011: Smitdogg - We got Hustle Tamaire Kyousou (Sammy).
28th June 2010: f205v got Touch De Zunou (Rev A) (Sega 2006).
3rd April 2010: Alex's Rom Dumping Project - Last month i got Rambo for Sega Lindbergh, and i started to want to play it, so this pushed me to do the rewire, even that, i was out of time as allways. Rambo is a good example of an arcade game, its really short, just 5 levels, but its intense, seccond level (the jungle) is amazing, this is an example about a good arcade game that would be a crappy console game, i think that this is the reason why still hasnt been ported to consoles.
20th April 2009: Guru - I'm still steadily going through the NAOMI ROM carts here and dumping a few more each day. Today's dumps include.... Quiz Ah My Goddess.
17th April 2009: Guru - I have been trying to get Makaron working for some time and finally figured out the missing pieces and got it booted. The end result is 'Capcom Vs SNK 2 Mark Of The Millennium 2001' is dumped.
27th November 2008: Guru - Victory Furlong Horse Racing (Atomiswave cart) arrived this week.
20th July 2008: Guru - Quiz Oh My Goddess (NAOMI cart) arrived. Thanks to a couple of people that donated some postage bucks, another package arrived from Japan a few days ago.
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.

PGM System
23rd December 2008: Guru - Dragon World EX (IGS 2000, PGM cart) just arrived. Thanks to Smitdogg.
27th April 2004: Guru - Received Chuugoku Ryu 3 SP PGM cart from Randy, Gin, Smitdogg and many Mameworld donators.

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
1st June 2010: Alex's Rom Dumping Project - One week again, i bought a Taito Type X+ Motherboard with Half Life 2 Survivor 2.0. The plan, was to have a look inside the motheboard to fill my curiosity and of course, dump the game as well. Well, looking at the board outside, it looks like a Type X2 motherboard with a sound card addon and a Type X1 HDD plate instead of a Type X2 HDD plate. So taking this in mind, i thought that i was buying a Type X2 board at all... Auction was for a board without dongle, so i also thought that they did the same Taito previously did with Aquarium Age Alternative Taito Type X2 Satellite game: Taito's loader is present on the HDD, there is a crypted partition as well, but there is no dongle at all, i also got a Street Fighter 4 HDD that came this way and its not a bootleg at all. Looking at the stickers, we can see 1GB memory (both regular typex2 and typex1 boards came with 512mb) and P4 2.8GHZ. Well, at this point i didnt noticed about the 9800 PRO gfx card on the sticker, that never was released as PCIe card. So once board arrived, i noticed that it was a Type X1 board into a Type X2 case, good thing is that the case is smaller, hardware is sigly better than Type X1 and PSU is 120v-220v auto switching (regular typex1 board came with a 120v-220v PSU as well, but there is a switch to choose the mode, rumor says that some Irish operator fried some Type x1 psus pugging the board to 220v directly without change the switch). Well, first thing i did was to try a Taito Type X1 game, as board seemed 100% the same to my eyes. I plugged KOF 98 UM and game booted, but sound wasn't working at all (yes, i removed the sound blaster live card that came with the board), i didnt tried the game with the sound blaster live card plugged at all, cause its impossible that KOF 98 UM has drivers for this card. Maybe there is some jumper to enable or dissable the on board sound card (this is my guess), but was tired about this thingle, so i decided to sell it without waste more time with it once i noticed its a Type X1 and not Type X2 board at all. PC hardware is allways boring... On a side note, they just added a sound blaster live audio card to the board, cause Half Life 2 Survivor uses surround, and onboard sound card, seems not capable to handle it. Another interesting thing is that the board won't run with regular io boards (atleast with the 3 sega io boards i got at home), but it plays pretty fine with Taitos own io board. This is where the JVS standart serves for... About the dongle, this game is really really interesting, it has a crypted partition aswell, but its only 50mbs, there is a loader there that downloads the game from Taitos webserver and launches it once downloaded (you dont have to download the entire game every time you plug the board, update files get downloaded once and stored at the 2nd partition of the HDD (it fits there unencrypted)) what i really wonder is if the game cames from factory with any data on this partition at all... Not much more to say, game looks pretty nice (yes, its nothing new but Half Life 2) and it can be launched on regular computes (even input works with keyboard and mouse). Long life to cheap arcade ports from PC. Some pictures of the game running on the real hardware.

Tour Vision
12th December 2011: ClawGrip - TourVision PC-Engine based JAMMA PCB: PC-Engine based arcade board from the Spanish company TourVision. Two known hardware revisions, one with a sub-board with the PC-Engine chipset and the other as an integrated PCB. One TourVision cartridge (Taito SCI), the inner PCB and ROMs are protected with an epoxy block. As Guru discovered by removing the expoxy from my "Final Match Tennis" TourVision cartridge, inside there is a regular PC-Engine Hu-Card. TourVision cartridge edge connector and the adapter, designed by Charles McDonald for dumping the cart as a regular ROM. It seems that some carts were released without the resin. Using it I've finally dumped the SCI cart, I'll try to get some more carts for dumping. Thanks to Charles McDonald for all his work and AUMAP for loaning the SCI cart.
4th March 2005: Guru - Tour Vision PCB and two carts (Final Match Tennis and Formation Soccer (Human 1990)) arrived. Thanks to the good boys at the Italian MAME Forum.
1st August 2004: Guru - Well, the cart I mentioned 2 days ago isn't directly dumpable. The top of the cart called Final Match Tennis, and runs on a systems called Tour Vision. After removing the the bottom cover, there was blue resin. My trusty heatgun crumbles it like brittle toffee when heated. Removing the top white plastic cover reveals another plastic cover which seems to say on it 'HUCARD' and some Japanese text. Removing the 'HUCARD" cover and the rest of the blue resin reveals the truth. I've also removed the black resin from one of the IC's. It can be clearly seen that there are 2 embedded chips mounted here. What they are I can't say, they may be simple EPROMs, or something more complex such as a microcontroller with internal code, or even both EPROM and MCU. After discussing this with someone, it seems like it could be dumped from the edge connector (without the need to open it up) with some simple main board tracing (the connector isn't directly compatible so tracing is required to make an adapter), because it appears to be very similar to a TG-16 HuCard cart. Of course, I couldn't say that until after I opened up the epoxy block and discovered what was inside. And now that's not possible since this cart is no longer working. Either way, this thing can't be dumped. But if I got hold of another cart and the main board, it could get very interesting, now that we know what is inside is just a modified HuCard.
30th July 2004: Guru - A strange epoxy-encased cart called Final Match Tennis arrived from ClawGrip.

Virtual Reality
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:
=============

Atari Anti-Aircraft
1st May 2013: AdamB - DICE 0.6 has been released! New in this version: Support for Atari Anti-Aircraft and Exidy Attack. Color overlay simulation in Breakout. Improved simulator core algorithm that increases performance in several games. Improved sound in Gotcha.

Atari Breakout
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!

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

Desert Patrol
28th January 2007: Mr. Do - Addy cleaned up Desert Patrol artwork for Gregf.
3rd August 2006: Dave Widel - I've been working on dumping GregF's Desert Patrol board and I was able to pull the image data out of one of the roms. Unfortunately the other image rom seems to be dead, I've been unable as of yet to coax any info out of it. It uses discrete logic instead of a CPU, there's no hope of this being emulated for a very long time so don't get your hopes up of seeing this thing in action.

Exidy Attack
1st May 2013: AdamB - DICE 0.6 has been released! New in this version: Support for Atari Anti-Aircraft and Exidy Attack. Color overlay simulation in Breakout. Improved simulator core algorithm that increases performance in several games. Improved sound in Gotcha.

Gotcha
1st May 2013: AdamB - DICE 0.6 has been released: Improved sound in Gotcha.
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

Le Mans
11th September 2009: f205v dumped Le Mans (Atari 1976). Note: I need help in identifying the 3 PROMs.

Midway 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!

Outlaw
7th September 2009: f205v dumped Outlaw (Atari 1976).

Pong Doubles
15th September 2012: AdamB - DICE 0.4 has been released! Changes in this version: Two new games supported: Stunt Cycle and Pong Doubles. Minor bug-fixes in several games. Enjoy!

Rebound
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
11th January 2008: AdamB - Had a bit of free time recently, so I was able to get a few things done: 1) Got Atari Rebound working fairly easily, there were only a few new chips that needed to be simulated. Pretty fun pong variation. 2) Also hooked up audio to both games, although it's not perfect yet. 3) Finally I added rom loading support, we'll see if that gets used on any games in the future.

S-Plus (S+)
27th January 2008: Jim Stolis - S-Plus Slots: I decided to mess around with another IGT machine called the "S-Plus (S+)". This machine is strictly a mechanical slot machine with no real video. The hardware is similar to the PE+ machine but lacks video and contains optics for the reels. There is a bunch of 7-segment display for some form of output, and interesting navigation procedures to view various operator values. Once I got a skeleton driver working, I started to hookup the inputs and the 7-segment displays. After much work, I finally got the display to show the first error code. This is an error 61 or "Bad CMOS RAM". Sound familiar? It should, the PE+ generates this error the first time you boot the machine with empty RAM and empty EEPROM data. When I saw this error code come up, I knew I was on the right track. The proper procedure to recover from this error is to open the door and press the Self-Test button. After doing that, the follow error code appears. This is an error 61-1 which represents "Game Data Reset". What needs to be done at this point is to close the door and turn the jackpot reset key. Doing that produces the next error code, 65-3 which is "Game Options & Meters Not in the Most Current Format". This can be corrected with a Set Chip, or you can just turn the jackpot reset key and have it overwritten. I chose to allow the machine to overwrite the values and turned the jackpot reset key. A new display appears with the "0" flashing as the CMOS data is reloaded. Now the next error code appears, 65-1 or "Bad EEPROM Data". Once again a error message I've seen on the PE+ machine. To resolve this you must open the door and press the self-test button. Finally, the last screen appears which should be error free, however I get the following code, 41 which says "Reel 1 Tilt". This means the machine was unable to process the first reel properly. So this is where I'm currently at today. From this screen I can go into all the operator self-test screens and play around with the machine settings and listen to the built-in sounds, but I get held up eventually trying to activate the reels. Time to investigate the Reel Optics next. It should be an interesting challenge.

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.

Steeplechase
4th July 2001: Peter Fyfe dumped Steeplechase (Atari 1975) taken from an untested board.

Steeplejack (No CPU)
7th February 2001: Mike Coates added Steeplejack to the Crazy Climber driver.

Stunt Cycle
15th September 2012: AdamB - DICE 0.4 has been released! Changes in this version: Two new games supported: Stunt Cycle and Pong Doubles. Minor bug-fixes in several games. Enjoy!
8th September 2012: AdamB - Stunt Cycle: Made an attempt at the first emulation of a ROM-using discrete logic game: Performance averages about 45 FPS on a 3.4 GHz CPU, which isn't too bad considering the complexity of the game, and the use of high frequency (by 1970s standards) clocks on some logic. Unfortunately the speed of the simulation is highly dependent on the speed of the motorcycle, so it ranges from about 55 FPS when moving at minimum throttle, to 35 FPS at maximum. Makes timing the jumps a bit trickier. Sound is not supported yet, and there are still a few minor bugs to work out. Stay tuned!
29th December 2007: Guru - Dumped both Stunt Cycle PROMs with no issues.
21st December 2007: Guru - A huge box arrived today. That 19.75kg box looks mighty impressive, although I'm not sure that all of it is going to be useful. Some could be alt. versions but most don't work so I'll need to dump all of these before I can tell exactly what they are. It contains Stunt Cycle (Atari, 1975, original PCB) and others. Thanks to Tingoes for sending these out.
4th July 2006: f205v and Tomasz Slanina dumped Stunt Cycle.

Tank
29th December 2007: Guru - Referring to the list of stuff that arrived below, as suspected, much of it was useless. The 2 Tank boards... errr, PASS!
21st December 2007: Guru - A huge box arrived today. That 19.75kg box looks mighty impressive, although I'm not sure that all of it is going to be useful. Some could be alt. versions but most don't work so I'll need to dump all of these before I can tell exactly what they are. It contains a couple of discrete 'Tank' boards (Atari/Kee Games, 1974) and others. Thanks to Tingoes for sending these out.

Trapshoot (No CPU)
14th March 2004: 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




MESS Games:
===========

Bandai Pippin
15th March 2008: Guru - Forgot to mention, about a week ago I received another Bandai Pippin firmware board, thanks to incognito.
Casio Loopy
15th March 2008: Guru - Forgot to mention, about a week ago I received a Casio Loopy and a few carts, thanks to incognito.
Christmas NiGHTS
15th April 2007: R. Belmont - Fixed the internal backup RAM, now Christmas NiGHTS has come out to play (but it needs more input work to continue).
World Series Baseball
15th April 2007: R. Belmont - I dug into MESS's Saturn driver and fixed a lot of things. Most games still won't run, but we've got a few signs of life. Say hi to World Series Baseball (Sega 1995), booting off a CHD-CD as though nothing was strange about that (the intro movie even played fine with synced stereo sound). Of course, none of this would be possible without the awesome graphics work of Mariusz Wojcieszek on the MAME ST-V side.




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

- 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², 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 VERSION
 2.3  MAMEUI32
 2.4  SDLMAME
 2.5  DOS VERSION
 2.6  LINUX
 2.7  MAC VERSION
 2.8  UNIX VERSION
 2.9  SOLARIS VERION
 2.A  MAME and Windows XP/Vista
 2.B  MESS

 3.   COMPILING / SOURCE
 3.1  VISUAL C/OTHER COMPILER/OSD DEVELOPERS
 3.2  DEBUGGER/DISASSEMBLER
 3.3  LUA (Controls execution of the core MAME system)

 4.   VIDEO RENDERING SYSTEM
 4.1  TILEMAP SYSTEM, SPRITES & TEXTURES
 4.2  COLOR PALETTE

 5.   VECTOR

 6.   MEMORY SYSTEM
 6.1  ROMLOAD/ROMREGION

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

 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  SCREENSHOT / MNG / INP / WAV / AVI
 8.5  ARTWORK / LAYOUT
 8.6  SCANLINES/BLITTERS
 8.7  VALIDITY CHECKS
 8.8  AUDIT
 8.9  LISTXML/INFO

 9.   OTHER DRIVERS






 1.   MAME CORE

 - 0.149              : Added machine\bankdev.c/h. 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. 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]. Let's skip the extension when choosing the NVRAM folder name based on software (machine\generic.c) [Fabio Priuli].
 - 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 Stöneberg].
 - 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]. 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.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 Stöneberg]. 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 Stöneberg]. Try a slightly better hashing function (lib\util\tagmap.h) [O. Galibert].
 - 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. Added emu\devdelegate.c/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 Stöneberg]. 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 Stöneberg]. 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 Stöneberg].
 - 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            : Clang fixes (emu\device.h) [Aaron Giles]. 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            : Added windows\winptty.c. 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]. Added windows implementation of pseudo TTY access functions over pipes [Carl].
 - 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 Stöneberg]. Miodrag Milanovic removed LOADBYNAME, since it is deprecated by using per device rom load_software_part_region. Miodrag Milanovic created makedev tool to generate array of devices, and created lst file according to current devices usage. romident format fix [O. Galibert].
 - 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 reenabled 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            : 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 fixed enormous memory consumption when iterating through all drivers like -romident does. 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              : More Clang fixes (verified OK with GCC) [Balrog]. Aaron Giles 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.
 - 0.139u4            : Balrog fixed another Clang issue. Aaron Giles 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.
 - 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            : 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.139              : Laszlo Schulteisz added notification of orientation of all monitors at startup via the output system (windows\winmain.c).
 - 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            : 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 Stöneberg 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. romident can now identify chd's [smf]. 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 corrected 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            : smf added memory_install_write_port_handler & memory_install_readwrite_port_handler to be consistent with installing handlers and added set name to -romident. 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            : David Haywood added NULL check to prevent MAME from crashing if a new input device was connected at runtime. Aaron Giles fixed up RAM bank names to prevent crashes with memdump. Extended explicit banks to 96 (emu\memory.c).
 - 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 Stöneberg 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. Aaron Giles fixed winalloc.c to be thread-safe.
 - 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            : Added src\lib\util\corefile.c/h. 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]. Rewrote winalloc to be more dynamic and to ignore memory leaks in the runtime [Aaron Giles].
 - 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 reenabled. 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.148u2            : Windows OSD / stdout/stderr output buffering (osd\windows\winmain.c) [qmc2].
 - 0.148u1            : Don't crash on exit when wpcap.dll is unloaded before pcap_close is called (windows\netdev_pcap.c) [Carl].
 - 0.148              : Enabled multi-threading (mame -mt) by default on Windows. Fixed unitialized memory in osd_file (windows\winfile.c) [Oliver Stöneberg].
 - 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 Stöneberg].
 - 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 Stöneberg].
 - 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.144u7            : Fixed pcap network device search [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.143u6            : Added osd\windows\netdev.c/h, netdev_pcap.c/h. and emu\dinetwork.c/h.
 - 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.137u4            : Oliver Stöneberg 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            : Moved tools\file2str.c to src\build\. 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.116u2            : Oliver Stöneberg fixed some unicode build issues in the Windows code.
 - 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. Aaron Giles 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. Aaron Giles defined several new exit codes for "unknown game" and "invalid config" and changed the Windows OSD layer to output them. Changed file2str to be built into the obj directory.
 - 0.112u1            : Added src\tools\tools.mak. Aaron Giles changed file2str to work for any binary file and output the data as an array of bytes rather than a string.
 - 0.111u6            : Moved src\file2str.c to src\tools\.
 - 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.106u8            : Added src\file2str.c.
 - 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.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 VERSION

 - 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 Stöneberg 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 Stöneberg 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 Stöneberg]: 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.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.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.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  SDLMAME

 - 0.149              : Added debug\dvbpoints.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 Stöneberg].
 - 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 Stöneberg].
 - 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 (osd\sdl\man\mame.6/mess.6) [Wallyweek]. Improved some version checks in makefiles and added TODO (osd\sdl\sdl.mak) [Oliver Stöneberg]. 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 src\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 (src\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 for an SDL sound bug surrounding use of -speed and pausing frequently causing corrupt sound [Antonio Giner]. 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 src\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 src\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            : AWJ 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              : Belegdol fixed Fortify-reported SDL stack smash.
 - 0.136u4            : Couriersud tidied up includes in a number of files in src\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            : 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!). Corrected 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.5  DOS VERSION

 - 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 src\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.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  MAC VERSION

 - 0.148u2            : Make Ethernet pcap work on Mac OS X & disable unnecessary packet filtering [Rob Braun]. Updated the traditional missed file (src\osd\osdnet.c) [R. Belmont].
 - 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.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.8  UNIX VERSION

 - 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.9  SOLARIS VERION
 - 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.A  MAME and Windows XP/Vista

 - 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.B  MESS

 - 0.148u3            : Fixed name of software_list_device to "Software list" [Oliver Stöneberg]. Added some additional XML validation and fixed the resulting errors (emu\softlist.c) [Fabio Priuli].
 - 0.148u2            : Silencing clrmamepro. Fixed repeated descriptions [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 Stöneberg]. Sync the internal software list dtd (emu\clifront.c) [Wilbert Pol].
 - 0.147              : Patch that enables output of <info> elements stored in software lists through -listsoftware [qmc2].
 - 0.146u5            : Added some sanity checks to the softlist handling [Curt Coder].
 - 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.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].
 - 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.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.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].
 - 0.141u3            : Softlist WIP code to add more info nodes [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. 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 listsofware command line option from MESS, and added softlist in XML output. Miodrag Milanovic moved ioproc implementation from MESS.
 - 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.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). Removal of not needed includes of devlegcy.h (includes\snes.h, video\kan_pand.h, ppu2c0x.h and machine\docg3.h). 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 Stöneberg]. 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 anf 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, video\sed1330.h, mame\audio\gottlieb.c and mame\includes\gottlieb.h). Synced CPUS and SOUND in mame/mess.mak [Oliver Stöneberg]. 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/sed1330.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 Stöneberg]. Modernization of drivers M - Z (drivers/includes/machine/video). Removal of not needed machine().root_device() (MAME drivers A - Z; drivers/machine/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 Stöneberg].
 - 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 Stöneberg]. Avoid some lazy tag lookups (drivers/includes/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/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/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/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 Stöneberg].
 - 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, mm74c922.c, mos6529.c, msm6242.c/h, nmc9306.c, timekpr.h, upd7201.c, z8536.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, tms9928a.h and upd3301.c) [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 Stöneberg]. 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]. Added resources and icon for UME / added UME support to verinfo and updated the usage string [David Haywood].
 - 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 Stöneberg].
 - 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 Stöneberg]. 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 Stöneberg]. 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).
 - 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 [Belegdol]. 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            : Corrected syntax in some inline assembly [Balrog].
 - 0.142u6            : Oliver Stöneberg removed duplicated includes from INCPATH.
 - 0.142u5            : Oliver Stöneberg 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 Stöneberg].
 - 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.142u2            : Thomas Klausner fixed build on NetBSD and other systems where toupper() is a macro (lib\util\astring.h).
 - 0.142u1            : Thomas Klausner fixed collision with system macro on NetBSD (naomibd.c).
 - 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            : Belegdol 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            : Curt Coder added all CPU and sound devices in emu folder to the MAME build. NetBSD support [Thomas Klausner].
 - 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              : Aaron Giles fixed default 'tiny' does not build.
 - 0.139u3            : Atari Ace added include files for all remaining drivers with multiple source files. New build tool makedep.c, derived from src2html.c (really!). Does basic dependency analysis and supports excluding paths [Aaron Giles]. 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 [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.138u1            : Oliver Stöneberg corrected stack walk by using UNICODE_POSTFIX. Fixed some incorrect function declarations in winmain.c.
 - 0.137u4            : Have srcclean add missing newlines to end of .c files [Atari Ace]. Oliver Stöneberg 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 Stöneberg 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 Stöneberg 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            : Aaron Giles fixed 64-bit compiler warnigs. Atari Ace de-globalified sound.c and input.c.
 - 0.133u3            : Aaron Giles fixed MSVC 64-bit compile errors. Aaron Giles 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.
 - 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). Belegdol 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.
 - 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 Stöneberg 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 Stöneberg 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 Stöneberg 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.96u1             : Ville Linde added dynamic recompiler for PowerPC cores (cpu\powerpc\ppcdrc.c).
 - 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].
 - 16th May       2003: Bryan McPhail sent in some fixes to compiling errors on non-C99 compilers.
 - 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.148u5            : Fixed building with MSVC (machine\psxcd.c) [smf]. Added support for -mavx and -flto (windows\vconv.c) [Oliver Stöneberg].
 - 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 Stöneberg].
 - 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 Stöneberg]. 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            : Fix for older GCCs. Fixed PowerPC OS X compile [R. Belmont]. Fixes for compiling with MSVC. Fixed "potentially uninitalized local variable" error when building with MSVC. The code does appear to assume that variables on the stack are zero'd [Phill W.].
 - 0.145u7            : Fix for older GCC [Robbbert].
 - 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 Stöneberg 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.139u3            : Aaron Giles fixed compiling on older GCCs (including OS X PowerPC).
 - 0.138u4            : El Barto renamed feof to image_feof (in device_image_interface) in order to compile on FreeBSD.
 - 0.138u2            : Oliver Stöneberg fixed a warning in Visual Studio 2010 that was introduced by a previous commit.
 - 0.137u4            : Oliver Stöneberg fixed two VS2008 warnings (namcos23.c and rdpfb.c). Oliver Stöneberg 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            : Aaron Giles 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.
 - 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 corrected 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]. 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            : 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. 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.  Aaron Giles changed alignment of rgbint values in the namcos22 driver to work around 32-bit gcc's lack of proper alignment handling.
 - 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 Stöneberg 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].
 - 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.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 MT#03449 [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 Stöneberg]. 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 Stöneberg].
 - 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].
 - 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 Stöneberg].
 - 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 Stöneberg].
 - 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.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            : 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            : 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.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]. Christophe Jaillet expanded PROFILER_USERx to support up to 8 custom profiler areas (emu\profiler.c).
 - 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 Stöneberg fixed memory leak when exit MAMED.
 - 0.122u3            : Oliver Stöneberg 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 Stöneberg 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 debuggin 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 Stöneberg 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. AWJ 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-existant 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  LUA (Controls execution of the core MAME system)

 - 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 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].



 4.   VIDEO RENDERING SYSTEM

 - 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) [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. Added better .ini defaults for HLSL and hooked up bloom sliders [MooglyGuy]. Fixed some initialization and cleanup issues with new D3D code. Fixed DFJustin's crash (windows\drawd3d.c) [Oliver Stöneberg].
 - 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 - MT #05173) [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 Stöneberg].
 - 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. Corrected 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 Stöneberg 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.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.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.130u3            : Added video\rgbutil.c. Vas Crabb put tables used for RGB utilities in a single object file rather than compiling them as statics in every object that uses them.
 - 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. Aaron Giles 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.
 - 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-existant 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.148              : Oliver Stöneberg 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 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.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.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.



 5.   VECTOR

 - 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.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.149              : Fixed address_space_specific::get_write_ptr() (emu\memory.c) [Phil Bennett]. 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 Stöneberg].
 - 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 Stöneberg].
 - 0.148              : Oliver Stöneberg added missing initialization of memory_share.m_next (emu\memory.h). Removed some unused AM_*_LEGACY macros (emu\addrmap.h) [Oliver Stöneberg].
 - 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 Stöneberg]. 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 Stöneberg 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 Stöneberg 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 to use %p for pointer values.
 - 0.122              : Oliver Stöneberg 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 src\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 Stöneberg 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.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            : 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].
 - 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.146              : Barry Rodewald added device image type for individual ROM images (as used in some Amstrad CPC applications).
 - 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 Stöneberg]. Updated romload so devices are loaded from separate files [Miodrag Milanovic].
 - 0.138u2            : Added emu\diimage.c/h.
 - 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".



 7.   INPUT/OUTPUT

 - 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]. Modernized ticket dispenser device. 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.144u3            : Added src\emu\network.c/h.
 - 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, MT#4394 and MT#4509). 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 corrected 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. Aaron Giles changed ticket.c into a device, updated all users.
 - 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 Stöneberg 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 Stöneberg 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               : Removed src\network.c/h. 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             : Added machine\ticket.h. 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.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 adds 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            : AWJ and Aaron Giles corrected 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 corrected 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.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 debuggin 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.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.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.145u4            : Clamp timer->remaining() to 0 if the timer has expired (emu\schedule.c) [Aaron Giles].
 - 0.141u3            : Aaron Giles fixed attotime max() function to not be a copy of min(). Fixes several regressions in the scheduler after the recent attotime object conversion.
 - 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 corrected 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 corrected 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].



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

 - 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 Stöneberg].
 - 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 Stöneberg].
 - 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 Stöneberg].
 - 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 corrected 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 Stöneberg'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.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 Stöneberg].
 - 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 Stöneberg]. 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 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            : 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.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.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  SCREENSHOT / MNG / INP / WAV / AVI

 - 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 corrected 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 Stöneberg 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.5  ARTWORK / LAYOUT

 - 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.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.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            : 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 rewroted 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.6  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.



 8.7  VALIDITY CHECKS

 - 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.147u1            : Added -verifysoftware command [Wilbert Pol].
 - 0.146u1            : Perform validation after reading ini file and check system name, fixes issues with ramsize option [Miodrag Milanovic].
 - 0.146              : Miodrag Milanovic] fixed ram size validation regression (emu\machine\ram.c).
 - 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.8  AUDIT

 - 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.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.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.142              : 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.138u2            : Added emu\hashfile.c/h.
 - 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.9  LISTXML/INFO

 - 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 Stöneberg]. 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 Stöneberg].
 - 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.138u3            : 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.
 - 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 Stöneberg added the mameconfig version to the -listxml output.
 - 0.136              : Oliver Stöneberg 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 Stöneberg 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 Stöneberg 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

 - 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 Stöneberg].
 - 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 corrected 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            : Corrected 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.35b9             : Added src\network.c/h.
 - 0.37b3             : Gerardo Oporto fixed dipswitches in many games.
 - 0.22               : Minor fixes to some drivers.


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

Links
-----

Aaron Giles                : http://www.aarongiles.com/
Alex's Rom Dumping Project : http://www.amusements-shop.com/
Andreas Naive              : http://andreasnaive.blogspot.com/
Andrew J. Gardner    (Drew): http://ajg.mameworld.info/
Andy Geezer                : http://triplemoonstar.brinkster.net/segashed/blog/
Angelo Salese        (Kale): http://mamedev.emulab.it/kale/
Bryan McPhail        (Mish): http://www.vcmame.net/wip/index.html
CaH4e3                     : http://demul.emulation64.com or http://forum.emu-russia.net/viewtopic.php?f=25&t=503
Charles MacDonald          : http://cgfm2.emuviews.com/
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/
Derrick Renaud             : http://derrick.mameworld.info/
Deunan Knute               : http://dknute.livejournal.com/ (Makaron Emulator)
Dr. Decapitator            : http://decap.mameworld.info/
Fabio Priuli      (etabeta): http://mamedev.emulab.it/etabeta/
Frank Palazzolo            : http://avoidspikes.blogspot.com/
Guru                       : http://members.iinet.net.au/~lantra9jp1/gurudumps/ + http://guru.mameworld.info/
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        : http://pmbits.de/40587.html + http://pmbits.ath.cx/
Luca Elia                  : http://www.lucaelia.com/mame.php
Manuel Abadia              : http://www.manuelabadia.com/blog/
Miguel Horna       (ElSemi): http://nebula.emulatronia.com/
Miodrag Milanovic   (micko): http://micko-wip.blogspot.com/
Ryan Holtz      (MooglyGuy): http://moogle-tech.com/blog/
Nicola Salmoria            : http://mamelife.blogspot.com/
Norbert Kehrer             : http://web.utanet.at/nkehrer/index.html
Paul Priest    (Tourniquet): http://tourniquet.mameworld.info/
Phil Bennett        (PhilB): 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://cps2shock.retrogames.com/
Richard Bannister          : http://www.bannister.org/
Roberto Fresca     (Robbie): http://robbie.mameworld.info/ or http://www.robertofresca.com.ar/
Roberto Zandonà    (Robiza): http://mamedev.emulab.it/robiza/
smf                        : http://smf.mameworld.info/
Stefan Lindberg            : http://www.ym2149.com
Team Europe                : http://team-europe.blogspot.de/
Tomasz Slanina        (Dox): http://doxdev.blogspot.com/
trap15, austere            : http://www.raidenii.net/
Ville Linde                : http://www.mameworld.info/vlinde/


3D ARCADE                  : http://www.mameworld.info/3darcade/
Arcade Flyer Archive  (Dan): http://flyers.arcade-museum.com/
Catlist                    : http://www.progettoemma.net/?catlist
Cheat.dat           (Pugsy): http://cheat.retrogames.com/ or http://www.mamecheat.co.uk/index.htm
ClrMamePro          (Roman): http://mamedev.emulab.it/clrmamepro/
Computer Space Simulator   : http://move.to/moose
DAPHNE LASER disc          : http://www.daphne-emu.com/
DICE                       : http://adamulation.blogspot.com/
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
easyEmu MAME Guide  (MrV2K): http://easyemu.mameworld.info
HBMAME                     : http://messui.the-chronicles.org/hbmame/index.html
HiScore.dat                : http://highscore.mameworld.info/download.htm
History.dat     (Alexis B.): http://www.arcade-history.com/
Killer List of Video Games : http://www.klov.com/
Mach3 Emulation            : http://www.scottwaye.com/mach3/index.html
Mahjong in MAME            : http://mahjonginmame.com/
MAME                       : http://mamedev.org/
MAME Artwork       (Mr. Do): http://mrdo.mameworld.info/index.php
MAME FAQ                   : http://mamedev.org/devwiki/index.php?title=Frequently_Asked_Questions
MAME Icons          (MAMu_): http://icons.mameworld.info/
MAME Italian Forum         : http://www.mameitalia.net/
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/
MAME32/64         (John IV): http://www.mameui.info/
MameUI Forum     (Robbbert): http://www.mameworld.info/ubbthreads/showflat.php?Number=262629
MAWS         (cutebutwrong): http://maws.mameworld.info/maws/
MESS                       : http://www.mess.org/downloads + http://mess.redump.net/downloads
MESSUI           (Robbbert): http://messui.the-chronicles.org/
Museum of Soviet Arcade    : http://www.15kop.ru/en/
ProjectMESS                : http://www.progettoemma.net/mess/
RAINE                      : http://rainemu.swishparty.co.uk/
Robby Roto (via MAME)      : https://chrome.google.com/webstore/detail/kcfbijoldkenmemnbbkjnpdhnijgahck
SDLMAME for Mac OS X       : http://sdlmame.parodius.com/
SDLMAME for Ubuntu         : http://sdlmame.wallyweek.org/download/
STARCADE Arcade Game Show  : www.starcade.tv/
System16             (Toby): http://www.system16.com/
Supermodel                 : http://www.supermodel3.com/WhatsNew.html + http://model3emu.svn.sourceforge.net/viewvc/model3emu/
unMAMEd     (Bobby Tribble): http://unmamed.mameworld.info/

#




© 2000-2013  M.A.S.H
