scene.org File Archive

File download

<root>­/­parties­/­2016­/­sundown16­/­wild/massivemultitap.zip

File size:
9 625 797 bytes (9.18M)
File date:
2016-07-21 05:45:01
Download count:
all-time: 55

Preview

  • 1468672597_readme.md 911B
  • 1468672605_13321468672597.png 598.92K
  • massivemultitap/ dir
  • massivemultitap/nes-fceux/ dir
  • massivemultitap/nes-fceux/7z.dll 919.50K
  • massivemultitap/nes-fceux/auxlib.lua 1.68K
  • massivemultitap/nes-fceux/cheats/ dir
  • massivemultitap/nes-fceux/cheats/! MORE CHEATS.txt 310B
  • massivemultitap/nes-fceux/cheats/10-Yard Fight (USA, Europe).cht 54B
  • massivemultitap/nes-fceux/cheats/1942 (Japan, USA).cht 391B
  • massivemultitap/nes-fceux/cheats/1943 - The Battle of Midway (USA).cht 544B
  • massivemultitap/nes-fceux/cheats/1943 - The Battle of Valhalla (Japan).cht 213B
  • massivemultitap/nes-fceux/cheats/3-D WorldRunner (USA).cht 124B
  • massivemultitap/nes-fceux/cheats/8 Eyes (Japan).cht 133B
  • massivemultitap/nes-fceux/cheats/8 Eyes (USA).cht 161B
  • massivemultitap/nes-fceux/cheats/Abadox (Japan).cht 270B
  • massivemultitap/nes-fceux/cheats/Abadox - The Deadly Inner War (USA).cht 270B
  • massivemultitap/nes-fceux/cheats/Addams Family, The (USA).cht 30B
  • massivemultitap/nes-fceux/cheats/Advanced Dungeons & Dragons - DragonStrike (USA).cht 45B
  • massivemultitap/nes-fceux/cheats/Advanced Dungeons & Dragons - Heroes of the Lance (USA).cht 321B
  • massivemultitap/nes-fceux/cheats/Advanced Dungeons & Dragons - Hillsfar (USA).cht 121B
  • massivemultitap/nes-fceux/cheats/Adventures in the Magic Kingdom (Europe).cht 154B
  • massivemultitap/nes-fceux/cheats/Adventures in the Magic Kingdom (USA).cht 154B
  • massivemultitap/nes-fceux/cheats/Adventures of Bayou Billy, The (Europe).cht 396B
  • massivemultitap/nes-fceux/cheats/Adventures of Bayou Billy, The (USA).cht 396B
  • massivemultitap/nes-fceux/cheats/Adventures of Lolo (USA).cht 74B
  • massivemultitap/nes-fceux/cheats/Adventures of Lolo 2 (USA).cht 72B
  • massivemultitap/nes-fceux/cheats/Adventures of Lolo 3 (USA).cht 73B
  • massivemultitap/nes-fceux/cheats/Akumajou Dracula (Japan).cht 274B
  • massivemultitap/nes-fceux/cheats/Alpha Mission (USA).cht 137B
  • massivemultitap/nes-fceux/cheats/Arkanoid (Japan).cht 316B
  • massivemultitap/nes-fceux/cheats/Arkanoid (USA).cht 802B
  • massivemultitap/nes-fceux/cheats/Astyanax (USA).cht 291B
  • massivemultitap/nes-fceux/cheats/Back to the Future (USA).cht 79B
  • massivemultitap/nes-fceux/cheats/Bad Dudes (USA).cht 525B
  • massivemultitap/nes-fceux/cheats/Bad Dudes vs. Dragon Ninja (Europe).cht 601B
  • massivemultitap/nes-fceux/cheats/Bad Street Brawler (USA).cht 30B
  • massivemultitap/nes-fceux/cheats/Batman (Japan).cht 164B
  • massivemultitap/nes-fceux/cheats/Batman - Return of the Joker (USA).cht 151B
  • massivemultitap/nes-fceux/cheats/Batman - The Video Game (Europe).cht 164B
  • massivemultitap/nes-fceux/cheats/Batman - The Video Game (USA).cht 164B
  • massivemultitap/nes-fceux/cheats/Batman Returns (USA).cht 96B
  • massivemultitap/nes-fceux/cheats/Battle Tank (USA).cht 113B
  • massivemultitap/nes-fceux/cheats/Battletoads (Europe).cht 636B
  • massivemultitap/nes-fceux/cheats/Battletoads (Japan).cht 292B
  • massivemultitap/nes-fceux/cheats/Battletoads (USA).cht 862B
  • massivemultitap/nes-fceux/cheats/Battletoads-Double Dragon (Europe).cht 122B
  • massivemultitap/nes-fceux/cheats/Battletoads-Double Dragon (USA).cht 122B
  • massivemultitap/nes-fceux/cheats/Big Nose Freaks Out (USA) (Unl).cht 80B
  • massivemultitap/nes-fceux/cheats/Bionic Commando (Europe).cht 1.08K
  • massivemultitap/nes-fceux/cheats/Bionic Commando (USA).cht 1.13K
  • massivemultitap/nes-fceux/cheats/Blades of Steel (Europe).cht 200B
  • massivemultitap/nes-fceux/cheats/Blades of Steel (USA).cht 200B
  • massivemultitap/nes-fceux/cheats/Blaster Master (Europe).cht 393B
  • massivemultitap/nes-fceux/cheats/Blaster Master (USA).cht 482B
  • massivemultitap/nes-fceux/cheats/Blues Brothers, The (USA).cht 204B
  • massivemultitap/nes-fceux/cheats/Bomber Man (Japan).cht 105B
  • massivemultitap/nes-fceux/cheats/Bomber Man II (Japan).cht 54B
  • massivemultitap/nes-fceux/cheats/Bomberman (USA).cht 105B
  • massivemultitap/nes-fceux/cheats/Bomberman II (USA).cht 342B
  • massivemultitap/nes-fceux/cheats/Boulder Dash (Europe).cht 107B
  • massivemultitap/nes-fceux/cheats/Boulder Dash (Japan).cht 107B
  • massivemultitap/nes-fceux/cheats/Boulder Dash (USA).cht 107B
  • massivemultitap/nes-fceux/cheats/Bubble Bobble (Europe).cht 108B
  • massivemultitap/nes-fceux/cheats/Bubble Bobble (USA).cht 108B
  • massivemultitap/nes-fceux/cheats/Bubble Bobble 2 (Japan).cht 148B
  • massivemultitap/nes-fceux/cheats/Bubble Bobble Part 2 (USA).cht 148B
  • massivemultitap/nes-fceux/cheats/Cabal (USA).cht 170B
  • massivemultitap/nes-fceux/cheats/Captain America and the Avengers (USA).cht 157B
  • massivemultitap/nes-fceux/cheats/Castlevania (USA) (Rev A).cht 586B
  • massivemultitap/nes-fceux/cheats/Castlevania (USA).cht 444B
  • massivemultitap/nes-fceux/cheats/Castlevania II - Simon's Quest (USA).cht 296B
  • massivemultitap/nes-fceux/cheats/Castlevania III - Dracula's Curse (USA).cht 606B
  • massivemultitap/nes-fceux/cheats/Chip 'n Dale - Rescue Rangers (USA).cht 300B
  • massivemultitap/nes-fceux/cheats/Chip 'n Dale - Rescue Rangers 2 (USA).cht 122B
  • massivemultitap/nes-fceux/cheats/City Connection (Japan).cht 161B
  • massivemultitap/nes-fceux/cheats/City Connection (USA).cht 156B
  • massivemultitap/nes-fceux/cheats/Code Name - Viper (USA).cht 316B
  • massivemultitap/nes-fceux/cheats/Commando (USA).cht 126B
  • massivemultitap/nes-fceux/cheats/Conquest of the Crystal Palace (USA).cht 170B
  • massivemultitap/nes-fceux/cheats/Contra (Japan).cht 53B
  • massivemultitap/nes-fceux/cheats/Contra (USA).cht 954B
  • massivemultitap/nes-fceux/cheats/Crystalis (USA).cht 86B
  • massivemultitap/nes-fceux/cheats/Darkwing Duck (USA).cht 157B
  • massivemultitap/nes-fceux/cheats/David Crane's A Boy and His Blob - Trouble on Blobolonia (Europe) (Rev A).cht 713B
  • massivemultitap/nes-fceux/cheats/David Crane's A Boy and His Blob - Trouble on Blobolonia (USA).cht 740B
  • massivemultitap/nes-fceux/cheats/Deadly Towers (USA).cht 80B
  • massivemultitap/nes-fceux/cheats/Deja Vu (USA).cht 25B
  • massivemultitap/nes-fceux/cheats/Donkey Kong (World) (Rev A).cht 64B
  • massivemultitap/nes-fceux/cheats/Donkey Kong 3 (World).cht 132B
  • massivemultitap/nes-fceux/cheats/Donkey Kong Jr. (World) (Rev A).cht 40B
  • massivemultitap/nes-fceux/cheats/Double Dragon (USA).cht 338B
  • massivemultitap/nes-fceux/cheats/Double Dragon II - The Revenge (USA) (Rev A).cht 243B
  • massivemultitap/nes-fceux/cheats/Double Dragon III - The Sacred Stones (USA).cht 66B
  • massivemultitap/nes-fceux/cheats/Double Dribble (USA) (Rev A).cht 210B
  • massivemultitap/nes-fceux/cheats/Dragon Ninja (Japan) (Rev A).cht 244B
  • massivemultitap/nes-fceux/cheats/Dragon Warrior (USA) (Rev A).cht 403B
  • massivemultitap/nes-fceux/cheats/Dragon Warrior (USA).cht 364B
  • massivemultitap/nes-fceux/cheats/Duck Hunt (PC10).cht 27B
  • massivemultitap/nes-fceux/cheats/Duck Hunt (World).cht 27B
  • massivemultitap/nes-fceux/cheats/DuckTales (USA).cht 383B
  • massivemultitap/nes-fceux/cheats/Dynowarz - Destruction of Spondylus (USA).cht 276B
  • massivemultitap/nes-fceux/cheats/Excitebike (Japan, USA).cht 563B
  • massivemultitap/nes-fceux/cheats/Famicom Wars (Japan) (Rev 0B).cht 116B
  • massivemultitap/nes-fceux/cheats/Faxanadu (USA) (Rev A).cht 86B
  • massivemultitap/nes-fceux/cheats/Final Fantasy (USA).cht 516B
  • massivemultitap/nes-fceux/cheats/Final Lap (Japan).cht 62B
  • massivemultitap/nes-fceux/cheats/Friday the 13th (USA).cht 335B
  • massivemultitap/nes-fceux/cheats/Galaga - Demons of Death (USA).cht 213B
  • massivemultitap/nes-fceux/cheats/Gauntlet (USA).cht 436B
  • massivemultitap/nes-fceux/cheats/Gauntlet II (USA).cht 1.20K
  • massivemultitap/nes-fceux/cheats/Ghosts'n Goblins (USA).cht 344B
  • massivemultitap/nes-fceux/cheats/Goonies (Japan).cht 220B
  • massivemultitap/nes-fceux/cheats/Goonies 2 - Fratelli Saigo no Chousen (Japan).cht 434B
  • massivemultitap/nes-fceux/cheats/Goonies II, The (USA).cht 596B
  • massivemultitap/nes-fceux/cheats/Gradius (USA).cht 207B
  • massivemultitap/nes-fceux/cheats/Gremlins 2 - The New Batch (USA).cht 235B
  • massivemultitap/nes-fceux/cheats/Guardian Legend, The (USA).cht 79B
  • massivemultitap/nes-fceux/cheats/Guerrilla War (Europe).cht 378B
  • massivemultitap/nes-fceux/cheats/Guerrilla War (USA).cht 1.04K
  • massivemultitap/nes-fceux/cheats/Guevara (Japan).cht 378B
  • massivemultitap/nes-fceux/cheats/Gun.Smoke (USA).cht 450B
  • massivemultitap/nes-fceux/cheats/Gyruss (USA).cht 25B
  • massivemultitap/nes-fceux/cheats/Heavy Barrel (USA).cht 702B
  • massivemultitap/nes-fceux/cheats/Highway Star (Japan).cht 510B
  • massivemultitap/nes-fceux/cheats/Hydlide (USA).cht 86B
  • massivemultitap/nes-fceux/cheats/Ice Climber (USA, Europe).cht 170B
  • massivemultitap/nes-fceux/cheats/Ice Hockey (Europe).cht 316B
  • massivemultitap/nes-fceux/cheats/Ice Hockey (USA).cht 316B
  • massivemultitap/nes-fceux/cheats/Ikari 3 - The Rescue (USA).cht 191B
  • massivemultitap/nes-fceux/cheats/Immortal, The (USA).cht 177B
  • massivemultitap/nes-fceux/cheats/IronSword - Wizards & Warriors II (USA).cht 136B
  • massivemultitap/nes-fceux/cheats/Jackal (USA).cht 162B
  • massivemultitap/nes-fceux/cheats/Jaws (USA).cht 133B
  • massivemultitap/nes-fceux/cheats/Jumbo Ozaki no Hole in One Professional (Japan).cht 73B
  • massivemultitap/nes-fceux/cheats/Kickle Cubicle (USA).cht 76B
  • massivemultitap/nes-fceux/cheats/Kid Icarus (Europe) (Rev A).cht 541B
  • massivemultitap/nes-fceux/cheats/Kid Icarus (USA, Europe).cht 595B
  • massivemultitap/nes-fceux/cheats/Kung Fu (Europe).cht 136B
  • massivemultitap/nes-fceux/cheats/Kung Fu (Japan, USA).cht 136B
  • massivemultitap/nes-fceux/cheats/Labyrinth (Japan).cht 208B
  • massivemultitap/nes-fceux/cheats/Legacy of the Wizard (USA).cht 726B
  • massivemultitap/nes-fceux/cheats/Legend of Zelda, The (USA) (Rev A).cht 779B
  • massivemultitap/nes-fceux/cheats/Legend of Zelda, The (USA).cht 779B
  • massivemultitap/nes-fceux/cheats/Legendary Wings (USA).cht 116B
  • massivemultitap/nes-fceux/cheats/Life Force (USA).cht 516B
  • massivemultitap/nes-fceux/cheats/Little Nemo - The Dream Master (Europe).cht 897B
  • massivemultitap/nes-fceux/cheats/Little Nemo - The Dream Master (USA).cht 957B
  • massivemultitap/nes-fceux/cheats/Marble Madness (USA).cht 405B
  • massivemultitap/nes-fceux/cheats/Mechanized Attack (USA).cht 107B
  • massivemultitap/nes-fceux/cheats/Mega Man (USA).cht 413B
  • massivemultitap/nes-fceux/cheats/Mega Man 2 (Europe).cht 901B
  • massivemultitap/nes-fceux/cheats/Mega Man 2 (USA).cht 901B
  • massivemultitap/nes-fceux/cheats/Mega Man 3 (USA).cht 534B
  • massivemultitap/nes-fceux/cheats/Mega Man 4 (USA).cht 521B
  • massivemultitap/nes-fceux/cheats/Mega Man 5 (USA).cht 504B
  • massivemultitap/nes-fceux/cheats/Mega Man 6 (USA).cht 426B
  • massivemultitap/nes-fceux/cheats/Metroid (USA).cht 470B
  • massivemultitap/nes-fceux/cheats/Mezase Top Pro - Green ni Kakeru Yume (Japan).cht 32B
  • massivemultitap/nes-fceux/cheats/Might & Magic - Secret of the Inner Sanctum (USA).cht 198B
  • massivemultitap/nes-fceux/cheats/Mike Tyson's Punch-Out!! (Japan, USA) (Rev A).cht 783B
  • massivemultitap/nes-fceux/cheats/Mike Tyson's Punch-Out!! (PC10).cht 783B
  • massivemultitap/nes-fceux/cheats/Milon's Secret Castle (USA).cht 30B
  • massivemultitap/nes-fceux/cheats/Mirai Senshi - Lios (Japan).cht 188B
  • massivemultitap/nes-fceux/cheats/Monster Party (USA).cht 124B
  • massivemultitap/nes-fceux/cheats/NARC (USA).cht 252B
  • massivemultitap/nes-fceux/cheats/Ninja Gaiden (USA).cht 1.31K
  • massivemultitap/nes-fceux/cheats/Ninja Gaiden II - The Dark Sword of Chaos (USA).cht 111B
  • massivemultitap/nes-fceux/cheats/Operation Secret Storm (USA) (Unl).cht 55B
  • massivemultitap/nes-fceux/cheats/P.O.W. - Prisoners of War (USA).cht 157B
  • massivemultitap/nes-fceux/cheats/Pajama Hero - Nemo (Japan).cht 235B
  • massivemultitap/nes-fceux/cheats/Paperboy (Europe).cht 66B
  • massivemultitap/nes-fceux/cheats/Paperboy (Japan).cht 66B
  • massivemultitap/nes-fceux/cheats/Paperboy (USA).cht 66B
  • massivemultitap/nes-fceux/cheats/Pinball Quest (USA).cht 149B
  • massivemultitap/nes-fceux/cheats/Popeye (Japan).cht 56B
  • massivemultitap/nes-fceux/cheats/Pro Wrestling (USA) (Rev A).cht 24B
  • massivemultitap/nes-fceux/cheats/Probotector (Europe).cht 517B
  • massivemultitap/nes-fceux/cheats/Probotector II - Return of the Evil Forces (Europe).cht 824B
  • massivemultitap/nes-fceux/cheats/Punch-Out!! (Japan) (Gold Edition).cht 784B
  • massivemultitap/nes-fceux/cheats/Punch-Out!! (USA).cht 784B
  • massivemultitap/nes-fceux/cheats/Puzzle (USA) (Unl).cht 48B
  • massivemultitap/nes-fceux/cheats/Rad Racer (Europe).cht 510B
  • massivemultitap/nes-fceux/cheats/Rad Racer (PC10).cht 510B
  • massivemultitap/nes-fceux/cheats/Rad Racer (USA).cht 510B
  • massivemultitap/nes-fceux/cheats/Rambo (Japan).cht 222B
  • massivemultitap/nes-fceux/cheats/Rambo (USA) (Rev A).cht 222B
  • massivemultitap/nes-fceux/cheats/Rambo (USA).cht 222B
  • massivemultitap/nes-fceux/cheats/Rampage (USA).cht 66B
  • massivemultitap/nes-fceux/cheats/Renegade (USA).cht 262B
  • massivemultitap/nes-fceux/cheats/Ring King (USA).cht 270B
  • massivemultitap/nes-fceux/cheats/River City Ransom (USA).cht 905B
  • massivemultitap/nes-fceux/cheats/Rockman (Japan) (En).cht 413B
  • massivemultitap/nes-fceux/cheats/Rockman 2 - Dr. Wily no Nazo (Japan).cht 766B
  • massivemultitap/nes-fceux/cheats/Rockman 3 - Dr. Wily no Saigo! (Japan).cht 480B
  • massivemultitap/nes-fceux/cheats/Rolling Thunder (Japan).cht 343B
  • massivemultitap/nes-fceux/cheats/Rolling Thunder (USA) (Unl).cht 343B
  • massivemultitap/nes-fceux/cheats/Rygar (Europe).cht 229B
  • massivemultitap/nes-fceux/cheats/Rygar (USA) (Rev A).cht 229B
  • massivemultitap/nes-fceux/cheats/Rygar (USA).cht 229B
  • massivemultitap/nes-fceux/cheats/Salamander (Japan).cht 404B
  • massivemultitap/nes-fceux/cheats/Section-Z (Europe).cht 751B
  • massivemultitap/nes-fceux/cheats/Section-Z (USA).cht 751B
  • massivemultitap/nes-fceux/cheats/Shadowgate (USA).cht 58B
  • massivemultitap/nes-fceux/cheats/Simpsons, The - Bart vs. the Space Mutants (USA) (Rev A).cht 136B
  • massivemultitap/nes-fceux/cheats/Simpsons, The - Bart vs. the World (USA).cht 126B
  • massivemultitap/nes-fceux/cheats/Smurfs, The (Europe) (En,Fr,De,Es).cht 106B
  • massivemultitap/nes-fceux/cheats/Snow Brothers (USA).cht 226B
  • massivemultitap/nes-fceux/cheats/Soccer (World).cht 54B
  • massivemultitap/nes-fceux/cheats/Son Son (Japan).cht 56B
  • massivemultitap/nes-fceux/cheats/Spelunker (USA).cht 25B
  • massivemultitap/nes-fceux/cheats/Spy Hunter (USA).cht 419B
  • massivemultitap/nes-fceux/cheats/Sqoon (USA).cht 25B
  • massivemultitap/nes-fceux/cheats/Stanley - The Search for Dr. Livingston (USA).cht 320B
  • massivemultitap/nes-fceux/cheats/Star Soldier (USA).cht 25B
  • massivemultitap/nes-fceux/cheats/StarTropics (USA).cht 112B
  • massivemultitap/nes-fceux/cheats/Super C (USA).cht 968B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. (Europe) (Rev 0A).cht 826B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. (Europe) (Rev A).cht 827B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. (World).cht 1.17K
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. 2 (USA) (Rev A).cht 347B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. 2 (USA).cht 292B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. 3 (USA) (Rev A).cht 818B
  • massivemultitap/nes-fceux/cheats/Super Mario Bros. 3 (USA).cht 444B
  • massivemultitap/nes-fceux/cheats/Super Mario Brothers 2 (Japan).cht 177B
  • massivemultitap/nes-fceux/cheats/Tecmo Bowl (Japan).cht 706B
  • massivemultitap/nes-fceux/cheats/Tecmo Bowl (USA) (Rev A).cht 706B
  • massivemultitap/nes-fceux/cheats/Tecmo Bowl (USA).cht 706B
  • massivemultitap/nes-fceux/cheats/Tecmo Super Bowl (USA).cht 305B
  • massivemultitap/nes-fceux/cheats/Teenage Mutant Ninja Turtles (USA).cht 693B
  • massivemultitap/nes-fceux/cheats/Teenage Mutant Ninja Turtles II - The Arcade Game (USA).cht 564B
  • massivemultitap/nes-fceux/cheats/Teenage Mutant Ninja Turtles III - The Manhattan Project (USA).cht 537B
  • massivemultitap/nes-fceux/cheats/Tetris (USA).cht 31B
  • massivemultitap/nes-fceux/cheats/Tiger-Heli (USA).cht 195B
  • massivemultitap/nes-fceux/cheats/Times of Lore (USA).cht 124B
  • massivemultitap/nes-fceux/cheats/Tiny Toon Adventures (USA).cht 174B
  • massivemultitap/nes-fceux/cheats/Toobin' (USA) (Unl).cht 78B
  • massivemultitap/nes-fceux/cheats/Top Gun (Europe).cht 133B
  • massivemultitap/nes-fceux/cheats/Top Gun (USA).cht 133B
  • massivemultitap/nes-fceux/cheats/Top Gun - The Second Mission (USA).cht 137B
  • massivemultitap/nes-fceux/cheats/Toxic Crusaders (USA).cht 84B
  • massivemultitap/nes-fceux/cheats/Treasure Master (USA).cht 102B
  • massivemultitap/nes-fceux/cheats/Trojan (Europe).cht 256B
  • massivemultitap/nes-fceux/cheats/Trojan (USA).cht 256B
  • massivemultitap/nes-fceux/cheats/Ultima - Exodus (Japan).cht 1.01K
  • massivemultitap/nes-fceux/cheats/Ultima - Exodus (USA).cht 1.01K
  • massivemultitap/nes-fceux/cheats/Ultima - Quest of the Avatar (USA).cht 1.22K
  • massivemultitap/nes-fceux/cheats/Uninvited (USA).cht 32B
  • massivemultitap/nes-fceux/cheats/Urban Champion (World).cht 146B
  • massivemultitap/nes-fceux/cheats/Wizards & Warriors (USA).cht 171B
  • massivemultitap/nes-fceux/cheats/Xenophobe (USA).cht 66B
  • massivemultitap/nes-fceux/cheats/Xevious (Europe).cht 51B
  • massivemultitap/nes-fceux/cheats/Xevious (Japan) (En) (Rev 1).cht 51B
  • massivemultitap/nes-fceux/cheats/Xevious (Japan).cht 51B
  • massivemultitap/nes-fceux/cheats/Xevious - The Avenger (USA).cht 51B
  • massivemultitap/nes-fceux/cheats/Zelda II - The Adventure of Link (Europe) (Rev A).cht 206B
  • massivemultitap/nes-fceux/cheats/Zelda II - The Adventure of Link (Europe) (Rev B).cht 206B
  • massivemultitap/nes-fceux/cheats/Zelda II - The Adventure of Link (Europe).cht 206B
  • massivemultitap/nes-fceux/cheats/Zelda II - The Adventure of Link (USA).cht 382B
  • massivemultitap/nes-fceux/cheats/Zoda's Revenge - StarTropics II (USA).cht 87B
  • massivemultitap/nes-fceux/fceux.cfg 50.65K
  • massivemultitap/nes-fceux/fceux.chm 344.24K
  • massivemultitap/nes-fceux/fceux.exe 1.05M
  • massivemultitap/nes-fceux/fcs/ dir
  • massivemultitap/nes-fceux/lua5.1.dll 164.00K
  • massivemultitap/nes-fceux/lua51.dll 11.00K
  • massivemultitap/nes-fceux/luaScripts/ dir
  • massivemultitap/nes-fceux/luaScripts/AVI-HeadsUpDisplay.lua 3.50K
  • massivemultitap/nes-fceux/luaScripts/BoulderDash_AmoebaAI.lua 24.87K
  • massivemultitap/nes-fceux/luaScripts/BugsBunnyBirthdayBlowout.lua 5.41K
  • massivemultitap/nes-fceux/luaScripts/ButtonCount.lua 3.93K
  • massivemultitap/nes-fceux/luaScripts/CustomLagIndicator_RvT.lua 1.97K
  • massivemultitap/nes-fceux/luaScripts/Excitingbike-speedometeronly.lua 2.29K
  • massivemultitap/nes-fceux/luaScripts/Excitingbike.lua 5.96K
  • massivemultitap/nes-fceux/luaScripts/FRKfunctions.lua 20.29K
  • massivemultitap/nes-fceux/luaScripts/Galaxian.lua 5.66K
  • massivemultitap/nes-fceux/luaScripts/Gradius-BulletHell.lua 11.22K
  • massivemultitap/nes-fceux/luaScripts/GUI-iup_button.lua 744B
  • massivemultitap/nes-fceux/luaScripts/GUI-iup_example.lua 8.10K
  • massivemultitap/nes-fceux/luaScripts/JumpingFCEUXWindow.lua 1.17K
  • massivemultitap/nes-fceux/luaScripts/Luabot.lua 13.45K
  • massivemultitap/nes-fceux/luaScripts/luabot_framework.lua 21.99K
  • massivemultitap/nes-fceux/luaScripts/m_utils.lua 5.54K
  • massivemultitap/nes-fceux/luaScripts/Machrider.lua 7.08K
  • massivemultitap/nes-fceux/luaScripts/MegamanII-LaserEyes.lua 18.44K
  • massivemultitap/nes-fceux/luaScripts/MemoryWatch.lua 1.44K
  • massivemultitap/nes-fceux/luaScripts/Multitrack.lua 26.94K
  • massivemultitap/nes-fceux/luaScripts/Multitrack2.lua 43.69K
  • massivemultitap/nes-fceux/luaScripts/NightmareElmStreet-4Player.lua 1.42K
  • massivemultitap/nes-fceux/luaScripts/PunchOutChallenge.lua 10.16K
  • massivemultitap/nes-fceux/luaScripts/PunchOutStats.lua 2.21K
  • massivemultitap/nes-fceux/luaScripts/PunchOutTraining.lua 4.23K
  • massivemultitap/nes-fceux/luaScripts/RBIBaseball.lua 4.87K
  • massivemultitap/nes-fceux/luaScripts/Registerfind(CheatSearch).lua 5.49K
  • massivemultitap/nes-fceux/luaScripts/Rewinder.lua 2.42K
  • massivemultitap/nes-fceux/luaScripts/shapedefs.lua 1.15K
  • massivemultitap/nes-fceux/luaScripts/ShowPalette.lua 1.83K
  • massivemultitap/nes-fceux/luaScripts/SMB-AreaScrambler.lua 2.50K
  • massivemultitap/nes-fceux/luaScripts/SMB-CompetitionRecorder.lua 3.84K
  • massivemultitap/nes-fceux/luaScripts/SMB-HitBoxes.lua 8.68K
  • massivemultitap/nes-fceux/luaScripts/SMB-Jetpack.lua 10.37K
  • massivemultitap/nes-fceux/luaScripts/SMB-Lives&HPDisplay.lua 2.19K
  • massivemultitap/nes-fceux/luaScripts/SMB-Mouse.lua 17.01K
  • massivemultitap/nes-fceux/luaScripts/SMB-Snow.lua 6.67K
  • massivemultitap/nes-fceux/luaScripts/SMB2U.lua 6.08K
  • massivemultitap/nes-fceux/luaScripts/SMB3-RainbowRiding.lua 14.79K
  • massivemultitap/nes-fceux/luaScripts/SoundDisplay.lua 10.68K
  • massivemultitap/nes-fceux/luaScripts/SoundDisplay2.lua 13.20K
  • massivemultitap/nes-fceux/luaScripts/Subtitler.lua 12.29K
  • massivemultitap/nes-fceux/luaScripts/taseditor/ dir
  • massivemultitap/nes-fceux/luaScripts/taseditor/InputDisplay_for_Selection.lua 2.45K
  • massivemultitap/nes-fceux/luaScripts/taseditor/InvertSelection.lua 1.79K
  • massivemultitap/nes-fceux/luaScripts/taseditor/RecordBackwards.lua 4.08K
  • massivemultitap/nes-fceux/luaScripts/taseditor/ShowNotes.lua 2.45K
  • massivemultitap/nes-fceux/luaScripts/taseditor/Swap1P2P.lua 1.47K
  • massivemultitap/nes-fceux/luaScripts/taseditor/TrackNoise.lua 3.19K
  • massivemultitap/nes-fceux/luaScripts/TeenageMutantNinjaTurtles.lua 1.58K
  • massivemultitap/nes-fceux/luaScripts/tetris.lua 5.23K
  • massivemultitap/nes-fceux/luaScripts/UsingLuaBot-Documentation.txt 9.34K
  • massivemultitap/nes-fceux/luaScripts/UsingLuaScripting-Documentation.txt 10.12K
  • massivemultitap/nes-fceux/luaScripts/UsingLuaScripting-ListofFunctions.txt 12.96K
  • massivemultitap/nes-fceux/luaScripts/vnb.lua 16.63K
  • massivemultitap/nes-fceux/luaScripts/x_functions.lua 6.01K
  • massivemultitap/nes-fceux/luaScripts/x_interface.lua 3.76K
  • massivemultitap/nes-fceux/luaScripts/x_smb1enemylist.lua 2.37K
  • massivemultitap/nes-fceux/luaScripts/ZapperDisplay.lua 858B
  • massivemultitap/nes-fceux/luaScripts/ZapperFun.lua 1.82K
  • massivemultitap/nes-fceux/movies/ dir
  • massivemultitap/nes-fceux/palettes/ dir
  • massivemultitap/nes-fceux/palettes/ASQ_realityA.pal 192B
  • massivemultitap/nes-fceux/palettes/ASQ_realityB.pal 192B
  • massivemultitap/nes-fceux/palettes/BMF_final2.pal 192B
  • massivemultitap/nes-fceux/palettes/BMF_final3.pal 192B
  • massivemultitap/nes-fceux/palettes/FCEU-13-default_nitsuja.pal 192B
  • massivemultitap/nes-fceux/palettes/FCEU-15-nitsuja_new.pal 192B
  • massivemultitap/nes-fceux/palettes/FCEUX.pal 192B
  • massivemultitap/nes-fceux/palettes/nestopia_rgb.pal 192B
  • massivemultitap/nes-fceux/palettes/nestopia_yuv.pal 192B
  • massivemultitap/nes-fceux/sav/ dir
  • massivemultitap/nes-fceux/snaps/ dir
  • massivemultitap/nes-fceux/taseditor.chm 903.27K
  • massivemultitap/nes-fceux/tools/ dir
  • massivemultitap/nes-fceux/tools/taseditor_patterns.txt 1.30K
  • massivemultitap/Roms/ dir
  • massivemultitap/Roms/Super Mario Bros. (Europe) (Rev 0A).nes 40.02K
  • massivemultitap/Roms/Super Mario Bros. (Japan, USA).nes 40.02K
  • massivemultitap/Roms/Super Mario Bros. 3 (USA).nes 384.02K
  • massivemultitap/Roms/Super Mario Kart (Europe) (Rev 0A).sfc 512.00K
  • massivemultitap/Roms/Super Mario World (USA).sfc 512.00K
  • massivemultitap/snes9x-1.53-win32-x64/ dir
  • massivemultitap/snes9x-1.53-win32-x64/cg.dll 9.12M
  • massivemultitap/snes9x-1.53-win32-x64/cgD3D9.dll 1.20M
  • massivemultitap/snes9x-1.53-win32-x64/cgGL.dll 442.60K
  • massivemultitap/snes9x-1.53-win32-x64/changes.txt 147.60K
  • massivemultitap/snes9x-1.53-win32-x64/Cheats/ dir
  • massivemultitap/snes9x-1.53-win32-x64/fmodex64.dll 0.97M
  • massivemultitap/snes9x-1.53-win32-x64/readme-windows.txt 35.74K
  • massivemultitap/snes9x-1.53-win32-x64/Roms/ dir
  • massivemultitap/snes9x-1.53-win32-x64/Saves/ dir
  • massivemultitap/snes9x-1.53-win32-x64/Saves/Super Mario Kart (Europe) (Rev 0A).oops 126.86K
  • massivemultitap/snes9x-1.53-win32-x64/Saves/Super Mario Kart (Europe) (Rev 0A).srm 2.00K
  • massivemultitap/snes9x-1.53-win32-x64/Saves/Super Mario World (USA).srm 2.00K
  • massivemultitap/snes9x-1.53-win32-x64/snes9x-license.txt 5.87K
  • massivemultitap/snes9x-1.53-win32-x64/snes9x-x64.exe 3.98M
  • massivemultitap/snes9x-1.53-win32-x64/snes9x.conf 23.58K
  • massivemultitap/snes9x-1.53-win32-x64/stderr.txt 0B
  • massivemultitap/snes9x-1.53-win32-x64/stdout.txt 356B
  • massivemultitap/snes9x-1.53-win32-x64/Valid.Ext 134B

file_id.diz

This Easy Cheat archive is the compiled work of the NES hackers at:

                         NES Hacker Wiki
        http://www.thealmightyguru.com/Games/Hacking/Wiki

 Visit the Wiki for the latest cheats and hacking information and 
join us to help contribute to the largest NES hacking Wiki online!
LuaBot
Documentation
Written by Qfox


LuaBot is a trial and error script that exhausts the input-search-space by simply trying to push buttons. 

You can program it to limit this searchspace, as it can become exponentially large. Just do the math. You can press eight possible buttons at any frame. That makes up for 8! or 8*7*6*5*4*3*2*1 possible combinations for one single frame. There are 60 frames in one second, that's 60 to the power of (8!).

Anyways, the bot has two parts. The frontend, which we'll call BeeBee, and the Lua part, which we call LuaBot.

You start the bot by openening the luabot_front.lua script file. Make sure the luabot_backend.lua file is in the same directory.

BeeBee

BeeBee (who received it's name from BasicBot, its predecessor) just writes it's contents into the LuaBot framework and produces a big Lua script for you.
All you need to do is enter Lua code for the specific functions and the code will generate the script.

You can also save and load the contents of the front-end. That way you can easily manage your bot scripts, without actually having to look into the LuaBot code.

BeeBee is only a pasting mechanism. It does not compile Lua or warn for errors.

LuaBot

LuaBot is a generic trial-and-error script that serves as a bot framework. It will set inputs as you program them for a number of frames (called an attempt). When the isAttemptEnd() says the attempt ends, a new attempt is started. All the attempts fall under one segment. At the end of a segment (denoted by the isSegmentEnd() function), the best attempt is kept (judged by the score and tie functions) and the next segment is started. The bot is capable of rolling back if a segment runs into a dead end. This allows you to backtrack and restart a previous segment.

The bot evaluates a true or false by checking to see whether the return value of a function is bigger then a certain value. It does this for EVERY function that returns something and every function that returns something must return a number (or Lua _will_ complain). For absolute true or false you can return "yes" and "no", "maxvalue" and "minvalue" or "pressed" and "released". Read variable info for more information.

The script takes a number of variables and functions into account. Some variables become important to prevent desyncing over segments.

- maxvalue
The maximum value (exclusive) of the random evaluation. If a value is higher than rand(minvalue, maxvalue), it evaluates as true, else false. By default this is set to 100.

- minvalue
The lowest value (inclusive) of the random evaluation. If a value is lower than rand(minvalue, maxvalue), it evaluates to false, else true. By default this is set to 0.

- yes / no
- pressed / released
These map to the minvalue/maxvalue.

- loopcounter
The number of times a frameadvance has been called by the main botloop.

- key1 key2 key3 key4
The input table of players 1-4. The keys are: A B up down left right select start. Set any to 1 if you want them to be set and to nil if you don't want them set.
Note that these get cleared right before onInputStart is called. This variable is saved in a pseudo-movie table if the attempt is better then the previous one and used for playback when moving to the next segment.

- lastkey1 lastkey2 lastkey3 lastkey4
The inputs that were given to FCEU on the PREVIOUS frame. This holds for segments as well (at the beginning of a new segment, the lastkeys of the previous segment are set). This also goes for the start. If you use key1-4 in onStart, the first segment will have those keys as lastkey.

- frame
The number of frames of the current attempt. Starts at 1.

- attempt
The number of attempts in the current segment. Starts at 1.

- segment
The segment the bot is currently running. Note that rolledback segments are deducted from this number.

- okattempts
The number of attempts that have been deemed ok. This is a statistical variable. It might tell you how well your bot is doing (combined with the number of failed attempts).

- failattempts
The number of attempts in the current segment that have been deemed bad. This is a statistical variable. It might tell you how well your bot is doing (combined with the number of approved attempts).

- segments
This is the big table that holds everything together. Don't mess with it.

- maxframes
You can set maxframes and check it in the isAttemptEnd function to simply limit a attempt by this many frames. You can also just ignore this and do something else instead.

- maxattempts
Same as maxframes, except for attempts in a segment.

- maxsegments
Same as maxframes, except for segments in a run.

- playingbest
Will be set to true when the bot is playing back it's best attempt to advance to the next segment. Not really used by other functions.

- keyrecording1-4
A simple table with the pressed keys for playback.

- X Y Z P Q
Some "static" variables. These allow you to easily set them onStart and use them in various functions to return the same number. Like a global variable. The P and Q numbers used to denote a random number between 0 and P or Q, but they don't right now.

- vars
This is your variable table. It's contents is saved at the end of an attempt and will be loaded at the beginning of a segment. On rollback, this table is also kept. Put any variable you want to keep accross segments in this table.


Ok. That's it for the variables. Now for functions. There are basically three types of functions. The functions that determine whether a button is pressed (8 for each player), to determine whether an attempt/segment/run has ended or was ok and functions for certain events. This number is not evaluated by the random-eval function.

- getScore
This returns how "well" the current attempt is. At the end of a segment, the best scoring good attempt will be used to continue to the next segment. In case of a tie, see the tie functions. This number is not evaluated by the random-eval function!

- getTie1-4
If the score ends in a tie, that is, two attempts score equally well (have an equal number of points for instance), you can use these functions to break that tie. Like, which attempt has the most health or is the fastest or whatever. This number is not evaluated by the random-eval function!

- isRunEnd
Return whether the bot should stop running. If the returned number is bigger then the random number rand(minvalue-maxvalue), the bot will stop.

- mustRollBack
Returns whether the bot should rollback the current attempt. In such case, the previous segment is loaded and the current segment is completely discarded. If the returned number is bigger then the random number rand(minvalue-maxvalue), the segment will rollback one segment.

- isSegmentEnd
If the returned number is bigger then the random number rand(minvalue-maxvalue), the bot will stop the current segment, play back the best recorded attempt and start a new segment. Mostly done when a certain number of attempts is reached, but possibly you know when have the best possible attempt and can move on.

- isAttemptEnd
If the returned number is bigger then the random number rand(minvalue-maxvalue), the attempt will stop and a new attempt will be started. Some examples when this function should return yes is when you reached a certain goal, a number of frames or when you died (in which case the bot should try again :).

- isAttemptOk
If the returned number is bigger then the random number rand(minvalue-maxvalue), the current attempt (which has just ended) is deemed ok. Only attempts that are deemed ok are up for being saved. For instance, when the player died in the current attempt, you should return no.

- pressKeyX (pressKeyA1, pressKeyStart4, etc...)
These functions determine whether a button should be pressed in the next frame. If the returned number is bigger then the random number rand(minvalue-maxvalue), the button is pressed, otherwise it is not. To absolutely press a button, simply return yes or no. To use some odds, return a number between minvalue and maxvalue. For instance, using the default settings, if you return 50, there is a 50% chance the button will be pressed.

- onStart
Maybe a little misleading, but the onStart function is called BEFORE the main botloop starts. You can do some non-generic startup stuff here like press start at the title screen and get the game started. Returns nothing.

- onFinish
The opposite to onStart, this function is called when the main botloop exits. You can cleanup, or write stuff or whatever.

- onSegmentStart
When a new segment is started, this is called. After initializing variables and such, but before onAttemptStart is called. Returns nothing.

- onSegmentEnd
When isSegmentEnd evaluates to true, this function is called. Returns nothing.

- onAttemptStart
Called at the start of a new attempt, after onSegmentStart (in case of a new segment) but before onInputStart. Returns nothing.

- onAttemptEnd(wasOk)
Called at the end of an attempt. The only function to have a parameter (note: case sensitive). The parameter wasOk will return (boolean) whether isAttemptOk evaluated to true or false. Returns nothing.

- onInputStart
In a frame, this is the first place where the key1-4 variables are cleared. This is called before all the input (pressKeyX) functions are called. Returns nothing.

- onInputEnd
This is called immediately after the input (pressKeyX) functions have been called. Returns nothing.

Learning to use Lua Sctripting for FCEUX
Written by QFox

This is a document designed primarily to help someone use FCEUX specific commands with LUA, and tends to assume that you have some programming experience. It is best used for basic coding reference, and it is not comprehensive, in that there are a large number of things that LUA can do which aren't mentioned here. For a broad overview of the LUA language, check here:

The Manual: (Good for learning LUA's basic capabilities, but you don't need to learn it all before using LUA)
http://www.lua.org/manual/

Programming in LUA: (Good for finding exact coding syntax, such as for LUA arrays, or to get coding examples)
http://www.lua.org/pil/

Other .lua files:
Don't be afraid to copy, look through, and break existing .lua scripts in order to make your own. Taking a piece of other people's code and learning how it works, modifying it, or outright duplicating it for your own project generally isn't frowned upon, as long as you know that what you release may eventually be used by others for their projects.

Windows users - see also the Lua Scripting chapter for the FCEUX sHelp manual (fceux.chm)

Ok. Lua. Let's see.

Lua is a scripting language. It is used in games like Farcry and World of Warcraft (and many other games and applications!). Even though you can find all kinds of tutorials online, let me help you with the basics.

I will asume you are at least somewhat familiar with the basics of programming. So basic stuff like arrays, variables, strings, loops and if-then-else and branching are not explained here.

A hello world EmuLua program looks like this:

while (true) do
	gui.text(50,50,"Hello world!");
	FCEU.frameadvance();
end;

When you load the script, the emulator will sort of go into pause mode and hand controls over to Lua (you!). Hence you are responsible for frameadvancing the emulator.
IF YOU DO NOT CALL FCEU.frameadvance AT THE CYCLE OF THE MAIN LOOP YOU WILL FREEZE THE EMULATOR! There. You have been warned. Don't worry though, you'll make this mistake at least once. Just force-quit the application and try again :)

Now then. Just like any other language, Lua has a few quirks you should be aware of.

First of all, if's require a then and end. After a couple of days intensive Lua coding, I still make this mistake myself, but the Lua interpreter will prompt you of such errors on load, so don't worry too much about it. So:

if (something) then
	dostuff
end;

Lua uses nil instead of null.

There are only two values that evaluate to "false", these are "nil" and "false". ANYTHING else will evaluate to true, even 0 or the empty string.

Comments are denoted by two consecutive dashes; --. Anything after it on the same line is a comment and ignored by Lua. There is no /* */ type of commenting in Lua.

Variables have a local and global scope. You explicitly make a variable local by declaring it with the "local" keyword.

somethingglobal; -- accessible by any function or flow
local something; -- only known to the same or deeper scope as where it was declared

Note that variables declared in for loops (see below) are always considered local.

Arrays are called tables in Lua. To be more precise, Lua uses associative arrays.

Do not rely on the table.length() when your table can contain nil values, this function stops when it encounters a nil value, thus possibly cutting your table short.

One experienced programmers will have to get used to is the table offset; tables start at index 1, not 0. That's just the way it is, deal with it.

There are a few ways to create a table:

local tbl1 = {}; -- empty table
local tbl2 = {"a","b","c","d"}; -- table with 5 strings
local tbl3 = {a=1,b=2,c=3}; -- associative table with 3 numbers
local tbl4 = {"a",b=2,c="x","d"=5}; -- associative table with mixed content

Note that you can mix up the data in one table, as shown by tbl4.

You can refer to table values in a few equivalent manners, using the examples above:

tbl1[1] -- = nil because tbl1 is empty
tbl2[2] -- = "b"
tbl3["a"] -- = 1
tbl4.b -- = 2
tbl2.3 -- = "c"

When the argument of a function is just a table, the parantheses "()" are optional. So for instance:

processTable({a=2,b=3});

Is equivalent to

processTable{a=2,b=3};

Another notation that's equivalent is

filehandle.read(filehandle, 5);
filehandle:read(5);

When using the colon notation ":" Lua will call the function adding the self-reference to the front of the parameterstack.

Functions behave like objects and are declared in the follow manner:

function doSomething(somevalue, anothervalue)
	dostuffhere
end;

So no curly braces "{}" !

Some flow control:

for i=0,15 do
  -- do stuff here, i runs from 0 to 15 (inclusive!)
end;

for key,value in pairs(table) do
  -- do stuff here. pairs will iterate through the table, splitting the keys and values
end;

while (somethingistrue) do

end;

if (somethingistrue) then

end;

if (somethingistrue) then

else

end;

if (somethingistrue) then

elseif (somethingelseistrue) then

end;

For comparison, you only have to remember that the exclamationmark is not used. Not equal "!=" is written like tilde-equals "~=" and if (!something) then ... is written with "not " in front of it; if (not something) then...

For easy reference to the standard libraries look on the bottom half of this page: http://www.lua.org/manual/5.1/


Now then, let's get to the emulator specifics!

To load a Lua script in FCEU first load a rom (Lua can only do things after each frame cycle so load a rom first). Go to file, at the bottom choose Run Lua Script and select and load the file.

When Lua starts, the emulator pauses and hands control over to Lua. Lua (that's you!) decides when the next frame is processed. That's why it's very common to write an endless while loop, exiting the main loop of a script will exit the script and hand control back to the emulator. This also happens when a script unexpectingly crashes.

A bare script looks like this:

while (true) do
  FCEU.frameadvance();
end;

And is about equal to not running Lua at all. The frameadvance function is the same called internally, so no loss of speed there!

Bitwise operators:

Lua does not have bitwise operators, so we supply some for you. These are common bitwise operators, nothing fancy.

AND(a,b);
OR(a,b);
XOR(a,b);
BIT(n); -- returns a number with only bit n set (1)

The emulator specific Lua is equal to the one of snes9x, with some platform specific changes (few buttons, for instance). 
You can find the reference here: http://dehacked.2y.net/snes9x-lua.html
The following is a quick reference, you can go to the snes9x reference for more details.

To paint stuff on screen, use the gui table. This contains a few predefined functions to manipulate the main window. For any coordinate, 0,0 is the top-left pixel of the window. You have to prevent out-of-bound errors yourself for now. If a color can be passed on, it is a string. HTML-syntax is supported ("#34053D"), as well as a FEW colors ("red", "green", "blue" ...).

gui.text(x, y, str); -- Print a line to the window, you can use \n for a return but it will only work once
gui.drawpixel(x, y, color); -- plot a pixel at the given coordinate
gui.drawline(x1, y1, x2, y2, color); -- plot a line from x1,y1 to x2,y2
gui.drawbox(x1, y1, x2, y2, color); -- draw a square from x1,y1 to x2,y2
gui.popup(str); -- pops up a messagebox informing the user of something. Real handy when debugging!
gui.getpixel(x,y); -- return the values of the pixel at given position. Returns three numbers of the emulator image before paiting is applied.
gui.gdscreenshot(); -- Takes a screen shot of the image and returns it in the form of a string which can be imported by the gd library using the gd.createFromGdStr() function
(for more gd functions see DeHackED's reference: http://dehacked.2y.net/snes9x-lua.html)

PAINTING IS ALWAYS ONE FRAME BEHIND! This is because the painting is done at the creation of the next frame, not while Lua is running.

Emulator control:

FCEU.frameadvance(); -- advances emulation ONE frame
FCEU.pause(); -- same as pressing the pause button
FCEU.speedmode(strMode); -- Supported are "normal","turbo","nothrottle","maximum". But know that except for "normal", all other modes will run as "turbo" for now.
FCEU.wait(); -- skips the emulation of the next frame, in case your script needs to wait for something

Memory control:

memory.readbyte(adr); -- read one byte from given address and return it. Besides decimal values Lua also allows the hex notation 0x00FA. In FCEUX reading is done BEFORE the cheats are applied!
memory.writebyte(adr, value); -- write one byte to the RAM of the NES. writing is done AFTER the hexeditor receives its values, so if you are freezing an address by Lua, it will not show in the hex editor (but it will in the game :)
memory.readbytesigned(adr); -- same as readbyte, except this returns a signed value, rather then an unsigned value.
memory.register(adr, function); -- binds a function to an address. The function will be called when an address changes. NOTE THAT THIS IS EXPENSIVE (eg.: slow)! Only one function allowed per address.

Input control:

You can read and write input by using the joypad table. A input table has the following (case sensitive) keys, where nil denotes they are not to be pressed: up down left right start select A B

joypad.read(playern); -- get the input table for the player who's input you want to read (a number!)
joypad.write(playern, inputtable); -- set the input for player n. Note that this will overwrite any input from the user, and only when this is used.

Savestates:

You can load and save to the predefined savestates 1 ... 9 or create new "anonymous" savestates. You must first create a savestate object, which is your handle to a savestate. Then you can pass this handle on to savestate.load or save to do so.

savestate.create(n); -- n is optional. When supplied, it will create a savestate for slot n, otherwise a new (anonymous) savestate object is created. Note that this does not yet save or load anything!
savestate.load(state); -- load the given savestate
savestate.save(state); -- save the given savestate

Library Listing of FCEUX Lua Functions
Written by adelikat/QFox

FCEU library

FCEU.poweron()

Executes a power cycle.

FCEU.softreset()

Executes a (soft) reset.

FCEU.speedmode(string mode)

Set the emulator to given speed. The mode argument can be one of these:
	- "normal"
	- "nothrottle" (same as turbo on fceux)
	- "turbo"
	- "maximum"

FCEU.frameadvance()

Advance the emulator by one frame. It's like pressing the frame advance button once.

Most scripts use this function in their main game loop to advance frames. Note that you can also register functions by various methods that run "dead", returning control to the emulator and letting the emulator advance the frame.  For most people, using frame advance in an endless while loop is easier to comprehend so I suggest  starting with that.  This makes more sense when creating bots. Once you move to creating auxillary libraries, try the register() methods.

FCEU.pause()

Pauses the emulator. FCEUX will not unpause until you manually unpause it.

FCEU.exec_count()



FCEU.exec_time()



FCEU.setrenderplanes(bool sprites, bool background)

Toggles the drawing of the sprites and background planes.  Set to false or nil to disable a pane, anything else will draw them.

FCEU.message(string message)

Displays given message on screen in the standard messages position. Use gui.text() when you need to position text.

int FCEU.lagcount()

Return the number of lag frames encountered. Lag frames are frames where the game did not poll for input because it missed the vblank. This happens when it has to compute too much within the frame boundary. This returns the number indicated on the lag counter.

bool FCEU.lagged()

Returns true if currently in a lagframe, false otherwise.

bool FCEU.getreadonly()

Returns whether the emulator is in read-only state.  

While this variable only applies to movies, it is stored as a global variable and can be modified even without a 	movie loaded.  Hence, it is in the FCEU library rather than the movie library.

FCEU.setreadonly(bool state)

Sets the read-only status to read-only if argument is true and read+write if false.
Note: This might result in an error if the medium of the movie file is  not writeable (such as in an archive file).

While this variable only applies to movies, it is stored as a global variable and can be modified even without a 	movie loaded.  Hence, it is in the FCEU library rather than the movie library.


ROM Library

rom.readbyte(int address)

Get an unsigned byte from the actual ROM file at the given address.  

This includes the header! It's the same as opening the file in a hex-editor.

rom.readbytesigned(int address)

Get a signed byte from the actual ROM faile at the given address. Returns a byte that is signed.

This includes the header! It's the same as opening the file in a hex-editor.


Memory Library

memory.readbyte(int address)

Get an unsigned byte from the RAM at the given address. Returns a byte regardless of emulator. The byte will always be positive.	

memory.readbyterange(int address, int length)

Get a length bytes starting at the given address and return it as a string. Convert to table to access the individual bytes.

memory.readbytesigned(int address)

Get a signed byte from the RAM at the given address. Returns a byte regardless of emulator. The most significant bit will serve as the sign.

memory.writebyte(int address, int value)

Write the value to the RAM at the given address. The value is modded with 256 before writing (so writing 257 will actually write 1). Negative values allowed.

memory.register(int address, function func)

Register an event listener to the given address. The function is called whenever write occurs to this address. One function per address. Can be triggered mid-frame. Set to nil to remove listener.  Given function may not call frame advance or any of the savestate functions. Joypad reading/writing is undefined (so don't).

Note: this is slow!


Joypad Library

table joypad.read(int player)

Returns a table containing the buttons pressed by the given player. This takes keyboard inputs, not Lua. The table keys look like this (case sensitive):

up, down, left, right, A, B, start, select

Where a Lua truthvalue true means that the button is set, false means the button is unset. Note that only "false" and "nil" are considered a false value by Lua.  Anything else is true, even the number 0.

joypad.set(int player, table input)

Set the inputs for the given player. Table keys look like this (case sensitive):

up, down, left, right, A, B, start, select

There are 3 possible values, true, false, and nil.  True will turn the button on, false will turn it off.  Nil will leave it unchanged (allowing the user to control it).

table joypad.get()

A alias of joypad.read().  Left in for backwards compatibility with older versions of FCEU/FCEUX.

joypad.write()

A alias of joypad.set().  Left in for backwards compatibility with older versions of FCEU/FCEUX.


Zapper Library

table zapper.read()

Returns the mouse data (which is used to generate zapper input, as well as the arkanoid paddle).

The return table consists of 3 values: xmouse, ymouse, and click.  xmouse and ymouse are the x,y coordinates of the cursor in terms of pixels.  click represents the mouse click.  0 = no click, 1 = left cick, 2 = right click.  

Currently, zapper data is ignored while a movie is playing.

Note: The right-click isn't used in zapper data
Note: The zapper is always controller 2 on the NES so there is no player argument to this function.


Input Library

table input.get()

Reads input from keyboard and mouse. Returns pressed keys and the position of mouse in pixels on game screen.  The function returns a table with at least two properties; table.xmouse and table.ymouse.  Additionally any of these keys will be set to true if they were held at the time of executing this function:
leftclick, rightclick, middleclick, capslock, numlock, scrolllock, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, F1, F2, F3, F4, F5, F6,  F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, backspace, tab, enter, shift, control, alt, pause, escape, space, pageup, pagedown, end, home, left, up, right, down, numpad0, numpad1, numpad2, numpad3, numpad4, numpad5, numpad6, numpad7, numpad8, numpad9, numpad*, insert, delete, numpad+, numpad-, numpad., numpad/, semicolon, plus, minus, comma, period, slash, backslash, tilde, quote, leftbracket, rightbracket.

Savestate Library

object savestate.create(int slot = nil)

Create a new savestate object. Optionally you can save the current state to one of the predefined slots (0...9), otherwise you'll create an "anonymous" savestate.
Note that this does not actually save the current state! You need to create this value and pass it on to the load and save functions in order to save it.

Anonymous savestates are temporary, memory only states. You can make them persistent by calling memory.persistent(state). Persistent anonymous states are deleted from disk once the script exits.

savestate.save(object savestate)

Save the current state object to the given savestate. The argument is the result of savestate.create(). You can load this state back up by calling savestate.load(savestate) on the same object.

savestate.load(object savestate)

Load the the given state. The argument is the result of savestate.create() and has been passed to savestate.save() at least once.

If this savestate is not persistent and not one of the predefined states, the state will be deleted after loading.

savestate.persist(object savestate)

Set the given savestate to be persistent. It will not be deleted when you load this state but at the exit of this script instead, unless it's one of the predefined states.  If it is one of the predefined savestates it will be saved as a file on disk.

	
Movie Library

bool movie.active()

Returns true if a movie is currently loaded and false otherwise.  (This should be used to guard against Lua errors when attempting to retrieve movie information).

int movie.framecount()

Returns the framecount value.  The frame counter runs without a movie running so this always returns a value.

string movie.mode()

Returns the current state of movie playback. Returns one of the following:

- "record"
- "playback"
- nil

movie.rerecordcounting(bool counting)

Turn the rerecord counter on or off. Allows you to do some brute forcing without inflating the rerecord count.

movie.stop()

Stops movie playback.  If no movie is loaded, it throws a Lua error.

int movie.length()

Returns the total number of frames of the current movie.  Throws a Lua error if no movie is loaded.

string movie.getname()

Returns the filename of the current movie.  Throws a Lua error if no movie is loaded.

movie.rerecordcount()

Returns the rerecord count of the current movie.  Throws a Lua error if no movie is loaded.

movie.playbeginning()

Performs the Play from Beginning function.  Movie mode is switched to read-only and the movie loaded will begin playback from frame 1.

If no movie is loaded, no error is thrown and no message appears on screen.


GUI Library

gui.drawpixel(int x, int y, type color)

Draw one pixel of a given color at the given position on the screen.  See drawing notes and color notes at the bottom of the page.  

gui.drawline(int x1, int y1, int x2, int y2, type color)

Draws a line between the two points.  See also drawing notes and color notes at the bottom of the page.

gui.drawbox(int x1, int y1, int x2, int y2, type color)

Draw a box with the two given opposite corners.
Also see drawing notes and color notes.

gui.text(int x, int y, string str)

Draws a given string at the given position.

string gui.gdscreenshot()

Takes a screen shot of the image and returns it in the form of a string which can be imported by the gd library using the gd.createFromGdStr() function.

This function is provided so as to allow FCEUX to not carry a copy of the gd library itself. If you want raw RGB32 access, skip the first 11 bytes (header) and then read pixels as Alpha (always 0), Red, Green, Blue, left to right then top to bottom, range is 0-255 for all colors.

Warning: Storing screen shots in memory is not recommended. Memory usage will blow up pretty quick. One screen shot string eats around 230 KB of RAM.

gui.gdoverlay(int x = 0, int y = 0, string dgimage)

Overlay the given image on the emulator.  Transparency is absolute (any pixel not 100% transparent is completely opaque).  The image must be  gd file format version 1, true color.  Image will be clipped to fit.

gui.transparency(int strength)

Set the transparency level for subsequent painting (including gdoverlay). Does not stack.
Values range from 0 to 4. Where 0 means completely opaque and 4 means completely transparent.

function gui.register(function func)

Register a function to be called between a frame being prepared for displaying on your screen and it actually happening. Used when that 1 frame delay for rendering is not acceptable.

string gui.popup(string message, string type = "ok")

Shows a popup. Default type is "ok". Can be one of these:

- "ok" - "yesno" - "yesnocancel"
Returns "yes", "no" or "cancel" indicating the button clicked.

Linux users might want to install xmessage to perform the work. Otherwise the dialog will appear on the shell and that's less noticeable.


Bitwise Operations

int AND(int n1, int n2, ..., int nn)

Binary logical AND of all the given integers. This function compensates for Lua's lack of it.

int OR(int n1, int n2, ..., int nn)

Binary logical OR of all the given integers. This function compensates for Lua's lack of it.

int XOR(int n1, int n2, ..., int nn)

Binary logical XOR of all the given integers. This function compensates for Lua's lack of it.

int BIT(int n1, int n2, ..., int nn)

Returns an integer with the given bits turned on. Parameters should be smaller than 31.


Appendix

On drawing

A general warning about drawing is that it is always one frame behind unless you use gui.register. This is because you tell the emulator to paint something but it will actually paint it when generating the image for the next frame. So you see your painting, except it will be on the image of the next frame. You can prevent this with gui.register because it gives you a quick chance to paint before blitting.

Dimensions & color depths you can paint in:
320x239, 8bit color (confirm?)

On colors

Colors can be of a few types.
Int: use the a formula to compose the color as a number (depends on color depth)
String: Can either be a HTML color or simple colors.
HTML string: "#rrggbb" ("#228844") or #rrggbbaa if alpha is supported.
Simple colors: "clear", "red", "green", "blue", "white", "black", "gray", "grey", "orange", "yellow", "green", "teal", "cyan", "purple", "magenta".

For transparancy use "clear", this is actually int 1.



Alternating (1010...)
10
Alternating at 30FPS (11001100...)
1100
One Quarter (10001000...)
1000
Tap'n'Hold (101111111...)
1011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
One-Two (1011010110...)
10110

FORMAT OF THIS FILE: 2 lines per every Pattern - first line is the name, second line is looped sequence of presses: 1 = press button, 0 = don't press button.



Snes9x 1.53

- Rebuilt IRQ handling.                                     (zones)
- Improved overall timings, now Snes9x can handle events in
  a opcode a little.                                        (zones)
- Improved screen interlace and sprite interlace supports.  (OV2, zones)
- Fixed Hi-Res pixel plotter.                               (BearOso, zones, OV2)
- Fixed C4 for Mega Man X2's "weapon get" screen.           (Jonas Quinn)
- Fixed Super Buster Bros. graphics after reset.            (Jonas Quinn)
- Improved SA-1 support.                                    (zones)
- Added SA-1 CC2 support.                                   (Jonas Quinn, byuu)
- Fixed SA-1 NMI override mode.                             (zones)
- Fixed Dual Orb 2 sound glitch.                            (byuu)
- New APU timing hack, fixes various games that exhibit
  problems with Blargg's SNES_SPC library.                  (OV2)
- Fixed the problem that echo buffer breaks IPL ROM.        (zones, OV2)
- Fixed movie snapshot unfreeze inconsistency.              (gocha)
- Faster config file saving.                                (OV2)
- Fixed BlockInvalidVRAMAccess config file option.
  (windows port, unix port and gtk legacy config)           (Jonas Quinn)
- Remove POSIX dup and access calls, and rename qword to
  fix compilation with Cell SDK.                            (BearOso)
- Fixed PS3 version save state crash by using heap
  allocation for soundsnapshot.                             (danieldematteis)
- Fixed crash relating to double-closed descriptor.         (BearOso)
- Removed CPUShutdown speedhack, DisableHDMA and
  DisableIRQ options.                                       (zones)
- Removed remaining outdated asm code.                      (zones)
- JMA 64 bit support.                                       (kode54, Nach, friedrich.goepel)
- GTK+, Win32, Mac: Added optional Hi-Res blending.         (BearOso, OV2, zones)
- GTK+, Win32: Support for bsnes-style XML shaders.         (BearOso, OV2)
- Win32: Full unicode support.                              (OV2)
- Win32: Restored OpenGL mode.                              (OV2)
- Win32: x64 version.                                       (OV2)
- Win32: HLSL shader support.                               (mudlord)
- Win32: Win7 jumplist synchronizes with recent roms list.  (OV2)
- Win32: Updated menu structure.                            (OV2)
- Win32: Drag&Drop support for ROMs.                        (gocha, OV2)
- Win32: Reworked movie-recording with size selection.      (gocha, OV2)
- Win32: Restored SPC save option.                          (OV2)
- Win32: Fixed vsync in DirectDraw.                         (OV2)
- Win32: Improved window position saving.                   (OV2)
- Win32: Restored compile with DEBUGGER.                    (gocha)
- Win32: Fixed various edge-case errors and/or possible
  leaks.                                                    (Brian Friesen)
- Win32: Config file option to always center image.         (OV2)
- Win32: Fixed "Turbo Down mode" hotkey assignment.         (gocha)
- Win32: Added and fixed Autofire for D-pad.                (gocha)
- Win32: Fixed aggressive soundsync wait.                   (OV2)
- Win32: Added window size presets.                         (OV2)
- Mac  : Added pause and frame advance functions.           (zones)
- Mac  : Now you can choose any folder for saving files.    (zones)
- Mac  : Updated Music Box (mostly internally).             (zones)
- Mac  : Fixed gliches in open/save dialogs on 10.6.        (zones)
- Mac  : Fixed display configuration in windowed mode.      (zones)
- Unix : Fixed segfault and hang-up with -DNOSOUND.         (zones)
- GTK+ : Added ability to set specific folders for SRAM, 
  patches, snapshots, etc.                                  (BearOso)
- GTK+ : Fixed many permissions issues with config folders. (BearOso)
- GTK+ : Updated compatibility with latest GTK+ and 
  GtkBuilder. Added experimental support for GTK+ 3.x.      (BearOso)
- GTK+ : Updated software output to use cairo and added the 
  ability to use bilinear-filtering with it.                (BearOso)
- GTK+ : Fixed issues where cheats wouldn't stay enabled.   (BearOso)
- GTK+ : Fixed focus issue when there is no window manager. (BearOso)
- GTK+ : Fixed X Visual incompatibilities and expose 
  problems in the Xv and OpenGL outputs.                    (BearOso)
- GTK+ : Fixed vsync with new X Server and NVIDIA drivers.  (BearOso)
- GTK+ : Added "Reduce input lag" option to OpenGL output.  (BearOso)
- GTK+ : Added a visual indication of the expected video 
  refresh rate for the currently selected sound input rate. (BearOso)

Snes9x 1.52
- IMPORTANT NOTICE: The structure of savestates (also known
  as snapshots / freeze files) is incompatible with older
  versions! Snes9x 1.52 cannot read the savestates created
  by 1.51 or older.                                         (zones)
- Highly acculate SPC700 and S-DSP emulation.               (Blargg)
- Replaced APU emulation cores (SPC700 and S-DSP) with
  ones provided by Blargg's SNES_SPC library. This renders
  savestates incompatible with older versions.              (BearOso, zones)
- SPC7110 emulation.                                        (byuu, neviksti)
- Merged bsnes' SPC7110 emulation code. Note that the .rtc
  file of Far East of Eden Zero is incompatible with older
  versions.                                                 (zones)
- Removed graphics pack support. It's no more necessary.    (zones)
- Replaced S-RTC emulation code with bsnes' one to keep the
  good compatibility of .rtc files between the two
  emulators. As a result, Daikaijuu Monogatari 2 now
  outputs the .rtc file, and its .srm file is incompatible
  with older versions.                                      (zones)
- Added savestate supports for DSP-2, DSP-4, ST-010 and
  OBC1.                                                     (zones)
- Added UPS support.                                        (byuu)
- Fixed DSP-4 AI problem.                                   (Jonas Quinn)
- Fixed invalid memory accesses in C4 and OBC1 codes.       (zones)
- Fixed invalid memory accesses in BSX codes. My mistake.   (zones)
- Fixed the read value of $213e, $4210 and $4211.           (zones)
- Fixed the writing of word values at the memory boundary.  (zones)
- Fixed the bug that the unnecessary SA-1 emulation
  continues once any SA-1 games are launched.               (zones)
- Removed old color blending codes.                         (zones)
- Removed too-old Snes96 and ZSNES snapshot support.        (zones)
- Updated command-line options.                             (zones)
- Code cleaning.                                            (zones)
- GTK+ : Added a port of Snes9x to the GTK+ toolkit.        (BearOso)
- Unix : Reconstructed and simplified all the contents.
  Some features have been removed to be simple, and many
  options have changed. GTK+ port is recommended for most
  of Linux users.                                           (zones)
- Win32: Now uses snes9x.conf to prevent problems with
  modified meaning of settings.                             (OV2)
- Win32: Removed broken OpenGL mode.                        (OV2)
- Win32: Removed support for 8bit output.                   (OV2)
- Win32: Reworked settings dialogues to accomodate the
  new APU core and display settings.                        (OV2)
- Win32: Updated defaults to use D3D and XA2 (better
  Vista and Win7 support).                                  (OV2)
- Win32: Direct3D and XAudio2 support.                      (OV2)
- Win32: Added Blargg's ntsc filter (three presets).        (OV2)
- Mac  : Fixed corrupted screenshot on Intel Mac.           (zones)
- Mac  : Fixed sudden abort in QuickTime movie export on
  Intel Mac.                                                (zones)
- Mac  : Changed sound settings for the new APU core.       (zones)
- Mac  : Changed the default folder which Snes9x looks for
  to 'Application Support' folder.                          (zones)
- Mac  : Changed folder names: 'IPSs' -> 'Patches',
  'BIOSs' -> 'BIOSes'.                                      (zones)
- Mac  : Added Blargg's ntsc filter.                        (zones)
- Mac  : Internal changes for Leopard and Snow Leopard.     (zones)

Snes9x 1.51
- Added DSP1 and SuperFX savestate support.                 (nitsuja)
- Added screen state GFX to save states. (optional)         (nitsuja)
- Fixed desync when loading inconsistent state in playback. (nitsuja)
- When playback reaches a movie's end, recording continues
  instead of the movie suddenly closing. (after recording)  (nitsuja)
- can now record resets and mouse/superscope/justifier(s)   (nitsuja)
- Added same-line-comment support for config files.         (nitsuja)
- input display for all controllers (including peripherals) (nitsuja)
- Win32: Now uses .cfg file instead of Windows registry.    (nitsuja)
- Win32: open ROM dialog bugfixes and speedup and facelift  (nitsuja)
- Win32: option to use standard file open dialog for ROMs   (nitsuja)
- Win32: maintain aspect ratio and bilinear filter stretch  (nitsuja)
- Win32: optional removal of the dreaded "black bar"        (nitsuja)
- Win32: Added EPX,EPX2,EPX3,HQ2X,HQ3X,TV3X,DM3X filters.   (nitsuja)
- Win32: Added hires support for Interlace and TV Mode.     (nitsuja)
- Win32: text removed from .avi output (optional)           (nitsuja)
- Win32: better directory management, customizeable         (nitsuja)
- Win32: Screenshot support is back.                        (nitsuja)
- Win32: Netplay is back (but still not very good).         (nitsuja)
- Win32: Made OpenGL Bi-linear an advanced .cfg option.     (nitsuja)
- Win32: cheat search improvements (address, watch, SuperFX)(nitsuja)
- Win32: Added non-modal ("active") cheat search option.    (nitsuja)
- Win32: new hotkey-config dialog and configurable hotkeys  (nitsuja)
- Win32: Fixed joystick config in input dialog.             (nitsuja)
- Win32: Fixed hires and extended height .avi output.       (nitsuja)
- Win32: various small GUI improvements                     (nitsuja)
- Win32: Netplay fixes.                                     (nitsuja)
- "Fake Mute" desync workaround option for movies, until
  all ports have deterministic sound.                       (Bisqwit, nitsuja)
- Fix for save state blocks > 999999 bytes.                 (Bisqwit)
- C4 games now save C4 data in save states.                 (DeHackEd)
- Unix: Framework for high-speed seeking. Specify a frame
  number in a movie, and the emulator will run at
  maximum speed to that frame. Untested.                    (DeHackEd)
- X11: Support for window exposure. When a window is
  damaged due to overlay, being iconified, etc. it will
  be repainted correctly.                                   (DeHackEd)
- Unix: parameter: -autodemo <filename> loads a movie for
  playback on startup. Only the x11 code handles this
  right now.                                                (DeHackEd)
- Unix: parameter: -oldturbo,  the turbo button renders all
  frames when fast-forwarding.                              (DeHackEd)
- Unix: parameter: -upanddown, override U+D and
  L+R protection.                                           (DeHackEd)
- Unix: parameter: -mute, currently linux only, blocks out
  audio output from your speakers while still emulating
  sound. Not fully tested.                                  (DeHackEd)
- Unix: parameter: -maxframes <target> during movie
  playback, snes9x will exit when the target is hit.        (DeHackEd)
- Unix: parameter: -keypress shows to stderr and on-screen
  the currently pressed buttons on joypad 1.                (DeHackEd)
- Unix: Stream dumping (NOT COMPLETE). With -dumpstreams,
  raw video and raw audio are dumped to videostream%d.dat
  and audiostream%d.dat, where %d increments on each CPU
  reset, starting at zero.                                  (DeHackEd)
- Unix: Non-blocking sound on Linux. It makes seeking nicer.(DeHackEd)
- Unix: Configurable sound device.                          (pierredavidbelanger)
- configure.in now requires a sufficiently new version of
  autoconf.                                                 (anomie)
- Fixed slow versions of branch opcodes.                    (anomie)
- Fixed the mosaic offset bug.                              (anomie)
- No sorting by priority in C4 command 00 00. MegaMan X2
  can go behind the legs of the intro stage boss.           (anomie)
- New RTO discovery, fixes Super Conflict: The Mideast
  title screen.                                             (anomie, byuu)
- A 1->0 transition on $2100.7 causes OAM Address Reset.    (anomie, byuu)
- The final HDMA Indirect Address load is only weird
  on the last channel of the scanline.
  Touge Densetsu Saisoku Battle problem solved.             (anomie, byuu)
- Fixed BGnVOFS bug. Only HOFS needs ~&7 update.            (byuu)
- Fixed superfluous VIRQ triggers.                          (zones)
- Fixed missing IRQ trigger just after the previous one.    (zones)
- Fixed missing IRQ while writing to $4200.                 (zones)
- Fixed IRQ timing after WRAM refresh.                      (zones)
- Fixed NMA timing after DMA transfer.                      (zones)
- Fixed superfluous auto-joypad-reading.                    (zones)
- Fixed missing WRAM refresh during DMA transfer.           (zones)
- Fixed DMA so that HDMA and any HC triggered events can
  run during DMA transfer.                                  (zones)
- Roughly fixed the case that HDMA and DMA use the same
  channel at the same time. HDMA kills DMA. Thanks byuu.    (zones)
- Changed initial DMA registers values.                     (zones)
- Slightly modified APU execute timings.                    (zones)
- Fixed APU I/O registers to get/set the proper value.      (zones)
- Blocked invalid VRAM writings, though you can turn off
  this option due to Snes9x's inaccurate timings.           (zones)
- Omitted SPCTOOL, no one uses it.                          (zones)
- Added Sufami Turbo support.                               (zones)
- Added Same Game add-on cart support.                      (zones)
- Fixed HiROM SRAM and DSP1-4 memory maps a little.         (zones)
- Improved mirroring.                                       (Nach, grinvader, byuu)
- CRC32 on BS dumps now follows uCONSRT standard.           (Nach)
- BS dumps now always run in NTSC mode.                     (Nach)
- Unknown regions (generally betas) default to NTSC.        (Nach)
- Now support NSRT headers for setting up controllers.      (Nach, nitsuja)
- Unix: Fixed command line help output.                     (Nach)
- Unix: Sound now defaults to 32KHz, Stereo, Interpolation
  so Snes9x finally sounds like a real SNES by default.     (Nach)
- Win32: Saner defaults for movie record.                   (Nach)
- Unix: Fixed crashing with mouse or super scope.           (Nach)
- Removed some weird code which was crashing Korean
  League and its varients.                                  (Nach)
- Win32: Can now compile with MinGW.                        (Jonas Quinn, Nach)
- Win32: Can now cross compile Snes9xw.                     (Nach)
- Unix: SSnes9x compiles again.                             (Nach)
- Win32: ZSNES C4 and SuperFX compiles once again.          (Jonas Quinn)
- Unix: Netplay Fixes.                                      (Nach)
- Unix: Netplay Improvements.                               (Fabianx)

Snes9x 1.5
- Pseudo-hires rendering flush, Old 2xsai endian fix        (anomie)
- Added 'oops' auto-snapshot support                        (anomie)
- Fixed usage messages (Unix)                               (anomie)
- Old split-ROM-in-zip bugfix                               (anomie)
- ./configure fix for detecting libpng                      (anomie)
- Fix "no PNG support" error message                        (anomie)
- Anomie's control remapping patch                          (anomie)
- Support for IPS patches in the zip file                   (anomie)
- OBC1 savestate fix                                        (Overload)
- Fix turbo frameskip, X11 keyboard auto-repeat, VRAM reads (anomie)
- Add some missing ifdefs (UNZIP_SUPPORT and ZLIB),
  from AaronOneal                                           (anomie)
- Config file for Unix/X11 and Unix/SVGA                    (anomie)
- CPU instruction fixes (mostly emulation mode & timing)    (anomie)
- Mode 7 fixes                                              (anomie)
- Rewrote the renderer. Enjoy!                              (anomie)
- Correct-ish memmap boundary testing.                      (anomie)
- Add support for saner directory structures under Unix     (anomie)
- Unix: Fixed detection of newer libpng (spotted by vapier) (PBortas)
- Added 4-point gaussian interpolation and proper envelopes
  many thanks to Brad Martin and TRAC.                      (zones)
- Fixed several sound problems.                             (zones)
- Fixed the memory access problem in C++ Super FX core.     (zones)
- Speed adjustment of C++ Super FX emulation.               (zones)
- Various timing fixes: NMI, IRQ, WRAM refresh,
  cycles per line, HBlank start, etc.
  Many thanks to byuu for much information.                 (zones)
- Removed some game specific hacks.                         (zones)
- Added partial Satellaview (BS) emulation.                 (Dreamer Nom, zones)
- Added the Katakana font for onscreen messages.            (107)
- Updated JMA to v1                                         (Nach)
- Unix: Fixed JMA options in config                         (Nach)
- Unix: Removed --with(out)-asmcpu option in config
  because the i386 assembler CPU core is out of date.       (zones)
- Unix: Changed the default settings in config.             (zones)
- Updated porting.html (porting.txt) in sync with 1.5.      (zones)
- Fixed buffer over/under flow due to incorrect logical
  operator in S-RTC code                                    (byuu)
- Fixed HDMA flags bug.                                     (byuu, anomie)
- Fixed bugs causing crashing in Unix.                      (Nach)
- Ported Snes9x to AMD64.                                   (John Weidman, Nach, zones)
- Completed DSP-1 code.                                     (Andreas Naive, Overload, Nach)
- Updated DSP-3 code.                                       (Nach, z80 gaiden)
- Updated DSP-4 code.                                       (Dreamer Nom, Nach, z80 gaiden)
- Overhauled BS detection.                                  (Nach)
- Improved Unix portability.                                (Nach, zones)
- Fixed infiniti loop and invalid read bug in
  C++ C4 core.                                              (Nach)


Snes9x 1.43
- Win32: Disabled Netplay                                   (funkyass)
- Win32: Various fixes, including ROM dialog                (funkyass)
- Win32: New Input Config Dialog                            (funkyass)
- Win32: added .avi output feature                          (blip)
- Win32: fixed frame timings >100ms, added frame advance    (blip)
- Rewrote Unfreeze, renamed it S9xUnfreezeFromStream,
  failing to load a freeze file no longer resets emulation  (blip)
- Fixed Unfreeze to restore IPPU.HDMA properly              (blip)
- Rewrote OBC1 code to match the real chip                  (Overload)
- More updates the to DSP-1 code, fixes to projection       (Overload, Andreas Naive)
- Unix/X11: Rewrote keyboard setup code                     (Bisqwit)
- Added movie recording+rerecording support                 (blip, Bisqwit)
- Added -hidemenu CLI switch                                (funkyass)
- fixed broken Win32 filters                                (lantus)
- Added internal support for emulating the new-style SNES   (MKendora)
- Cleaned up many quirks of the cheat search engine         (MKendora, Don Vincenzo)
- Fix mosaic in hires SNES modes (Tokimeki Memorial)        (MKendora, zones)
- Rewrote Legend's hack, added another game to it           (MKendora)
- Optimized the Open ROM dialog                             (MKendora)
- Rewrote the Seta DSP map                                  (The Dumper, MKendora)
- Began string isolation for the UI, eases translation      (funkyass)
- added -nopatch -nocheat, and -cheat CLI items             (MKendora)
- fixed a UI typo                                           (funkyass)
- fixed several C core stack ops in emulation mode          (MKendora)
- split emulation mode ops from native mode ops             (MKendora)
- Seta special chip emulation enhancements                  (Feather, The Dumper, Overload, MKendora)
- code tweaks to the ST010                                  (Nach, pagefault)
- fix some C/asm quirks and HDMA quirks (all my fault)      (MKendora)
- several timing hacks to fix games                         (lantus)
- improved checksumming for odd mirrorings                  (MKendora)
- Snes9x uses a standard zlib instead of a packaged one     (PBortas)
- Exhaust Heat 2 and regional ports are playable            (Feather, The Dumper, Overload, MKendora)
- Game Doctor dumps that are 24 Mbit are now supported by
  a force option                                            (MKendora, Nach)
- SuperFx interleave format is now considered deprecated.
  Support will be removed in future versions                (Team decision)
- made SuperFx interleave detection a compile option        (MKendora)
- added memory maps for slotted games                       (MKendora)
- fixed a typo in the usage messages                        (MKendora)
- fixed the bug that had nuked optimizations                (The Dumper)
- restored full speed optimizations in release builds       (funkyass)
- Added non-speed-hack version of color subtraction.        (zones)
- OpenGL info message font fix                              (zones)
- APU timer fix                                             (zones, Nach)
- Fixed mouse offset in resized X11 window.                 (PhaethonH)
- Fixed a (presumably) long-standing bug: Mode 6's BG is
  depth 4, not depth 8!                                     (anomie)
- Unix: unmap all joystick buttons before applying -joymapX (anomie)
- Win32: added a define to disable pausing when focus is
  lost, NOPAUSE                                             (funkyass)
- Win32: Changed the default for Auto-save SRAM to 15 sec   (funkyass)
- Dreamcast: Added SH4 assembler                            (PBortas, Marcus Comstedt, Per Hedbor)
- C90 and aclocal 1.8 warning fixes (thanks Ville Skytt)    (PBortas)
- Unix: AMD64 compilation fixes.                            (PBortas)
- Added support for NSRT Team's JMA format                  (Nach, NSRT Team, funkyass)
- Unix: Loading a zip file on binaries without zip support
  will give an appropriate error message                    (Nach)
- Unix: Added install target with proper --prefix handling. (PBortas)


Snes9x 1.42
- Added 8-bit rendering filters                             (funkyass)
- Added Sanity Checks for the Display Dialog                (funkyass)
- New Layout for the Joypad Dialog,                         (funkyass)
- Fixed that anoying Joypad dialog bug. Now check to see
  if the axis exists before asking for the info form it     (funkyass)
- Added full POV support.                                   (funkyass)
- Fixed sram sizes for SuperFx games                        (Nach, MKendora)
- Stopped saving sram for games with no battery             (Nach, Mkendora)
- Killed the gray line and slightly optimized Win32 GL      (MKendora)
- stack wrapping fix in C core                              (MKendora)
- removed some dead hacks (Oda Nobunaga and Dezaemon)       (MKendora)
- fixed some DMA and HDMA modes                             (anomie, MKendora)
- improved HDMA timing                                      (anomie)
- cleaned up load and deinterleave code                     (MKendora)
- removed old UI DLL                                        (MKendora)
- new cheat dialogs                                         (MKendora)
- started Unicode preparation in Win32 UI                   (MKendora)
- Implement odd sprite sizes, sprite priority rotation.     (anomie)
- RTO code that hopefully works. MK's #define is
  "MK_DEBUG_RTO" to try to debug the RTO code.              (anomie)
- SDD1 decompression support for Linux. Also added a new
  command line option -sdd1-pack.                           (anomie)
- Added correct VRAM read logic. #define CORRECT_VRAM_READS
  if you want it.                                           (anomie)
- removed the non-VAR_CYCLES path                           (MKendora)
- changed access timing map to be address-based.            (MKendora, anomie)
- DSP-1 updates                                             (Overload, Andreas Naive)
- S-DD1 decompression support                               (Andreas Naive)
- optimized S-DD1 code                                      (anomie)
- S-DD1 can use packs or decompression                      (MKendora)
- More work on Exhaust Heat 2                               (MKendora, Overload, The Dumper)
- separated ROM detection from file reading                 (lantus)
- fixed a mirroring bug in LoROMs                           (MKendora)
- cleaned up some mapping issues                            (MKendora)
- ST018 games now boot before locking up                    (Mkendora, Overload)
- SA-1 state was not completely reset, crashed Marvelous    (zones)
- Removed sample caching. It caused problems, and was not
  noticably faster.                                         (MKendora)
- Fixed interlace without breaking the displays for MK      (anomie)
- Fixed a PPU OpenBus hack                                  (anomie)
- Moved SPC7110 and S-DD1 regs to speed up the general case
  of reading the $4xxx registers                            (MKendora)
- altered Hi/Lo ROM detection to fix a few misdetects.      (MKendora)
- Implemented RTO flags. With MK's implementation of $213F's
  interlace bit, we now pass the SNES Test Cart's
  Electronics Test                                          (anomie)
- Fix sprite windowing bug                                  (anomie)
- Way back in 1.40 MK changed the Windows port to default
  to a plain old joypad instead of the MP5. And then we
  removed the hacks for games that dislike the MP5. So
  we need to change the defaults elsewhere too...           (anomie)
- cleaned up the hacks section somewhat                     (MKendora)
- removed some interleave hacks                             (MKendora)
- fixed a bug in KartContents                               (MKendora)
- transparency fix for Jurassic Park                        (lantus)
- A hidden Win32 feature                                    (MKendora)
- Kludged Mark Davis until I get stable APU timing          (MKendora)
- Win32 renders overscan always, fixes some jumpy games     (MKendora, lantus)
- Fixed an FMOD bug                                         (MKendora)
- cosmetic tweaks                                           (Everyone)
- Fixed 2 special chip bugs in the C core                   (zones)
- Added some sanity fixes to the C core, fixes MLBPA
  Baseball for C core users                                 (zones)
- updated zlib source (includes 1.1.4-1 patch)              (MKendora)
- compiler warning fixes                                    (PBortas)
- Updated the SuperFx asm core                              (pagefault)
- Kludged Unix compilation to produce working SuperFx       (PBortas)
  with the asm core.
- Kludged VC to deal with optimization weirdness            (MKendora)
- Hacked Robocop vs. Terminator using Daffy Duck hack. Stops
  flashing.                                                 (MKendora)
- Added some defines to the asm core                        (MKendora)
- Added possibility to take screenshots on Unix             (PBortas)
- Initialize the C SuperFx core better                      (PBortas)
- Kludge a Japanese golf game until the APU timing is fixed (MKendora)


Snes9x 1.41-1

- Oops, in the asm CPU core i was stomping on %eax too
  early, so register $4210 wasn't getting set properly.     (anomie)


Snes9x 1.41

- Win32 controllers now stay the same between games         (MKendora)
- Win 32 Open ROM dialog fixes                              (MKendora)
- Win32 Display dialog fixes                                (funkyass)
- Win32 OpenGL ratio tweaking. (Reduces the gray line)      (kode54)
- Fixed Win32 superscope for those having issues            (MKendora)
- Generic accuracy fix in main SUperscope emulation         (MKendora)
- sprite bug fixed (gah! How'd we miss that)                (anomie)
- SPC saving compatibility fix                              (Caz and zones)
- Window clipping update                                    (anomie)
- Mode 7 clipping fix                                       (TRAC)
- latching fix                                              (anomie)
- BS BIOS checksum and mapping fix                          (MKendora)
- Working Uniracers hack (dma.cpp)                          (anomie)
- HDMA Indirect Address fix for Romancing Saga 2            (anomie)
- Better savestate hack, does it break anything?            (anomie)
- C4 C core fixes. Mostly Trapezoid (thanks Nach),
  some s/short/int16/, some indentation.                    (anomie)
- Damn, but the indentation in ppu.cpp was screwed up.
  Killed some dead code too (twas commented forevermore).   (anomie)
- fixed a potential crash in S-DD1 logging                  (MKendora)
- Improved accuracy of Hi/LoROM detection (~500 ROM test)   (MKendora)
- Hack for Moryou Senki Madara 2, don't call
  SelectTileRenderer from DrawOBJS if BGMode is 5 or 6. A
  real fix requires at least rewriting SelectTileRenderer,
  or inlining a special version in DrawOBJS.                (anomie)
- DMA traces: add additional address info to reads too.     (anomie)
- Killed the old Borland Joypad dialog                      (funkyass)
- Fixed issues with Dezaemon and CT, maybe others           (anomie, MKendora)
- Changed the internal snapshot key from \ to VK_F12        (funkyass)
  Fixes issues with non-US keyboard layouts.
- Fixed OAM reset to not occur during forced blank.         (anomie)
- Killed some dead OAM reset code that doesn't need saving. (anomie)
- Unix/X11: Fixed screen jumping. CT enables overscan mid-
  frame for only one frame, and we now update the rendered
  screen height accordingly. Other ports are still broken.  (anomie)
- Unix/X11: Fixed possible TV mode crash.                   (anomie)
- Fixed OAM reset timing (beginning of V-Blank rather than
  end) for R-TYPE 3 (J).                                    (anomie)
- Unix/X11: Fixed OpenGL target                             (PBortas)
- Unix/OSS: Fixed big endian sound                          (PBortas/ernstp)
- Tweaked the About Dialog so its read-only and no scroll   (funkyass)


Snes9x 1.40

- cleaned up a sound skipping code issue. Same as the
  RTC issue                                                 (lantus)
- re-fixed the invalid BRR header behavior twice            (Lord Nightmare, FatlXception, Mkendora)
- More BS mapping fixes.                                    (The Dumper, MKendora)
- Fixed Ranma Bun no 1 - Chonai Gekitou Hen (J) and
  Street Combat (U). Interlace is not supported in the
  non-Hi-res modes, as far as I can tell.                   (MKendora)
- Also fixes Maka Maka (J). Frank Yang's report, and
  anomie's code both provided clues to this one.
- Removed special casing on setting 5c77 version to one.
  This seems to be true for U and J units always. I need
  it checked out on PAL...                                  (neviksti)
- Using SNEeSe's values for 5c78 and 5A22. Note we know
  that the 5c78 version can also be 1 or 2, instead of 3.   (TRAC, neviksti)
- Added turbo buttons. Credit/blame for the design goes
  to slack, Nave, Gogo, and myself.                         (MKendora)
- fixed a bug in turbo                                      (slack, MKendora)
- Tried merging the behavior of Old $4200 with new $4200    (MKendora)
- Made $4200's return value match what VSMC Explorer
  showed on Fancia's SNES                                   (MKendora)
- Fixed a matrix multiplcation bug in ZSNES state loads     (MKendora)
- Fixed Dezaemon and Ys3 mode 7                             (lantus)
- Fixed H-DMA modes 5-7. Thanks to The Dumper for the
  extra motivation needed. GunForce and Genocide 2 work.    (The Dumper, MKendora)
- Fixed BG3 Priority. I'm stupid. anomie had fixed it,
  but lantus fixed it again, because I didn't use it.       (anomie, lantus)
- Added a Star Fox 2 hack, and an interleave skip           (The Dumper, lantus, MKendora)
- Cleared BS setting on load                                (lantus)
- Fix for Mode 7 priorities. fixes F-1 Grand Prix (all 3)   (anomie)
- JANJYU GAKUEN 2 needs Multi-tap 5 off.                    (Frank Yang, MKendora)
- HONKAKUHA IGO GOSEI: No multi-tap 5, allow mouse          (lantus, MKendora)
- Added a few missed conditional compiles                   (Nach)
- disabled multitap 5 by default, added menu to enable      (MKendora)
- special thanks to anomie and lantus. One of them is
  responsible for a bug fix I forgot already.               (anomie, lantus)
- Removed several Multitap5 disable hacks.                  (MKendora)
- Added an SPC dumping upgrade from kode54                  (kode54)
- cleaned up some resource leaks                            (MKendora)
- I forgot this since 1.39mk, but SPC700 flag fixes         (anomie)
- Mode 7 interpolation screen flip fix                      (anomie)
- Updated SPC7110 code a bit, for compatibility             (Daniel, anomie)
- Changed RTC saving. (Byte exact to old format on Win32)
  The submitted patch for "safety" doubled the file size,
  so I had to write it in explicitly little-endian.         (MKendora)
- Removed the old hidden cursor                             (MKendora)
- Applied a WAI correction from anomie.                     (anomie)
- Added a patch for Pseudo hi-res                           (anomie)
- Hacked around Word writes to $7F:FFFF. Thanks to lantus
  and The Dumper for verification.                          (MKendora)
- PPC compile fix? and debugger reversion                   (anomie)
- Set defaults differently to improve sound quality.        (MKendora)
- Clear Force load settings after Init                      (lantus)
- Made menu reset a soft reset. Fixed BL Sound Test & more  (CaitSith2)
- Fixed word writes to block bounds in asm core.            (MKendora)
- redone version of my bounds fix, only this one WORKS!     (TRAC)
- Thanks to TRAC for the AT&T syntax refresher!             (TRAC)
- Fixed screen saver disable                                (kode54)
- Fixed OAM and sprite priority in the asm core             (anomie)
- Proper Interlace fix for mid-frame changes                (anomie)
- Fixed OpenGL to accomodate previous patch                 (MKendora)
- Ported the "Settings" dialog to VC                        (MKendora)
- Fixed ROM Info bugs                                       (_pentium_five, MKendora)
- Fixed non-stretched interlacing, but it's s.l.o.w.        (anomie)
- Superscope and Mouse need to be enabled by the menu.      (MKendora)
- Fixed HiROM sram reads in asm and C cores                 (anomie, MKendora)
- Added Company 48 to the list. Thanks to _pentium_five_    (StatMat)
- Set Super Drift Out's S-ram correctly.                    (Snes9xppSE Team)
- Fixed NTSC timing. Helps ToP Intro greatly                (kode54)
- Added several entries to the company list, from uCON64    (Nach)
- Lots more companies                                       (StatMat, Nach)
- Fixed Win32 Superscope support (NT kernel only?)          (MKendora)
- Added ZSNES OBC1 code ported from asm to C                (sanmaiwashi)
- Implemented Justifier emulation                           (neviksti, MKendora)
- Fixed Rudora no Hihou's clip window bug                   (anomie)
- Fixed Flintstones sprite issue                            (lantus)
- Fixed sram mappings for Big Sky Troopers and
  Taikyoku - IGO Goliath. Both map in bank F0               (MKendora)
- Fixed a possible crash when switching audio settings      (MKendora)
- Added per-pack gfx pack configuration                     (MKendora)
- Fixed glitches in DSP-1 games (Flintstones fix)           (lantus)
- Added delay to Superscope latching. Fixes X-Zone.         (neviksti, MKendora, zones)
- Added DSP-2 support                                       (Overload, The Dumper, Lord Nightmare,
                                                             MKendora, neviksti)
- Fixed Super Bases Loaded 2 (and J/K ports) DSP-1 seems
  to ignore the A15 line in LoROM maps                      (MKendora)
- Corrected $4200 again                                     (The Dumper)
- Corrected $2100, $2102, and $2102 read behavior           (anomie)
- Fixed Cancel on the Sound Options dialog.                 (MKendora)
- Fixed the sound options dialog (Thanks, Quattro)          (MKendora)
- updated DSP-1 support to match chip better                (Overload, neviksti, The Dumper)
- added a few Ops to the DSP-4 routine (Nothing plays yet)  (neviksti, The Dumper, Overload, MKendora)
- added screenshot support                                  (anomie, sanmaiwashi)
- stubbed the ST010 chip in Exhaust Heat 2                  (Overload, MKendora)
- hacked around War 2410's lockup                           (pagefault, _Demo_, MKendora)
- updated tests for type 1 ROMs (based on reset vector)     (MKendora)
- Emulation mode CPU fix                                    (The Dumper)
- Open Bus fixes                                            (anomie)
- Better Expansion port emulation                           (anomie)
- More Open Bus fixes                                       (Overload, anomie)
- HDMA fixes (fix colors only in Full Throttle Racing)      (anomie)
- Migrated DKJM2 onto the Tales map                         (MKendora)
- Tried to remove Dragon Knight 4 hack (LoROM sram fix)     (MKendora)
- Fixed ROM Mirroring for LoROMs (<= 32 Mbit)               (MKendora, TRAC)
- blocked wram to wram DMAs                                 (neviksti)
- fixed HiROM mirroring, too. Thanks TRAC!                  (MKendora, TRAC)
- fixed C core RMW and Push ops to write in the correct
  order, fixes Michael Jordan gfx.                          (anomie, Overload, MKendora)
- set RDIO to start as 0xFF, fixes SuperFx games.           (anomie, Overload)
- New connect dialog                                        (funkyass)
- better conditional compile of FMOD                        (funkyass)
- fixed screenshot code when libpng is not used             (funkyass)
- added portability fixes                                   (zones)
- fixed asm Pushes                                          (anomie)
- fixed asm LoROM s-ram decode                              (MKendora)
- migrated DEZAEMON to standard LoROM map                   (MKendora)
- fixed the Madara 2 OpenGL bug (key found in Rudra)        (MKendora)
- fixed asm RMW instructions                                (MKendora)
- fixed ADC opcode                                          (The Dumper)
- added DSP-2 Op09                                          (The Dumper)
- updated C4 C code                                         (anomie)
- updated C4 asm code                                       (Nach)
- Keep OpenGL in ratio                                      (kode54)
- Replaced many more Borland dialogs                        (funkyass, MKendora, Nach)
- Added CRC32 to displayed ROM Info                         (Nach, MKendora)
- Fix cheat support                                         (The Dumper)
- improved DMA timing                                       (MKendora, Overload, The Dumper)
- Fixed Mode 7 math, removed Dezaemon, Gaia, Ys 3 hacks     (TRAC, MKendora)
- Mode 7 flip fix                                           (TRAC)
- Multiple safety and initialization fixes                  (zones)
- Platform safety fixes                                     (PBortas)
- Memmap cleanups                                           (MKendora)
- More preliminary work on special chips                    (The Dumper, Overload, MKendora)
- Added color coding                                        (MKendora)
- Another HDMA fix                                          (anomie)
- added another known hack to the hacked games list         (Nach)
- ToP memmap changes                                        (MKendora)
- Checksum calculation changes                              (MKendora)
- Special cased a few games for OAM issues                  (MKendora)
- Reverted OAM reset to 1.39 timing                         (MKendora)
- Reworked vram wrapping                                    (zones, Mkendora)
- Fixed $4210 and Super Professional Baseball 2             (Overload, MKendora)
- Fixed APU RAM init                                        (Overload, MKendora)
- More support for Exhaust Heat 2 (not playable)            (The Dumper, Overload, neviksti)
- removed some debris from save states                      (MKendora)
- fixed? Doom's save state bug                              (MKendora)
- simple overdump detection warning                         (MKendora)


1.39mk3b

- Fixed the RTC detection. FINALLY done correctly           (lantus, MKendora)


1.39mk3a

- neatened up the company table.                            (MKendora)
- fixed a mistake in the ROM Info box                       (MKendora)
- Added a Calulcated Size field to ROM INfo.                (MKendora)
- Added 3 more companies to the ROM Info table              (MKendora)
- Fixed BS detection                                        (The Dumper)
- Added a Legend-specific hack to get sound. I remembered
  it being mentioned in the changelog.                      (Gary Henderson)
- Unbroke the Star Ocean special cases                      (Trigger of Time, MKendora)
- Company 255 is not Hudson-ZFE detects all Hudson games
  without it, except a corrupt dump                         (StatMat, MKendora)
- fixed a bug in the redone detection for the SPC7110       (CaitSith2)
- 44Khz sound should be 44.1Kz. Changed, though you'll
  need to re-set 44.1Khz to make it take effect. Not sure
  if this affects non-Windows ports.                        (MKendora)
- Added 32Khz playback                                      (MKendora)
- Inproved BS ROM mapping                                   (_Demo_, The Dumper, MKendora)


1.39mk3

- Honkaku Syogi Fuunji Ryuou (J) fixed (force no multitap)  (Frank Yang)
  Also Fixed Super Castles (j).
  Also fixed a bunch more. This dude e-mailed like 100 bugs
  to my hosts, some already fixed in Snes9x1.39mk2, but
  about 7 were clearly multi-tap5.
- also fixed Dekitate High School. Error was in Japanese    (Frank Yang, Tomato)
- fixed 2 memory leaks                                      (Aaron)
- Dai Kaiju Monogotari 2 works as a 40 Mbit ROM.            (MKendora, The Dumper)
- Fixed the Flashback bug. Lots of info led to this.        (neviksti, MKendora)
  Thanks neviksti, The Dumper, TRAC, and FatlXception
  for clarifying the behavior.
- Fixed Sailor Moon Fuwa Fuwa Panic 2 to work with          (neviksti, MKendora)
  previous fix. It's a total hack, but it should sound
  just like the old Snes9x did.	neviksti strikes again!
- Dirty hack to make 3 games deinterleave properly:         (MKendora)
  Wizardry 4, Mark Davis, and Honkakuha Igo Gosei(FX)
  all work as well as the deinterleaved counterparts.
  (The last is a hacked game, and you should get the
  non-FX version)
- Fixed Seima Jyuden Beasts and Blades. Another Multitap,   (Frank Yang)
  but for some reason, the hack requires the C cpu core.
  Thanks to Tomato for taking a stab at the error message,
  as well. It was too vague to be of use, he said. I
  just tried it because it worked on other games.
- Res Arcana fixed. Another Frank Yang report, another J    (Frank Yang, MKendora)
  error, but I can read kana well enough with a table!
- Removed a Terranigma specific hack. Not sure, but the     (anomie)
  new behavior might have fixed Tin-Tin in Tibet's colors.
- Dirty hack to work around a dirty hack. Both Yoshi's      (MKendora)
  Island (E) dumps should work now
- Added the JumboLoROM memory map, Extends LoROM support    (The Dumper, neviksti, MKendora)
  to 48+ Megabits.
- added an EXTBG fix, since iirc, TRAC is using it as well  (anomie)
  Does it actually fix anything?
- Fixed crash in DSP Op06                                   (The Dumper)
- Fixed a GUI error on my part                              (Trigger of Time)
- Cleaned up some of the SPC7110 detection/size code.       (MKendora)
- Merged in XBox port changes to SPC7110 code               (lantus)
- Added a call to Memory.Deinit when exiting.               (lantus, MKendora)
- Many memory leaks fixed while chatting with lantus        (lantus, MKendora)
- Fixed that stubborn open/close leak                       (lantus)


1.39mk2

- hacked in Shien's Revenge                                 (anomie)
- fixed Orge Battle's green lines. (CPU source for DMA)     (anomie)
  - Looks interesting, and might apply to other DMA cases?
- maybe "fixed" DKC's barrels? by treating $2001
   as unmapped. The game worked before with a hack.         (MKendora)
- optimized SPC7110 slightly by removing extra setup work   (MKendora)
- Fixed DBZ 3 (Korean). S. Korea is, in fact, NTSC.         (MKendora)
- Fixed a hard-coded value in the SPC7110                   (MKendora)
- Added a Win port ROM Info dialog                          (MKendora)
  - some companies aren't in the table I used.
    If you encounter an Unimplemented company,
    report it the the Snes9x development forum, with
    the correct company and the number.


1.39mk
- SPC7110 support based on Dark Force's docs.               (Dark Force, zsKnight,
                                                             The Dumper, MKendora)
  Trust me when I say those guys deserve the credit more
  than me. From what I'm told, Dark Force is the man
  behind most of the reverse engineering, but they all
  did a much harder bunch of work than I did following
  their specs. It's plain and simple that these three
  are the masterminds behind all SPC7110 support.

  Dark Force for reverse engineering the chip (Extremely tough work!)
  zsKnight for the original core, and probably other things
  The Dumper for dumping the packs and doing hardware tests.

  Also thanks to CaitSith2 for numerous bug reports
  and a lot of bug fixes.

- Theme Park hack removed, fixed via PPU latching           (anomie, MKendora, TRAC)
- WWF Wrestlemania hack removed			            (anomie, TRAC)
- Strike Gunner hack fixed			            (anomie, MKendora, TRAC)
- FF:MQ text fixed. May help other sprite issues.           (TRAC)
- Umi Hara Kawa Se timing corrected.                        (anomie)
- S-DD1 packs load by the same rules as ZSNES               (MKendora)
- SPC7110 code builds in linux                              (Lord Nightmare, zinx)
- Added The Dumper's DSP-1 updates                          (The Dumper)
- SPC7110 is correctly displayed on load, RTC also noted.   (MKendora)
- Fixed a potential graphics problem                        (TRAC)
  no known games fixed, but who knows?
- Fixed Ballz3D                                             (pagefault)
- Re-fixed Ballz3D, via DSP op 0F                           (The Dumper)
- included some of anomie's fixes. Many caused me grief,
  so only Marko's Magic Football is intentionally fixed.    (anomie)
- finished zsnes save support, though I don't know how
  well it will work with SPC7110 games                      (MKendora)
- Added a new soundux.cpp again to fix some noise.
  (Fixes the GW "fart track")                               (Lord Nightmare, info from Anti-Res)
- Added 3 cache modes for SPC7110 games                     (MKendora)
- Added new BRR decoder. Requires sample caching
  and the Anti-Res decoder be disabled.                     (FatlXception, port by Lord Nightmare)
- Added CaitSith2's RTC debugger. define RTC_DEBUGGER in
  project settings to enable it.                            (CaitSith2)
- SPC7110 per-game cumulative logging                       (MKendora)
- other fixes that I've forgotten                           (sanma iwashi, TRAC, anomie, ????)

- "I'm not worthy" thanks to the original SPC7110 crew (DF, zsKnight, and the Dumper)
- Thanks again to the same people, because they deserve it!
- thanks to The Dumper, Dejap, TRAC, and all the ZSNES crew for technical assistance
- Thanks to most of the Snes9x mods for testing (no thanks to you, Raptor ;)
- and thanks to TRAC and #mkendora for letting me vent at you.

1.39
- Added SDD-1 unknown graphics data logging at the dumper's request. A bit late
  but might help with Street Fighter 2 Alpha's data dumping. Creates a
  romname.dat file in the freeze file folder.
- Implemented 16-bit texture support for OpenGL modes in Windows and Linux.
  Had to support a new pixel format type to do it - RGB5551 (one bit of alpha)
  which caused me some major problems - black was no longer always pixel value
  zero!
- Removed the Bump map OpenGL mode from the Windows port (didn't look so good
  anyway and was slow).
- Added a hidden novelty OpenGL mode (clue: a keyboard shortcut activates it)
- Reverted back to FMod version 3.20 after reports that version 3.33 broke
  AD3 support.
- Implemented a better work-around for the broken select system call in the
  Linux kernel - the original work-around was long-winded and stopped working
  when I implemented OpenGL support under Linux.
- Added the same speed-up hack to the OpenGL code that the Glide code already
  supported. Basically, if your OpenGL implementation supports 16-bit textures
  then OpenGL mode should be as fast, or faster than the 3dfx Glide mode.
- Hopefully fixed Glide support.
- Reverted back to the original colour blending code. The newer code, although
  more accurate in most cases, had too many glitches and was slower.
- Included multiple Japanese games fixes from Iswashi San.
- Fixed a timing problem caused by a speed up hack that was affecting Top Gear
  300. No the game still isn't playable yet, but I noticed the problem while
  investigating the DSP-4 chip used by the game.
1.38
- Added support for Star Ocean and Street Fighter 2 Alpha decompressed graphics
  packs from dejap. Used a binary chop search rather than a linear search to
  locate correct decompressed graphics more quickly - should help emulation
  speed during later stages of the game.
- Included OpenGL support into the Linux port and speeded up the Windows OpenGL
  implementation slightly. The real speed up would occur if I could figure out
  how/if 16-bit textures are supported in OpenGL because at the moment the
  16-bit software rendered SNES image must be converted to 24-bit before being
  uploaded as a texture...
- Included the latest ZSNES DSP-1 code. Now Pilotwings, SD Racer and Suzuka 8
  Hours are playable. Aim For The Ace, Super Air Diver 1 & 2 and Syutoko Battle 94
  are also playable, but with bugs. Thanks to zsKnight, _demo_, et al for all
  their hard work.
- Another Daffy Duck: Marvin Missions screen flicker problem worked around -
  writing to the IRQ enable register shouldn't clear any pending IRQs, but
  Sieken 3 seems to require this or else the game hangs. Special-cased Daffy
  Duck for now.
- An NMI emulation bug was triggering a Panic Bomberman World game bug,
  crashing it. Basically, if a game enables NMIs after the normal trigger
  point, the NMI should not trigger if the game has already read the NMI clear
  register.
- Panic Bomberman World requires SPC700 memory to be initialised to zero on
  reset otherwise the game hangs when a tune finishes and another one should
  start.
- Added mouse pointer auto-hide to the Windows port. Much better than the turn
  the mouse pointer into a black dot method I was using before.
- Included the latest ZSNES Super FX code. Not sure if it fixes actually fixes
  any games.
- Added an offset hack for Strike Gunner to get the scrolling ground layer
  to line up correctly - another offset-per-tile bug hacked around for now.
- Arrr! Left in some debugging code in the last release that prevented all
  games that need the slower SPC700 timing from working. Removed it.
- Hmm. The broken cut-scenes in Deep Space 9 seem to indicate that I haven't
  got the emulated clock speed of the 65c816 CPU correct yet. And not by a
  little bit - a 9% too slow error. Hacked special timing for the game for now.
- Added triple-buffering to Windows port - enabling double-buffering actually
  enables triple-buffering if you have enough free video RAM, defaulting to
  double-buffering if you don't.
- Fixed another crash bug in the interpolated mode 7 code - if no scaling
  was being used (either up or down) and screen repeat was enabled and the
  screen was flipped horizontally, the routine would crash Snes9x. Was causing
  Snes9x to crash during rock monster boss stage of Castlevania 4.
- Oops. Got the initialisation of the default SNES screen width and height
  round the wrong way - could cause a X Windows System error message on the
  UNIX port after loading a ZSNES freeze file.
- Included the unofficial Windows port emulation fixes for several games including
  Kentouou World championship and TKO Super Championship.
- Included Iwashi San's improved Anti Res. sound sample decoding routine and
  updated the C version to match.
- Included Anti Res. improved sample decompression code he sent me ages ago,
  but for some reason I didn't include. Sorry. This version seems good enough
  to leave enabled all the time.
1.37
- Added fix for Captain America's corrupt graphics - a ROM bug causes it to
  read from what I thought should be an unmapped memory area, but it expects
  the value returned to be zero.
- Added code to support games that switch to the hi-res. SNES screen mode part
  way down the screen while using the 3dfx bi-linear filter mode. The code
  basically has to back out of the speed up hack it was using when the game
  switches resolutions.
- Fixed support for games that have mixed lo-res. (256x224), medium res.
  (512x224) and hi-res. (512x448) all on the same screen - corrects the display
  of Majin Tensei 2.
- Added support for games that use sub-screen addition to the back-drop layer
  while displaying hi-res. graphics - something I thought the SNES couldn't do
  but the game Marvelous uses this.
- Reworked the UNIX/Linux output image handling code: the image doesn't always
  have to be scaled when hi-res. support is enabled, the PutImage operation
  only updates the area of the screen it has to, the SNES image is now always
  centred in the window/full-screen area and if the SNES image changes size
  between frames, the old screen areas are now correctly cleared.
- Fixed the corrupt graphics problem during the battle scene of Last Bible 3 -
  it requires that previously unknown DMA mode 5 should just act the same as
  DMA mode 1.
- Fixed a nasty bug when H-IRQs were being reused on the same scanline - a logic
  bug could cause H-DMA processing for that line to be skipped. Was causing
  the bridge and the start banners to be the wrong colours in Top Gear 2.
- Added Kreed's display processing modes to the Linux port, including his new
  asm version of the Super2xSaI mode and the new software bi-linear filtering
  mode.
- Think I might have figured out the odd Mode 7 glitch problems the games
  Illusion and Gaia and Chase HQ were having. My original fix was to mod the
  centre X & Y values with 1024, but looks like the true fix is to mod
  X + horizontal offset and Y + vertical offset with 1024 when screen wrapping
  is enabled.
- Disabled H-DMA'ing into V-RAM via registers 2118/2119. The game Hook
  deliberately does this causing graphic corruption while dialog boxes are
  displayed. Maybe the real SNES disallowed this and it was left in the game by
  mistake? Not sure what effect the game was trying to produce because
  disabling the emulation of this feature doesn't seem to affect the game at
  all, other than stopping the corruption.
   + Also fixes graphics junk problem on first screen of Bugs Bunny.
- Added a 'region-free' timing hack for Power Rangers Fight - without it the
  NTSC version was displaying badly glitching graphics; I'd already fixed the
  PAL version.
- Added true priority-per-pixel mode 7 support (the previous support was just
  a hack to get the colours correct) - level 2 of Contra 3 used this feature.
- The Japanese, German, French and Spanish version of Illusion of Gaia needs the
  slow SPC700 timing.
- Deleted the Breath of Fire 2 S-RAM hack for the hacker intro version -
  according to reports it was causing problems for the non-hacked version.
- Legend, the PAL version, never sets the sound master volume control - Snes9x
  was defaulting this to off, I guess the real SNES must default it to full
  volume; changed Snes9x. The NTSC version of Legend does set the master
  volume level, but sets it to off just after the title screen. Hmm. The -nmv
  command-line switch allows you to hear sound in this version.
- Panic Bomber World was tripping an SA-1 emulation bug - the WAI instruction
  emulation code was setting the 'waiting for interrupt' flag on the wrong CPU
  causing the main SNES to skip an instruction when the next interrupt occurred.
- Panic Bomber World, Bomberman 4 and UFO Kamen Yakisoban all need the slower
  SPC700 timing.
- Oops! The Super Formation Soccer 95 fix was causing Aero 2 to lock up. This
  means I have no no idea what value the DMA in progress register should
  represent. I've hacked it and made it toggle between 0 and $ff on each read
  which gets both games working, for now...
- The ROM de-interleaving code always assumed the blocks were rearranged based
  on a power of two, but Francois found a copy of Soldiers of Fortune where
  this was not the case. Corrected the code.
1.36
- Finally worked out why the menu items weren't being highlighted in several
  ROMs, including Battletoads, U.N. Squadron and All Japan Pro Wrestling.
  Two problems: its seems the SNES does halve the colour value result when
  blending colours when only the fixed colour addition/subtraction is enabled,
  but doesn't halve the result when sub-screen is being blended and its a clear
  part of the sub-screen. The second problem was that I had an optimisation
  that prevented the time consuming colour blending code from being called if
  the colour being added/subtracted was black - adding zero to a number doesn't
  affect the result, but not performing the side-effect of halving the result
  does affect the final value...
- Super Formation Soccer 95 requires that the DMA enabled register doesn't
  always return zero, otherwise the game locks up.
- Thanks to several people reporting a screen flickering problem in the
  pseudo 3-d section of Jurassic Park 2 I've fixed a nasty problem in H-IRQ
  handling code which could cause double-triggers or skip IRQs altogether.
  With this fix I can now remove the special hacks for Ninja Warriors Again,
  Chuck Rock and F-1 Grand Prix.
- More games needing the slow SPC700 timing:
  Zennihon Puroresu 2, Soulblazer and Robotrek.
- The CPU idle time skipping code was skipping cycles during a software delay
  loop in Itchy and Scratchy, causing screen flicker.
- Looks like reading the value of register $2137 shouldn't clear a pending
  IRQ - was causing screen flicker on Yoshi's Island.
- Actraiser 1 & 2 both need the slow SPC700 timing.
- Terranigma reads a sound channel's current sample output value and waits for
  it to be zero before preceeding. I forgot to always return zero when a
  channel was silent. This mistake was causing the game to lock up.
   + Itchy and Scratchy and was causing the music to stop and samples to be cut
     short in the Mario Early Years series.
- Added a hack for Secret of the Evermore - at several points in the game, just
  as the plane is about to land, it reads from unknown registers $4000 and
  $4001 and, if it doesn't get the value its looking for, the game hangs or
  displays corrupt graphics.
- Silva Saga 2 was accidentally triggering a colour blending hack I put in
  place Kirby Dreamland 3 and Kirby Superstar.
- The ZSNES freeze-file loading code could leave a file open if the file wasn't
  a valid ZSNES freeze file.
- Super Punch-out requires certain DMA registers to be updated after the DMA
  completes. Snes9x used to do that, but I must have accidentally left the code
  commented out whilst investigating a different problem in another game.
1.35
- Added a recently played game list to the Windows port File menu so you can
  quickly load up your favourite games.
- Included IPS patching support based on code from Neill Corlett - just rename
  the patch file to match your ROM image name but with a .ips extension and
  copy it into your ROM or freeze-file folder.
- Added John Weidman's and Darkforce's S-RTC, (Real Time Clock) emulation code.
  The only game that seems to use it is Dai Kaijyu Monogatari II.
- Included code from Nose000 for games with 128Kbytes of S-RAM. Now
  Sound Novel-Tcool, Thoroughbred Breeder 3, RPG-Tcool 2 and Dezaemon are
  supported.
- The Windows port now has an option to make the 'turbo speed' button a toggle
  button.
- The optimised fixed colour addition/subtraction code was ignoring the colour
  window. Thanks to John Weidman for pointing this out.
- Added mode 7 and hi-res. hack for Dezaemon from Nose000 - the mode 7 hack
  looks interesting (to me); I wonder if some other games would benefit?
- Both Tales of Phantasia and Star Ocean need custom sound CPU timing. Hmm.
  That's 4 ROMs now, there will be more... That means I still haven't
  discovered all the major SNES timing quirks. :-(
- Windows port now has an option to save the S-RAM data at any time.
- Windows port saving SPC dumps now auto-increments the filename.
- Added work-around for a Super Robot Wars Ex ROM bug - the game was checking
  the wrong PPU register for end of h-blank. The game must have only worked by
  chance rather than by design on a real SNES.
1.34
- Corrected the colour addition/subtraction and halve the result code not to
  halve the result when only the fixed colour is used, i.e. the sub-screen is
  clear. Discovered and fixed this awhile ago, but I accidentally reintroduced
  the bug when adding some optimisations a few versions back.
- Finally cleared the last of the offset per tile background mode bugs. There
  was something odd about the tile at the left-hand edge of the screen that I
  couldn't figure out - well now I have. Yoshi's Island level 6 boss screen,
  Mario RPG mine cart screen and Jim Power title screen now all display
  correctly.
- Made reading blank areas of the SNES memory map return the middle byte of
  the address - fixes Home Alone which tries to execute code in an empty part
  of its memory map but only works because the real SNES seems to return the
  middle byte of the address - $60 in this case, which corresponds to the
  ReTurn from Subroutine instruction.
- Added auto-cycle skipping disable for Earth Worm Jim 2 and several other
  games that spool sample data using H-DMA as the sample is being played.
  Improves some sound effects in these games.
- Fixed joy-pad routines to only report up or left if down or right are also
  pressed respectively. Works around a game bug in Empire Strikes Back in the
  asteroid stage where the game crashes if both left and right are pressed -
  something impossible to do on the original SNES game-pad.
- Added custom SPC700 timing for Rendering Ranger R2 - the game now works with
  full sound. No idea why it needs custom SPC700 timing.
- The ROM type detection was broken for Treasure Hunter G and Test Drive 2 -
  fixed the code so type 2 ROMs can be LoROM.
- Adjusted the main CPU cycles per scan-line from 341 to 342 to give an exact
  match for the timing required for Earth Worm Jim 2. All EWJ2 needs now
  for perfect sound emulation is a method of synchronising the emulation
  speed to the host hardware's sound card playback rate, oh, and a fast CPU!
  The Linux port already has this but seems to be broken because games
  play at double-speed when this option is enabled.
- Some SPC700 code in Earth Worm Jim 2 seemed to prove that I had guessed the
  clock speed of the SPC700 sound CPU incorrectly - out by almost a factor of
  two, in fact. Changed the relative emulated clock speed of SPC700. Now
  Chrono Trigger doesn't lock up at certain points anymore, the special SPC700
  timing for games written by the Human Software company isn't required and
  you can hear some more of the sound samples in Earth Worm Jim 2, etc.
- H-IRQ triggering code was broken - if a ROM turned on H-IRQ but later turned
  it off, Snes9x could continued to generate H-IRQs, crashing some games.
- Added a generic test for Human Entertainment games - they need special
  sound CPU timing to work. Gets Taekwon-Do working.
- Disabled offset-per-tile mode for Theme Park; the world map screen is corrupt
  with it enabled.
- Yet more changes to the offset-per-tile backgrounds modes 2 and 4. Added
  64 tile wide screen support for Mario RPG's mine cart ride and fixed multiple
  bugs with the handling of horizontal offset-per-tile used in Chrono Trigger's
  fade in of the space ship.
- New feature: Snes9x can now load ZSNES freeze state files! Just copy them
  into the freeze file folder and Snes9x will load them when you load a freeze
  file, but only if the corresponding native format Snes9x freeze file doesn't
  exist.
- Added memory map hack for Batman - Revenge of the Joker: its ROM header block
  is in the wrong location and Snes9x incorrectly detected its ROM type.
- Fixed an off-by-one-pixel clip window 2 bug when the window was set to clip
  outside the window area; clip window 1 was already correct. Removed the bright
  line bug at the left edge when the combat screen is appearing in Starfox and
  the clip problem when text boxes zoom-out in Yoshi's Island.
- Jim Power's title screen seems to prove that the per-tile offset data on
  mode 2 isn't ignored for the left most tile as I originally thought.
  Modified the code.
- The recent timing changes highlighted another problem with Daffy Duck -
  changed IRQ enable register to only clear pending IRQs if one has been pending
  for several microseconds.
- Speeded up the sprite data register handling slightly.
- Finally got Aero the AcroBat 2 working, after many hours of investigation,
  spread over several years - literally! Two problems. The SNES doesn't seem
  to consider scan-line line zero to be part of the v-blank period even though
  the line is never drawn and V-IRQs at the start of the scan-line have to be
  delayed until a few microseconds into the line - Traverse: Starlight & Prairie
  required this as well, so I removed the original, Traverse specific hack.
  There's a problem with the in-game music that I'll investigate at a later
  date.
  - The in-game music problem just required ENVX emulation to be switched on,
    off by default on the Linux port, on by default on the Windows port.
- Fixed the mode 7 corruption problem on the title screen of Chase HQ using the
  same trick as Illusion of Gaia - i.e. mod the mode 7 centre X & Y values with
  1024.
- Fixed another crash bug in the interpolated mode 7 code - a portion of
  the code was ignoring the screen flip value and the fact that X render
  direction reversed if the screen was flipped horizontally. Was causing a
  crash on the whale boss screen of Kirby Superstar.
- Mortal Kombat 3 now auto-adjusts emulated cycles per scan-line work-around
  a speech sample being cut short.
- Added sample data register reading support to the sound DSP - somehow I
  seem to have missed implementing this. Not sure if any ROM actually reads
  the value.
- Followed Sumire Kinoshita's suggestion and stopped clearing the ENDX flags
  when the value is read, against my better judgement, and it does actually
  improve speech samples in several games. Ooops! The Mortal Kombat series,
  Magical Drop 2 and Metal Combat are the ones I've discovered so far.
- WWF Arcade now auto-adjusts the cycles per scan-line value to work-around
  a sound sample repeat problem.
- Hmm. There's something about offset-per-tile mode I don't understand - WWF
  Wrestlemania Arcade is getting corrupt graphics; not sure what effect the
  ROM is trying to produce. Disabled offset-per-tile mode for the game for now.
- Fixed Street Racer player 1 wobble problem during the soccer game by auto-
  adjusting the cycles per scan-line value slightly.
- Made Power Rangers Fight auto-adjust emulated cycles per scan-line to work
  around a slight timing problem that causes an NMI to corrupt register
  values that an IRQ handler is trying to update. Without it the scrolling
  back-drop and fighter graphics are corrupt.
- Illusion of Gaia seems to need the mode 7 centre X & Y values to be mod 1024
  if the screen repeat flag is set. Fixes the island fly-over bug right at
  the end of the intro but breaks a few other games. Hmm. Made it auto-switch
  on for this game only.
- Added memory map support for Radical Dreamers. Thanks to satellite hut master
  for the information.
- Made updates to the top bit of the sprite write address register be ignored
  unless the low byte had been written to first. A ROM coding bug in
  James Pond II requires this, otherwise it writes a junk byte value into the
  main character's X position and Robocod wobbles around all over the place.
- Reverted back to pre 1.31 way of initialising unknown register values -
  Rock and Roll Racing was reading a junk register value and using the value
  to set up DMA, which in turn was causing corruption on the player select
  screen.
- Added Star Ocean memory map - thanks zsKnight! The original ROM I was testing
  was corrupt, no wonder I couldn't figure out the memory map myself! The game
  still isn't playable, though, due to missing S-DD1 graphics decompression
  (+ encryption?) emulation.
- Started to dump some compressed data values from Street Fighter 2 Alpha in
  the hope that one day someone will be able to crack the S-DD1's compression
  algorithm.
1.33a
- C4 emulation wasn't being automatically enabled for Rockman X2 / X3 - the
  Japanese versions of Megaman X2 / X3.
- Fixed the Super FX plot table pointer that I accidentally broke while saving
  1Mb of workspace RAM - it was stopping all Super FX games from working.
1.33
- Noticed another problem with the CPU_SHUTDOWN code - Chrono Trigger locked
  up during the intro but only when using the asm code CPU core. Found the
  algorithm difference between the code and made the CPU match what the C
  version was doing. Still not sure why it caused a problem in the first place.
- Changed colour subtraction code to use Lindsey Dubb's newer version he sent
  me some time ago but I 'forgot' to include. I say forgot, but I really put
  off including it because, although it improves most games that use the
  effect, it does result in one or two slight visual glitches.
- Hacked in zsKnight's C4 emulation asm code - now both Megaman X2 and X3 are
  playable. Still got to complete the reverse engineering of the i386 asm code
  to C so other, non-Intel ports can have C4 emulation.
- Shuffled the keyboard mapping a bit on the Linux port so now Tab key acts as
  an emulation speed turbo button, `, # and ~ act as superscope turbo and
  / acts as the superscope pause button.
- Fixed asm CPU_SHUTDOWN code that I accidentally broke while trying to
  optimise it! Thanks to all the people who noticed Snes9x's frame skipping
  had changed between releases. Frames rates should be improved again for more
  than 50% of games.
- Re-enabled in-lining of the C SNES memory access routines, improves frame
  rate by one or two on slower machines.
- Optimised the asm 65c816 addressing mode emulation code a little.
- Included some code changes making life easier for the Mac porter, John Stiles.
- Added memory map support for Sufami Turbo using information supplied by
  Nose0000. No idea if it works because I don't have the ROM.
- Spent a few minutes trying to figure out the Star Ocean memory map so at
  least the sound effects could be heard. But gave up after a couple of hours
  due to laziness. If anyone knows the memory map details, let me know please!
1.32a
- The delay loading of the OpenGL DLLs on the Windows port was causing the
  OpenGL initialisation code to fail. Reverted back to normal DDL loading but
  with the side effect that Windows 95 users must visit the Microsoft web site
  and download the OpenGL add-on before Snes9x will work for them.
- Corrected the OpenGL bump-map display option - my attempt to get the
  bi-linear OpenGL display option to work with Voodoo card's limited texture
  size had broken the bump-map mode.
1.32
- Changed the Windows port to delay load the two OpenGL DLLs, so now they're
  only loaded if you switch to OpenGL mode. The original version of Windows 95
  didn't include the OpenGL DDLs, so Snes9x wouldn't even start on that
  platform; now it should.
- Added yet another sound buffer option to the Windows port - this time the
  block size of sound data to mix. Some DirectSound sound card drivers only
  report the play position moving in steps rather than continuous amounts and
  Snes9x's default mix block size turned out to be smaller than this step
  value on several cards.
  Snes9x couldn't work out out where the true play position was accurately
  enough resulting in broken, noisy sound output.
- Modified the Windows frame timer code to use semaphores rather than events -
  they should make Snes9x more reliable at not missing frame sync pulses when
  Windows is busy doing background tasks.
- Added SA-1 shutdown code - basically, Snes9x now stops emulating SA-1 CPU
  instructions when the SA-1 enters an idle loop waiting for the main SNES
  CPU to give it something to do. All SA-1 run much faster and smoother now.
- Added multi-axis joystick/game controller support to the Windows port and
  tweaked the dead-zone threshold position a little.
- It looks like the SNES PPU was designed to support 128K of V-RAM but only
  64K was fitted; Snes9x wasn't wrapping all V-RAM address to stay within the
  64K limit causing a corrupt title screen on ReX Ronan - there will be others.
- Added amend functionality to the Windows Cheat Entry dialog and added extra
  text boxes for direct address and cheat value input rather than only being
  able to type in a Game Genie or Pro-Action Reply code.
- BS Suttehakkun2 was crashing just before start of play - the ROM was
  performing a junk DMA that was corrupting RAM, crashing the game when it
  went searching for a particular value.
- F-1 Grand Prix requires IRQ triggering when IRQ scan-line register set to
  current scan line, but Chuck Rock objects. Hmm. Chuck Rock seems to indicate
  the CPU emulation is running too fast, but I can't see where the mistake is.
  Special-cased Chuck Rock for now.
- Optimised SNES DMA handling slightly - copying data to SNES V-RAM is now
  significantly faster.
- Windows Cheat search dialog was ignoring data type parameter in various
  places which was causing problems when larger numbers were being searched
  for.
- Forced unknown PPU register reads to always return 0 - a coding bug in
  Equinox shows that this is required. An earlier fix didn't work.
- Puya Puya 2 & remix were objecting to an NMI being triggered when enabling
  NMIs after scan-line 226, but Ys 5 seems to require this. Hmm. Added a hack
  to support both games.
1.31
- Snes9x DirectSound code modified - the mixing block size is now always 10ms
  for Windows 95/98/2000 and 20ms for NT 4.x, now there should be no need to
  enable Sync Sound when a large sound buffer is required (helps emulation
  speed). The maximum sound buffer length values have been updated to reflect
  the smaller mixing block size.
- Changed the DirectSound code back to use an offset from the play position
  as the place to write new sample data into the sound buffer - on NT 4.x the
  write position seems to vary randomly rather than being a fixed distance
  in front of the play position as documented. Now I know why I used the play
  position originally!
- Changed the DirectSound code to fill the sound buffer at the write position
  supplied by DirectSound, rather than just before the current play position -
  should help reduce latency.
- Added an auto-detect method for interleaved mode 2 Super FX ROM images -
  well, not really auto-detect: if the game crashes and its a Super FX game,
  Snes9x assumes its in interleaved mode 2, de-mangles the ROM image and tries
  to run the game again.
- Had to update the Snes9x Windows registry version number as the additional
  diagonal settings make old registry settings incompatible.
- Added diagonal keyboard controls to the Windows port, as requested by
  several users.
- Changed PPU code to return zero when reading non-existent registers - the
  game Equinox relies on this due to an original game coding bug.
- Included FMOD sound driver support to Windows port - people experiencing
  broken sound or delayed sound, etc, might want to give it a try.
- Tales of Phantasia - un-interleaved format ROM memory map changes to match
  odd ZSNES format, now the hacked ROM works.
- Changed NMI again. Made reading or writing to PPU register 0x4210
  clear NMI pending flag again, without this Super Tennis does not work.
- Changed NMI timing back to be the same as several versions ago and just
  special cased Cacoma Knight instead - although kept the code to prevent
  the re-triggering of an NNI more than once in the same frame.
1.30
- Forgot to force GUI surface to be displayed when some dialogs where popped
  up - problem only happened on full-screen mode with triple or double
  buffering enabled, or when using 3dfx mode. It appeared as if Snes9x had
  locked up, but pressing Esc would pop down the hidden dialog.
- Added a couple of options to the Settings dialog. Now its possible to
  disable S-RAM auto-save which was causing Snes9x to write to the hard disk
  every 30 seconds on some games, causing the occasional skipped frame.
- Fixed Reset option which was accidentally broken when Netplay support was
  added.
- Added support for Dirt Racer - it leaves the Super FX chip running all the
  time, so the default CPU emulation method never allocated any time to other
  CPUs and the emulation seemed to lock up.
- NMI timing changed again. Now an NMI can only be triggered once per
  frame and enabling an NMI after the normal trigger scan line triggers
  an NMI immediately. This fixes display glitches in Ys 5, Stargate and
  Daffy Duck.
- Fixed the WAI instruction to only 'wake up' once an actual NMI has
  triggered, rather than just waking up when it should have triggered.
  This fixes Battletoads, broken since version 1.29(ish).
- Changed NMI again. Made reading or writing to PPU register 0x4210 not
  clear NMI pending flag. Seems to allow all the NMI timing sensitive ROMs
  I had on my list to now work without any special hacks. Illusion of
  Gaia now works again.
- Another NMI fix - cleared the CPU pending NMI flag at start of frame;
  Battletoads intro was crashing without this. A long DMA was stopping the
  SNES CPU so it couldn't and shouldn't respond to the NMI signal from the PPU.
- Fixed Netplay problem when game didn't have any S-RAM and Sync Using Reset
  was being used. An error dialog was displayed and the client would disconnect
  from the server.
1.30b#1
- The Windows auto-frame skip code was broken - badly. It didn't re-sync a
  timer value with timer events being generated, causing Snes9x to deliberately
  stop and wait for an event when it didn't need to, slowing down the overall
  emulation speed and increasing the number of frames skipped.
- Improved the Windows cheat search dialog - its now possible to compare
  against a value and more comparison functions are available.
- Finally worked out why Voodoo 3 support was so buggy in Snes9x - the Voodoo 3
  card generates a WM_DISPLAYCHANGE message when switching to Voodoo mode (the
  Voodoo 1 and 2 cards don't); Snes9x thought that some other application had
  changed the screen depth or resolution and tried to adjust its window to
  match - triggering another WM_DISPLAYCHANGE message. No idea how the code
  worked at all; it must have been only by chance and very dependant on the
  driver version you were using!
- Implemented Netplay on the Windows port - but its buggy as hell. I seem to
  be having major Windows multi-threading problems. Comments I've seen seem to
  suggest that Windows 95/98 don't implement true multi-threading; hmm...
- Not happy with the current Netplay, so I scrapped it and tried again;
  the protocol is much improved and not using select to control game timing
  seems to have removed lots of the threading-type problems I was having.
- Attempted to switch to just using Borland's C++ Builder to build the Windows
  port - and failed, again. Although C++ Builder can build Snes9x from sources,
  it can't then link in the asm CPU cores. I had hoped Borland might have
  fixed this with their latest release - they haven't.
- Several attempts to get Anti Resonance's super-fast sound CPU and sound DSP
  code working in Snes9x, but all failed. Part of the problem was his code was
  written using TASM and the object files it generated would only work under
  Windows - but all my SNES debugging code was in the Linux port. Anti' fixed
  that, and I then had some success getting his code working, but its just too
  unstable at the moment for a main-stream release.
- Included an option to use Anti Resonance's alternate sample decoding routine;
  it can approximate the wind and noise sound effects heard in several Square
  Soft games.
- Thanks to Lindsey Dubb for the mode 7 bi-linear filtering code - it
  generates a nice smooth image when a game scales the screen using the SNES'
  mode 7, but you'll a fast machine if you don't want the frame rate to drop.
- Thanks again to Lindsey Dubb, he improved the colour addition/subtraction
  subtraction routines - they are just a little slower but now mostly perform
  full 15-bit precision addition and subtraction rather than the previous
  13-bits of precision. Many more colour shades can be seen - look at the
  improved shading on the Mario Kart or F-Zero track for example.
- Added a reverse stereo option, for people with sound cards that swap the two
  channels.
- Added a sound config dialog to the Windows port - now you can access extra
  sound options that have always been there, but just no GUI interface to
  access them.
- Fixed the 32-bit windowed support on the Windows port.
- Adjusted the NMI timing by a few microseconds to get Metal Warriors working
  again.
- Added a few more sound playback rate choices. Most modern sound cards allow
  any value to be used from a large range, rather than just a select few, may
  be I ought to add text field so you could just type a value in?
- Used Factory Setup 4 to build a new installer package for the Windows port -
  just shipping a zip file was confusing novice users and many (mostly AOL
  users) seemed to have an odd program mapped to .zip files, further confusing
  the issue.
1.29
- Disabled the SPC700 noise feature simulation used by Chrono Trigger and
  Final Fantasy 3 until I work out why its being triggered by sound effects
  that don't use it.
- Rewrote/reorganised the DirectX and 3D/fx handling code, now both are never
  enabled at the same time in Snes9X. It might fix the crashing problems some
  Window port users are seeing. Changing between DirectX and Voodoo 3D/fx
  modes now requires Snes9X to be restarted.
- Tracked down and fixed the Chrono Trigger black screen problem on the Windows
  port: a rogue asm instruction was left in by mistake after some code edits -
  it was only by chance that the code worked on the Linux port.
- Added some SNES debug options to the Windows port, but disabled by default,
  on the shipped version.
- Clicking on the column headings in the OpenROM dialog in the Windows port
  now sorts by that column; plus added some slight screen update optimisations.
- Added an optimisation to graphics rendering: don't add or subtract
  sub-screen from background layers, or clear the sub-screen, if SNES fixed
  colour is black and no background layers are enabled on sub-screen, even if
  ROM tries to enable translucency effects for every background layer.
  Discovered Sonic was doing this, there will be others.
- Forgot to enable auto S-RAM save on Windows port, oops!
1.28
- Warning dialog added to the Windows port - if a ROM is loaded from a
  read-only directory, e.g. a CD, and the freeze file folder is set to be the
  same as the ROM image folder, then a warning is displayed when the game first
  starts.
- The Windows port now supports 5 joy-pads - Snes9x always did support 5 but
  the Windows port lacked the GUI option to enable and configure it.
- Added an about dialog to the Windows port.
- The Windows port now has a simple settings dialog, only one option so far -
  changing the freeze file and S-RAM save directory; much better than having to
  use regedit at least.
- Added a new cheat search dialog, you can use it to find where games are
  storing life counters, health levels, etc. and then add cheats that stop the
  values from changing.
- Added a cheat code entry dialog to the Windows port; now Game Genie,
  Pro-Action Replay and Gold Finger codes can be graphically entered and
  edited.
- Added a master cheat codes on/off toggle, available from the Cheats menu
  on the Windows port.
- Extended the number of cheats per game from 10 to 75.
- Changed cheat code to reapply cheat every emulated frame so if RAM is being
  patched the cheat value is continuously applied.
- Wrote some new cheat search code, the code won't be useful until I get around
  to writing a cheat search dialog.
- Added automatic cheat code loading and saving using the same file format as
  ZSNES.
- Rewrote large parts of the Snes9x cheat handling code ready for adding
  cheat dialogs to the Windows port.
1.27
- Added a flag to only enable SPC700 noise 'feature' when Chrono Trigger or
  Final Fantasy 3 are loaded - the conditions that I thought were necessary to
  trigger the feature where sometimes being met by other games.
- Added a simulation of the SPC700 noise 'feature' where some games, notably
  Chrono Trigger and Final Fantasy 3, play samples that deliberately overrun
  outside a 16-bit value, the SPC700 sound DSP then for some reason starts to
  generate a type of noise sound which the games use to generate wind and
  swish type sound effects. Thanks to ZSNES for some of the information.
- Fixed another sound interpolation problem, thanks to Mikael Bouillot -
  the initial value of the sample byte being played was not being set correctly
  when processing fractional offsets.
- Added auto S-RAM save option; S-RAM is automatically written to a .srm file
  a few seconds (30 by default) after a ROM writes to it - useful for people
  who were playing games long into to night, only to lose their progress
  after a power cut or machine crash.
- NMI delay code changed again - the fix for Cacoma Knight was breaking
  Tuff E Nuff; it would seem delaying NMI until the start of h-blank to too
  long, added a cycle counter instead.
- Fixed yet another clip window bug - clip window was being incorrectly set
  at no range if colour window was enabled but background layer clip window
  was disabled (meaning layer should not be clipped).
  Fixes the sunken ship level on FF5.
- Worked out (by example) how to add keyboard accelerators to the Windows port,
  now toggling full screen using ALT+Return works.
- Added mouse-warp to the Windows port so the the cursor doesn't wonder off the
  Window while SNES mouse emulation is enabled.
- Improved 3dfx support on Windows port - load dialog doesn't drop out of
  bi-linear mode and underlying window zooms to full-screen so its easy to find
  and click on the menu bar with the mouse.
- Added Mouse and Superscope SNES emulation support to the Windows port, use
  '7' on the keyboard to select.
- Windows cursor now hidden unless super scope emulation is enabled.
- Windows port now has command line parsing - cheapo way of adding Game Genie,
  Pro Action Replay cheat codes, disabling sound CPU emulation for the
  corrupt copy of Star Fox 2, etc. Also allows ROM images to be dropped onto
  the Snes9x icon.
- Cacoma Knight seems to provide proof that Snes9x triggers the SNES
  non-maskable interrupt (NMI) too early. Changed interrupt to trigger at the
  start of the next horizontal blank period. Will have to watch for it
  causing problems for other ROMs.
- Added a translucency hack - when a ROM tries to create a stipple background
  pattern by enabling pseudo hi-res. and not enabling a background layer on
  one of the screens, Snes9x changes the effect to use transparency effects
  instead (the real SNES can't do transparency effects with pseudo hi-res.
  enabled). Now the water in Kirby 3 is translucent.
- SA-1 CPU reset bug fixed, now Jumpin' Derby boots and plays but with major
  graphics problems.
- Fixed nasty asm SA-1 custom hardware read/write bug that was causing the
  course map not to be displayed on Augusta Masters and Pebble Beach.
- Added SA-1 character conversion DMA support for all SNES depths, now
  Augusta Masters and Pebble Beach work.
- Merged in minor code changes for Linux running on the Alpha processor. Thanks
  to Sadruddin Rejeb for the changes.
- Added four more auto-multi-player-adaptor-emulation-off presets based on
  code from Mystagogus.
- Added DirectX3D output image processing support to the Windows port... and
  removed it again because it causes my desktop machine to lock up. Back to
  the drawing board...
1.26
- Fixed memory leak that crept in when SA-1 support was added when loading a
  game freeze file.
- Added SPC dumping option based on code from Cyber Warrior X that he sent me
  ages ago but I've just found again while looking for something else!
- Merged in most of the Amiga PPC port source code changes into the main
  source code tree.
- Keying on a sound channel seems to clear its last-sound-sample-block-just-
  played flag. Chaos Engine/Soldiers of Fortune needs this.
- Add multi-thread support to the UNIX ports for sound playing - required in
  the Linux port to work around a Sound Blaster Live driver bug and useful if
  you have multiple CPUs in your machine to help spread the emulation workload.
1.25
- Added BS 24Mbit ROM memory map, for Derby Stallion 96 and Sound Novel-TCool.
  No idea if it works. Thanks to Nose0000 for the info and code.
- Corrected unzip code not to loop forever if an encrypted zip file is loaded -
  an error is generated instead.
- Changed relative SPC700 cycle length for Mortal Kombat 3 to fix sample
  repeat problems - I wish I knew exactly how fast the SPC700 is clocked.
  Maybe I should write a test ROM and run it on a real SNES?
1.24
- 3dfx speed hack back again, only disabled when Seiken 3 is loaded.
- Some minor SA-1 speed ups added - the SA-1 instruction skipping code will
  have to wait until I have more time.
1.23
- Corrected a SA-1 reset bug that reset the SA-1 RAM bank pointer back to block
  zero but didn't clear the RAM bank register. Was causing Kirby 3 to crash.
- Fixed a wave clipping problem with interpolated sound that was causing noise
  on sound output when certain sound samples were played.
- Fixed a bug in the sync-sound code that could overrun the sound buffer by a
  few bytes causing clicks on the sound output.
- The sound sample repeat bug that has plagued Snes9x ever since is was called
  Snes96 finally bit the dust - Snes9x continued to play sample loops
  even if the game dynamically updated the sample not to loop. Fixes the
  stutter in the Mortal Kombat series and improves the sound from several games
  that download sound samples in real-time as they are played.
- Rewrote the code the handled the SPC700's 64 byte shadow RAM area to fix a
  possible sample corruption problem with ROMs that stored samples that
  cross the 64 byte start area.
- Added code to allow ROMs to change the sample being played the next time the
  channel loops or is keyed on - not sure if it fixes anything but seems more
  correct.
- Added a zero-frequency fix to the stereo sound mixing code that I'd already
  added to the mono code some time ago.
- Changed the code to set the end-of-sample flag just before the last block is
  played, rather than just after. Seems to help improve the sound on some
  games.
- Sound sample start code now doesn't reset the channel's envelope volume level
  to zero before starting the sample - helps reduce the clicks being heard when
  a channel envelope volume level hadn't reached zero before being keyed on
  again.
- Changed initialisation of sample-end-register to 0 rather than 255 - seems
  more logical now I've thought about it. Not sure if it helps anything.
1.22
- Finally fixed the corrupt copy of Donkey Kong Country not working problem -
  Snes9x thought the ROM used the same memory map as Street Fighter Alpha 2.
- Added explode, un-shrink and un-reduce decompression modes support to the
  unzip code.
- Fixed offset per tile bug that crept in after me trying to fix the Starfox
  on-tilt bug.
- Made some fixes to the C Super FX emulation code, enough to get most 'FX
  games playable on the Mac port.
1.21
- Finally worked out how character DMA worked on the SA-1 and implemented a
  hacky, slow version, but its enough to get the level up screens displaying
  correctly on Mario RPG.
- Incorporated ZSNES' new optimised Super FX asm code - had to track down and
  fix a nasty memory overwrite bug in the code first to get it to work.
- Changed sample mixing code to not automatically wrap offsets to
  keep inside the sound buffer, external port code is now expected to do that.
  Helped me fix a problem in the Windows port that prevented very large sound
  buffers from working, which are required for some badly written sound card
  drivers.
- Corrected a bug in the SA-1 C code where incorrect processor emulation
  functions where called if the code was compiled with in-lining turned off.
- Fixed crash bug in Super Mario RPG on the level up screen - forgot to mask
  the enable bit from the RAM bank register. Thanks to Christian Wolf for
  sending me a freeze file which made it easy to find the problem.
- Fixed a lockup bug in the window clipping code, if the ROM ever turned off
  the sub-screen completely the clipping code would enter an infinite loop.
  Fixes The Cartoon Addams.
- Made the Daffy Duck NMI fix only enable when Daffy Duck is loaded - fix was
  causing problems for Breath Of Fire 1 and 2.
1.20
- Windows port no longer sets DirectSound to exclusive mode, so its now
  possible to hear sound output from Windows apps while Snes9x has focus.
- Fixed the freeze file loading and saving on the Windows port.
- More GUI settings are saved in the registry on the Windows port now.
- Added 3D/FX image scaling/filtering support to the Windows port.
- Added the TV mode from the Mac/Linux ports to the Windows port.
- Incorporated Kreed's new output image routines into the Windows port that
  fixes RGB555 display colour problems. Many thanks to Kreed.
- New auto-frame rate timing code on the Windows port, stops the silly speed
  up problems when the old code tried to 'catch up' after the emulator had
  been paused.
- Increased the DirectSound secondary buffer length on the Windows port to
  hopefully fix all the static/broken sound output problems some people were
  experiencing.
- Altered the ZSNES Super FX asm code so the Windows port could use it - all
  previous versions of the Windows port were shipped using the C Super FX
  emulation code which is a lot slower.
- Implemented interpolated and sync-sound options on the Windows port.
- Added an image stretch option to the Windows port - stretches the SNES image
  to fill the whole screen or the Window. Looks really good on my TNT card
  since that chips seems to filter the image as it scales it.
- Implemented Windowed mode on the Windows port.
- Added special SPC700 cycle timing for Empire Strikes Back.
- Fixed the missing polygon problem for Super FX games - thanks to zsknight
  for the information.
- Implemented SA-1 support required for Mario RPG, Kirby Superstar,
  Paradius 3, etc. but since only a good image of Mario RPG exists, I could
  only test that game.
- Fixed a graphics clip window bug: inverting the area of a clip area that
  only consisted of empty bands should become the full width of the screen;
  Mario Kart's rear-view mirror display needs it.
- Fixed mode 7 render code to use correct z-buffer when rendering onto the
  sub-screen. Fixes Final Fantasy V title screen.
- Added horizontal offset per tile support in the offset per tile modes 2
  and 6, and switchable horizontal/vertical offset in mode 4. Fixes Chrono
  Trigger in several places and Mario All Stars title screens.
- Changed SPC700 relative cycle length to 14, needed for Stunt Car Racer.
- Enabled immediate triggering of NMI if NMI enable flag set while scan-line
  was on first line of v-blank. Needed to fix a background jitter bug in
  Daffy Duck: The Marvin Missions.
- Altered ROM load code to ignore corrupt ROM map type byte in ROM header,
  preventing the code erroneously detecting what it thinks are interleaved
  ROMs. Fixes EEK! The cat, Formation Soccer, the corrupt copy of Donkey
  Kong Country, ...
- Disabled IRQ re-triggering if V-IRQ registers set to the current line. Fixes
  Chuck Rock.
- Fixed missing sprites in Andre Agassi Tennis - writing to low byte only of
  the sprite write address register seems to also clear the hi-byte.
1.19
- Games written by the Japanese software company Human seem to need special
  SPC700 sound CPU timing, so the ROM load and reset routines now check the
  software author company and adjust the CPU cycle length accordingly.
  It gets Clock Tower, Super Fire Pro-wrestling Premium, etc working.
- Added ROM check sum calculation and testing code - Snes9x can now detect
  pure, corrupt or hacked ROMs.
- Noticed a fast way to implement the SNES 4096 colour mode, so I implemented
  it. Now the colours in ActRaiser 2 look correct.
- Corrected a noise frequency error thanks to information from Takehiro.
- Added a 'start in full screen mode' flag to the Linux port.
- While debugging the new graphics code I thought of a fast way to implement
  the SNES direct colour mode, tried it out and now the colours in Actraiser 2
  are correct.
- Blast, forgot about the colour window and fixed colour effects. The separate
  sub-screen is back again, but all the other graphics speed ups are there.
- Now I've got a z-buffer I keep finding other ways to optimise the SNES
  graphics rendering - no need for a separate sub-screen, no need to clear
  the sub-screen to the fixed colour, no need to waste CPU time on translucency
  effects on hidden pixels, no need to completely clear the main-screen to the
  back drop colour, etc., etc.
- Implemented a software z-buffer and changed the SNES graphics rendering to
  use it (required change for future 3D card support). Finally fixes the
  sprite-to-sprite priority bug that some games suffer from. Also a big speed
  increasing for some games (10 fps+), others are slight losers.
- Added code to skip the rendering of completely transparent graphic tiles
  rather than comparing each pixel to see if it is transparent; helps the
  frame rate a bit on some games.
- Added a fixed for Tetris & Dr. Mario - the game didn't like a multi-player 5
  adaptor plugged in to the real SNES when being played, so turned off the
  adaptor emulation for this game.
- Added hack for Final Fantasy II - if sync sound isn't on, make attack rate of
  1ms actually 0ms (old v1.16 behaviour). Causes a slight click but its better
  than samples being cut short.
- Fixed a clip window area invert bug if the colour window was enabled on
  on one window and the other window was being used to clip a background layer.
  Fixes the finial (I hope) display problem with Gun Hazard.
- Added code to intersect the clip window areas if both a colour window and
  a background layer clip window were enabled at the same time. Required by
  Gun Hazard.
- Forgot to mark graphic clip windows as needing recomputing when the master
  colour window inside/outside/on/off/main-screen/sub-screen PPU register was
  updated. Was causing display problems for Gun Hazard.
- Internal H-DMA execution accelerator pointer variables where not always
  being recomputed when started H-DMA part way into a frame. Was causing
  display problems for Gun Hazard.
- Made H-DMA continue for one extra scan-line to fix a disappearing monster
  problem in Dragon Quest 5. Thanks to Alex Jackson for the bug report.
- Zoop seems to require volume envelope height reading by the sound CPU to
  always return 0 when the channel is in gain mode.
- The sound code was ignoring updates to the ADSR volume envelope rates while
  one was in progress. Fixed that and now the bird song at the start of
  Chrono Trigger sounds correct.
- Had to disable the CPU shutdown code for loops reading the horizontal beam
  position, it was causing problems for Star Fox. Still no polygons though.
- Oops, sound DSP noise output was broken - accidentally deleted an important
  line while removing debug code ready for the last release.
- Added initial 3Dfx support to the Linux port - basically using the Voodoo
  card as a bi-linear filtering, scaling blitter. Actually slightly slower than
  TV mode, for non-scrolling images due to poor texture upload speeds to the
  card, but the full-screen feature is nice and the speed doesn't drop as more
  of the screen changes.
1.18
- Implemented a sync-sound mode where sound data gets generated in sync with
  SPC700 instructions being executed. Finally the sound Williams Arcade
  classics can be heard. Also helps slight sound timing problems in many other
  games but doesn't fix Mortal Kombat 2 like I thought it would - its
  sound routine programmers must have been on drugs or something!
- Added interpolated sound - gives low frequency sounds much more bass similar
  to a real SNES especially with the playback rate ramped up to 44KHz.
- Added on-screen messages as various emulation options are toggled on and off
  using the in-game keys.
- Fixed a PPU register read bug with the sprite register write position. Thanks
  to Takehiro TOMINAGA for the bug report.
- Altered the auto-frame skip timing code to only wait and re-sync to the end
  of frame when frames haven't been skipped. Again thanks to Takehiro.
- Speeded up the colour addition and subtraction code using ideas from
  Takehiro.
1.17
- Linux and UNIX sound code now driven directly from signal timer handler
  rather than the timer handler just setting a flag which had to be polled in
  the main emulation code. Slightly faster execution.
- Fixed the crash bug in the ZSNES Super FX asm code with Vortex - the game's
  polygons still aren't visible though.
- Implemented bent-line increase and exponential decay and sustain volume
  envelopes - they should match, or at least be very similar to the real SNES
  sound DSP chip now.
- It would seem ROMs can key on sound channels even if the channel hasn't
  been keyed-off, Pac-In-Time requires it. Changed code to allow it.
- Quick mod to ZSNES Super FX code to get Winter Gold working - it was already
  working with the C Super FX code.
- Added emulation of the extra 1/2 scan-line per frame on PAL and NTSC -
  should help improve music speed emulation.
- Worked around the click sound heard when ROMs use 0 volume envelope attack
  rate.
- Removed the 'check for IRQ already happened' H-IRQ position register setting
  code - it was causing problems for Ninja Warriors and was not required by
  F1 Grand Prix.
- Fixed a bug in the new sound code - the sustain part of the
  attack-decay-sustain-release volume envelope was being skipped if the
  sustain level wasn't at 100%. The fix has helped some music notes from
  being cut off early in a few games.
- Added fix to Pro Action Reply support (again). Thanks to Paul Shoener III for
  the original fix and Gil Pedersen for reminding me to apply it!
- Finally fixed the Tales of Phantasia 'bum note' problem! The ROM set its
  sample directory to the upper-most page and I forget to code for the hidden
  64 bytes of RAM, that appear when the boot ROM is switched off, when fetching
  sample addresses.
- Adjusted the relative cycle length between the 65c816 and the SPC700 slightly
  to get Terranigma working again.
- Oops, the emulated joypads 3 and 4 via the emulated Multi-player 5 interface
  weren't working. Thanks to Steffen Schwenke for the bug report.
- Optimised the echo sound code - by-passed the the FIR filter code if only
  a pass-through FIR filter was defined by the ROM.
- Modified V and H-IRQ register changing code to trigger an IRQ immediately if
  V-IRQ is enabled and the scan-lines match and either H-IRQ is not enabled or
  the electron beam position has already gone past the trigger point. Fixes
  the screen flicker in F1 Grand Prix.
- Modified the priority-per-pixel mode 7 code to use BG#1's clipping data if
  the top bit of the mode 7 pixel is set. Fixes initial track drive-through
  display in F1 Grand Prix.
- Modified the sprite priority levels for the priority-per-pixel mode 7
  display. Now the car can be seen in F1 Grand Prix.
- Wrote a sound DSP register recording scheme which 'plays back' the register
  changes in sync with the sound generation code. I'm bit disappointed, it
  only improves the sound in a very few games... Scrapped the code, it actually
  causes more problems than it fixes. Oh, well, another 3 weeks work wasted...
- Fixed a SPC700 wake up problem for Lufia I - made the SPC700 also wake up
  when the 65c816 read from one of the four comm ports.
- Included lots of sound code speed ups and sound quality improvements
  from Takehiro TOMINAGA - many thanks go to him.
1.16
- Fixed a case where the -forcelorom option didn't work - the case was
  required for Formation Soccer which claims in its ROM header to use the
  same memory map as Super FX ROM, it doesn't.
- Pulled apart a real SNES using a crowbar (great fun), just to look at what
  speed the SPC700 is actually clocked at for more accurate relative emulation
  speed.
- Implemented SPC700 cycle counting in the hope the improved timing would fix
  Tales'; no such luck but at least the -ratio option is obsolete now.
- Implemented executing SPC700 instructions during DMA, fixes BSZelda and
  Goal lock up at start and music pausing briefly when ROMs do lots of DMA,
  usually between game screens.
- Scrapped the i386 asm SPC700 code - it was the cause of the music not
  restarting after a battle in Chrono Trigger and FF3 and I didn't realise
  because the bug had already occurred in the test freeze-file I had.
  Thanks to John Stiles for pointing out that the Mac port didn't have the
  missing music problem.
- Fixed RGB subtraction bug on displays with only 5 bits for green, e.g. RGB555
  displays. The GREEN_HI_BIT variable was always set to a value for 6 bit
  green displays.
- Added the SA-1 memory map, still a long way to go before any SA-1 game will
  run.
1.15
- Jumped versions to keep in sync with the DOS port release.
1.14
- Improved 8-bit sound generation slightly, but it still sounds very poor
  compared to 16-bit sound.
1.13
- Implemented the Tales of Phantasia memory map using the information supplied
  by zsKnight. Had to also implement a de-interleave routine to work around
  a ROM feature and Snes9x CPU instruction fetching implementation detail.
- Added a frames-per-second on-screen display option.
- Fixed the final glitch bug with the Mario Kart track display - the byte code
  for the termination of the DSP1 raster command wasn't been recognised.
- Disabled a NMI/DMA hack for Rise of the Robots, was causing problems for
  Mario Kart and 'Robots wasn't working correctly anyway.
- Optimised the mode 7 rendering a little.
- Changed tile rendering code to use offsets into screen buffer rather than
  direct pointers ready for z-buffer implementation.
1.12
- Changed V-blank NMI to occur immediately after a WAI instruction, Toy Story
  required this.
- Fixed reading of H-DMA line counter register, Top Gear 3000 needed this.
- Ripped off large parts of ZSNES's DSP1 code (with _Demo_'s and zsKnight's
  approval). Now Mario Kart works almost 100%.
- Added a check to see if a vertical scan-line IRQ register change will cause
  a H-IRQ later on the current scan-line. Pilot Wings needed this.
- Fixed possible crash bug in clip window code when both windows had two
  spans. Could actually cause Chrono Trigger to crash the emulator.
- Fixed a lock-up problem with the C Super FX code, Star Fox and executing
  a few 'FX instructions per scan-line (required for Winter Gold).
1.11
- Partially fixed the DOS netplay server - the server timer is running too
  slowly and it doesn't deal with disconnects correctly yet.
- Corrected the sound echo delay - it was varying with the sound playback
  rate chosen by the user - it shouldn't have been.
- Implemented DOS netplay code - DOS server code still not working though.
- Removed all floating point calculations from the sound generation code.
- Fiddled with the pitch modulation code - my guess is the output of a
  channel that is used to modulate the frequency of another channel is
  automatically muted by the SPC700 chip. Just a guess, but the wind from
  FF3 sounds 'better' but far from perfect.
- Optimised the tile palette index calculation.
- Optimised the planar to chunky tile conversion code.
- Fixed X11 port to always scale SNES image if hi-res. only (no interpolation)
  support is enabled.
- Added zipped ROM image support using Gilles Vollant unzip code and
  some code that Ivar (Lestat) sent me a long time ago.
- 65c816 asm RTI instruction was destroying the program bank in emulation mode,
  the C code was already correct. Caused C64E to break.
1.10
- Finished NetPlay v1 - allows up to five networked machines to play
  multi-player SNES games, one player on each machine.
- Switchable full-screen mode added to Linux X11 port, some code and ideas
  nicked from Maciej Babinski's original Snes9x XFree86 DGA Linux port, the
  UAE Amiga emulator, plus lots of my own code.
1.08
- Bug fixes to C Super FX emulation - now Winter Gold works correctly again.
1.07
- More DSP1 work. Mario Kart is now playable! The character projection code
  is still broken so the opponents and obstacles aren't always positioned
  correctly on screen and you keep bumping into them, but I can still keep
  coming first!
- Started work on NetPlay support.
- Decreased sound card DMA buffer size on DOS port to improve sound generation
  and sound CPU synchronisation in some games.
- Included Linux joystick driver patches from Vojtech Pavlik so the port can
  use the new v1.x joystick drivers, again written by Vojtech Pavlik. Allows
  use of Micro$oft Sidewinder pads, NES and SNES pads, PlayStation pads,
  Gamepad Pros, etc.
- Added halve-the-result colour subtraction.
1.06
- Extended code to allow support for multiple 16-bit screen formats,
  switchable at run-time, rather just supporting one, selectable at compile
  time.
- Added XFree86 DGA Linux port - code from Maciej Babinski.
- More fixes to the X11 image format conversion and setup code.
- The asm SetByte routine wasn't wrapping writes to S-RAM correctly, allowing
  some ROMs to think they were running on a copier and put up an error
  screen. Thanks to Nu of #rom for the report.
- Added 'TV-Mode' support (interpolation and scan-lines) to the DOS and
  UNIX ports from code based on John Stiles work.
- Added v-sync option to the DOS port.
- Added fix to Pro Action Reply support, thanks to Paul Shoener III.
- Added ggi support (untested) to Linux port using patches from
  Alexander Larsson (alla@lysator.liu.se).
- Added 16 to 24/32 bit image conversion routines to the UNIX X11 code.
- The SPC700 OR1 instruction was broken. Thanks to Pyrgopolinices for the
  report.
- DOS port was having trouble splitting and joining path names - caused
  problems when specifying the full path name of a ROM when the ROM image
  was on another drive.
- If a ROM reset the sound DSP and then turned on echo effects but kept
  the same echo delay setting, then the echo effects could not be heard.
  Thanks to madec@mclink.it for the bug report and freeze file that made it
  easy to find the problem.
- DOS port was always using stereo sound setting, if sound card
  supported it, regardless of the user preference.
- Linux port X11 port could crash if window was resized while transparency
  effects were enabled.
- The colour subtraction accelerator look-up table was slightly wrong, causing
  one bit of red, green blue values to 'spill' into the next field.
- Allowed colour window to cut a hole in the main-screen and show the sub-
  screen underneath. The effect is used by Illusion of Gaia.
- Added support for colour subtraction, with the halve-the-result flag
  set.
- Included DSP1 code from _Demo_. Now you can see the track in Mario Kart and
  the ground in Pilot Wings - still can't play the games though due to other
  missing commands.
- Added an NMI hack to work around a code bug in Battle Toads: BATTLEMANIACS,
  its only by chance that the game works on a real SNES - And disabled it
  again because it causes problems for Chrono Trigger.
- A frame skip of zero was actually still skipping one frame. Thanks to
  Marius Fodor for the info.
- And yet more X-OR window bug fixes - now the effects during some of the more
  'posh' spells look correct in Chrono Trigger.
- Yet another window area inversion bug - off by one pixel on right-hand edge.
- Forgot to put dummy start and end points for XOR window combination modes -
  now Uniracers looks correct and Sailor Moon looks like it does on a real
  SNES.
- Window clip code was using wrong index into a 2-dimensional array when
  the whole of the main or sub-screens were clipped.
1.05
- The master volume disable code was looking that the wrong variable!
- Fixed crash bug in newer sound code if a ROM tried to start a sample
  playing who's data went past the end of SPC700 memory. (Cannon Fodder)
1.04
- Fixed DSP1 ROM header detection bug.
- More DSP1 work; still nothing works, although I know the multiply command
  is correct because I've compared the results against a real DSP1.
1.03
- Oops, the multi-player 5 disable code change broke the multi-player 5 being
  the default controller.
- Implemented the colour window on the main screen - now Zelda's oval zoom
  window displays correctly and Krusty's Super Fun House clips the left-most
  8 pixels as it does on the real SNES.
- TERRANIGMA didn't like me returning a random value when it attempted to
  read a channel's the current sample byte.
- Hacked in initial support for mode 7 priority-per-pixel - the priority bit
  doesn't actually change the priority of the pixel but the two games that I
  know of that use the feature look OK. (Winter Extreme Skiing and the
  intro of Tiny Toons Adventures).
- Colour addition/subtraction code now uses RGB565 rather than RGB555
  calculations - helps a little with the loss of the bottom bit of SNES
  colour data.
- DSP1 emulation started - nothing works yet.
1.02
- Switched to adding back drop colour rather than fixed colour when
  sub-screen addition is enabled but there's nothing on the sub-screen.
  Uniracers seems to need it. - DISABLED it again. Causes problems for
  other ROMs and Uniracers itself on later screens.
- Fixed XOR window logic combination mode and area inversion code, now
  Uniracers works correctly.
- Oops, if colour window and half colour addition/subtraction were both
  switched on, area outside colour window was still being halved, it shouldn't.
  Hacky fix at the moment until I implement the correct fix.
- Fixed several bugs with the mosaic effect and 16x16 tiles and a few
  possible background scroll offset bugs and the mosaic effect.
- Optimised the sound sample generation code for cases when the SNES
  sample playback frequency was higher than the sound card playback rate.
- Fixed possible click sound when a sample was first started to be played.
1.01
- Corrected scan-line count for PAL games - should be 312 lines verses 262 for
  NTSC. Was causing slow music on PAL games.
- Added error correction code to the SPC700 timer update code - the
  SPC700 timers are updated using the emulated h-blank handler which is
  called every emulated 63.6 microseconds (15.720KHz) but the SPC700 timers
  need to be updated at multiples of 8KHz, hence the error. Was causing
  music to be played slightly too fast.
- Switched back to using C SPC700 code - the old SPC700 asm code was lacking
  several optimisations that the C version had. It also had multiple
  speed hack cycle skipping bugs. Plus I hadn't even finished optimising
  all the code from the last time I converted the C compiler output.
- Optimised SPC700 memory access routines a little.
- Disabled code that prevented ROMs updating SPC700 timer values while the
  timer was running - it seems like it is allowed, even though docs on the
  'net I've seen say its not.
1.0
- Fixed SuperScope support.
- Added hi-res. option to my DOS port.
- Fixed 4, 6, and 8 button standard PC joystick support.
- Changed some types the source code was using BYTE -> uint8, WORD -> uint16,
  DWORD -> uint32 and BOOL -> bool8, types were clashing Windows typedefs
  but sizes didn't always match.
0.99
- 8-bit double height and/or width tile rendering was missing every other
  group of 4 pixels - screen pointer advance count was wrong.
- Asm SPC700 emulation was ignoring the Shutdown flag - the result is its
  not possible to turn off cycle skipping for the SPC700 emulation.
0.98
- CPU to ROM address decoding code rewritten - used by Game Genie cheat codes,
  orginal code might have been the cause of some Game Genie codes not working.
- Started to remove printf calls and replace them with calls to S9xMessage,
  port code can then dicide what to do with message.
0.97
- Re-enabled decompressed sample caching, still has a possible click problem
  but the sound code is a lot faster with it enabled. Added command line option
  to disable it if required.
- Added '7' key support to rotate through available controller options, in
  the order multi-player5, mouse on #1, mouse on #2, superscope,
  standard controller and then back to multi-player5.
- Hi-res. (512x448) support fixed.
- Mouse support completed - Lemmings 2 and Mario Paint working a treat.
- More colour window fixes.
- Fixed freeze game problem when ZSNES SuperFX code is being used -
  ZSNES 'FX state was not being saved and restored.
- ZSNES SuperFX asm emulation code plugged in to Snes9x.
0.96
- Looks like if the colour window is not enabled at all and the colour
  window selector is defined to only allow colour effects inside the colour
  window, then no effects should be visible.
- Offset-per-tile rendering code didn't support width 64 screen size, which
  Chrono Trigger used on its title screen.
- Contra 3 seems to prove that defining the clip window area to be 'outside'
  a window that covers the whole screen is not an area with no range.
  - No it doesn't. It proves that I shouldn't have initialised the right
    window edges to 255! Contra 3 enables clipping windows without first
    defining their range.
- Debug frame advance feature was being prevented from forcing the next
  frame to be rendered by SyncSpeed which was being called after the
  debugger returned to the main loop.
- H-DMA code was allowing ROMs to manually start H-DMA during the v-blank
  period, ROMs shouldn't be allowed to do this.
- Asm code would not push the correct CPU status onto the emulated stack if
  returning from an NMI immediately triggered an IRQ - fixes Mortal Kombat 1
  and War of the Gems.
- 'd' dump memory debug command was not preserving the CYCLES count.
- C versions of SNES memory access code had same problem as asm code on the DOS
  port except it didn't cause a crash just ROMs failed to work correctly.
- Asm i386 code was using signed compares to check for special case memory
  areas - it was causing crash problems on the DOS port which was sometimes
  returning valid address values with the top bit set - i.e. they seemed
  like negative values!
- Changed event reschedule code to always allow h-blank start events, used to
  disable them during v-blank period.
- Added code to HDMA when end of visible lines reached.
- Changed register 4212 code not to always return h-blank when in v-blank.
- Clipping fixed colour addition to background area was off by one pixel on
  the right-hand edge.
- HDMA: Finally worked out how the real SNES operates when ROMs manual
  start H-DMA during the frame - ROMs must set up the H-DMA line count
  and address values before H-DMA is started.
- Fixed the asm code to remove all hard-wired structure offsets - one offset
  into the IPPU structure was wrong in the code because the structure had
  changed size.
- Added colour window support and allowed graphic window settings to be
  different on the main screen and sub screen, just like a real SNES.
- SuperFX LJMP instruction had bank and address values swapped.
- Fixed possible memory overwrite problem because OBJList array was one
  element too short.
- Added AND multi-graphic window combo support.
- ROM image memory allocation allocates an extra 32K of RAM, then moves the
  pointer forward by that amount - stops the SuperFX emulation from accessing
  unallocated memory, possibly causing a crash.
- SuperFX emulation now stores sign and zero flags in separate variables so
  the MERGE instruction can set flags correctly.
- Added 65c816 instruction skipping to i386 asm code when 65c816 waiting in
  a simple loop for some 'event' to happen e.g. end of frame NMI.
- Finally fixed the APU instruction skipping problem with the i386 asm
  code when the WAI instruction is used - caused slow music on some ROMs.
- Offset-per-tile modes don't seem to support screen size - Mario All Stars
  Super Mario 2 requires this on title screen. Doesn't seem to effect
  Tetris Attack or Puzzle Bobble.
- Changed SNES select and start keys from shift and control to space and
  enter - allows shift-fn key to save game positions without the SNES ROM
  also getting a select joypad button press.
- Multiplayer5 support for controllers 3+ was broken for ROMs that used
  automatic hardware joypad reading rather than reading joypads serially.
- ResetPPU was not clearing tile caches and marking OBJ as need recomputing.
- Cached OBJ positions and sizes were not being recomputed if ROM changed
  global OBJ sizes during frame.
- Fixed brightness multiplication problem on 16-bit code for green.
- SPC700 emulation now uses one variable to store ZERO and NEGATIVE flags.
- SPC700 emulation now only increments PC once at end of instruction.
- New ROM type and interleaved detection code.
- Reading sound DSP register ENDX also clears the value. The docs on the
  'net said that only writing to the register cleared its value. Fixes
  sound in Zoop.
- Fixed mode 4 colour palette problem on background #2 in tile-based graphics
  code.
- Fixed graphics mode 4, offset-per-tile support. Only one set of offset data
  that is switchable between horizontal and vertical, unlike modes 2 and 6
  which allow separate horizontal and vertical offsets per tile.
- Modified the APU timer code again, if the timer is enabled, a write to the
  timer target register is only allowed if a value hasn't been written yet.
  Fixed Donkey Kong Country 1 and Earth Worm Jim 1 & 2.
- Attack rate of 0ms changed from 1ms back to 0ms because of a group of ROMs
  that change from attack mode to decay mode in real-time. Will change back
  when I've added better SPC700 CPU and sound generation sync code.
- Added support for ROMs set a new sound timer value while the timer is
  enabled (EWJ 1 & 2).
- Added support for ROMs that read the sound envelope height (MK1, MK2, etc).
- ROMs writing to the H-DMA enable register during visible scan-lines were
  restarting H-DMA for that frame causing random screen effect corruption.
- Echo feedback seems to be after the FIR filter, not before as a diagram I've
  seen suggests.
- Sound pitch modulation added.
- Memory access routines changed to pass a single 24-bit address rather than
  the previous separate 8-bit bank and 16-bit address parameters.
0.3
- Updates to A-Bus address during a frame must not update H-DMA address.
  Fixes Actraiser 2 and Pacman 2.
- Removed sound volume mangling - with echo support enabled it doesn't seem to
  be required.
- Attack rate of 0ms changed to 1ms to help prevent click sound with sudden
  start of a sample playing.
- Sample caching of samples that looped using part of the original sample
  created a click on the sound output. Caching disabled for the moment. Would
  require 512K of cache RAM to fix sample caching.
- Colour addition/subtraction support added - but still a little buggy in
  places and very slow.
- 16-bit colour support added.
- Sustain sound volume was not being set if a sample using ADSR was started
  with both the attack rate and decay rate set to zero - resulted in missing
  sound samples on with some games.
- Sound echo support added.
- Sound channel mixing code was not completely clearing a channel's sound
  buffer when a channel finished playing a sample.
- Sound mixing code rewritten to use one buffer, rather than writing each
  channel into a separate buffer then combining them into one buffer.
- Memory access routines rewritten to use an 8K block lookup table rather than
  dedicated code for each ROM memory map - it was getting difficult to support
  the new types of SNES ROM memory maps becoming apparent.
- Sound sample decoding wasn't decoding sound samples correctly if a
  previously cached sample was only partially overwritten by the ROM as
  opposed to being completely replaced.
- Sound sample decoding wasn't clipping generated sample values correctly.
- Changed H-DMA to start in the current frame only if enable register is
  written to during v-blank, h-blank or while the screen is blanked.
- The SPC700 seems to start executing instructions before the 65c816 -
  shorter reset pulse? (NO - forgot the SPC700 executes instructions while DMA
  is taking place).
- ROMs that reset the H-IRQ position so another IRQ would be triggered on the
  same scan-line where not supported - Super Off-Road: The Baj needs it.
- $4212 bit 7 needs to go high at the end of h-blank at line 224 not at the
  start of h-blank - Bubsy needs it.
- Sample decoding routine could write to memory outside sample cache area if
  address of block to decode was greater than $0x10000 - 9.
- Walking mario can be seen on map screen of MarioWorld - needed sprite
  priority rotation working. ROM sets bit 7 of $2103 then sets rotation in
  $2102. Reset rotation at start of v-blank not at end.
0.24
- Fixed reading of DMA register values - now Ms Pacman works.
- Saved sprite memory address being restored on the wrong scan-line - caused
  corrupt sprites on at least one game (GANBARE GOEMON 2).
- Screen colour palette not being updated if ROM only wrote to low byte of
  palette register.
- Possible memory corruption fixed if a ROM tried to write to an invalid
  sprite address via PPU registers.
- X11 port support quick load and save by pressing function keys to load or
  shift + function keys to save.
0.23
- Added option to disable graphic window effects - T2: The Arcade Game doesn't
  seem to like them.
- Mode 7 "outside screen area" register interpretation fixed - now the
  Actraiser map screen looks a lot better.
- Old DMA code hack for Battle Toads: Double Dragon removed as it was no
  longer required and it was causing problems for Ys III.
- Lowered max volume level of 16-bit sound mixing code to help with sound
  clipping problems is lots of SNES sound channels are playing.
0.22
- Crash bug fixed in mode 7 graphics windows code
0.21
- Fixed a noise channel volume bug - noise waveform was getting clipped.
- Fixed 24bit X Window System server support on the Solaris port.
- Sprites in priority level 1 on mode 7 were being drawn incorrectly behind
  graphics screen.
- BG 3 priority 1 tiles sometimes not drawn dependent on the $2105 bit 3
  setting.
- Added graphic window support the tile redraw code.
- Added mosaic support to tile redraw code.
- Tile redraw code was drawing one line too many on screen-splits.
- Tile-based redraw code made more intelligent about when a background should
  be displayed or not.
- Added wrap within bank support to large DMAs just to support Rock 'n' Roll
  racing.
0.20
- DMA routines added lots of special cases and removed most calls to GetByte,
  using a pointer instead.
- Multiple using PPU registers is now only computed when first byte of result
  is actually read.
- Sound enabled by default if compiled without DEBUGGER defined.
- Tile redraw method made the default.
- Fixed CPU_SHUTDOWN so SPC700 continues to execute even if main CPU is
  "skipping" cycles waiting for an event to happen.
- More command line options added.
- Default cycles-per-scan-line to execute lowered to 90% from 100%.
- +/- keys now work even if auto-frame rate adjust was enabled.
- SPC700 emulation partially rewritten in assembler.
- Asm 65c816 code change to use same speed up techniques as the C++ code.
- Minor speed tweaks to the sound decoding and mixing code.
- C++ SPC700 emulation changed to use same method as 65c816 emulation for
  computing and storing emulated CPU flags.
- Mode 7 code rewritten and several scrolling offset bugs fixed.
- Lo-ROM S-RAM memory map bug fixed - now Uniracers works.
- Multiple speed ups and changes to the tile and line-based redraw code.
- Tile and line redraw code changed to cache converted tiles between frames.
- Variable cycle length timing made compile-tile switchable.
- C++ 65c816 emulation changed to use several opcode jump tables to avoid
  a register size comparison test on most emulated instructions.
- C++ 65c816 emulation changed how is computes and stores emulated CPU flags.
- Fixed high frequency sound playback bug - the sample rate calculation was
  blowing the range of an unsigned long.
- Fixed V-RAM reading so DKC3, Addams Family, Aladdin and Pacman all work.
- Fixed sound code so ROMs can change from ADSR mode to decrease mode - fixes
  lots of ROMs.
0.12 released
- Added dynamic speed regulation.
- TCALL vector calculation change from n to 15 - n.
- Fixed crash bug if ROM writes to sound DSP register numbers greater than
  127.
- Fixed DOS memory locked for interrupt code.
- Added long name versions of command line switches.
- Added command line switch for SPC700_SHUTDOWN code and WAI cycle skipping
  code.
0.1 released
- All DOS memory is now locked from being swapped.
- Fixed DOS port keyboard polling code - could get confused if a keyboard
  interrupt happened while keys were being checked.
- SPC700 ADC instruction never cleared Overflow or Carry flags!
- Changed selection of playback speeds for Solaris port.
- Sample caching code was broken - cached samples were never used.
- Added code speed ups for ROMs that use a lot of DMA to VRAM.
- More cpu code asm speed up.
- Fixed 16x16 size tiles on tile-based redraw code.
- Fixed sound gain-mode increase and decrease volume envelopes.
- Added code to support ROMs that reuse sprites in the same frame.
- Fixed processing of negative volume levels.
- Fixed SPC700 EOR1 instruction.
- Added SPC700 shutdown code to stop executing SPC700 instructions if in
  a tight loop waiting for a timer or for the 65C816 to respond.
- DOS playback rate was being forced to 16KHz by Allegro - fixed.
- Fixed bug in SPC700 MOV1 C,bit, address.
- Fixed a off-by-one loop sample pointer bug in MixSamples.
- Added command line flags for cached-tile based drawing and sub-screen
  background layers priority swapping.
- NOPE, got encoding of the OR1/EOR1,AND1 range of correct originally -
  got duff information from an "SPC700" programmer.
- More SPC700 fixes: got the encoding of the OR1/EOR1,AND1 range of
  instructions wrong - I guessed wrong originally.
- Sample looping bug fix on mono sound mixing code.
- Sound pitch value no-longer clipped to 14 bits - apparently FF3 needs this.
- Followed Paradox's suggestion and changed graphics code to place sub-screen
  background layers below main-screen background layers. Helps lots of games
  that use sub-screen addition/subtraction - now you don't have to toggle
  background layers on and off so often just to see hidden text, characters,
  or maps, etc. Made it switchable.
  Acts as a good intermediate solution until sub-screen addition/subtraction
  is actually implemented.
- Modified sound skipper code to return random values when ROM is stuck
  waiting for the SPC700 CPU to respond - helps several ROMs that previously
  don't work with the currently selection of APU skippers.
- Improved sound mixing code so volume is not attenuated so much, giving
  better results on 8bit sound cards.
- Changed the frequency at which the joystick polling routine is called - now
  called every-other frame rather than every 3rd frame.
- Recompiled Linux and DOS ports with the Pentium optimising version of gcc -
  gives a few percent speed increase.
- Changed V-RAM increment count from 64 to 128 - apparently Final Fantasy 3
  needs this as well.
- Fixed sprite priority bug with Mode 7 - apparently Final Fantasy 3 needs
  this.
- Fixed a screen clipping problem with the S-VGA mode.
- Fixed bug that had crept in with -m 2 S-VGA mode (Linux version).
- Fixed S-VGA Linux version with sound enabled.
- The SPC700 ADC (X),(Y) instruction was broken - with all these SPC700 fixes
  now many more ROMs work with sound enabled.
- The SPC700 Pop PSW instruction was not resetting the direct page location.
- The SPC700 instruction MOV A,[DP+X] was incorrectly doing a MOV A,DP+X.
- Got the SPC700 SETx and CLRx instruction encoding swapped around.
- Fixed #define problem that was stopping DOS snapshot saving from working.
0.72 released
- Fixed the DOS filename handling - old Unix code was screwing up with ROM
  filenames that contained backslashes (\) - the ROM would load but S-RAM
  loading and saving would fail and the default filename for snapshots
  wouldn't work.
- This time really fixed Allegro library keyboard handling (DOS port); it
  was missing key some presses/releases (was stopping Chrono Trigger
  Left + Right + A button combo from working).
- Added code to automatically remove headers off S-RAM save files with
  512 byte headers.
- 32Mbit ROMs in interleaved format are now automatically detected and
  converted.
- Added -ss 3 sound skip method support to the asm version - now NBA Live '96
  works again.
- Added support for multi-part ROM images.
0.71 released
- Made libgz.so statically linked (again) on Linux port - sorry.
- Made writing to $4200 also clear any pending IRQs. This finally allows
  Battle Toads: Double Dragon, Spawn and Sieken 3 all the work with the same
  IRQ logic (but Sieken 3 still gets stuck in sound download code).
- Fixed a H-DMA wobble bug - some frames could randomly miss a line of
  H-DMA causing the F-Zero screen to wobble, and slight text character
  corruption on games like DKC3.
- Interleaved format ROM images are now swapped in-place, without the need
  for a temp 4Mb buffer (saves lots of disk swapping on a 16Mb Windows 95
  machine).
0.7 released
- Fixed Allegro library keyboard handling (DOS port); it was missing key
  some presses/releases.
- DOS port had a different MAX_PATH value which moved the location of the
  SRAM size variable when using the asm CPU emulation core. This, in turn,
  caused the SRAM emulation to fail on the DOS port. Donkey Kong County 2 & 3
  were reporting a ROM copier was connected to the SNES and refused to run.
- Fixed assembler version of XCE - it was always leaving the carry flag
  clear - caused Killer Instinct and Super Punchout to think a ROM
  copier was fitted to the SNES and they all refused to run.
- Fixed assembler versions of MVN/MVP - they weren't setting the data bank
  register to the destination bank of the instruction.
- Fixed joystick detection on MS-DOS port - a single 2 or 4 button joystick in
  port 1 was being ignored if a second joystick was not present in port 2.
- Fixed an uninitialised variable in graphics code - was causing random
  missing scan lines on Mode 7 screens.
- Joysticks now scanned every 3rd frame (joystick scanning is slow in the PC).
- Double-whoops, Metriod 3 had stopped working in v0.6 - fixed it
  (memory map bug).
- Made bit 6 of $4211 set if v-counter == v-timer-position.
- Made reading of $4200 read $4212 instead.
- Adjusted DMA timing to always access ROM memory at slow speed - this seems
  to fix Battle Toads.
- Added code to automatically clear pending IRQs when the horizontal line
  is no longer equal to the horizontal timer line - this fixes Seiken 3, it
  now just gets stuck in the sound CPU wait code - oh well.
- Moved NMI back to its original pre-0.65 behaviour, now Puzzle Bobble works.
- More graphics speed ups - the code to render background tiles with their
  priority bits set is only called if there are actual priority-bit tiles.
- Changed default frame skip rate from 1 to 2 - its seems most people don't
  bother to read the docs, so I thought I'll help them out a bit!
- Speeded up Mode 7 graphics on games like F-Zero that rewrite the matrix
  registers on each scan line using H-DMA.
- Reorganised the graphics code and did a slight speed up - graphics code
  will be the next thing to rewrite in assembler.
- Rewrote CPU core in assembler for Intel platforms - gives a very noticeable
  speed increase.
- Fixed several problems with the APU sound CPU emulation - its now getting
  stable enough to try and implement sound.
- Fixed bug that caused 1 byte of S-RAM to be emulated when ROM didn't
  expect any - it was enough to stop Street Fighter 2 and others from
  working - thanks Lord ESNES.
- The TXS and TCS instructions shouldn't set the Z and N flags.
- Looks like MVP/MVN instructions should ignore accumulator size - change
  code to always use all 16 bits and exit with accumulator set to 0xffff.
- Whoops, accidently left some test code in which was causing the V-BLANK
  flag, bit 8 in register $4212, to be miss-calculated.
- Fixed palette in mode 0.
- Speeded up graphics drawing a little by skipping groups of 4 pixels that
  were all transparent.
0.65 released
- S-VGA and MS-DOS ports now have a VGA mode command line flag.
- Improved the fading code - should be much more smooth now.
- Fixed second joy-pad support and re-mapped keys and joysticks to actually
  make a match between what my docs said and a real SNES (SNES docs I'd
  seen were wrong!).
- Fixed a bug in Relative Long CPU addressing mode.
- Ported Snes96 to MS-DOS.
- Snapshot loading and saving no longer uses external gzip binary.
- Added support for registers at $21c2 and $21c3.
- Made reading the software latch for the horizontal and vertical counters also
  clear any pending IRQ.
- Added sprite priority rotation.
- Rewrote parts of the graphics routines to fix a sprite-to-sprite priority
  bug.
- NMI flag changed again - now back to being reset by reading $4210 but
  actual NMI is delayed.
- Made mode 7 background colour 0 transparent - this fixed several sprite
  priority problems a few games where having.
- Finally worked out how sprite "Object Name Select" works and emulated it -
  this fixes many (if not all) of the corrupted sprites some games
  experienced.
- Delayed NMI activation for one instruction to give time for loops that
  wait for bit 7 of $4210 to go high.
- Special-cased line count of 128 on H-DMA to mean repeat previous data with
  a line count of 128 and not just terminate H-DMA on that channel.
- APU sound CPU emulation added - just need to debug the thing.
- Fixed Overflow flag setting in ADC and SBC instructions - it was never
  being set.
- Rewrote how CPU instructions are fetched and how values are pushed and pulled
  from the stack - it gave a very large increase in emulation speed.
- H-DMA was being started one scan-line too late.
- Added CG-RAM reading support.
- Added "Full Graphic" V-RAM reading.
- Speeded up C version of CPU emulation quite a bit - could speed it up a
  little more before rewriting in assembler.
- Fixed bugs in 16x16 tile drawing on 2bit and 8bit deep screens.
0.6 released
- Speeded up 16x16 tile background rendering by removing a temp tile buffer
  it was using. The speed up also fixed a vertical scroll bug.
- Fixed slight window clipping on 16x16 tile backgrounds.
- Added automatic PAL/NTSC mode switching.
- Fixed background and sprites so only visible if on main-screen or
  on sub-screen under correct circumstance.
- Fixed lockup bug in DMA.
- Stopped NMI flag from being reset by reading $4210 - was causing a couple
  of games to get stuck.
- Whoops, got horizontal and vertical Mode 7 flip bits around the wrong way!
- Fixed MIT shared memory pixmap support for X11 version (it was always turned
  off).
- Fixed minor bug - first sprite in priority group was drawn twice. Didn't
  cause any visual bugs, it just slowed down redrawing a little.
- Fixed DMA bug - transfer byte count should be 0 after DMA has finished.
- Fixed a scaling bug if width < height.
- Interleaved ROM image support added.
- 16bit and 24bit X11 server support added - with scaling.
- Added window scaling on X11 version.
- Partial clip windows added - the only window overlap option implemented at
  the moment is OR, it seems it good enough for all the ROMs I've tested
  it with.
- Partial Mosaic effect added (pixels only growing vertically).
- Missing Mode 7 "outside screen area" option added.
- Fixed mode 7 screen wrap "outside screen area" option.
- Used new event processing to finally fix H-IRQ so it triggers at the
  correct position on the scan line.
- New event processing added.
- Linux version now statically links libgz.so (sorry).
0.5 released
- Linux S-VGA version changed from using a 320x240 ModeX screen (slow) to a
  256x256 chunky screen (faster) - thanks to Phillip Ezolt (pe28+@andrew.cmu.edu)
  for information on how to do this.
- Mode 7 screen flipping added.
- Included Snes97's CPU emulation code into Snes96. Didn't fix any bugs but
  slowed down the emulation some what and I couldn't compile it optimised
  because it was so large - so I removed it again.
- Added a few extra features available via the keyboard.
- Fixed a H-DMA transfer mode - bad documentation.
- Fixed H-DMA indirect addressing (it was using the wrong CPU memory bank).
- The Linux slow down bug is my crappy laptop enabling battery saving features !
- Changed graphics code to perform true line-by-line screen updates.
- Fixed sprite drawing bugs.
- Ported Snes97's graphics code to Snes96.
- Fixed memory map for HiROM save RAM area.
- Fixed HiROM memory map - now Killer Instinct and Donkey Kong County work !
- OK the slow down bug is just actually my laptop trying to save battery
  power by slowing the CPU clock!
- The Linux slow down bug shows itself on DOS emulators running under DOSEMU
  so it must be a kernel problem (or feature).
- Fixed H-DMA (again) to be complete emulation - all I need now is line-by-line
  screen update...
- Fixed DMA to not copy too many bytes if byte count was not a multiple of
  the transfer mode quantity (caused corruption on Super Mario World map screen).
- Changed mapping of keyboard to joy-pad buttons and added additional
  direction keys for joy-pad one so player one's right hand doesn't have to
  obscure player two's keyboard joy-pad buttons.
- Changed joystick button layout to match SNES if using a 6 button joy-pad.
- Changed snapshot format so I can easily use libgz on Linux.
- Added few speed up tweaks that will be lost again when I add line-by-line
  screen update.
- First visible scan-line changed from 8 to 1 to match with new docs.
- New SNES information source found; fixed partial H-DMA emulation to include
  indirect addressing support.
- Snapshot files are now compressed.
- Compressed ROM images now supported on Linux.
- Snapshot loading and saving added.
- Joystick support for Linux added. One 2, 4 or 6 button joystick, or two 2
  button joysticks supported (PC hardware limitation).
- SVGA full screen support added for Linux. Still has the X11 slow down bug so
  can't blame the X11 server any more! Must be a kernel bug or a very odd
  emulator bug.
- Added emulation of two joy-pads on the PC/Sun keyboard.
- Removed -i command line flag as it is no longer used. -h value range has also
  changed: now 1 - 100 (percentage).
- Actuate cycle counting rather than instruction counting now added including
  fast and slow ROM timing - should give much better timing information when
  line-by-line screen update added.
- Bug fixed old-style joy-pad access used by some ROMs - Mario All Stars still
  gives problems if enabled and I don't know why; but at least Super Bomberman
  now works !
- Looks like if both horizontal and vertical IRQ are enabled then IRQ should
  only be triggered once per frame and not once per scan line - looking at the
  IRQ handler of a couple of ROMs seems to confirm this.
- Added initial cycle counting - not accurate enough for some ROMs though.
- Finally worked out how the odd VRAM address increments should work but only
  found one ROM, so far, that actually uses it.
- Debugged the odd slow down problem with the Linux port - it seems to be a
  bug in the X Window System server - starve the X server of keyboard presses
  or mouse clicks or movement and the X server slows down, slowing down the
  emulator with it !
0.4 released
- Fixed sprite vertical clipping at top of screen.
- No need to invert the Mode 7 transformation matrix before use - the
  ROM coder already had to!
- Fixed Mode 7 scrolling offset when using special effects.
- Added Mode 7 rotation, enlargement and reduction emulation.
- DMA shouldn't zero the byte count value after a DMA has completed.
- Added DMA reading (Addams Family was using it)
- Fixed V-RAM read function - returned data should lag behind the V-RAM
  address by one byte/word.
- Added mode 7 graphics only.
0.3 released
- Speeded up the main CPU loop a bit.
- Add more command line options:
  -f <frame skip> (default 1)
  -i <no instructions between polling X> (default 32768)
  -h <number instructions per scan line> (default 45, some games allow a lower
					  setting resulting in a increased
					  emulated frame rate)
  -t enable CPU tracing
  -ss <sound CPU skip wait method> (default 0, more methods to be added)
  -H disable H-DMA emulation
  -F Force Hi-ROM memory map
- Modified planar to chunky conversion to use look up tables.
- But now Mario All Stars won't start. Made emulation of $4016 optional with
  -o command line switch.
- Thanks to Carlos (calb) of ESNES fame, I've added correct $4016 & $4017
  joy-pad register processing - now several more ROMs will start once a
  button is pressed and can be controlled.
- DMA wasn't updating DMA registers with the final CPU address used after the
  DMA had completed (caused sprite and background corruption with some ROMs).
  Still suspect another DMA side effect isn't being emulated correctly though.
- Fixed setting of CPU overflow flag in ADC and SBC instructions in decimal
  mode.
- Fixed MVP/MVN CPU instructions to leave X and Y values correct at end of
  loop - several more ROMs now work. Still don't know if MVP/MVN instructions
  should ignore the accumulator size flag or not.
- Rewrote background drawing code - gives a large increase in speed.
- Flag to only update X Windows colour palette when necessary was missing a
  case - caused some ROMs to start with a black screen.
- Code to only update background tiles when changed wasn't working so I
  disabled it.
- CPU WAI instruction needed to trigger on hardware IRQ even when interrupt
  enable flag was false.
- DMA was not transferring 65536 bytes when byte count was 0.
- Fixed matrix 16bit x 8bit multiplication (old debug code was causing junk
  value to be returned).
- Fixed Makefile so version.h header file change recompiles file that shows
  version number in window title.
- Added more reporting of used but unimplemented missing hardware features to
  debug command.
- New ROM loading code from Jerremy included, can now cope with ROM images
  with no 512 byte header.
- Speeded up emulated memory access a little bit.
0.2 released
- Added matrix 16bit x 8bit multiplication for Super Off-Road Racer.
- Added initial H-DMA emulation - visual effects using it will not be seen
  correctly until screen is updated line-by-line rather than the whole screen
  at end-of-frame.
- Fixed horizontal sprite clipping (vertical clipping still has a problem).
- Integrated large sprite bug fixes and new background drawing code from
  Jerremy.
- Fixed large size per-sprite flag; always stayed true after sprite size was
  changed to large.
- Rewrote the planar to chunky pixel conversion routines (still need more
  work).
- Made registers $4016 & $4017 always return $ff - lots of ROMs that previously
  wouldn't go beyond the title screen thought old-style joy-pads were
  connected and were waiting for the user to press a button on them.
- Frame skip rate now set to 1 instead of 5 on my P166 laptop!
- Fixed NMI v-blank flag being incorrect set, caused some ROMs to lock.
- X keyboard autorepeat now switched off when emulator has keyboard focus.
- Added number key options to toggle backgrounds 1 to 4 and objs (sprites) on
  and off.
- Fixed sprite clipping problems at edge of left hand side of screen.
- Corrected Hi-ROM memory map (I think) (no I didn't)
- Fixed most of the sprite-to-sprite priority problems.
- Added sprite debug command, 'S'.
- Added a debug command to show what missing hardware features a ROM was using.
- Added horizontal and vertical beam position IRQ - horizontal always triggers
  at start of line at the moment.
- Fixed SBC instruction to set carry flag the correct way around.
Initial release 0.1
- Ported Windows 95 version of Snes96 to Linux on a PC and Solaris on a
  SparcStation.
- Corrected work RAM memory map.
Snes9x: The Portable Super Nintendo Entertainment System Emulator
=================================================================
Files included in the Snes9x archive:
  Snes9x.exe
  fmod.dll
  readme-windows.txt
  faqs-windows.txt
  changes.txt
  snes9x-license.txt

version 1.53  April, 2011
Home page: http://www.snes9x.com/



Contents
========

Introduction
Getting Started
Requirements
Controllers Support
Game Saving
Cheat Support
Movie Support
Netplay Support
Miscellaneous
Compatibility
Problems
Technical Information
Credits



Introduction
============

What is Snes9x?
---------------
Snes9x is a portable, freeware Super Nintendo Entertainment System (SNES)
emulator. It basically allows you to play most games designed for the SNES and
Super Famicom Nintendo game systems on your Mac, Linux, Windows and so on. The
games include some real gems that were only ever released in Japan.

The original Snes9x project was founded by Gary Henderson and Jerremy Koot as a
collaboration of their earlier attempts at SNES emulation (Snes96 and Snes97.)
Over the years the project has grown and has collected some of the greatest
talent in the emulation community (at least of the SNES variety) some of which
have been listed in the credits section, others have helped but have been loss
in the course of time.

Why Emulate the SNES?
---------------------
Well, there are many reasons for this. The main reason is for nostalgic
purposes. In this day and age, it's hard to find an SNES and many good games.
Plus, many of us over the course of time have lost our beloved consoles (may
they R.I.P) but still have our original carts. With no other means to play them,
we turn to emulators. Besides this there are many conveniences of doing this on
the computer instead of dragging out your old system.

Advantages consist of:
- ability to save in any location of the game, despite how the game was
  designed. It's amazingly useful when you don't want to redo the same level
  over and over.
- built-in peripherals. This is anything from multi-taps, to super scopes, to
  cheat devices.
- ability to rip sprites and music for your own personal use.
- easier to organize and no stacks of cartridges.
- filters can be used to enhance graphics and sounds on old games.

As with all things there are disadvantages though:
- if you have an ancient computer, you aren't likely to get a playable
  experience.
- some games are still unemulated (though this a very tiny minority.)
- the emulator can be difficult for new users to configure.



Getting Started
===============

Launch Snes9x using the Windows explorer to locate the directory where you
un-zipped the snes9x.exe and the fmod.dll files and double-click on the
snes9x.exe executable. You could create a shortcut to Snes9x and drag that icon
out onto your desktop.

Loading Games
-------------
Use the Open option from the File menu to open the ROM load dialog. The dialog
allows you to browse your computer to locate the directory where you have stored
your SNES games. Single-click and then press Load to load and start the game.

SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs
as long as there is only 1 per zip file. Also Snes9x can open gzip and jma
compressed files.

Game Color System
-----------------
Snes9x displays the ROM information when a ROM is first loaded. Depending on the
colors used you can tell whether or not a ROM is a good working ROM, or if it's
been altered or is corrupted.

  white   the ROM should be a perfect working copy.
  green   the ROM is mode 1 interleaved.
  orange  the ROM is mode 2 interleaved.
  aqua    the ROM is Game Doctor 24M interleaved.
  yellow  the ROM has probably been altered. Either it's a translation, PD ROM,
          hacked, or possibly a bad ROM. It may also be an overdumped ROM.
  red     the ROM is definitely hacked and that a proper version should be
          exist. Some ROM Tools such as NSRT can also fix these ROMs.

When asking for help on the Snes9x forums, please list the color and CRC32 that
is displayed. This will help to find out what the problem is.

These colors do NOT signify whether a game will work or not. It is just a means
for reference so we can understand what may or may not be a problem. Most often
the problem with games that don't work it's because they are corrupt or are a
bad dump and should be redumped.

SNES Joypad Emulation
---------------------
The default key mapping for joypad 1 is as follows:

  'up arrow'     Up direction
  'down arrow'   Down direction
  'left arrow'   Left direction
  'right arrow'  Right direction
  'V'            A button
  'C'            B button
  'D'            X button
  'X'            Y button
  'A'            L button
  'S'            R button
  'Enter'        Select button
  'Space'        Start button



Requirements
============

System Requirements
-------------------
Windows 98/2000/XP/Vista/7.
DirectX 6.1b or later.
300MHz processor BARE MINIMUM (1GHz+ rec for best settings.)
16MB RAM BARE MINIMUM.
DirectSound capable sound card.

Certain games use added hardware which will require a faster machine. The specs
listed above is the minimum to use Snes9x in any playable form. It is
recommended that you get a semi-modern machine with a 800MHz CPU if you want
good results. A 1GHz CPU is recommended for those that want a near perfect
experience.

Software
--------
You will need access to SNES ROM images otherwise you will have nothing to run!
Some home-brewed ROM images can be downloaded from http://www.zophar.com/.
Please note, it is illegal in most countries to have commercial ROM images
without also owning the actual SNES ROM cartridges, and even then you may be
liable under various EULAs.


CG Shaders
--------
If you want to use CG Shaders in Snex9x for windows you need to install the
CG Toolkit from nvidia's developer zone:
http://developer.nvidia.com/object/cg_download.html

CG shaders work in both D3D and OpenGL. Various shaders can be found in
Themaister's Emulator Shader Pack:
https://github.com/Themaister/Emulator-Shader-Pack


Controllers Support
===================

The real SNES has two ports to connect input devices. Usually 1P and 2P SNES
joypads are connected but various devices and adopters can be plugged.

Multi Player 5
  known as Multi Tap; a five player adapter, allowing up to five people to play
  at once on games that supported it.

SNES Mouse
  a 2-button mouse, originally supplied with a paint program.

Super Scope
  a light-gun; it used infrared to provide wireless communication between the
  gun and the console unit.

Justifier
  a gun similar to Super Scope, supported with one gun-shooting game.

Snes9x can emulate those input devices with the keyboard, mouse and gamepad.

Configuring Keyboard and Gamepad
--------------------------------
Add support for your gamepad and calibrate it using Windows' applet from the
Windows control panel BEFORE starting Snes9x, then use Joy-pad Configuration
dialog in Snes9x to customize the keyboard/gamepad to SNES joypad mappings.

The dialog is easy to use: select which SNES joypad you are configuring using
the combo box (#1 to #5). Make sure that you click the 'enabled' box on that
controller or Snes9x won't recognize a controller being plugged in. Click on the
text box next to 'UP' and then press the key on the keyboard or button on your
gamepad that you would like to perform the UP action. The focus will
automatically move on to the 'RIGHT' text box, press the key or gamepad button
that you want to perform the RIGHT action, and so on until you've customized all
the SNES joypad buttons.

Use of the special diagonal keys should only be used by keyboard users who are
having problems pressing more then one or 2 buttons at a time. First you must
hit 'toggle diagonals' so that you are able to change them.

Using Input Devices
-------------------
SNES Mouse, Super Scope, Justifier and Multi Player 5 are disabled by default,
but you can enable them like so:

First, load your game. Then select the optional controller you want enabled from
the Input menu. Or, the controller is selectable by pressing '7' to cycle to it.

If you use NSRT to add header information to your ROMs, Snes9x will
automatically detect this information and choose the best controller
configuration for you when the game starts up. Incompatible choices will also be
grayed out from the Input menu, but if you really want, they remain selectable
by pressing '7'.

The default key mapping for input devices is as follows:

  '`'  Superscope turbo button.
  '~'  Superscope pause button.
  '7'  rotates between Multi Player 5, SNES mouse on port 1, SNES mouse on port
       2, SuperScope and Justifier emulation. (need to enable special
       controllers in the menu first)



Game Saving
===========

Many SNES games take a very long time to complete from start to finish, so they
allowed your progress to be saved at the predefined places chosen by the game
designers. The game cartridge contains a battery-backed RAM, known as SRAM, and
your save data remain in this SRAM until the battery shutoff.

Snes9x has two methods for saving games. One is the same as of the real SNES
shown above; emulating SRAM. The SRAM contents are saved into a file (.srm) so
you don't need to be worried about the battery shutoff. The other is more
convenient way than the real SNES; 'freezing' or 'snapshotting' the game. It
means saving the whole game state anywhere you want, beyond the game designers'
intent - ideal for saving your game just before a tricky bit!

Freeze files and SRAM files are normally written to and read from the folder
called Saves where your snes9x.exe is located, but sometimes this is not
desirable or possible, especially if it’s a CD-ROM, which is of course is
usually read-only! You can change the folder where Snes9x saves and loads freeze
and SRAM files using the Settings Dialog, available from the Options menu.

Using the SRAM File
-------------------
It's easy enough, just save the game as you do with the real SNES. Snes9x
outputs the contents of the emulated SRAM into a file (.srm) when you load a new
game or quit Snes9x. This file is automatically loaded the next time you play
the game.

Freezing and Defrosting the Game State
--------------------------------------
Snes9x provides 9 slots for freezing the whole of your game state. During the
game, press Shift+F1 to F9 to save a game, and just F1 to F9 to load it again
later.

Real-Time Clock Emulation
-------------------------
Some games have a battery-backed real-time clock (RTC) in their cartridge to
bring a real-time event in the game. Snes9x saves the state of RTC into a file
(.rtc) and also into a freeze file. Note that because it's a 'real-time' clock,
when these files are loaded, the emulated clock is automatically advanced in
reference to your system's time and date.

Fool-Proof System
-----------------
If you quit the game by error without saving your long-time progress, try to
find '.oops' file in the same folder as freeze files. If it exists, try to load
it. It's a freeze file automatically generated if you don't save anything for a
long time.



Cheat Support
=============

Cheat codes allow you to cheat at games. They might give you more lives,
infinite health, enable special powers normally only activated when a special
item is found, and etc. Two major formats are well-known: Game Genie and
Pro-Action Reply (PAR). Many existing Game Genie and PAR codes can be found via
Internet.

Snes9x supports both Game Genie and PAR. Also you can find your own cheat code.
Cheats are saved in .cht files and are automatically loaded the next time a game
with the same filename is loaded.

Technically, a cheat code consists of two elements; an address in SNES memory
map where you want to overwrite, and a value which is overwritten on the
address. Beware of cheat codes designed for a ROM from a different region
compared to the one you are playing or for a different version of the ROM; the
source of the cheats should tell you which region and for which version of the
game they were designed for. If you use a code designed for a different region
or version of your game, the game might crash or do other weird things because
the cheat address might be different between regions and versions.

Cheat Code Entry
----------------
Use the Cheat Code Entry and Editor dialog from the Cheats menu to enter Game
Genie or PAR cheat codes. Type in a Game Genie or PAR code into the 'Enter Cheat
Code' text edit box and press Return key. Be sure to include the '-' when typing
in a Game Genie code. You can then type in an optional short description as a
reminder to yourself of what function the cheat performs. Press Return key again
or click the Add button to add the cheat to the list.

Note that the Add button remains insensitive while 'Enter Cheat Code' text edit
box is empty or contains an invalid code. The cheat code is always translated
into an address and value pair and displayed in the cheat list as such.

It is also possible to enter cheats as an address and value pair. Type in the
address into the 'Address' text edit box then type the value into the 'Value'
text edit box. The value is normally entered in decimal, but if you prefix the
value with a '$' or append an 'h' then you can enter the value in hex.

Double-clicking on an cheat line from the list in the dialog or clicking on the
'En' column toggles an individual cheat on and off. All cheats can be switched
on and off by checking and unchecking the 'Apply cheats' item from the Cheat
menu.

Selecting a cheat from the list causes its details to be filled into the text
edit boxes in the dialog box; the details can then be edited and the Change
button pressed to commit the edits. Note that the 'Enter Cheat Code' text edit
box always redisplays the cheat code as a Pro-Action Replay code regardless of
whether you originally entered it as a Game Genie or Pro-Action Replay code.

Selecting a cheat from the list then pressing the Delete button permanently
removes that cheat.

Cheat Search
------------
Snes9x also allows new cheats to be found using the Search for New Cheats
dialog, again available from the Cheats menu. The easiest way to describe the
dialog is to walk through an example.

Let’s give ourselves infinite health and lives on Ocean's Addams Family platform
game:

Load up the game; keep pressing the start button (Return key by default) to skip
past the title screens until you actually start playing the game. You'll notice
the game starts with 2 health hearts and 5 lives. Remember that information, it
will come in useful later.

Launch the Cheat Search dialog for the first time; Alt+A is its accelerator.
Press the Reset button just in case you've used the dialog before, leave the
Search Type and Data Size radio boxes at their default values and press OK.

Play the game for a while until you loose a life by just keep walking into
baddies, when the game restarts and the life counter displays 4, launch the
Cheat Search dialog again but this time press the Search button rather than
Reset. The number of items in the list will reduce, each line shows a memory
location, its current value and its previous value; what we're looking for is
the memory location where the game stores its life counter.

Look at address line 7E00AC, its current value is 4 and its previous value was
5. Didn't we start with 5 lives? Looks interesting...

Note that some games store the current life counter as displayed on the screen,
while others store current number of lives minus 1. Looks like Addams Family
stores the actual life count as displayed on the screen.

Just to make sure you've found the correct location, press OK on the dialog, and
play the game until you loose another life. Launch the Cheat Search dialog again
after the life counter on screen has been updated and press the Search button.
Now there are even fewer items in the list, but 7E00AC is there again, this time
the current value is 3 and the previous value was 4. Looks very much like we've
found the correct location.

Now that we're happy we've found the correct location, click on the 7E00AC
address line in the list and then press the Add Cheat button. Another dialog,
Cheat Details, will be displayed. Type in a new value of say 5, this will be
number of lives that will be displayed by the lives counter. Don't be greedy;
some games display a junk life counter or might even crash if you enter a value
that's too high; Snes9x keeps the value constant anyway, so even if you do loose
a life and life counter goes down by one, less than 20ms later, Snes9x resets
the counter back to the value you chose!

If the memory location you add a cheat on proves to be wrong, just go to the
Cheat Code Editor dialog and delete the incorrect entry.

Now let’s try and find the Addams Family health counter. While two hearts are
displayed on the screen, visit the Cheat Search dialog and press the Reset
button followed by OK. Play the game until you loose a heart by touching a
baddie, then visit the Cheat Search dialog again.

Press the Search button to update the list with all memory locations that have
gone down in value since the last dialog visit. We're going to have to try and
find the heart memory location now because there were only two hearts to start
with.

Look at address line 7E00C3, its current value is 1 and its previous value was
2. Scrolling through the list doesn't reveal any other likely memory locations,
so let’s try our luck. Click on the 7E00C3 line, press the Add Cheat button and
type in a new value of say 4 into the dialog that appears and press OK. Press OK
on the Search for New Cheats dialog to return to the game.

At first sight it looks like 7E00C3 wasn't the correct memory location because
the number of hearts displayed on screen hasn't gone up, but fear not, some
games don't continually update health and life displays until they think they
need to. Crash into another baddie - instead of dying, the number of hearts
displayed jumps up to 4! We've found the correct location after all!

Now every time you play Addams Family you'll have infinite lives and health.
Have fun finding cheats for other games.



Movie Support
=============

Movie support allows you to record your actions while playing a game. This can
be used for your own personal playback or to show other people that you can do
something without them having to be around when you did it.

Recording the Movie
-------------------
Simply click File menu and click on Movie. Click the Record button. Here you can
decide when to start recording. If you want to record from the very start of a
game, click on 'Record from reset.' If you want to start recording from where
you are already in a game, click 'Record from now.' You can also choose which
controllers to record. If you are playing by yourself leave joypad 1 as the only
one selected. The more controllers you choose to record the larger the file size
will be.

Playing Back the Movie
----------------------
To play back a movie you recorded, click File menu, Movie, Play and select the
file to play. Make sure the movie was recorded with the same ROM that you have
loaded.

Re-recording the Movie
----------------------
If you make a mistake while recording a movie, there is a movie re-record
function. Simply create a freeze file anytime while recording. If you want to
re-record, load the freeze file and it will bring up the message 'movie
re-record'. Loading any freeze file while a movie is playing or recording will
cause this to happen. If you want to watch a video with no chance to
accidentally alter it, check 'Open as read only' when you go to play it.



Netplay Support
===============

Netplay support allows up to five players to sit in front of different computers
and simultaneously play the same game, or just watch someone else play a game.
All the computers have to be connected to a network that allows TCP/IP traffic
to flow between them; this includes a local Ethernet-style network, a
direct-cable connection, or, if you're lucky and have short ping times, the
Internet.

How to Netplay
--------------
It's currently easier if you use Snes9x in windowed mode while using netplay,
mainly because netplay currently displays status information in the window's
title bar, and it might be necessary to setup a separate chat application so you
can talk to the other players when deciding what game to play next.

One machine has to act as a server which other players (client sessions) connect
to. The 'master' player, player 1, uses the server machine; the master decides
what game to play. The server machine should be selected to be the fastest
machine on the fastest connection in the group taking part due to the extra
functions it has to perform.

Load up a game, then select the 'Act as server' option from the Netplay menu to
become a netplay server; the 'network', in whatever form it takes, will need to
be initialized, if necessary, before you do this. Then just wait for other
players to connect...

Clients connect to the server using the 'Connect to server...' dialog, again
available from the Netplay menu. Type in the IP address or host name of the
machine running the Snes9x server session and press OK. The first remote client
to connect will become player 2, and so on. Start Menu->Run->winipcfg will tell
you your current IP address, but note that many ISPs will allocate you a new IP
address each time you sign in.

The server will request the client loads up the correct game first before
joining the game. Then the server will either send the client SRAM data and
reset all players' games if the 'Sync Using Reset Game' option is checked, or
send it a freeze file to get the new client in sync with the other player's
progress in a game.

If the master player loads a different game, the server will request that the
clients load the game. If the master player loads a freeze file, the server will
automatically send that to remote clients.

Client sessions must be able to keep up with the server at all times - if they
can't, either because the machine is just too slow, or its busy, the games will
get out of sync and it will be impossible to successfully play a multi-player
game...

...To make sure this doesn't happen, don't move the Snes9x window unnecessarily
and don't use Ctrl+Alt+Del to display the task manager while playing. Also stop
any unnecessary applications and as many background tasks as possible. Even
something as simple as a text editor might periodically write unsaved data to
the disk, stealing CPU time away from Snes9x causing it to skip a frame or delay
a sound effect; not a problem for most games, but the Bomberman series (the best
multi-player games on the SNES) sync the game to sound samples finishing.



Miscellaneous
=============

Using IPS or UPS Patch
----------------------
Snes9x automatically patches without overwriting the ROM image.

- Put the IPS or UPS file into the same folder as the ROM image.
- Rename the name to the same as the ROM image (except extension, it is '.ips'
  or '.ups').
- (IPS only) If you want to use multiple IPS files at a time, set their
  extensions to '.000.ips', '.001.ips', ...
- Open and load the ROM image.

Additional Keyboard Controls
----------------------------
Snes9x has various functions to play games with fun. The default mapping is as
follows. Go to Input > Customize Hotkeys... to configure these and more.

  'Pause'              pauses or unpauses the emulator.
  'Escape'             shows or hides the menu bar.
  'Alt'+'Enter'        toggles between full-screen and windowed mode.
  'Ctrl'+'Shift'+'R'   resets the game.
  'Shift'+'F1-F9'      saves a freeze file into the slot 1-9.
  'F1-F9'              loads a freeze file from the slot 1-9.
  'F12'                takes a screenshot.
  'Shift'+'Page Down'  toggles turbo on the 'A' button. Note: toggles for all
                       controllers.
  'Shift'+'End'        toggles turbo on the 'B' button...
  'Shift'+'Page Up'    toggles turbo on the 'X' button...
  'Shift'+'Home'       toggles turbo on the 'Y' button...
  'Shift'+'Ins'        toggles turbo on the 'L' button...
  'Shift'+'Del'        toggles turbo on the 'R' button...
  'Shift'+'['          toggles turbo on the 'Select' button...
  'Shift'+']'          toggles turbo on the 'Start' button...
  '6'                  toggles swapping of joypad one and two.
  'Shift'+'='          increases frame rendering skip rate, making the screen
                       updates more jerky but speeding up the game.
  'Shift'+'-'          decreases frame rendering skip rate, making the screen
                       updates more smoothly, but potentially slowing down the
                       game. Repeatedly pressing the key will eventually switch
                       to auto-frame skip rate where the rate is dynamically
                       adjusted to keep a constant game play speed.
  '-'                  increases emulated frame time by 1ms - slowing down the
                       game. (auto-frame skip must be on)
  '='                  decreases emulated frame time by 1ms - speeding up the
                       game. (auto-frame skip must be on)
  '\'                  pauses the game, or slowly advances gameplay if it's
                       already paused. To return to normal, press the 'Pause'
                       key.
  'Tab'                turbo mode.
  ','                  toggles display of input, so you can see which SNES
                       buttons are registering as pressed.
  '.'                  toggles movie frame display on/off. Movie must be open.
  'Shift'+'8'          toggles movie read-only status. Movie must be open.
  '1-4'                toggles background 1-4 on/off.
  '5'                  toggles sprites on/off
  '9'                  (not recommended) toggles transparency effects on/off.
  '8'                  (not recommended) toggles emulation of graphics window
                       effects on/off.
  '0'                  (not recommended) toggles H-DMA emulation on/off.



Compatibility
=============

Compatibility with Other Ports
------------------------------
All the files generated by Snes9x are compatible between platforms, except for
the extension of the freeze files.

Compatibility with Other SNES Emulators
---------------------------------------
Cheat files (.cht) are common between Snes9x and ZSNES. RTC files (.rtc) are
common between Snes9x and bsnes. SRAM files (.srm) should be common among all
SNES emulators.



Problems
========

Problems with ROMs
------------------
If Snes9x just displays a black screen for over 10 seconds after you've loaded a
ROM image, then one of the following could be true:

- You just loaded some random ROM image and it isn't even a SNES game or you
  only have part of the image. Snes9x only emulates games designed for the Super
  NES, not NES, or Master System, or Game Boy, or <insert your favorite old
  games system here>.
- Someone has edited the Nintendo ROM information area inside the ROM image and
  Snes9x can't work out what format the ROM image is in. Try playing around with
  the ROM format options on the ROM load dialog.
- The ROM image is corrupt. If you're loading from CD, I know it might sound
  silly, but is the CD dirty? Clean, unhacked ROM images will display [checksum
  ok] when first loaded, corrupt or hacked ROMs display [bad checksum].
- The original SNES ROM cartridge had additional hardware inside that is not
  emulated yet and might never be.
- You might be using a file that is compressed in a way Snes9x does not
  understand.

The following ROMs are known to currently not to work with any version of
Snes9x:

  SD Gundam GX                     DSP-3
  Hayazashi Nidan Morita Shougi    Seta-11
  Hayazashi Nidan Morita Shougi 2  Seta-18

Problems with Sounds
--------------------
No sound coming from any SNES game using Snes9x? Could be any or all of these:

- If all sound menu options are grayed out, or an error dialog about Snes9x not
  being able to initialize DirectSound is displayed - then DirectSound could not
  initialize itself. Make sure DirectX 6 or above is installed and your sound
  card is supported by DirectX.
  Installing the latest drivers for your sound card might help. Another Windows
  application might have opened DirectSound in exclusive mode or opened the
  Windows WAVE device - WinAmp uses the Windows WAVE device by default - in
  which case you will need to stop that application and then restart Snes9x. It
  is possible to switch WinAmp to use DirectSound, in which case both Snes9x and
  WinAmp output can be heard at the same time.
  If your sound card isn't supported by DirectX very well (or not at all) you
  will have to use FMOD's WAVE output option; but WAVE output introduces a 0.15s
  delay between Snes9x generating sample data and you hearing it. Select FMOD's
  WAVE output by choosing the 'FMOD Windows Multimedia' sound driver option from
  the Sound Settings dialog.
- The sound card's volume level might be set too low. Snes9x doesn't alter the
  card's master volume level so you might need to adjust it using the sound
  card's mixer/volume controls usually available from the task bar or start
  menu.
- Make sure your speakers and turned on, plugged in and the volume controls are
  set to a suitable level.



Technical Information
=====================

What's Emulated?
----------------
- 65c816 main CPU.
- Variable length machine cycles.
- 8 channel DMA and H-DMA.
- H-IRQ, V-IRQ and NMI.
- Sony SPC700 sound CPU.
- Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware
  envelope processing, echo, pitch modulation and digital FIR sound filter.
- SRAM, a battery-backed RAM.
- All background modes, 0 to 7.
- All screen resolutions including interlace mode.
- Pseudo hi-res mode.
- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction.
- 32x32, 32x64, 64x32 and 64x64 screen tile sizes.
- Vertical and horizontal offset-per-tile.
- 128 8x8, 16x16, 32x32 and 64x64 sprites, flipped in either direction.
- Sub-screen and fixed color blending effects.
- Mosaic effects.
- Mode 7 screen rotation, scaling and screen flipping.
- Single and dual graphic clip windows, with all four logic combination modes.
- Color blending effects only inside or outside a window.
- Palette changes during frame.
- Direct color mode - uses tile and palette-group data directly as RGB value.
- SNES Mouse.
- Super Scope, emulated using computer mouse.
- Justifier, by Konami, similar to the Super Scope and used only in Lethal
  Enforcers.
- Multi Player 5, allowing up to five people to play games simultaneously on
  games that support that many players.
- Super FX, a fast RISC CPU used in several games.
- SA-1, a faster version of main CPU with some functions, used in several games.
- DSP-1, a custom chip used in several games, mainly racing games.
- DSP-2, a custom chip used only in Dungeon Master.
- DSP-4, a custom chip used only in Top Gear 3000.
- C4, a sprite scaler/rotator/line drawer/simple maths co-processor chip used
  only in Megaman X2 and X3.
- Seta-10, a custom chip used only in F1 Race of Champions 2.
- OBC1, a sprite management chip used only in Metal Combat.
- S-DD1, a data decompression chip used only in Star Ocean and Street Fighter 2
  Alpha.
- SPC7110, similar in use to S-DD1, used in a few Hadoson games.
- S-RTC, a real-time clock chip, used only in Dai Kaijyu Monogatari 2.
- Satellaview and BS-X, only partially.

What's Not?
-----------
- Exact sub-cycle timings of communication among most of parts - main CPU, sound
  CPU, DMA, H-DMA, IRQ, NMI, and so on. Snes9x cannot run games that require
  severe timings!
- Any other odd chips that manufactures sometimes placed inside the cartridge to
  enhance games and as a nice side-effect, also act as an anti-piracy measure.
  (DSP-3, Seta-11 and Seta-18, as examples)
- The expansion slot found in many carts.

Custom Chips
------------
Super FX
  The Super FX is a 10.5/21MHz RISC CPU developed by Argonaut Software used as a
  game enhancer by several game titles. Released SNES Super FX games included
  Yoshi's Island, Doom, Winter Gold, Dirt Trax FX, StarFox, Stunt Race FX and
  Vortex.

SA-1
  The SA-1 is a fast, custom 65c816 8/16-bit processor, the same as inside the
  SNES itself, but clocked at 10MHz compared to a maximum of 3.58MHz for the CPU
  inside the SNES. The SA-1 isn't just a CPU; it also contains some extra
  circuits developed by Nintendo which includes some very fast RAM, a memory
  mapper, DMA and, several real-time timers.

C4
  The C4 is custom Capcom chip used only in the Megaman X2 and Megaman X3 games.
  It can scale and rotate images, draw line-vector objects and do some simple
  maths to rotate them.

S-DD1
  The S-DD1 is a custom data decompression chip that can decompress data in
  real-time as the SNES DMA's data from the ROM to RAM. Only two games use the
  chip: Star Ocean and Street Fighter Alpha 2.

SPC7110
  The SPC7110 is a compression and memory mapping chip. It provides a few extra
  features as well. It functions as an RTC interface, and has a multiply/divide
  unit that has more precision than the SNES. The SPC7110 is found only in 4
  games: Super Power League 4, Far East of Eden Zero, Far East of Eden Zero -
  Shounen Jump no Shou and Momotaro Dentetsu Happy.

Others
  Other known custom chips: DSP-1, DSP-2, DSP-3, DSP-4, Seta-10, Seta-11,
  Seta-18, OBC1 and S-RTC.



Credits
=======

- Jerremy Koot for all his hard work on previous versions of Snes96, Snes97 and
  Snes9x.
- Ivar for the original Super FX C emulation, DSP-1 emulation work and
  information on both chips.
- zsKnight and _Demo_ for the Intel Super FX assembler, DSP-1 and C4 emulation
  code.
- zsKnight and _Demo_ for all the other ideas and code I've nicked off them;
  they've nicked lots of my ideas and information too!
- John Weidman and Darkforce for the S-RTC emulation information and code.
- Kreed and Maxim Stepin for excellent image enhancer routines.
- Nose000 for code changes to support various Japanese SNES games.
- Neill Corlett for the IPS patching support code.
- DiskDude's SNES Kart v1.6 document for the Game Genie(TM) and Pro-Action
  Replay cheat system information.
- Lord ESNES for some nice chats and generally useful stuff.
- Lee Hyde (lee@jlp1.demon.co.uk) for his quest for sound information and the
  Windows 95 icon.
- Shawn Hargreaves for the rather good Allegro 3.0 DOS library.
- Robert Grubbs for the SideWinder information - although I didn't use his
  actual driver in the end.
- Steve Snake for his insights into SNES sound sample decompression.
- Vojtech Pavlik for the Linux joystick driver patches.
- Maciej Babinski for the basics of Linux's DGA X server extensions.
- Alexander Larsson for the GGI Linux port code.
- Harald Fielker for the original sound interpolation code (never used directly
  due to problems).
- Takehiro TOMINAGA for many speed up suggestions and bug fixes.
- Predicador for the Windows icon.
- Lindsey Dubb for the mode 7 bi-linear filter code and the improved color
  addition and subtraction code.
- Anti Resonance for his super-human efforts to help get his fast sound CPU core
  and sound DSP core working in Snes9x.
- Brad Martin and TRAC for better and refined sound emulation.
- ernstp and entonne for patches and testing on Linux PPC.
- byuu for the most exact timing information and tons of the newest technical
  findings.
- Blargg for the most accurate timings between sound CPU and DSP and exact sound
  emulation codes.
- pagefault, TRAC, Dark Force, byuu, and others who have donated ideas and/or
  code to the project.



Nintendo is a trademark.
Super NES, Super Famicon, Super Scope and Super FX are trademarks of Nintendo.
Sufami Turbo is a trademark of Bandai Co., Ltd.
Game Genie is a trademark of Lewis Galoob Toys, Inc.
Pro Action Replay is a trademark of Datel Inc.
Macintosh, Mac and Mac OS X are trademarks of Apple Computer, Inc.
UNIX is a trademark of The Open Group.
Linux is a trademark of Linus Torvalds.
Windows is a trademark of Microsoft Corp.
Intel is a trademark of Intel Corp.
PowerPC is a trademark of International Business Machines Corp.
Sony is a trademark of Sony Corp.
Konami and Justifier are trademarks of Konami Corp.
Hudson is a trademark of Husdon Soft Co., Ltd.
Capcom is a trademark of Capcom Co., Ltd.

Gary Henderson

Edited for Windows port by: zones (kasumitokoduck@yahoo.com)
Updated most recently by: 2011/04/11 zones
  Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.

  (c) Copyright 1996 - 2002  Gary Henderson (gary.henderson@ntlworld.com),
                             Jerremy Koot (jkoot@snes9x.com)

  (c) Copyright 2002 - 2004  Matthew Kendora

  (c) Copyright 2002 - 2005  Peter Bortas (peter@bortas.org)

  (c) Copyright 2004 - 2005  Joel Yliluoma (http://iki.fi/bisqwit/)

  (c) Copyright 2001 - 2006  John Weidman (jweidman@slip.net)

  (c) Copyright 2002 - 2006  funkyass (funkyass@spam.shaw.ca),
                             Kris Bleakley (codeviolation@hotmail.com)

  (c) Copyright 2002 - 2010  Brad Jorsch (anomie@users.sourceforge.net),
                             Nach (n-a-c-h@users.sourceforge.net),

  (c) Copyright 2002 - 2011  zones (kasumitokoduck@yahoo.com)

  (c) Copyright 2006 - 2007  nitsuja

  (c) Copyright 2009 - 2011  BearOso,
                             OV2


  BS-X C emulator code
  (c) Copyright 2005 - 2006  Dreamer Nom,
                             zones

  C4 x86 assembler and some C emulation code
  (c) Copyright 2000 - 2003  _Demo_ (_demo_@zsnes.com),
                             Nach,
                             zsKnight (zsknight@zsnes.com)

  C4 C++ code
  (c) Copyright 2003 - 2006  Brad Jorsch,
                             Nach

  DSP-1 emulator code
  (c) Copyright 1998 - 2006  _Demo_,
                             Andreas Naive (andreasnaive@gmail.com),
                             Gary Henderson,
                             Ivar (ivar@snes9x.com),
                             John Weidman,
                             Kris Bleakley,
                             Matthew Kendora,
                             Nach,
                             neviksti (neviksti@hotmail.com)

  DSP-2 emulator code
  (c) Copyright 2003         John Weidman,
                             Kris Bleakley,
                             Lord Nightmare (lord_nightmare@users.sourceforge.net),
                             Matthew Kendora,
                             neviksti

  DSP-3 emulator code
  (c) Copyright 2003 - 2006  John Weidman,
                             Kris Bleakley,
                             Lancer,
                             z80 gaiden

  DSP-4 emulator code
  (c) Copyright 2004 - 2006  Dreamer Nom,
                             John Weidman,
                             Kris Bleakley,
                             Nach,
                             z80 gaiden

  OBC1 emulator code
  (c) Copyright 2001 - 2004  zsKnight,
                             pagefault (pagefault@zsnes.com),
                             Kris Bleakley
                             Ported from x86 assembler to C by sanmaiwashi

  SPC7110 and RTC C++ emulator code used in 1.39-1.51
  (c) Copyright 2002         Matthew Kendora with research by
                             zsKnight,
                             John Weidman,
                             Dark Force

  SPC7110 and RTC C++ emulator code used in 1.52+
  (c) Copyright 2009         byuu,
                             neviksti

  S-DD1 C emulator code
  (c) Copyright 2003         Brad Jorsch with research by
                             Andreas Naive,
                             John Weidman

  S-RTC C emulator code
  (c) Copyright 2001 - 2006  byuu,
                             John Weidman

  ST010 C++ emulator code
  (c) Copyright 2003         Feather,
                             John Weidman,
                             Kris Bleakley,
                             Matthew Kendora

  Super FX x86 assembler emulator code
  (c) Copyright 1998 - 2003  _Demo_,
                             pagefault,
                             zsKnight

  Super FX C emulator code
  (c) Copyright 1997 - 1999  Ivar,
                             Gary Henderson,
                             John Weidman

  Sound emulator code used in 1.5-1.51
  (c) Copyright 1998 - 2003  Brad Martin
  (c) Copyright 1998 - 2006  Charles Bilyue'

  Sound emulator code used in 1.52+
  (c) Copyright 2004 - 2007  Shay Green (gblargg@gmail.com)

  SH assembler code partly based on x86 assembler code
  (c) Copyright 2002 - 2004  Marcus Comstedt (marcus@mc.pp.se)

  2xSaI filter
  (c) Copyright 1999 - 2001  Derek Liauw Kie Fa

  HQ2x, HQ3x, HQ4x filters
  (c) Copyright 2003         Maxim Stepin (maxim@hiend3d.com)

  NTSC filter
  (c) Copyright 2006 - 2007  Shay Green

  GTK+ GUI code
  (c) Copyright 2004 - 2011  BearOso

  Win32 GUI code
  (c) Copyright 2003 - 2006  blip,
                             funkyass,
                             Matthew Kendora,
                             Nach,
                             nitsuja
  (c) Copyright 2009 - 2011  OV2

  Mac OS GUI code
  (c) Copyright 1998 - 2001  John Stiles
  (c) Copyright 2001 - 2011  zones


  Specific ports contains the works of other authors. See headers in
  individual files.


  Snes9x homepage: http://www.snes9x.com/

  Permission to use, copy, modify and/or distribute Snes9x in both binary
  and source form, for non-commercial purposes, is hereby granted without
  fee, providing that this license information and copyright notice appear
  with all copies and any derived work.

  This software is provided 'as-is', without any express or implied
  warranty. In no event shall the authors be held liable for any damages
  arising from the use of this software or it's derivatives.

  Snes9x is freeware for PERSONAL USE only. Commercial users should
  seek permission of the copyright holders first. Commercial use includes,
  but is not limited to, charging money for Snes9x or software derived from
  Snes9x, including Snes9x or derivatives in commercial game bundles, and/or
  using Snes9x as a promotion for your commercial product.

  The copyright holders request that bug fixes and improvements to the code
  should be forwarded to them so everyone can benefit from the modifications
  in future versions.

  Super NES and Super Nintendo Entertainment System are trademarks of
  Nintendo Co., Limited and its subsidiary companies.
Reading config file C:\games\snes9x-1.53-win32-x64/snes9x.conf.
Saving	config file	C:\games\snes9x-1.53-win32-x64/snes9x.conf
Sound buffer size: 8192 (2048 samples)
No ROM file header found.
Map_HiROMMap
"SUPER MARIO KART" [checksum ok] HiROM, 4Mbits, ROM+RAM+BAT+DSP-1, PAL, SRAM:16Kbits, ID:, CRC32:56410E5E
Sound buffer size: 8192 (2048 samples)