From a62fb8fb165b62581c3d2dd95b6fb27c3d5be915 Mon Sep 17 00:00:00 2001 From: punkrockguy318 Date: Mon, 23 Sep 2013 20:48:54 +0000 Subject: [PATCH] Creating release branch 2.2.2 --- branches/fceux-2.2.2/Authors | 72 + branches/fceux-2.2.2/COPYING | 339 + branches/fceux-2.2.2/INSTALL | 7 + branches/fceux-2.2.2/NewPPUtests.txt | 69 + branches/fceux-2.2.2/README-SDL | 116 + branches/fceux-2.2.2/SConstruct | 241 + branches/fceux-2.2.2/STYLE-GUIDELINES-SDL | 14 + branches/fceux-2.2.2/TODO-SDL | 47 + branches/fceux-2.2.2/attic/.gitignore | 17 + branches/fceux-2.2.2/attic/BUGS | 12 + branches/fceux-2.2.2/attic/ChangeLog.older | 2183 ++ branches/fceux-2.2.2/attic/Makefile.am | 1 + branches/fceux-2.2.2/attic/SConstruct.pre1.0 | 147 + branches/fceux-2.2.2/attic/TODO-SDL-2.1.6.md | 118 + branches/fceux-2.2.2/attic/acinclude.m4 | 357 + branches/fceux-2.2.2/attic/aclocal.m4 | 879 + branches/fceux-2.2.2/attic/authors | 30 + branches/fceux-2.2.2/attic/changelog | 1674 ++ .../attic/cmake-stuff/CMakeLists.txt | 19 + .../cmake/cross-mingw32/CMakeLists.txt | 2 + .../cmake/cross-mingw32/debug/CMakeLists.txt | 4 + .../cross-mingw32/fceux_cross-mingw32.cmake | 50 + .../cross-mingw32/release/CMakeLists.txt | 4 + .../attic/cmake-stuff/cmake/fceux.cmake | 476 + .../cmake-stuff/cmake/native/CMakeLists.txt | 2 + .../cmake/native/debug/CMakeLists.txt | 4 + .../cmake/native/fceux_native.cmake | 1 + .../cmake/native/release/CMakeLists.txt | 4 + branches/fceux-2.2.2/attic/compile | 99 + branches/fceux-2.2.2/attic/config.guess | 1317 + branches/fceux-2.2.2/attic/config.sub | 1411 ++ branches/fceux-2.2.2/attic/configure-mingw32 | 1 + branches/fceux-2.2.2/attic/configure.ac | 101 + branches/fceux-2.2.2/attic/depcomp | 423 + branches/fceux-2.2.2/attic/fceu-svga.6 | 135 + branches/fceux-2.2.2/attic/install-sh | 251 + branches/fceux-2.2.2/attic/missing | 336 + branches/fceux-2.2.2/attic/mkinstalldirs | 99 + branches/fceux-2.2.2/attic/readme | 32 + branches/fceux-2.2.2/changelog.txt | 817 + branches/fceux-2.2.2/debian-crossbuild.sh | 5 + branches/fceux-2.2.2/documentation/.gitignore | 17 + .../fceux-2.2.2/documentation/TODO-PROJECT | 61 + .../fceux-2.2.2/documentation/Videolog.txt | 48 + branches/fceux-2.2.2/documentation/cheat.html | 313 + branches/fceux-2.2.2/documentation/faq | 67 + .../documentation/fceux-net-server.6 | 74 + branches/fceux-2.2.2/documentation/fceux.6 | 353 + branches/fceux-2.2.2/documentation/fcs.txt | 153 + branches/fceux-2.2.2/documentation/fm2.txt | 79 + .../fceux-2.2.2/documentation/porting.txt | 289 + .../fceux-2.2.2/documentation/protocol.txt | 90 + .../fceux-2.2.2/documentation/snes9x-lua.html | 417 + .../documentation/tech/cpu/4017.txt | 97 + .../documentation/tech/cpu/dmc.txt | 235 + .../documentation/tech/cpu/nessound-4th.txt | 551 + .../documentation/tech/cpu/nessound.txt | 697 + .../documentation/tech/exp/mmc5-e.txt | 250 + .../documentation/tech/exp/smb2j.txt | 112 + .../documentation/tech/exp/tengen.txt | 18 + .../documentation/tech/exp/vrcvi.txt | 388 + .../documentation/tech/exp/vrcvii.txt | 321 + .../documentation/tech/nsfspec.txt | 336 + .../tech/ppu/2c02 technical operation.txt | 296 + .../documentation/tech/ppu/loopy1.txt | 63 + .../documentation/tech/ppu/loopy2.txt | 33 + .../fceux-2.2.2/documentation/tech/readme.now | 6 + .../documentation/tech/readme.sound | 2 + branches/fceux-2.2.2/documentation/todo | 70 + branches/fceux-2.2.2/doxygen | 1237 + branches/fceux-2.2.2/fceux-server/.gitignore | 17 + branches/fceux-2.2.2/fceux-server/AUTHORS | 2 + branches/fceux-2.2.2/fceux-server/COPYING | 339 + branches/fceux-2.2.2/fceux-server/ChangeLog | 30 + branches/fceux-2.2.2/fceux-server/Makefile | 20 + branches/fceux-2.2.2/fceux-server/README | 53 + branches/fceux-2.2.2/fceux-server/cygwin1.dll | Bin 0 -> 2608311 bytes .../dist/fceu-server-0.0.4.tar.gz | Bin 0 -> 17611 bytes .../dist/fceu-server-0.0.5.tar.gz | Bin 0 -> 18623 bytes .../dist/fceunetserver-0.0.3.tar.bz2 | Bin 0 -> 16388 bytes .../fceux-server/fceux-net-server.exe | Bin 0 -> 86673 bytes .../fceux-server/fceux-server.conf | 5 + branches/fceux-2.2.2/fceux-server/md5.cpp | 266 + branches/fceux-2.2.2/fceux-server/md5.h | 37 + branches/fceux-2.2.2/fceux-server/server.cpp | 915 + .../fceux-2.2.2/fceux-server/throttle.cpp | 102 + branches/fceux-2.2.2/fceux-server/throttle.h | 23 + branches/fceux-2.2.2/fceux-server/types.h | 38 + branches/fceux-2.2.2/fceux.desktop | 22 + branches/fceux-2.2.2/fceux.png | Bin 0 -> 583 bytes branches/fceux-2.2.2/getSDLKey/COPYING | 339 + branches/fceux-2.2.2/getSDLKey/Makefile | 17 + branches/fceux-2.2.2/getSDLKey/README | 27 + branches/fceux-2.2.2/getSDLKey/getSDLKey.cpp | 90 + branches/fceux-2.2.2/output/.gitignore | 15 + branches/fceux-2.2.2/output/fceux.chm | Bin 0 -> 352497 bytes branches/fceux-2.2.2/output/lua5.1.dll | Bin 0 -> 167936 bytes branches/fceux-2.2.2/output/lua51.dll | Bin 0 -> 11264 bytes .../output/luaScripts/AVI-HeadsUpDisplay.lua | 121 + .../luaScripts/BoulderDash_AmoebaAI.lua | 589 + .../luaScripts/BugsBunnyBirthdayBlowout.lua | 210 + .../output/luaScripts/ButtonCount.lua | 156 + .../luaScripts/CustomLagIndicator_RvT.lua | 45 + .../Excitingbike-speedometeronly.lua | 90 + .../output/luaScripts/Excitingbike.lua | 221 + .../output/luaScripts/FRKfunctions.lua | 625 + .../output/luaScripts/GUI-iup_button.lua | 30 + .../output/luaScripts/GUI-iup_example.lua | 192 + .../output/luaScripts/Galaxian.lua | 186 + .../output/luaScripts/Gradius-BulletHell.lua | 439 + .../output/luaScripts/JumpingFCEUXWindow.lua | 33 + .../fceux-2.2.2/output/luaScripts/Luabot.lua | 249 + .../output/luaScripts/Machrider.lua | 266 + .../output/luaScripts/MegamanII-LaserEyes.lua | 730 + .../output/luaScripts/MemoryWatch.lua | 58 + .../output/luaScripts/Multitrack.lua | 804 + .../output/luaScripts/Multitrack2.lua | 1371 ++ .../luaScripts/NightmareElmStreet-4Player.lua | 57 + .../output/luaScripts/PunchOutChallenge.lua | 334 + .../output/luaScripts/PunchOutStats.lua | 91 + .../output/luaScripts/PunchOutTraining.lua | 155 + .../output/luaScripts/RBIBaseball.lua | 178 + .../luaScripts/Registerfind(CheatSearch).lua | 217 + .../output/luaScripts/Rewinder.lua | 71 + .../output/luaScripts/SMB-AreaScrambler.lua | 97 + .../luaScripts/SMB-CompetitionRecorder.lua | 121 + .../output/luaScripts/SMB-HitBoxes.lua | 165 + .../output/luaScripts/SMB-Jetpack.lua | 353 + .../output/luaScripts/SMB-Lives&HPDisplay.lua | 60 + .../output/luaScripts/SMB-Mouse.lua | 573 + .../output/luaScripts/SMB-Snow.lua | 245 + .../fceux-2.2.2/output/luaScripts/SMB2U.lua | 173 + .../output/luaScripts/SMB3-RainbowRiding.lua | 638 + .../output/luaScripts/ShowPalette.lua | 62 + .../output/luaScripts/SoundDisplay.lua | 213 + .../output/luaScripts/SoundDisplay2.lua | 312 + .../output/luaScripts/Subtitler.lua | 384 + .../luaScripts/TeenageMutantNinjaTurtles.lua | 52 + .../luaScripts/UsingLuaBot-Documentation.txt | 140 + .../UsingLuaScripting-Documentation.txt | 203 + .../UsingLuaScripting-ListofFunctions.txt | 316 + .../output/luaScripts/ZapperDisplay.lua | 33 + .../output/luaScripts/ZapperFun.lua | 72 + .../output/luaScripts/luabot_framework.lua | 623 + .../fceux-2.2.2/output/luaScripts/m_utils.lua | 233 + .../output/luaScripts/shapedefs.lua | 43 + .../taseditor/InputDisplay_for_Selection.lua | 64 + .../luaScripts/taseditor/InvertSelection.lua | 55 + .../luaScripts/taseditor/RecordBackwards.lua | 99 + .../output/luaScripts/taseditor/ShowNotes.lua | 64 + .../output/luaScripts/taseditor/Swap1P2P.lua | 37 + .../luaScripts/taseditor/TrackNoise.lua | 82 + .../fceux-2.2.2/output/luaScripts/tetris.lua | 141 + .../fceux-2.2.2/output/luaScripts/vnb.lua | 613 + .../output/luaScripts/x_functions.lua | 262 + .../output/luaScripts/x_interface.lua | 116 + .../output/luaScripts/x_smb1enemylist.lua | 44 + .../output/palettes/ASQ_realityA.pal | Bin 0 -> 192 bytes .../output/palettes/ASQ_realityB.pal | Bin 0 -> 192 bytes .../output/palettes/BMF_final2.pal | Bin 0 -> 192 bytes .../output/palettes/BMF_final3.pal | Bin 0 -> 192 bytes .../palettes/FCEU-13-default_nitsuja.pal | Bin 0 -> 192 bytes .../output/palettes/FCEU-15-nitsuja_new.pal | Bin 0 -> 192 bytes .../fceux-2.2.2/output/palettes/FCEUX.pal | Bin 0 -> 192 bytes .../output/palettes/nestopia_rgb.pal | Bin 0 -> 192 bytes .../output/palettes/nestopia_yuv.pal | Bin 0 -> 192 bytes branches/fceux-2.2.2/output/taseditor.chm | Bin 0 -> 924947 bytes .../output/tools/taseditor_patterns.txt | 15 + branches/fceux-2.2.2/src/.gitignore | 1 + branches/fceux-2.2.2/src/SConscript | 42 + branches/fceux-2.2.2/src/asm.cpp | 522 + branches/fceux-2.2.2/src/asm.h | 2 + branches/fceux-2.2.2/src/attic/fceustr.cpp | 27 + branches/fceux-2.2.2/src/attic/fceustr.h | 4 + .../src/attic/old fceultra docs.zip | Bin 0 -> 137135 bytes branches/fceux-2.2.2/src/attic/pc/dface.h | 72 + .../fceux-2.2.2/src/attic/pc/dos-joystick.c | 200 + .../fceux-2.2.2/src/attic/pc/dos-joystick.h | 27 + .../fceux-2.2.2/src/attic/pc/dos-keyboard.c | 131 + branches/fceux-2.2.2/src/attic/pc/dos-mouse.c | 80 + branches/fceux-2.2.2/src/attic/pc/dos-sound.c | 567 + branches/fceux-2.2.2/src/attic/pc/dos-sound.h | 26 + branches/fceux-2.2.2/src/attic/pc/dos-video.c | 246 + branches/fceux-2.2.2/src/attic/pc/dos-video.h | 22 + branches/fceux-2.2.2/src/attic/pc/dos.c | 128 + branches/fceux-2.2.2/src/attic/pc/dos.h | 27 + branches/fceux-2.2.2/src/attic/pc/input.c | 720 + branches/fceux-2.2.2/src/attic/pc/input.h | 38 + branches/fceux-2.2.2/src/attic/pc/keyscan.h | 161 + branches/fceux-2.2.2/src/attic/pc/main.c | 553 + branches/fceux-2.2.2/src/attic/pc/main.h | 55 + branches/fceux-2.2.2/src/attic/pc/sdl-icon.h | 134 + .../fceux-2.2.2/src/attic/pc/sdl-joystick.c | 99 + .../fceux-2.2.2/src/attic/pc/sdl-netplay.c | 224 + .../fceux-2.2.2/src/attic/pc/sdl-netplay.h | 0 .../fceux-2.2.2/src/attic/pc/sdl-opengl.c | 241 + .../fceux-2.2.2/src/attic/pc/sdl-opengl.h | 6 + branches/fceux-2.2.2/src/attic/pc/sdl-sound.c | 373 + .../fceux-2.2.2/src/attic/pc/sdl-throttle.c | 86 + branches/fceux-2.2.2/src/attic/pc/sdl-video.c | 432 + branches/fceux-2.2.2/src/attic/pc/sdl-video.h | 1 + branches/fceux-2.2.2/src/attic/pc/sdl.c | 429 + branches/fceux-2.2.2/src/attic/pc/sdl.h | 50 + branches/fceux-2.2.2/src/attic/pc/throttle.c | 41 + branches/fceux-2.2.2/src/attic/pc/throttle.h | 2 + .../fceux-2.2.2/src/attic/pc/unix-netplay.c | 292 + .../fceux-2.2.2/src/attic/pc/unix-netplay.h | 9 + branches/fceux-2.2.2/src/attic/pc/usage.h | 60 + branches/fceux-2.2.2/src/attic/pc/vgatweak.c | 168 + .../fceux-2.2.2/src/attic/sexyal/convert.c | 14 + .../fceux-2.2.2/src/attic/sexyal/convert.h | 2 + .../fceux-2.2.2/src/attic/sexyal/convert.inc | 20387 ++++++++++++++++ .../fceux-2.2.2/src/attic/sexyal/convertgen | Bin 0 -> 14284 bytes .../fceux-2.2.2/src/attic/sexyal/convertgen.c | 155 + .../src/attic/sexyal/drivers/dsound.c | 276 + .../src/attic/sexyal/drivers/oss.c | 241 + .../src/attic/sexyal/drivers/oss.h | 6 + .../src/attic/sexyal/drivers/osxcoreaudio.c | 5 + branches/fceux-2.2.2/src/attic/sexyal/md5.c | 229 + branches/fceux-2.2.2/src/attic/sexyal/md5.h | 15 + .../fceux-2.2.2/src/attic/sexyal/sexyal.c | 115 + .../fceux-2.2.2/src/attic/sexyal/sexyal.h | 52 + .../fceux-2.2.2/src/attic/sexyal/smallc.c | 63 + .../fceux-2.2.2/src/attic/sexyal/smallc.h | 7 + branches/fceux-2.2.2/src/attic/soundexp.cpp | 42 + branches/fceux-2.2.2/src/auxlib.lua | 45 + branches/fceux-2.2.2/src/boards/01-222.cpp | 109 + branches/fceux-2.2.2/src/boards/09-034a.cpp | 97 + branches/fceux-2.2.2/src/boards/103.cpp | 112 + branches/fceux-2.2.2/src/boards/106.cpp | 108 + branches/fceux-2.2.2/src/boards/108.cpp | 58 + branches/fceux-2.2.2/src/boards/112.cpp | 89 + branches/fceux-2.2.2/src/boards/116.cpp | 324 + branches/fceux-2.2.2/src/boards/117.cpp | 91 + branches/fceux-2.2.2/src/boards/120.cpp | 59 + branches/fceux-2.2.2/src/boards/121.cpp | 129 + branches/fceux-2.2.2/src/boards/12in1.cpp | 70 + branches/fceux-2.2.2/src/boards/15.cpp | 109 + branches/fceux-2.2.2/src/boards/151.cpp | 59 + branches/fceux-2.2.2/src/boards/156.cpp | 113 + branches/fceux-2.2.2/src/boards/164.cpp | 229 + branches/fceux-2.2.2/src/boards/168.cpp | 78 + branches/fceux-2.2.2/src/boards/170.cpp | 62 + branches/fceux-2.2.2/src/boards/175.cpp | 79 + branches/fceux-2.2.2/src/boards/176.cpp | 158 + branches/fceux-2.2.2/src/boards/177.cpp | 80 + branches/fceux-2.2.2/src/boards/178.cpp | 176 + branches/fceux-2.2.2/src/boards/18.cpp | 133 + branches/fceux-2.2.2/src/boards/183.cpp | 111 + branches/fceux-2.2.2/src/boards/185.cpp | 107 + branches/fceux-2.2.2/src/boards/186.cpp | 94 + branches/fceux-2.2.2/src/boards/187.cpp | 84 + branches/fceux-2.2.2/src/boards/189.cpp | 44 + branches/fceux-2.2.2/src/boards/193.cpp | 71 + branches/fceux-2.2.2/src/boards/199.cpp | 97 + branches/fceux-2.2.2/src/boards/206.cpp | 78 + branches/fceux-2.2.2/src/boards/208.cpp | 78 + branches/fceux-2.2.2/src/boards/222.cpp | 99 + branches/fceux-2.2.2/src/boards/225.cpp | 86 + branches/fceux-2.2.2/src/boards/228.cpp | 85 + branches/fceux-2.2.2/src/boards/230.cpp | 78 + branches/fceux-2.2.2/src/boards/232.cpp | 68 + branches/fceux-2.2.2/src/boards/234.cpp | 79 + branches/fceux-2.2.2/src/boards/235.cpp | 63 + branches/fceux-2.2.2/src/boards/244.cpp | 77 + branches/fceux-2.2.2/src/boards/246.cpp | 86 + branches/fceux-2.2.2/src/boards/252.cpp | 134 + branches/fceux-2.2.2/src/boards/253.cpp | 151 + branches/fceux-2.2.2/src/boards/28.cpp | 216 + branches/fceux-2.2.2/src/boards/32.cpp | 102 + branches/fceux-2.2.2/src/boards/33.cpp | 117 + branches/fceux-2.2.2/src/boards/34.cpp | 92 + branches/fceux-2.2.2/src/boards/36.cpp | 63 + branches/fceux-2.2.2/src/boards/3d-block.cpp | 95 + branches/fceux-2.2.2/src/boards/40.cpp | 86 + branches/fceux-2.2.2/src/boards/41.cpp | 69 + branches/fceux-2.2.2/src/boards/411120-c.cpp | 64 + branches/fceux-2.2.2/src/boards/42.cpp | 84 + branches/fceux-2.2.2/src/boards/43.cpp | 91 + branches/fceux-2.2.2/src/boards/46.cpp | 69 + branches/fceux-2.2.2/src/boards/50.cpp | 85 + branches/fceux-2.2.2/src/boards/51.cpp | 84 + branches/fceux-2.2.2/src/boards/57.cpp | 84 + branches/fceux-2.2.2/src/boards/603-5052.cpp | 44 + branches/fceux-2.2.2/src/boards/62.cpp | 69 + branches/fceux-2.2.2/src/boards/65.cpp | 105 + branches/fceux-2.2.2/src/boards/67.cpp | 106 + branches/fceux-2.2.2/src/boards/68.cpp | 163 + branches/fceux-2.2.2/src/boards/69.cpp | 278 + branches/fceux-2.2.2/src/boards/71.cpp | 64 + branches/fceux-2.2.2/src/boards/72.cpp | 64 + branches/fceux-2.2.2/src/boards/77.cpp | 75 + branches/fceux-2.2.2/src/boards/79.cpp | 61 + branches/fceux-2.2.2/src/boards/80.cpp | 193 + branches/fceux-2.2.2/src/boards/8157.cpp | 85 + branches/fceux-2.2.2/src/boards/82.cpp | 97 + branches/fceux-2.2.2/src/boards/8237.cpp | 173 + branches/fceux-2.2.2/src/boards/830118C.cpp | 68 + branches/fceux-2.2.2/src/boards/88.cpp | 83 + branches/fceux-2.2.2/src/boards/90.cpp | 507 + branches/fceux-2.2.2/src/boards/91.cpp | 85 + branches/fceux-2.2.2/src/boards/96.cpp | 70 + branches/fceux-2.2.2/src/boards/99.cpp | 78 + branches/fceux-2.2.2/src/boards/SConscript | 6 + .../fceux-2.2.2/src/boards/__dummy_mapper.cpp | 100 + branches/fceux-2.2.2/src/boards/a9746.cpp | 75 + branches/fceux-2.2.2/src/boards/ac-08.cpp | 68 + branches/fceux-2.2.2/src/boards/addrlatch.cpp | 505 + branches/fceux-2.2.2/src/boards/ax5705.cpp | 116 + branches/fceux-2.2.2/src/boards/bandai.cpp | 464 + branches/fceux-2.2.2/src/boards/bb.cpp | 63 + .../fceux-2.2.2/src/boards/bmc13in1jy110.cpp | 97 + branches/fceux-2.2.2/src/boards/bmc42in1r.cpp | 86 + .../fceux-2.2.2/src/boards/bmc64in1nr.cpp | 83 + branches/fceux-2.2.2/src/boards/bmc70in1.cpp | 121 + branches/fceux-2.2.2/src/boards/bonza.cpp | 133 + branches/fceux-2.2.2/src/boards/bs-5.cpp | 84 + .../fceux-2.2.2/src/boards/cityfighter.cpp | 124 + branches/fceux-2.2.2/src/boards/dance2000.cpp | 109 + branches/fceux-2.2.2/src/boards/datalatch.cpp | 484 + branches/fceux-2.2.2/src/boards/dream.cpp | 51 + branches/fceux-2.2.2/src/boards/edu2000.cpp | 77 + branches/fceux-2.2.2/src/boards/emu2413.c | 1078 + branches/fceux-2.2.2/src/boards/emu2413.h | 139 + .../fceux-2.2.2/src/boards/famicombox.cpp | 115 + branches/fceux-2.2.2/src/boards/ffe.cpp | 153 + branches/fceux-2.2.2/src/boards/fk23c.cpp | 290 + .../src/boards/ghostbusters63in1.cpp | 96 + branches/fceux-2.2.2/src/boards/gs-2004.cpp | 63 + branches/fceux-2.2.2/src/boards/gs-2013.cpp | 63 + branches/fceux-2.2.2/src/boards/h2288.cpp | 70 + branches/fceux-2.2.2/src/boards/karaoke.cpp | 63 + branches/fceux-2.2.2/src/boards/kof97.cpp | 46 + branches/fceux-2.2.2/src/boards/ks7012.cpp | 83 + branches/fceux-2.2.2/src/boards/ks7013.cpp | 77 + branches/fceux-2.2.2/src/boards/ks7017.cpp | 114 + branches/fceux-2.2.2/src/boards/ks7030.cpp | 140 + branches/fceux-2.2.2/src/boards/ks7031.cpp | 80 + branches/fceux-2.2.2/src/boards/ks7032.cpp | 88 + branches/fceux-2.2.2/src/boards/ks7037.cpp | 125 + branches/fceux-2.2.2/src/boards/ks7057.cpp | 92 + branches/fceux-2.2.2/src/boards/le05.cpp | 62 + branches/fceux-2.2.2/src/boards/lh32.cpp | 78 + branches/fceux-2.2.2/src/boards/lh53.cpp | 107 + branches/fceux-2.2.2/src/boards/malee.cpp | 40 + branches/fceux-2.2.2/src/boards/mapinc.h | 12 + branches/fceux-2.2.2/src/boards/mihunche.cpp | 68 + branches/fceux-2.2.2/src/boards/mmc1.cpp | 392 + branches/fceux-2.2.2/src/boards/mmc2and4.cpp | 137 + branches/fceux-2.2.2/src/boards/mmc3.cpp | 1328 + branches/fceux-2.2.2/src/boards/mmc3.h | 26 + branches/fceux-2.2.2/src/boards/mmc5.cpp | 874 + branches/fceux-2.2.2/src/boards/n106.cpp | 427 + branches/fceux-2.2.2/src/boards/n625092.cpp | 95 + branches/fceux-2.2.2/src/boards/novel.cpp | 50 + branches/fceux-2.2.2/src/boards/onebus.cpp | 292 + branches/fceux-2.2.2/src/boards/pec-586.cpp | 127 + branches/fceux-2.2.2/src/boards/sa-9602b.cpp | 61 + branches/fceux-2.2.2/src/boards/sachen.cpp | 409 + branches/fceux-2.2.2/src/boards/sc-127.cpp | 114 + branches/fceux-2.2.2/src/boards/sheroes.cpp | 79 + branches/fceux-2.2.2/src/boards/sl1632.cpp | 107 + branches/fceux-2.2.2/src/boards/subor.cpp | 88 + branches/fceux-2.2.2/src/boards/super24.cpp | 93 + .../fceux-2.2.2/src/boards/supervision.cpp | 87 + branches/fceux-2.2.2/src/boards/t-227-1.cpp | 100 + branches/fceux-2.2.2/src/boards/t-262.cpp | 73 + branches/fceux-2.2.2/src/boards/tengen.cpp | 139 + branches/fceux-2.2.2/src/boards/tf-1201.cpp | 109 + .../fceux-2.2.2/src/boards/transformer.cpp | 96 + branches/fceux-2.2.2/src/boards/vrc1.cpp | 70 + branches/fceux-2.2.2/src/boards/vrc2and4.cpp | 267 + branches/fceux-2.2.2/src/boards/vrc3.cpp | 134 + branches/fceux-2.2.2/src/boards/vrc5.cpp | 225 + branches/fceux-2.2.2/src/boards/vrc6.cpp | 377 + branches/fceux-2.2.2/src/boards/vrc7.cpp | 202 + branches/fceux-2.2.2/src/boards/vrc7p.cpp | 120 + branches/fceux-2.2.2/src/boards/yoko.cpp | 236 + branches/fceux-2.2.2/src/cart.cpp | 573 + branches/fceux-2.2.2/src/cart.h | 94 + branches/fceux-2.2.2/src/cheat.cpp | 964 + branches/fceux-2.2.2/src/cheat.h | 12 + branches/fceux-2.2.2/src/conddebug.cpp | 475 + branches/fceux-2.2.2/src/conddebug.h | 65 + branches/fceux-2.2.2/src/config.cpp | 56 + branches/fceux-2.2.2/src/config.h | 0 branches/fceux-2.2.2/src/debug.cpp | 800 + branches/fceux-2.2.2/src/debug.h | 164 + branches/fceux-2.2.2/src/drawing.cpp | 525 + branches/fceux-2.2.2/src/drawing.h | 6 + branches/fceux-2.2.2/src/driver.h | 349 + .../fceux-2.2.2/src/drivers/common/SConscript | 6 + .../fceux-2.2.2/src/drivers/common/args.cpp | 108 + .../fceux-2.2.2/src/drivers/common/args.h | 12 + .../fceux-2.2.2/src/drivers/common/cheat.cpp | 544 + .../fceux-2.2.2/src/drivers/common/cheat.h | 21 + .../fceux-2.2.2/src/drivers/common/config.cpp | 374 + .../fceux-2.2.2/src/drivers/common/config.h | 38 + .../src/drivers/common/configSys.cpp | 747 + .../src/drivers/common/configSys.h | 94 + .../fceux-2.2.2/src/drivers/common/hq2x.cpp | 2991 +++ .../fceux-2.2.2/src/drivers/common/hq2x.h | 4 + .../fceux-2.2.2/src/drivers/common/hq3x.cpp | 3865 +++ .../fceux-2.2.2/src/drivers/common/hq3x.h | 4 + .../fceux-2.2.2/src/drivers/common/nes_ntsc.c | 307 + .../fceux-2.2.2/src/drivers/common/nes_ntsc.h | 192 + .../src/drivers/common/nes_ntsc_config.h | 29 + .../src/drivers/common/nes_ntsc_impl.h | 441 + .../src/drivers/common/scale2x.cpp | 924 + .../fceux-2.2.2/src/drivers/common/scale2x.h | 52 + .../src/drivers/common/scale3x.cpp | 383 + .../fceux-2.2.2/src/drivers/common/scale3x.h | 33 + .../src/drivers/common/scalebit.cpp | 387 + .../fceux-2.2.2/src/drivers/common/scalebit.h | 43 + .../src/drivers/common/vidblit.cpp | 911 + .../fceux-2.2.2/src/drivers/common/vidblit.h | 29 + .../fceux-2.2.2/src/drivers/sdl/SConscript | 30 + .../fceux-2.2.2/src/drivers/sdl/config.cpp | 441 + branches/fceux-2.2.2/src/drivers/sdl/config.h | 55 + branches/fceux-2.2.2/src/drivers/sdl/dface.h | 37 + branches/fceux-2.2.2/src/drivers/sdl/gui.cpp | 2535 ++ branches/fceux-2.2.2/src/drivers/sdl/gui.h | 119 + branches/fceux-2.2.2/src/drivers/sdl/icon.xpm | 55 + .../fceux-2.2.2/src/drivers/sdl/input.cpp | 2395 ++ branches/fceux-2.2.2/src/drivers/sdl/input.h | 60 + .../fceux-2.2.2/src/drivers/sdl/keyscan.h | 48 + branches/fceux-2.2.2/src/drivers/sdl/main.h | 98 + .../fceux-2.2.2/src/drivers/sdl/sdl-icon.h | 134 + .../src/drivers/sdl/sdl-joystick.cpp | 123 + .../src/drivers/sdl/sdl-netplay.cpp | 224 + .../src/drivers/sdl/sdl-opengl.cpp | 251 + .../fceux-2.2.2/src/drivers/sdl/sdl-opengl.h | 6 + .../fceux-2.2.2/src/drivers/sdl/sdl-sound.cpp | 272 + .../src/drivers/sdl/sdl-throttle.cpp | 150 + .../fceux-2.2.2/src/drivers/sdl/sdl-video.cpp | 841 + .../fceux-2.2.2/src/drivers/sdl/sdl-video.h | 18 + branches/fceux-2.2.2/src/drivers/sdl/sdl.cpp | 1027 + branches/fceux-2.2.2/src/drivers/sdl/sdl.h | 28 + .../fceux-2.2.2/src/drivers/sdl/throttle.h | 2 + .../src/drivers/sdl/unix-netplay.cpp | 360 + .../src/drivers/sdl/unix-netplay.h | 6 + .../src/drivers/videolog/SConscript | 14 + .../src/drivers/videolog/nesvideos-piece.cpp | 1247 + .../src/drivers/videolog/nesvideos-piece.h | 50 + .../src/drivers/videolog/quantize.h | 185 + .../src/drivers/videolog/rgbtorgb.cpp | 1111 + .../src/drivers/videolog/rgbtorgb.h | 68 + .../fceux-2.2.2/src/drivers/videolog/simd.h | 365 + branches/fceux-2.2.2/src/drivers/win/7z.dll | Bin 0 -> 941568 bytes .../src/drivers/win/7zip/IArchive.h | 173 + .../src/drivers/win/7zip/IProgress.h | 32 + .../src/drivers/win/7zip/IStream.h | 62 + .../src/drivers/win/7zip/MyUnknown.h | 24 + .../fceux-2.2.2/src/drivers/win/7zip/PropID.h | 50 + .../fceux-2.2.2/src/drivers/win/7zip/Types.h | 19 + .../src/drivers/win/7zip/readme.txt | 225 + .../fceux-2.2.2/src/drivers/win/OutputDS.cpp | 303 + .../fceux-2.2.2/src/drivers/win/SConscript | 62 + .../src/drivers/win/Win32InputBox.cpp | 358 + .../src/drivers/win/Win32InputBox.h | 104 + branches/fceux-2.2.2/src/drivers/win/afxres.h | 26 + .../fceux-2.2.2/src/drivers/win/archive.cpp | 579 + .../fceux-2.2.2/src/drivers/win/archive.h | 20 + branches/fceux-2.2.2/src/drivers/win/args.cpp | 78 + branches/fceux-2.2.2/src/drivers/win/args.h | 11 + .../fceux-2.2.2/src/drivers/win/aviout.cpp | 493 + .../fceux-2.2.2/src/drivers/win/cdlogger.cpp | 593 + .../fceux-2.2.2/src/drivers/win/cdlogger.h | 10 + .../fceux-2.2.2/src/drivers/win/cheat.cpp | 1028 + branches/fceux-2.2.2/src/drivers/win/cheat.h | 16 + .../fceux-2.2.2/src/drivers/win/common.cpp | 117 + branches/fceux-2.2.2/src/drivers/win/common.h | 76 + .../fceux-2.2.2/src/drivers/win/config.cpp | 503 + branches/fceux-2.2.2/src/drivers/win/config.h | 4 + branches/fceux-2.2.2/src/drivers/win/debug.h | 6 + .../fceux-2.2.2/src/drivers/win/debugger.cpp | 2361 ++ .../fceux-2.2.2/src/drivers/win/debugger.h | 65 + .../src/drivers/win/debuggersp.cpp | 1052 + .../fceux-2.2.2/src/drivers/win/debuggersp.h | 63 + .../src/drivers/win/directories.cpp | 174 + .../fceux-2.2.2/src/drivers/win/directories.h | 6 + .../src/drivers/win/directx/SConscript | 10 + .../src/drivers/win/directx/ddraw.h | 5792 +++++ .../src/drivers/win/directx/ddraw.lib | Bin 0 -> 4540 bytes .../src/drivers/win/directx/dinput.h | 4417 ++++ .../src/drivers/win/directx/dinput.lib | Bin 0 -> 161464 bytes .../src/drivers/win/directx/dsound.h | 2358 ++ .../src/drivers/win/directx/dsound.lib | Bin 0 -> 4042 bytes .../src/drivers/win/directx/dxguid.lib | Bin 0 -> 565850 bytes .../src/drivers/win/fceu_x86.manifest | 23 + branches/fceux-2.2.2/src/drivers/win/gui.cpp | 137 + branches/fceux-2.2.2/src/drivers/win/gui.h | 4 + .../fceux-2.2.2/src/drivers/win/guiconfig.cpp | 170 + .../fceux-2.2.2/src/drivers/win/guiconfig.h | 8 + branches/fceux-2.2.2/src/drivers/win/help.cpp | 28 + branches/fceux-2.2.2/src/drivers/win/help.h | 3 + .../fceux-2.2.2/src/drivers/win/input.cpp | 1742 ++ branches/fceux-2.2.2/src/drivers/win/input.h | 73 + .../fceux-2.2.2/src/drivers/win/joystick.cpp | 454 + .../fceux-2.2.2/src/drivers/win/joystick.h | 27 + .../fceux-2.2.2/src/drivers/win/keyboard.cpp | 228 + .../fceux-2.2.2/src/drivers/win/keyboard.h | 11 + .../fceux-2.2.2/src/drivers/win/keyscan.h | 129 + branches/fceux-2.2.2/src/drivers/win/log.cpp | 250 + branches/fceux-2.2.2/src/drivers/win/log.h | 8 + .../src/drivers/win/lua/include/lauxlib.h | 174 + .../src/drivers/win/lua/include/llimits.h | 128 + .../src/drivers/win/lua/include/lmem.h | 49 + .../src/drivers/win/lua/include/lobject.h | 381 + .../src/drivers/win/lua/include/lstate.h | 169 + .../src/drivers/win/lua/include/ltm.h | 54 + .../src/drivers/win/lua/include/lua.h | 388 + .../src/drivers/win/lua/include/lua.hpp | 9 + .../src/drivers/win/lua/include/luaconf.h | 765 + .../src/drivers/win/lua/include/lualib.h | 53 + .../src/drivers/win/lua/include/lzio.h | 67 + .../src/drivers/win/lua/win32/lua5.1.dll | Bin 0 -> 167936 bytes .../src/drivers/win/lua/win32/lua51.dll | Bin 0 -> 11264 bytes .../src/drivers/win/lua/win32/lua51.lib | Bin 0 -> 25974 bytes .../src/drivers/win/lua/x64/lua5.1.dll | Bin 0 -> 314880 bytes .../src/drivers/win/lua/x64/lua51.dll | Bin 0 -> 11776 bytes .../src/drivers/win/lua/x64/lua51.lib | Bin 0 -> 25340 bytes .../src/drivers/win/luaconsole.cpp | 366 + branches/fceux-2.2.2/src/drivers/win/main.cpp | 1095 + branches/fceux-2.2.2/src/drivers/win/main.h | 140 + .../fceux-2.2.2/src/drivers/win/mapinput.cpp | 785 + .../fceux-2.2.2/src/drivers/win/mapinput.h | 4 + .../fceux-2.2.2/src/drivers/win/memview.cpp | 2286 ++ .../fceux-2.2.2/src/drivers/win/memview.h | 14 + .../fceux-2.2.2/src/drivers/win/memviewsp.cpp | 212 + .../fceux-2.2.2/src/drivers/win/memviewsp.h | 38 + .../fceux-2.2.2/src/drivers/win/memwatch.cpp | 1141 + .../fceux-2.2.2/src/drivers/win/memwatch.h | 13 + .../fceux-2.2.2/src/drivers/win/monitor.cpp | 299 + .../fceux-2.2.2/src/drivers/win/monitor.h | 1 + .../src/drivers/win/movieoptions.cpp | 123 + .../src/drivers/win/movieoptions.h | 3 + .../fceux-2.2.2/src/drivers/win/netplay.cpp | 498 + .../fceux-2.2.2/src/drivers/win/netplay.h | 1 + .../fceux-2.2.2/src/drivers/win/ntview.cpp | 573 + branches/fceux-2.2.2/src/drivers/win/ntview.h | 8 + branches/fceux-2.2.2/src/drivers/win/oakra.h | 207 + .../fceux-2.2.2/src/drivers/win/palette.cpp | 162 + .../fceux-2.2.2/src/drivers/win/palette.h | 7 + .../fceux-2.2.2/src/drivers/win/ppuview.cpp | 513 + .../fceux-2.2.2/src/drivers/win/ppuview.h | 6 + branches/fceux-2.2.2/src/drivers/win/pref.cpp | 421 + branches/fceux-2.2.2/src/drivers/win/pref.h | 28 + .../src/drivers/win/ram_search.cpp | 2182 ++ .../fceux-2.2.2/src/drivers/win/ram_search.h | 35 + .../fceux-2.2.2/src/drivers/win/ramwatch.cpp | 1296 + .../fceux-2.2.2/src/drivers/win/ramwatch.h | 48 + .../fceux-2.2.2/src/drivers/win/replay.cpp | 1041 + branches/fceux-2.2.2/src/drivers/win/replay.h | 2 + branches/fceux-2.2.2/src/drivers/win/res.rc | 2487 ++ .../src/drivers/win/res/ICON_1.ico | Bin 0 -> 2238 bytes .../src/drivers/win/res/ICON_2.ico | Bin 0 -> 2238 bytes .../drivers/win/res/branch_spritesheet.bmp | Bin 0 -> 23670 bytes .../src/drivers/win/res/taseditor-icon.ico | Bin 0 -> 894 bytes .../src/drivers/win/res/taseditor-icon32.ico | Bin 0 -> 3262 bytes .../fceux-2.2.2/src/drivers/win/res/te_0.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_0_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_1.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_10.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_10_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_11.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_11_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_12.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_12_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_13.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_13_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_14.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_14_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_15.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_15_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_16.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_16_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_17.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_17_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_18.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_18_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_19.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_19_selected.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_1_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_2.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_2_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_3.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_3_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_4.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_4_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_5.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_5_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_6.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_6_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_7.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_7_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_8.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_8_selected.bmp | Bin 0 -> 522 bytes .../fceux-2.2.2/src/drivers/win/res/te_9.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_9_selected.bmp | Bin 0 -> 522 bytes .../src/drivers/win/res/te_arrow.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_green_arrow.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_green_blue_arrow.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_0.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_0_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_0_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_1.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_10.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_10_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_10_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_11.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_11_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_11_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_12.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_12_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_12_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_13.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_13_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_13_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_14.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_14_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_14_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_15.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_15_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_15_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_16.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_16_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_16_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_17.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_17_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_17_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_18.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_18_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_18_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_19.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_19_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_19_playback.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_1_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_1_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_2.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_2_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_2_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_3.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_3_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_3_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_4.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_4_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_4_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_5.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_5_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_5_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_6.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_6_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_6_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_7.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_7_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_7_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_8.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_8_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_8_playback.bmp | Bin 0 -> 574 bytes .../src/drivers/win/res/te_piano_9.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_9_lostpos.bmp | Bin 0 -> 574 bytes .../drivers/win/res/te_piano_9_playback.bmp | Bin 0 -> 574 bytes .../fceux-2.2.2/src/drivers/win/resource.h | 1220 + .../fceux-2.2.2/src/drivers/win/sound.cpp | 835 + branches/fceux-2.2.2/src/drivers/win/sound.h | 11 + .../fceux-2.2.2/src/drivers/win/state.cpp | 66 + branches/fceux-2.2.2/src/drivers/win/state.h | 4 + .../fceux-2.2.2/src/drivers/win/taseditor.cpp | 1015 + .../fceux-2.2.2/src/drivers/win/taseditor.h | 38 + .../src/drivers/win/taseditor/bookmark.cpp | 166 + .../src/drivers/win/taseditor/bookmark.h | 47 + .../src/drivers/win/taseditor/bookmarks.cpp | 874 + .../src/drivers/win/taseditor/bookmarks.h | 115 + .../src/drivers/win/taseditor/branches.cpp | 1328 + .../src/drivers/win/taseditor/branches.h | 184 + .../src/drivers/win/taseditor/editor.cpp | 439 + .../src/drivers/win/taseditor/editor.h | 28 + .../src/drivers/win/taseditor/greenzone.cpp | 664 + .../src/drivers/win/taseditor/greenzone.h | 62 + .../src/drivers/win/taseditor/history.cpp | 1374 ++ .../src/drivers/win/taseditor/history.h | 158 + .../src/drivers/win/taseditor/inputlog.cpp | 653 + .../src/drivers/win/taseditor/inputlog.h | 85 + .../src/drivers/win/taseditor/laglog.cpp | 208 + .../src/drivers/win/taseditor/laglog.h | 42 + .../src/drivers/win/taseditor/markers.cpp | 123 + .../src/drivers/win/taseditor/markers.h | 28 + .../drivers/win/taseditor/markers_manager.cpp | 752 + .../drivers/win/taseditor/markers_manager.h | 76 + .../src/drivers/win/taseditor/piano_roll.cpp | 2139 ++ .../src/drivers/win/taseditor/piano_roll.h | 249 + .../src/drivers/win/taseditor/playback.cpp | 627 + .../src/drivers/win/taseditor/playback.h | 78 + .../drivers/win/taseditor/popup_display.cpp | 308 + .../src/drivers/win/taseditor/popup_display.h | 42 + .../src/drivers/win/taseditor/recorder.cpp | 326 + .../src/drivers/win/taseditor/recorder.h | 51 + .../src/drivers/win/taseditor/selection.cpp | 771 + .../src/drivers/win/taseditor/selection.h | 96 + .../src/drivers/win/taseditor/snapshot.cpp | 158 + .../src/drivers/win/taseditor/snapshot.h | 39 + .../src/drivers/win/taseditor/splicer.cpp | 759 + .../src/drivers/win/taseditor/splicer.h | 34 + .../win/taseditor/taseditor_config.cpp | 101 + .../drivers/win/taseditor/taseditor_config.h | 111 + .../drivers/win/taseditor/taseditor_lua.cpp | 473 + .../src/drivers/win/taseditor/taseditor_lua.h | 71 + .../win/taseditor/taseditor_project.cpp | 390 + .../drivers/win/taseditor/taseditor_project.h | 75 + .../win/taseditor/taseditor_window.cpp | 1800 ++ .../drivers/win/taseditor/taseditor_window.h | 112 + .../fceux-2.2.2/src/drivers/win/texthook.cpp | 1621 ++ .../fceux-2.2.2/src/drivers/win/texthook.h | 16 + .../fceux-2.2.2/src/drivers/win/throttle.cpp | 151 + .../fceux-2.2.2/src/drivers/win/throttle.h | 3 + .../fceux-2.2.2/src/drivers/win/timing.cpp | 92 + branches/fceux-2.2.2/src/drivers/win/timing.h | 6 + .../fceux-2.2.2/src/drivers/win/tracer.cpp | 1187 + branches/fceux-2.2.2/src/drivers/win/tracer.h | 46 + .../fceux-2.2.2/src/drivers/win/video.cpp | 1517 ++ branches/fceux-2.2.2/src/drivers/win/video.h | 71 + branches/fceux-2.2.2/src/drivers/win/wave.cpp | 58 + branches/fceux-2.2.2/src/drivers/win/wave.h | 2 + .../fceux-2.2.2/src/drivers/win/window.cpp | 3058 +++ branches/fceux-2.2.2/src/drivers/win/window.h | 57 + .../src/drivers/win/zlib/.gitignore | 17 + .../src/drivers/win/zlib/SConscript | 20 + .../src/drivers/win/zlib/adler32.c | 48 + .../src/drivers/win/zlib/algorithm.txt | 213 + .../src/drivers/win/zlib/changelog | 481 + .../src/drivers/win/zlib/compress.c | 68 + .../fceux-2.2.2/src/drivers/win/zlib/crc32.c | 162 + .../src/drivers/win/zlib/deflate.c | 1350 + .../src/drivers/win/zlib/deflate.h | 318 + .../src/drivers/win/zlib/descrip.mms | 48 + .../src/drivers/win/zlib/example.c | 556 + branches/fceux-2.2.2/src/drivers/win/zlib/faq | 72 + .../fceux-2.2.2/src/drivers/win/zlib/gzio.c | 875 + .../src/drivers/win/zlib/infblock.c | 403 + .../src/drivers/win/zlib/infblock.h | 39 + .../src/drivers/win/zlib/infcodes.c | 251 + .../src/drivers/win/zlib/infcodes.h | 27 + .../src/drivers/win/zlib/inffast.c | 183 + .../src/drivers/win/zlib/inffast.h | 17 + .../src/drivers/win/zlib/inffixed.h | 151 + .../src/drivers/win/zlib/inflate.c | 366 + .../src/drivers/win/zlib/inftrees.c | 454 + .../src/drivers/win/zlib/inftrees.h | 58 + .../src/drivers/win/zlib/infutil.c | 87 + .../src/drivers/win/zlib/infutil.h | 98 + .../fceux-2.2.2/src/drivers/win/zlib/makefile | 25 + .../src/drivers/win/zlib/maketree.c | 85 + .../fceux-2.2.2/src/drivers/win/zlib/readme | 148 + .../fceux-2.2.2/src/drivers/win/zlib/trees.c | 1214 + .../fceux-2.2.2/src/drivers/win/zlib/trees.h | 128 + .../src/drivers/win/zlib/uncompr.c | 58 + .../fceux-2.2.2/src/drivers/win/zlib/unzip.c | 1301 + .../fceux-2.2.2/src/drivers/win/zlib/unzip.h | 275 + .../fceux-2.2.2/src/drivers/win/zlib/zconf.h | 279 + .../fceux-2.2.2/src/drivers/win/zlib/zlib.h | 893 + .../fceux-2.2.2/src/drivers/win/zlib/zutil.c | 225 + .../fceux-2.2.2/src/drivers/win/zlib/zutil.h | 220 + branches/fceux-2.2.2/src/emufile.cpp | 278 + branches/fceux-2.2.2/src/emufile.h | 346 + branches/fceux-2.2.2/src/emufile_types.h | 16 + branches/fceux-2.2.2/src/fceu.cpp | 1191 + branches/fceux-2.2.2/src/fceu.h | 152 + branches/fceux-2.2.2/src/fceulua.h | 91 + branches/fceux-2.2.2/src/fcoeffs.h | 1585 ++ branches/fceux-2.2.2/src/fds.cpp | 811 + branches/fceux-2.2.2/src/fds.h | 6 + branches/fceux-2.2.2/src/file.cpp | 797 + branches/fceux-2.2.2/src/file.h | 170 + branches/fceux-2.2.2/src/filter.cpp | 209 + branches/fceux-2.2.2/src/filter.h | 3 + branches/fceux-2.2.2/src/fir/Makefile | 15 + branches/fceux-2.2.2/src/fir/README | 1 + branches/fceux-2.2.2/src/fir/SConscript | 6 + branches/fceux-2.2.2/src/fir/c44100ntsc.coef | 1039 + branches/fceux-2.2.2/src/fir/c44100ntsc.h | 512 + branches/fceux-2.2.2/src/fir/c44100ntsc.scm | 12 + branches/fceux-2.2.2/src/fir/c44100pal.coef | 1039 + branches/fceux-2.2.2/src/fir/c44100pal.h | 512 + branches/fceux-2.2.2/src/fir/c44100pal.scm | 12 + branches/fceux-2.2.2/src/fir/c48000ntsc.coef | 1039 + branches/fceux-2.2.2/src/fir/c48000ntsc.h | 512 + branches/fceux-2.2.2/src/fir/c48000ntsc.scm | 12 + branches/fceux-2.2.2/src/fir/c48000pal.coef | 1039 + branches/fceux-2.2.2/src/fir/c48000pal.h | 512 + branches/fceux-2.2.2/src/fir/c48000pal.scm | 12 + branches/fceux-2.2.2/src/fir/c96000ntsc.coef | 1039 + branches/fceux-2.2.2/src/fir/c96000ntsc.h | 512 + branches/fceux-2.2.2/src/fir/c96000ntsc.scm | 12 + branches/fceux-2.2.2/src/fir/c96000pal.coef | 1039 + branches/fceux-2.2.2/src/fir/c96000pal.h | 512 + branches/fceux-2.2.2/src/fir/c96000pal.scm | 12 + branches/fceux-2.2.2/src/fir/toh.c | 24 + branches/fceux-2.2.2/src/git.h | 138 + branches/fceux-2.2.2/src/ines-bad.h | 40 + branches/fceux-2.2.2/src/ines-correct.h | 260 + branches/fceux-2.2.2/src/ines.cpp | 994 + branches/fceux-2.2.2/src/ines.h | 267 + branches/fceux-2.2.2/src/input.cpp | 1210 + branches/fceux-2.2.2/src/input.h | 294 + branches/fceux-2.2.2/src/input/SConscript | 6 + branches/fceux-2.2.2/src/input/arkanoid.cpp | 119 + branches/fceux-2.2.2/src/input/bworld.cpp | 74 + branches/fceux-2.2.2/src/input/cursor.cpp | 86 + branches/fceux-2.2.2/src/input/fkb.cpp | 102 + branches/fceux-2.2.2/src/input/fkb.h | 72 + branches/fceux-2.2.2/src/input/ftrainer.cpp | 74 + branches/fceux-2.2.2/src/input/hypershot.cpp | 50 + branches/fceux-2.2.2/src/input/mahjong.cpp | 79 + branches/fceux-2.2.2/src/input/mouse.cpp | 81 + branches/fceux-2.2.2/src/input/oekakids.cpp | 95 + branches/fceux-2.2.2/src/input/powerpad.cpp | 85 + branches/fceux-2.2.2/src/input/quiz.cpp | 75 + branches/fceux-2.2.2/src/input/shadow.cpp | 150 + branches/fceux-2.2.2/src/input/share.h | 9 + branches/fceux-2.2.2/src/input/suborkb.cpp | 94 + branches/fceux-2.2.2/src/input/suborkb.h | 96 + branches/fceux-2.2.2/src/input/toprider.cpp | 62 + branches/fceux-2.2.2/src/input/zapper.cpp | 224 + branches/fceux-2.2.2/src/input/zapper.h | 16 + branches/fceux-2.2.2/src/lua-engine.cpp | 6013 +++++ branches/fceux-2.2.2/src/lua/COPYRIGHT | 34 + branches/fceux-2.2.2/src/lua/HISTORY | 183 + branches/fceux-2.2.2/src/lua/README | 37 + branches/fceux-2.2.2/src/lua/SConscript | 8 + branches/fceux-2.2.2/src/lua/lua.vcproj | 366 + branches/fceux-2.2.2/src/lua/src/Makefile | 182 + branches/fceux-2.2.2/src/lua/src/lapi.c | 1087 + branches/fceux-2.2.2/src/lua/src/lapi.h | 16 + branches/fceux-2.2.2/src/lua/src/lauxlib.c | 652 + branches/fceux-2.2.2/src/lua/src/lauxlib.h | 174 + branches/fceux-2.2.2/src/lua/src/lbaselib.c | 653 + branches/fceux-2.2.2/src/lua/src/lcode.c | 839 + branches/fceux-2.2.2/src/lua/src/lcode.h | 76 + branches/fceux-2.2.2/src/lua/src/ldblib.c | 397 + branches/fceux-2.2.2/src/lua/src/ldebug.c | 638 + branches/fceux-2.2.2/src/lua/src/ldebug.h | 33 + branches/fceux-2.2.2/src/lua/src/ldo.c | 518 + branches/fceux-2.2.2/src/lua/src/ldo.h | 57 + branches/fceux-2.2.2/src/lua/src/ldump.c | 164 + branches/fceux-2.2.2/src/lua/src/lfunc.c | 174 + branches/fceux-2.2.2/src/lua/src/lfunc.h | 34 + branches/fceux-2.2.2/src/lua/src/lgc.c | 711 + branches/fceux-2.2.2/src/lua/src/lgc.h | 110 + branches/fceux-2.2.2/src/lua/src/linit.c | 38 + branches/fceux-2.2.2/src/lua/src/liolib.c | 553 + branches/fceux-2.2.2/src/lua/src/llex.c | 461 + branches/fceux-2.2.2/src/lua/src/llex.h | 81 + branches/fceux-2.2.2/src/lua/src/llimits.h | 128 + branches/fceux-2.2.2/src/lua/src/lmathlib.c | 263 + branches/fceux-2.2.2/src/lua/src/lmem.c | 86 + branches/fceux-2.2.2/src/lua/src/lmem.h | 49 + branches/fceux-2.2.2/src/lua/src/loadlib.c | 666 + branches/fceux-2.2.2/src/lua/src/lobject.c | 214 + branches/fceux-2.2.2/src/lua/src/lobject.h | 381 + branches/fceux-2.2.2/src/lua/src/lopcodes.c | 102 + branches/fceux-2.2.2/src/lua/src/lopcodes.h | 268 + branches/fceux-2.2.2/src/lua/src/loslib.c | 243 + branches/fceux-2.2.2/src/lua/src/lparser.c | 1339 + branches/fceux-2.2.2/src/lua/src/lparser.h | 82 + branches/fceux-2.2.2/src/lua/src/lstate.c | 214 + branches/fceux-2.2.2/src/lua/src/lstate.h | 169 + branches/fceux-2.2.2/src/lua/src/lstring.c | 111 + branches/fceux-2.2.2/src/lua/src/lstring.h | 31 + branches/fceux-2.2.2/src/lua/src/lstrlib.c | 869 + branches/fceux-2.2.2/src/lua/src/ltable.c | 588 + branches/fceux-2.2.2/src/lua/src/ltable.h | 40 + branches/fceux-2.2.2/src/lua/src/ltablib.c | 287 + branches/fceux-2.2.2/src/lua/src/ltm.c | 75 + branches/fceux-2.2.2/src/lua/src/ltm.h | 54 + branches/fceux-2.2.2/src/lua/src/lua.c | 392 + branches/fceux-2.2.2/src/lua/src/lua.h | 388 + branches/fceux-2.2.2/src/lua/src/luac.c | 200 + branches/fceux-2.2.2/src/lua/src/luaconf.h | 763 + branches/fceux-2.2.2/src/lua/src/lualib.h | 53 + branches/fceux-2.2.2/src/lua/src/lundump.c | 227 + branches/fceux-2.2.2/src/lua/src/lundump.h | 36 + branches/fceux-2.2.2/src/lua/src/lvm.c | 763 + branches/fceux-2.2.2/src/lua/src/lvm.h | 36 + branches/fceux-2.2.2/src/lua/src/lzio.c | 82 + branches/fceux-2.2.2/src/lua/src/lzio.h | 67 + branches/fceux-2.2.2/src/lua/src/print.c | 227 + branches/fceux-2.2.2/src/movie.cpp | 1681 ++ branches/fceux-2.2.2/src/movie.h | 287 + branches/fceux-2.2.2/src/netplay.cpp | 326 + branches/fceux-2.2.2/src/netplay.h | 23 + branches/fceux-2.2.2/src/nsf.cpp | 648 + branches/fceux-2.2.2/src/nsf.h | 55 + branches/fceux-2.2.2/src/oldmovie.cpp | 677 + branches/fceux-2.2.2/src/oldmovie.h | 30 + branches/fceux-2.2.2/src/ops.inc | 486 + branches/fceux-2.2.2/src/palette.cpp | 411 + branches/fceux-2.2.2/src/palette.h | 11 + branches/fceux-2.2.2/src/palettes/SConscript | 6 + branches/fceux-2.2.2/src/palettes/conv.c | 74 + branches/fceux-2.2.2/src/palettes/palettes.h | 295 + branches/fceux-2.2.2/src/palettes/rp2c04001.h | 64 + branches/fceux-2.2.2/src/palettes/rp2c04002.h | 64 + branches/fceux-2.2.2/src/palettes/rp2c04003.h | 64 + branches/fceux-2.2.2/src/palettes/rp2c05004.h | 64 + branches/fceux-2.2.2/src/ppu.cpp | 2315 ++ branches/fceux-2.2.2/src/ppu.h | 43 + branches/fceux-2.2.2/src/pputile.inc | 118 + branches/fceux-2.2.2/src/sound.cpp | 1384 ++ branches/fceux-2.2.2/src/sound.h | 84 + branches/fceux-2.2.2/src/state.cpp | 1163 + branches/fceux-2.2.2/src/state.h | 79 + branches/fceux-2.2.2/src/types-des.h | 458 + branches/fceux-2.2.2/src/types.h | 137 + branches/fceux-2.2.2/src/unif.cpp | 607 + branches/fceux-2.2.2/src/unif.h | 147 + branches/fceux-2.2.2/src/utils/ConvertUTF.c | 539 + branches/fceux-2.2.2/src/utils/ConvertUTF.h | 149 + branches/fceux-2.2.2/src/utils/SConscript | 25 + branches/fceux-2.2.2/src/utils/backward.cpp | 33 + branches/fceux-2.2.2/src/utils/backward.hpp | 2196 ++ branches/fceux-2.2.2/src/utils/crc32.cpp | 33 + branches/fceux-2.2.2/src/utils/crc32.h | 1 + branches/fceux-2.2.2/src/utils/endian.cpp | 313 + branches/fceux-2.2.2/src/utils/endian.h | 111 + branches/fceux-2.2.2/src/utils/general.cpp | 39 + branches/fceux-2.2.2/src/utils/general.h | 3 + branches/fceux-2.2.2/src/utils/guid.cpp | 47 + branches/fceux-2.2.2/src/utils/guid.h | 18 + branches/fceux-2.2.2/src/utils/ioapi.cpp | 246 + branches/fceux-2.2.2/src/utils/ioapi.h | 208 + branches/fceux-2.2.2/src/utils/md5.cpp | 244 + branches/fceux-2.2.2/src/utils/md5.h | 23 + branches/fceux-2.2.2/src/utils/memory.cpp | 88 + branches/fceux-2.2.2/src/utils/memory.h | 36 + branches/fceux-2.2.2/src/utils/unzip.cpp | 2125 ++ branches/fceux-2.2.2/src/utils/unzip.h | 437 + branches/fceux-2.2.2/src/utils/valuearray.h | 21 + branches/fceux-2.2.2/src/utils/xstring.cpp | 793 + branches/fceux-2.2.2/src/utils/xstring.h | 132 + branches/fceux-2.2.2/src/version.h | 67 + branches/fceux-2.2.2/src/video.cpp | 779 + branches/fceux-2.2.2/src/video.h | 40 + branches/fceux-2.2.2/src/vsuni.cpp | 376 + branches/fceux-2.2.2/src/vsuni.h | 7 + branches/fceux-2.2.2/src/wave.cpp | 126 + branches/fceux-2.2.2/src/wave.h | 4 + branches/fceux-2.2.2/src/x6502.cpp | 583 + branches/fceux-2.2.2/src/x6502.h | 91 + branches/fceux-2.2.2/src/x6502abbrev.h | 20 + branches/fceux-2.2.2/src/x6502struct.h | 27 + branches/fceux-2.2.2/vc/.gitignore | 21 + branches/fceux-2.2.2/vc/Help/fceux.hnd | Bin 0 -> 1466368 bytes branches/fceux-2.2.2/vc/Help/readme.txt | 12 + branches/fceux-2.2.2/vc/Help/taseditor-ru.hnd | Bin 0 -> 2170880 bytes branches/fceux-2.2.2/vc/Help/taseditor.hnd | Bin 0 -> 2064384 bytes branches/fceux-2.2.2/vc/SubWCRev.bat | 2 + branches/fceux-2.2.2/vc/archive.bat | 21 + .../vc/defaultconfig/MakeDownloadHTML.bat | 19 + .../fceux-2.2.2/vc/defaultconfig/SubWCRev.exe | Bin 0 -> 112008 bytes .../fceux-2.2.2/vc/defaultconfig/svnrev.h | 5 + .../vc/defaultconfig/svnrev_template.h | 2 + branches/fceux-2.2.2/vc/deploy.bat | 2 + branches/fceux-2.2.2/vc/luaperks.lib | Bin 0 -> 4886038 bytes branches/fceux-2.2.2/vc/pscp.exe | Bin 0 -> 147968 bytes branches/fceux-2.2.2/vc/upload.bat | 6 + branches/fceux-2.2.2/vc/upx.exe | Bin 0 -> 271872 bytes branches/fceux-2.2.2/vc/userconfig/.gitignore | 1 + branches/fceux-2.2.2/vc/userconfig/readme.txt | 1 + branches/fceux-2.2.2/vc/vc10_fceux.sln | 24 + branches/fceux-2.2.2/vc/vc10_fceux.vcxproj | 1267 + .../fceux-2.2.2/vc/vc10_fceux.vcxproj.filters | 1807 ++ branches/fceux-2.2.2/vc/vc8_fceux.sln | 30 + branches/fceux-2.2.2/vc/vc8_fceux.vcproj | 4861 ++++ branches/fceux-2.2.2/vc/vc9_fceux.sln | 24 + branches/fceux-2.2.2/vc/vc9_fceux.vcproj | 4723 ++++ branches/fceux-2.2.2/vc/zip.exe | Bin 0 -> 63488 bytes 977 files changed, 273041 insertions(+) create mode 100644 branches/fceux-2.2.2/Authors create mode 100644 branches/fceux-2.2.2/COPYING create mode 100644 branches/fceux-2.2.2/INSTALL create mode 100644 branches/fceux-2.2.2/NewPPUtests.txt create mode 100644 branches/fceux-2.2.2/README-SDL create mode 100644 branches/fceux-2.2.2/SConstruct create mode 100644 branches/fceux-2.2.2/STYLE-GUIDELINES-SDL create mode 100644 branches/fceux-2.2.2/TODO-SDL create mode 100644 branches/fceux-2.2.2/attic/.gitignore create mode 100644 branches/fceux-2.2.2/attic/BUGS create mode 100644 branches/fceux-2.2.2/attic/ChangeLog.older create mode 100644 branches/fceux-2.2.2/attic/Makefile.am create mode 100644 branches/fceux-2.2.2/attic/SConstruct.pre1.0 create mode 100644 branches/fceux-2.2.2/attic/TODO-SDL-2.1.6.md create mode 100644 branches/fceux-2.2.2/attic/acinclude.m4 create mode 100644 branches/fceux-2.2.2/attic/aclocal.m4 create mode 100644 branches/fceux-2.2.2/attic/authors create mode 100644 branches/fceux-2.2.2/attic/changelog create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/debug/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/fceux_cross-mingw32.cmake create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/release/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/fceux.cmake create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/debug/CMakeLists.txt create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/fceux_native.cmake create mode 100644 branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/release/CMakeLists.txt create mode 100755 branches/fceux-2.2.2/attic/compile create mode 100755 branches/fceux-2.2.2/attic/config.guess create mode 100755 branches/fceux-2.2.2/attic/config.sub create mode 100644 branches/fceux-2.2.2/attic/configure-mingw32 create mode 100644 branches/fceux-2.2.2/attic/configure.ac create mode 100755 branches/fceux-2.2.2/attic/depcomp create mode 100644 branches/fceux-2.2.2/attic/fceu-svga.6 create mode 100755 branches/fceux-2.2.2/attic/install-sh create mode 100755 branches/fceux-2.2.2/attic/missing create mode 100755 branches/fceux-2.2.2/attic/mkinstalldirs create mode 100644 branches/fceux-2.2.2/attic/readme create mode 100644 branches/fceux-2.2.2/changelog.txt create mode 100755 branches/fceux-2.2.2/debian-crossbuild.sh create mode 100644 branches/fceux-2.2.2/documentation/.gitignore create mode 100644 branches/fceux-2.2.2/documentation/TODO-PROJECT create mode 100644 branches/fceux-2.2.2/documentation/Videolog.txt create mode 100644 branches/fceux-2.2.2/documentation/cheat.html create mode 100644 branches/fceux-2.2.2/documentation/faq create mode 100644 branches/fceux-2.2.2/documentation/fceux-net-server.6 create mode 100644 branches/fceux-2.2.2/documentation/fceux.6 create mode 100644 branches/fceux-2.2.2/documentation/fcs.txt create mode 100644 branches/fceux-2.2.2/documentation/fm2.txt create mode 100644 branches/fceux-2.2.2/documentation/porting.txt create mode 100644 branches/fceux-2.2.2/documentation/protocol.txt create mode 100644 branches/fceux-2.2.2/documentation/snes9x-lua.html create mode 100644 branches/fceux-2.2.2/documentation/tech/cpu/4017.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/cpu/dmc.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/cpu/nessound-4th.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/cpu/nessound.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/exp/mmc5-e.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/exp/smb2j.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/exp/tengen.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/exp/vrcvi.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/exp/vrcvii.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/nsfspec.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/ppu/2c02 technical operation.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/ppu/loopy1.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/ppu/loopy2.txt create mode 100644 branches/fceux-2.2.2/documentation/tech/readme.now create mode 100644 branches/fceux-2.2.2/documentation/tech/readme.sound create mode 100644 branches/fceux-2.2.2/documentation/todo create mode 100644 branches/fceux-2.2.2/doxygen create mode 100644 branches/fceux-2.2.2/fceux-server/.gitignore create mode 100644 branches/fceux-2.2.2/fceux-server/AUTHORS create mode 100644 branches/fceux-2.2.2/fceux-server/COPYING create mode 100644 branches/fceux-2.2.2/fceux-server/ChangeLog create mode 100644 branches/fceux-2.2.2/fceux-server/Makefile create mode 100644 branches/fceux-2.2.2/fceux-server/README create mode 100644 branches/fceux-2.2.2/fceux-server/cygwin1.dll create mode 100644 branches/fceux-2.2.2/fceux-server/dist/fceu-server-0.0.4.tar.gz create mode 100644 branches/fceux-2.2.2/fceux-server/dist/fceu-server-0.0.5.tar.gz create mode 100644 branches/fceux-2.2.2/fceux-server/dist/fceunetserver-0.0.3.tar.bz2 create mode 100644 branches/fceux-2.2.2/fceux-server/fceux-net-server.exe create mode 100644 branches/fceux-2.2.2/fceux-server/fceux-server.conf create mode 100644 branches/fceux-2.2.2/fceux-server/md5.cpp create mode 100644 branches/fceux-2.2.2/fceux-server/md5.h create mode 100644 branches/fceux-2.2.2/fceux-server/server.cpp create mode 100644 branches/fceux-2.2.2/fceux-server/throttle.cpp create mode 100644 branches/fceux-2.2.2/fceux-server/throttle.h create mode 100644 branches/fceux-2.2.2/fceux-server/types.h create mode 100644 branches/fceux-2.2.2/fceux.desktop create mode 100644 branches/fceux-2.2.2/fceux.png create mode 100644 branches/fceux-2.2.2/getSDLKey/COPYING create mode 100644 branches/fceux-2.2.2/getSDLKey/Makefile create mode 100644 branches/fceux-2.2.2/getSDLKey/README create mode 100644 branches/fceux-2.2.2/getSDLKey/getSDLKey.cpp create mode 100644 branches/fceux-2.2.2/output/.gitignore create mode 100644 branches/fceux-2.2.2/output/fceux.chm create mode 100644 branches/fceux-2.2.2/output/lua5.1.dll create mode 100644 branches/fceux-2.2.2/output/lua51.dll create mode 100644 branches/fceux-2.2.2/output/luaScripts/AVI-HeadsUpDisplay.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/BoulderDash_AmoebaAI.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/BugsBunnyBirthdayBlowout.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/ButtonCount.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/CustomLagIndicator_RvT.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Excitingbike-speedometeronly.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Excitingbike.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/FRKfunctions.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/GUI-iup_button.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/GUI-iup_example.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Galaxian.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Gradius-BulletHell.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/JumpingFCEUXWindow.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Luabot.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Machrider.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/MegamanII-LaserEyes.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/MemoryWatch.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Multitrack.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Multitrack2.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/NightmareElmStreet-4Player.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/PunchOutChallenge.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/PunchOutStats.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/PunchOutTraining.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/RBIBaseball.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Registerfind(CheatSearch).lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Rewinder.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-AreaScrambler.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-CompetitionRecorder.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-HitBoxes.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-Jetpack.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-Lives&HPDisplay.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-Mouse.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB-Snow.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB2U.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SMB3-RainbowRiding.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/ShowPalette.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SoundDisplay.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/SoundDisplay2.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/Subtitler.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/TeenageMutantNinjaTurtles.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/UsingLuaBot-Documentation.txt create mode 100644 branches/fceux-2.2.2/output/luaScripts/UsingLuaScripting-Documentation.txt create mode 100644 branches/fceux-2.2.2/output/luaScripts/UsingLuaScripting-ListofFunctions.txt create mode 100644 branches/fceux-2.2.2/output/luaScripts/ZapperDisplay.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/ZapperFun.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/luabot_framework.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/m_utils.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/shapedefs.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/InputDisplay_for_Selection.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/InvertSelection.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/RecordBackwards.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/ShowNotes.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/Swap1P2P.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/taseditor/TrackNoise.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/tetris.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/vnb.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/x_functions.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/x_interface.lua create mode 100644 branches/fceux-2.2.2/output/luaScripts/x_smb1enemylist.lua create mode 100644 branches/fceux-2.2.2/output/palettes/ASQ_realityA.pal create mode 100644 branches/fceux-2.2.2/output/palettes/ASQ_realityB.pal create mode 100644 branches/fceux-2.2.2/output/palettes/BMF_final2.pal create mode 100644 branches/fceux-2.2.2/output/palettes/BMF_final3.pal create mode 100644 branches/fceux-2.2.2/output/palettes/FCEU-13-default_nitsuja.pal create mode 100644 branches/fceux-2.2.2/output/palettes/FCEU-15-nitsuja_new.pal create mode 100644 branches/fceux-2.2.2/output/palettes/FCEUX.pal create mode 100644 branches/fceux-2.2.2/output/palettes/nestopia_rgb.pal create mode 100644 branches/fceux-2.2.2/output/palettes/nestopia_yuv.pal create mode 100644 branches/fceux-2.2.2/output/taseditor.chm create mode 100644 branches/fceux-2.2.2/output/tools/taseditor_patterns.txt create mode 100644 branches/fceux-2.2.2/src/.gitignore create mode 100644 branches/fceux-2.2.2/src/SConscript create mode 100644 branches/fceux-2.2.2/src/asm.cpp create mode 100644 branches/fceux-2.2.2/src/asm.h create mode 100644 branches/fceux-2.2.2/src/attic/fceustr.cpp create mode 100644 branches/fceux-2.2.2/src/attic/fceustr.h create mode 100644 branches/fceux-2.2.2/src/attic/old fceultra docs.zip create mode 100644 branches/fceux-2.2.2/src/attic/pc/dface.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-joystick.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-joystick.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-keyboard.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-mouse.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-sound.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-sound.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-video.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos-video.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/dos.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/input.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/input.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/keyscan.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/main.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/main.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-icon.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-joystick.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-netplay.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-netplay.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-opengl.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-opengl.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-sound.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-throttle.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-video.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl-video.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/sdl.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/throttle.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/throttle.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/unix-netplay.c create mode 100644 branches/fceux-2.2.2/src/attic/pc/unix-netplay.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/usage.h create mode 100644 branches/fceux-2.2.2/src/attic/pc/vgatweak.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/convert.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/convert.h create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/convert.inc create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/convertgen create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/convertgen.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/drivers/dsound.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/drivers/oss.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/drivers/oss.h create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/drivers/osxcoreaudio.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/md5.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/md5.h create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/sexyal.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/sexyal.h create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/smallc.c create mode 100644 branches/fceux-2.2.2/src/attic/sexyal/smallc.h create mode 100644 branches/fceux-2.2.2/src/attic/soundexp.cpp create mode 100644 branches/fceux-2.2.2/src/auxlib.lua create mode 100644 branches/fceux-2.2.2/src/boards/01-222.cpp create mode 100644 branches/fceux-2.2.2/src/boards/09-034a.cpp create mode 100644 branches/fceux-2.2.2/src/boards/103.cpp create mode 100644 branches/fceux-2.2.2/src/boards/106.cpp create mode 100644 branches/fceux-2.2.2/src/boards/108.cpp create mode 100644 branches/fceux-2.2.2/src/boards/112.cpp create mode 100644 branches/fceux-2.2.2/src/boards/116.cpp create mode 100644 branches/fceux-2.2.2/src/boards/117.cpp create mode 100644 branches/fceux-2.2.2/src/boards/120.cpp create mode 100644 branches/fceux-2.2.2/src/boards/121.cpp create mode 100644 branches/fceux-2.2.2/src/boards/12in1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/15.cpp create mode 100644 branches/fceux-2.2.2/src/boards/151.cpp create mode 100644 branches/fceux-2.2.2/src/boards/156.cpp create mode 100644 branches/fceux-2.2.2/src/boards/164.cpp create mode 100644 branches/fceux-2.2.2/src/boards/168.cpp create mode 100644 branches/fceux-2.2.2/src/boards/170.cpp create mode 100644 branches/fceux-2.2.2/src/boards/175.cpp create mode 100644 branches/fceux-2.2.2/src/boards/176.cpp create mode 100644 branches/fceux-2.2.2/src/boards/177.cpp create mode 100644 branches/fceux-2.2.2/src/boards/178.cpp create mode 100644 branches/fceux-2.2.2/src/boards/18.cpp create mode 100644 branches/fceux-2.2.2/src/boards/183.cpp create mode 100644 branches/fceux-2.2.2/src/boards/185.cpp create mode 100644 branches/fceux-2.2.2/src/boards/186.cpp create mode 100644 branches/fceux-2.2.2/src/boards/187.cpp create mode 100644 branches/fceux-2.2.2/src/boards/189.cpp create mode 100644 branches/fceux-2.2.2/src/boards/193.cpp create mode 100644 branches/fceux-2.2.2/src/boards/199.cpp create mode 100644 branches/fceux-2.2.2/src/boards/206.cpp create mode 100644 branches/fceux-2.2.2/src/boards/208.cpp create mode 100644 branches/fceux-2.2.2/src/boards/222.cpp create mode 100644 branches/fceux-2.2.2/src/boards/225.cpp create mode 100644 branches/fceux-2.2.2/src/boards/228.cpp create mode 100644 branches/fceux-2.2.2/src/boards/230.cpp create mode 100644 branches/fceux-2.2.2/src/boards/232.cpp create mode 100644 branches/fceux-2.2.2/src/boards/234.cpp create mode 100644 branches/fceux-2.2.2/src/boards/235.cpp create mode 100644 branches/fceux-2.2.2/src/boards/244.cpp create mode 100644 branches/fceux-2.2.2/src/boards/246.cpp create mode 100644 branches/fceux-2.2.2/src/boards/252.cpp create mode 100644 branches/fceux-2.2.2/src/boards/253.cpp create mode 100644 branches/fceux-2.2.2/src/boards/28.cpp create mode 100644 branches/fceux-2.2.2/src/boards/32.cpp create mode 100644 branches/fceux-2.2.2/src/boards/33.cpp create mode 100644 branches/fceux-2.2.2/src/boards/34.cpp create mode 100644 branches/fceux-2.2.2/src/boards/36.cpp create mode 100644 branches/fceux-2.2.2/src/boards/3d-block.cpp create mode 100644 branches/fceux-2.2.2/src/boards/40.cpp create mode 100644 branches/fceux-2.2.2/src/boards/41.cpp create mode 100644 branches/fceux-2.2.2/src/boards/411120-c.cpp create mode 100644 branches/fceux-2.2.2/src/boards/42.cpp create mode 100644 branches/fceux-2.2.2/src/boards/43.cpp create mode 100644 branches/fceux-2.2.2/src/boards/46.cpp create mode 100644 branches/fceux-2.2.2/src/boards/50.cpp create mode 100644 branches/fceux-2.2.2/src/boards/51.cpp create mode 100644 branches/fceux-2.2.2/src/boards/57.cpp create mode 100644 branches/fceux-2.2.2/src/boards/603-5052.cpp create mode 100644 branches/fceux-2.2.2/src/boards/62.cpp create mode 100644 branches/fceux-2.2.2/src/boards/65.cpp create mode 100644 branches/fceux-2.2.2/src/boards/67.cpp create mode 100644 branches/fceux-2.2.2/src/boards/68.cpp create mode 100644 branches/fceux-2.2.2/src/boards/69.cpp create mode 100644 branches/fceux-2.2.2/src/boards/71.cpp create mode 100644 branches/fceux-2.2.2/src/boards/72.cpp create mode 100644 branches/fceux-2.2.2/src/boards/77.cpp create mode 100644 branches/fceux-2.2.2/src/boards/79.cpp create mode 100644 branches/fceux-2.2.2/src/boards/80.cpp create mode 100644 branches/fceux-2.2.2/src/boards/8157.cpp create mode 100644 branches/fceux-2.2.2/src/boards/82.cpp create mode 100644 branches/fceux-2.2.2/src/boards/8237.cpp create mode 100644 branches/fceux-2.2.2/src/boards/830118C.cpp create mode 100644 branches/fceux-2.2.2/src/boards/88.cpp create mode 100644 branches/fceux-2.2.2/src/boards/90.cpp create mode 100644 branches/fceux-2.2.2/src/boards/91.cpp create mode 100644 branches/fceux-2.2.2/src/boards/96.cpp create mode 100644 branches/fceux-2.2.2/src/boards/99.cpp create mode 100644 branches/fceux-2.2.2/src/boards/SConscript create mode 100644 branches/fceux-2.2.2/src/boards/__dummy_mapper.cpp create mode 100644 branches/fceux-2.2.2/src/boards/a9746.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ac-08.cpp create mode 100644 branches/fceux-2.2.2/src/boards/addrlatch.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ax5705.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bandai.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bb.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bmc13in1jy110.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bmc42in1r.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bmc64in1nr.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bmc70in1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bonza.cpp create mode 100644 branches/fceux-2.2.2/src/boards/bs-5.cpp create mode 100644 branches/fceux-2.2.2/src/boards/cityfighter.cpp create mode 100644 branches/fceux-2.2.2/src/boards/dance2000.cpp create mode 100644 branches/fceux-2.2.2/src/boards/datalatch.cpp create mode 100644 branches/fceux-2.2.2/src/boards/dream.cpp create mode 100644 branches/fceux-2.2.2/src/boards/edu2000.cpp create mode 100644 branches/fceux-2.2.2/src/boards/emu2413.c create mode 100644 branches/fceux-2.2.2/src/boards/emu2413.h create mode 100644 branches/fceux-2.2.2/src/boards/famicombox.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ffe.cpp create mode 100644 branches/fceux-2.2.2/src/boards/fk23c.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ghostbusters63in1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/gs-2004.cpp create mode 100644 branches/fceux-2.2.2/src/boards/gs-2013.cpp create mode 100644 branches/fceux-2.2.2/src/boards/h2288.cpp create mode 100644 branches/fceux-2.2.2/src/boards/karaoke.cpp create mode 100644 branches/fceux-2.2.2/src/boards/kof97.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7012.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7013.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7017.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7030.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7031.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7032.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7037.cpp create mode 100644 branches/fceux-2.2.2/src/boards/ks7057.cpp create mode 100644 branches/fceux-2.2.2/src/boards/le05.cpp create mode 100644 branches/fceux-2.2.2/src/boards/lh32.cpp create mode 100644 branches/fceux-2.2.2/src/boards/lh53.cpp create mode 100644 branches/fceux-2.2.2/src/boards/malee.cpp create mode 100644 branches/fceux-2.2.2/src/boards/mapinc.h create mode 100644 branches/fceux-2.2.2/src/boards/mihunche.cpp create mode 100644 branches/fceux-2.2.2/src/boards/mmc1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/mmc2and4.cpp create mode 100644 branches/fceux-2.2.2/src/boards/mmc3.cpp create mode 100644 branches/fceux-2.2.2/src/boards/mmc3.h create mode 100644 branches/fceux-2.2.2/src/boards/mmc5.cpp create mode 100644 branches/fceux-2.2.2/src/boards/n106.cpp create mode 100644 branches/fceux-2.2.2/src/boards/n625092.cpp create mode 100644 branches/fceux-2.2.2/src/boards/novel.cpp create mode 100644 branches/fceux-2.2.2/src/boards/onebus.cpp create mode 100644 branches/fceux-2.2.2/src/boards/pec-586.cpp create mode 100644 branches/fceux-2.2.2/src/boards/sa-9602b.cpp create mode 100644 branches/fceux-2.2.2/src/boards/sachen.cpp create mode 100644 branches/fceux-2.2.2/src/boards/sc-127.cpp create mode 100644 branches/fceux-2.2.2/src/boards/sheroes.cpp create mode 100644 branches/fceux-2.2.2/src/boards/sl1632.cpp create mode 100644 branches/fceux-2.2.2/src/boards/subor.cpp create mode 100644 branches/fceux-2.2.2/src/boards/super24.cpp create mode 100644 branches/fceux-2.2.2/src/boards/supervision.cpp create mode 100644 branches/fceux-2.2.2/src/boards/t-227-1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/t-262.cpp create mode 100644 branches/fceux-2.2.2/src/boards/tengen.cpp create mode 100644 branches/fceux-2.2.2/src/boards/tf-1201.cpp create mode 100644 branches/fceux-2.2.2/src/boards/transformer.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc1.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc2and4.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc3.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc5.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc6.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc7.cpp create mode 100644 branches/fceux-2.2.2/src/boards/vrc7p.cpp create mode 100644 branches/fceux-2.2.2/src/boards/yoko.cpp create mode 100644 branches/fceux-2.2.2/src/cart.cpp create mode 100644 branches/fceux-2.2.2/src/cart.h create mode 100644 branches/fceux-2.2.2/src/cheat.cpp create mode 100644 branches/fceux-2.2.2/src/cheat.h create mode 100644 branches/fceux-2.2.2/src/conddebug.cpp create mode 100644 branches/fceux-2.2.2/src/conddebug.h create mode 100644 branches/fceux-2.2.2/src/config.cpp create mode 100644 branches/fceux-2.2.2/src/config.h create mode 100644 branches/fceux-2.2.2/src/debug.cpp create mode 100644 branches/fceux-2.2.2/src/debug.h create mode 100644 branches/fceux-2.2.2/src/drawing.cpp create mode 100644 branches/fceux-2.2.2/src/drawing.h create mode 100644 branches/fceux-2.2.2/src/driver.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/common/args.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/args.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/cheat.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/cheat.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/config.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/config.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/configSys.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/configSys.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/hq2x.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/hq2x.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/hq3x.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/hq3x.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/nes_ntsc.c create mode 100644 branches/fceux-2.2.2/src/drivers/common/nes_ntsc.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/nes_ntsc_config.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/nes_ntsc_impl.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/scale2x.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/scale2x.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/scale3x.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/scale3x.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/scalebit.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/scalebit.h create mode 100644 branches/fceux-2.2.2/src/drivers/common/vidblit.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/common/vidblit.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/config.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/config.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/dface.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/gui.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/gui.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/icon.xpm create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/input.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/input.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/keyscan.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/main.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-icon.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-joystick.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-netplay.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-opengl.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-opengl.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-sound.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-throttle.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-video.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl-video.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/sdl.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/throttle.h create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/unix-netplay.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/sdl/unix-netplay.h create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/nesvideos-piece.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/nesvideos-piece.h create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/quantize.h create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/rgbtorgb.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/rgbtorgb.h create mode 100644 branches/fceux-2.2.2/src/drivers/videolog/simd.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7z.dll create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/IArchive.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/IProgress.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/IStream.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/MyUnknown.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/PropID.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/Types.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/7zip/readme.txt create mode 100644 branches/fceux-2.2.2/src/drivers/win/OutputDS.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/win/Win32InputBox.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/Win32InputBox.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/afxres.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/archive.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/archive.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/args.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/args.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/aviout.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/cdlogger.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/cdlogger.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/cheat.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/cheat.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/common.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/common.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/config.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/config.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/debug.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/debugger.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/debugger.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/debuggersp.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/debuggersp.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/directories.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/directories.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/ddraw.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/ddraw.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/dinput.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/dinput.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/dsound.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/dsound.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/directx/dxguid.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/fceu_x86.manifest create mode 100644 branches/fceux-2.2.2/src/drivers/win/gui.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/gui.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/guiconfig.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/guiconfig.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/help.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/help.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/input.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/input.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/joystick.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/joystick.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/keyboard.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/keyboard.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/keyscan.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/log.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/log.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lauxlib.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/llimits.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lmem.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lobject.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lstate.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/ltm.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lua.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lua.hpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/luaconf.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lualib.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/include/lzio.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/win32/lua5.1.dll create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/win32/lua51.dll create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/win32/lua51.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/x64/lua5.1.dll create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/x64/lua51.dll create mode 100644 branches/fceux-2.2.2/src/drivers/win/lua/x64/lua51.lib create mode 100644 branches/fceux-2.2.2/src/drivers/win/luaconsole.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/main.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/main.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/mapinput.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/mapinput.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/memview.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/memview.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/memviewsp.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/memviewsp.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/memwatch.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/memwatch.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/monitor.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/monitor.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/movieoptions.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/movieoptions.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/netplay.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/netplay.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/ntview.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/ntview.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/oakra.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/palette.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/palette.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/ppuview.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/ppuview.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/pref.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/pref.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/ram_search.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/ram_search.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/ramwatch.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/ramwatch.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/replay.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/replay.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/res.rc create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/ICON_1.ico create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/ICON_2.ico create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/branch_spritesheet.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/taseditor-icon.ico create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/taseditor-icon32.ico create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_0.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_0_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_1.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_10.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_10_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_11.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_11_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_12.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_12_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_13.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_13_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_14.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_14_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_15.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_15_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_16.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_16_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_17.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_17_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_18.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_18_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_19.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_19_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_1_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_2.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_2_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_3.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_3_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_4.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_4_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_5.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_5_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_6.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_6_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_7.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_7_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_8.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_8_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_9.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_9_selected.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_arrow.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_green_arrow.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_green_blue_arrow.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_0.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_0_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_0_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_1.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_10.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_10_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_10_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_11.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_11_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_11_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_12.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_12_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_12_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_13.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_13_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_13_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_14.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_14_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_14_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_15.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_15_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_15_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_16.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_16_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_16_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_17.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_17_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_17_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_18.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_18_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_18_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_19.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_19_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_19_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_1_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_1_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_2.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_2_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_2_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_3.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_3_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_3_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_4.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_4_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_4_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_5.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_5_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_5_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_6.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_6_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_6_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_7.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_7_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_7_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_8.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_8_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_8_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_9.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_9_lostpos.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/res/te_piano_9_playback.bmp create mode 100644 branches/fceux-2.2.2/src/drivers/win/resource.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/sound.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/sound.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/state.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/state.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/bookmark.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/bookmark.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/bookmarks.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/bookmarks.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/branches.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/branches.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/editor.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/editor.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/greenzone.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/greenzone.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/history.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/history.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/inputlog.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/inputlog.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/laglog.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/laglog.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/markers.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/markers.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/markers_manager.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/markers_manager.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/piano_roll.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/piano_roll.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/playback.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/playback.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/popup_display.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/popup_display.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/recorder.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/recorder.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/selection.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/selection.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/snapshot.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/snapshot.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/splicer.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/splicer.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_config.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_config.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_lua.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_lua.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_project.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_project.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_window.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/taseditor/taseditor_window.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/texthook.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/texthook.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/throttle.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/throttle.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/timing.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/timing.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/tracer.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/tracer.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/video.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/video.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/wave.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/wave.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/window.cpp create mode 100644 branches/fceux-2.2.2/src/drivers/win/window.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/.gitignore create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/SConscript create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/adler32.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/algorithm.txt create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/changelog create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/compress.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/crc32.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/deflate.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/deflate.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/descrip.mms create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/example.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/faq create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/gzio.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infblock.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infblock.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infcodes.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infcodes.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inffast.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inffast.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inffixed.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inflate.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inftrees.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/inftrees.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infutil.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/infutil.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/makefile create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/maketree.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/readme create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/trees.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/trees.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/uncompr.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/unzip.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/unzip.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/zconf.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/zlib.h create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/zutil.c create mode 100644 branches/fceux-2.2.2/src/drivers/win/zlib/zutil.h create mode 100644 branches/fceux-2.2.2/src/emufile.cpp create mode 100644 branches/fceux-2.2.2/src/emufile.h create mode 100644 branches/fceux-2.2.2/src/emufile_types.h create mode 100644 branches/fceux-2.2.2/src/fceu.cpp create mode 100644 branches/fceux-2.2.2/src/fceu.h create mode 100644 branches/fceux-2.2.2/src/fceulua.h create mode 100644 branches/fceux-2.2.2/src/fcoeffs.h create mode 100644 branches/fceux-2.2.2/src/fds.cpp create mode 100644 branches/fceux-2.2.2/src/fds.h create mode 100644 branches/fceux-2.2.2/src/file.cpp create mode 100644 branches/fceux-2.2.2/src/file.h create mode 100644 branches/fceux-2.2.2/src/filter.cpp create mode 100644 branches/fceux-2.2.2/src/filter.h create mode 100644 branches/fceux-2.2.2/src/fir/Makefile create mode 100644 branches/fceux-2.2.2/src/fir/README create mode 100644 branches/fceux-2.2.2/src/fir/SConscript create mode 100644 branches/fceux-2.2.2/src/fir/c44100ntsc.coef create mode 100644 branches/fceux-2.2.2/src/fir/c44100ntsc.h create mode 100644 branches/fceux-2.2.2/src/fir/c44100ntsc.scm create mode 100644 branches/fceux-2.2.2/src/fir/c44100pal.coef create mode 100644 branches/fceux-2.2.2/src/fir/c44100pal.h create mode 100644 branches/fceux-2.2.2/src/fir/c44100pal.scm create mode 100644 branches/fceux-2.2.2/src/fir/c48000ntsc.coef create mode 100644 branches/fceux-2.2.2/src/fir/c48000ntsc.h create mode 100644 branches/fceux-2.2.2/src/fir/c48000ntsc.scm create mode 100644 branches/fceux-2.2.2/src/fir/c48000pal.coef create mode 100644 branches/fceux-2.2.2/src/fir/c48000pal.h create mode 100644 branches/fceux-2.2.2/src/fir/c48000pal.scm create mode 100644 branches/fceux-2.2.2/src/fir/c96000ntsc.coef create mode 100644 branches/fceux-2.2.2/src/fir/c96000ntsc.h create mode 100644 branches/fceux-2.2.2/src/fir/c96000ntsc.scm create mode 100644 branches/fceux-2.2.2/src/fir/c96000pal.coef create mode 100644 branches/fceux-2.2.2/src/fir/c96000pal.h create mode 100644 branches/fceux-2.2.2/src/fir/c96000pal.scm create mode 100644 branches/fceux-2.2.2/src/fir/toh.c create mode 100644 branches/fceux-2.2.2/src/git.h create mode 100644 branches/fceux-2.2.2/src/ines-bad.h create mode 100644 branches/fceux-2.2.2/src/ines-correct.h create mode 100644 branches/fceux-2.2.2/src/ines.cpp create mode 100644 branches/fceux-2.2.2/src/ines.h create mode 100644 branches/fceux-2.2.2/src/input.cpp create mode 100644 branches/fceux-2.2.2/src/input.h create mode 100644 branches/fceux-2.2.2/src/input/SConscript create mode 100644 branches/fceux-2.2.2/src/input/arkanoid.cpp create mode 100644 branches/fceux-2.2.2/src/input/bworld.cpp create mode 100644 branches/fceux-2.2.2/src/input/cursor.cpp create mode 100644 branches/fceux-2.2.2/src/input/fkb.cpp create mode 100644 branches/fceux-2.2.2/src/input/fkb.h create mode 100644 branches/fceux-2.2.2/src/input/ftrainer.cpp create mode 100644 branches/fceux-2.2.2/src/input/hypershot.cpp create mode 100644 branches/fceux-2.2.2/src/input/mahjong.cpp create mode 100644 branches/fceux-2.2.2/src/input/mouse.cpp create mode 100644 branches/fceux-2.2.2/src/input/oekakids.cpp create mode 100644 branches/fceux-2.2.2/src/input/powerpad.cpp create mode 100644 branches/fceux-2.2.2/src/input/quiz.cpp create mode 100644 branches/fceux-2.2.2/src/input/shadow.cpp create mode 100644 branches/fceux-2.2.2/src/input/share.h create mode 100644 branches/fceux-2.2.2/src/input/suborkb.cpp create mode 100644 branches/fceux-2.2.2/src/input/suborkb.h create mode 100644 branches/fceux-2.2.2/src/input/toprider.cpp create mode 100644 branches/fceux-2.2.2/src/input/zapper.cpp create mode 100644 branches/fceux-2.2.2/src/input/zapper.h create mode 100644 branches/fceux-2.2.2/src/lua-engine.cpp create mode 100644 branches/fceux-2.2.2/src/lua/COPYRIGHT create mode 100644 branches/fceux-2.2.2/src/lua/HISTORY create mode 100644 branches/fceux-2.2.2/src/lua/README create mode 100644 branches/fceux-2.2.2/src/lua/SConscript create mode 100644 branches/fceux-2.2.2/src/lua/lua.vcproj create mode 100644 branches/fceux-2.2.2/src/lua/src/Makefile create mode 100644 branches/fceux-2.2.2/src/lua/src/lapi.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lapi.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lauxlib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lauxlib.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lbaselib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lcode.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lcode.h create mode 100644 branches/fceux-2.2.2/src/lua/src/ldblib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ldebug.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ldebug.h create mode 100644 branches/fceux-2.2.2/src/lua/src/ldo.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ldo.h create mode 100644 branches/fceux-2.2.2/src/lua/src/ldump.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lfunc.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lfunc.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lgc.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lgc.h create mode 100644 branches/fceux-2.2.2/src/lua/src/linit.c create mode 100644 branches/fceux-2.2.2/src/lua/src/liolib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/llex.c create mode 100644 branches/fceux-2.2.2/src/lua/src/llex.h create mode 100644 branches/fceux-2.2.2/src/lua/src/llimits.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lmathlib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lmem.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lmem.h create mode 100644 branches/fceux-2.2.2/src/lua/src/loadlib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lobject.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lobject.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lopcodes.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lopcodes.h create mode 100644 branches/fceux-2.2.2/src/lua/src/loslib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lparser.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lparser.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lstate.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lstate.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lstring.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lstring.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lstrlib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ltable.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ltable.h create mode 100644 branches/fceux-2.2.2/src/lua/src/ltablib.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ltm.c create mode 100644 branches/fceux-2.2.2/src/lua/src/ltm.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lua.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lua.h create mode 100644 branches/fceux-2.2.2/src/lua/src/luac.c create mode 100644 branches/fceux-2.2.2/src/lua/src/luaconf.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lualib.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lundump.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lundump.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lvm.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lvm.h create mode 100644 branches/fceux-2.2.2/src/lua/src/lzio.c create mode 100644 branches/fceux-2.2.2/src/lua/src/lzio.h create mode 100644 branches/fceux-2.2.2/src/lua/src/print.c create mode 100644 branches/fceux-2.2.2/src/movie.cpp create mode 100644 branches/fceux-2.2.2/src/movie.h create mode 100644 branches/fceux-2.2.2/src/netplay.cpp create mode 100644 branches/fceux-2.2.2/src/netplay.h create mode 100644 branches/fceux-2.2.2/src/nsf.cpp create mode 100644 branches/fceux-2.2.2/src/nsf.h create mode 100644 branches/fceux-2.2.2/src/oldmovie.cpp create mode 100644 branches/fceux-2.2.2/src/oldmovie.h create mode 100644 branches/fceux-2.2.2/src/ops.inc create mode 100644 branches/fceux-2.2.2/src/palette.cpp create mode 100644 branches/fceux-2.2.2/src/palette.h create mode 100644 branches/fceux-2.2.2/src/palettes/SConscript create mode 100644 branches/fceux-2.2.2/src/palettes/conv.c create mode 100644 branches/fceux-2.2.2/src/palettes/palettes.h create mode 100644 branches/fceux-2.2.2/src/palettes/rp2c04001.h create mode 100644 branches/fceux-2.2.2/src/palettes/rp2c04002.h create mode 100644 branches/fceux-2.2.2/src/palettes/rp2c04003.h create mode 100644 branches/fceux-2.2.2/src/palettes/rp2c05004.h create mode 100644 branches/fceux-2.2.2/src/ppu.cpp create mode 100644 branches/fceux-2.2.2/src/ppu.h create mode 100644 branches/fceux-2.2.2/src/pputile.inc create mode 100644 branches/fceux-2.2.2/src/sound.cpp create mode 100644 branches/fceux-2.2.2/src/sound.h create mode 100644 branches/fceux-2.2.2/src/state.cpp create mode 100644 branches/fceux-2.2.2/src/state.h create mode 100644 branches/fceux-2.2.2/src/types-des.h create mode 100644 branches/fceux-2.2.2/src/types.h create mode 100644 branches/fceux-2.2.2/src/unif.cpp create mode 100644 branches/fceux-2.2.2/src/unif.h create mode 100644 branches/fceux-2.2.2/src/utils/ConvertUTF.c create mode 100644 branches/fceux-2.2.2/src/utils/ConvertUTF.h create mode 100644 branches/fceux-2.2.2/src/utils/SConscript create mode 100644 branches/fceux-2.2.2/src/utils/backward.cpp create mode 100644 branches/fceux-2.2.2/src/utils/backward.hpp create mode 100644 branches/fceux-2.2.2/src/utils/crc32.cpp create mode 100644 branches/fceux-2.2.2/src/utils/crc32.h create mode 100644 branches/fceux-2.2.2/src/utils/endian.cpp create mode 100644 branches/fceux-2.2.2/src/utils/endian.h create mode 100644 branches/fceux-2.2.2/src/utils/general.cpp create mode 100644 branches/fceux-2.2.2/src/utils/general.h create mode 100644 branches/fceux-2.2.2/src/utils/guid.cpp create mode 100644 branches/fceux-2.2.2/src/utils/guid.h create mode 100644 branches/fceux-2.2.2/src/utils/ioapi.cpp create mode 100644 branches/fceux-2.2.2/src/utils/ioapi.h create mode 100644 branches/fceux-2.2.2/src/utils/md5.cpp create mode 100644 branches/fceux-2.2.2/src/utils/md5.h create mode 100644 branches/fceux-2.2.2/src/utils/memory.cpp create mode 100644 branches/fceux-2.2.2/src/utils/memory.h create mode 100644 branches/fceux-2.2.2/src/utils/unzip.cpp create mode 100644 branches/fceux-2.2.2/src/utils/unzip.h create mode 100644 branches/fceux-2.2.2/src/utils/valuearray.h create mode 100644 branches/fceux-2.2.2/src/utils/xstring.cpp create mode 100644 branches/fceux-2.2.2/src/utils/xstring.h create mode 100644 branches/fceux-2.2.2/src/version.h create mode 100644 branches/fceux-2.2.2/src/video.cpp create mode 100644 branches/fceux-2.2.2/src/video.h create mode 100644 branches/fceux-2.2.2/src/vsuni.cpp create mode 100644 branches/fceux-2.2.2/src/vsuni.h create mode 100644 branches/fceux-2.2.2/src/wave.cpp create mode 100644 branches/fceux-2.2.2/src/wave.h create mode 100644 branches/fceux-2.2.2/src/x6502.cpp create mode 100644 branches/fceux-2.2.2/src/x6502.h create mode 100644 branches/fceux-2.2.2/src/x6502abbrev.h create mode 100644 branches/fceux-2.2.2/src/x6502struct.h create mode 100644 branches/fceux-2.2.2/vc/.gitignore create mode 100644 branches/fceux-2.2.2/vc/Help/fceux.hnd create mode 100644 branches/fceux-2.2.2/vc/Help/readme.txt create mode 100644 branches/fceux-2.2.2/vc/Help/taseditor-ru.hnd create mode 100644 branches/fceux-2.2.2/vc/Help/taseditor.hnd create mode 100644 branches/fceux-2.2.2/vc/SubWCRev.bat create mode 100644 branches/fceux-2.2.2/vc/archive.bat create mode 100644 branches/fceux-2.2.2/vc/defaultconfig/MakeDownloadHTML.bat create mode 100644 branches/fceux-2.2.2/vc/defaultconfig/SubWCRev.exe create mode 100644 branches/fceux-2.2.2/vc/defaultconfig/svnrev.h create mode 100644 branches/fceux-2.2.2/vc/defaultconfig/svnrev_template.h create mode 100644 branches/fceux-2.2.2/vc/deploy.bat create mode 100644 branches/fceux-2.2.2/vc/luaperks.lib create mode 100644 branches/fceux-2.2.2/vc/pscp.exe create mode 100644 branches/fceux-2.2.2/vc/upload.bat create mode 100644 branches/fceux-2.2.2/vc/upx.exe create mode 100644 branches/fceux-2.2.2/vc/userconfig/.gitignore create mode 100644 branches/fceux-2.2.2/vc/userconfig/readme.txt create mode 100644 branches/fceux-2.2.2/vc/vc10_fceux.sln create mode 100644 branches/fceux-2.2.2/vc/vc10_fceux.vcxproj create mode 100644 branches/fceux-2.2.2/vc/vc10_fceux.vcxproj.filters create mode 100644 branches/fceux-2.2.2/vc/vc8_fceux.sln create mode 100644 branches/fceux-2.2.2/vc/vc8_fceux.vcproj create mode 100644 branches/fceux-2.2.2/vc/vc9_fceux.sln create mode 100644 branches/fceux-2.2.2/vc/vc9_fceux.vcproj create mode 100644 branches/fceux-2.2.2/vc/zip.exe diff --git a/branches/fceux-2.2.2/Authors b/branches/fceux-2.2.2/Authors new file mode 100644 index 00000000..799599be --- /dev/null +++ b/branches/fceux-2.2.2/Authors @@ -0,0 +1,72 @@ +Authors +======= + +A list of people who have contributed code to FCE Ultra, or have had their code +placed in FCE Ultra by others. + +Pre-2.0 FCE / FCE Ultra Contributors +------------------------------------ +_These authors contributed exclusively to pre-2.0 versions, +but much of their code remains in 2.0 builds_ + +* BERO - bero at geocities.co.jp - Base FCE code. + +* Xodnizel - Most of the base FCE Ultra code + +* Aaron Oneal - http://www.morphgear.com - Many changes to compile with MSVC and first frame skipping code + +* Joe Nahmias - Man pages + +* Paul Kuliniewicz - kuliniew at purdue.edu - Various code for the original SDL port. + +* Quietust - quietust at ircN dot org - VRC7 "translation" code. + +* Ben Parnell - Windows debugging tools + +* Parasyte & bbitmaster - Enhanced Windows debugging tools + +* blip & nitsuja - Rerecording support + +FCEUX >= 2.0 Contributors +------------------------- +* SP - document thyself (sf:rheiny) - Enhanced Windows debugging tools + +* zeromus - mgambrell at gmail dot com (sf:zeromus) - Core architecture refactoring and merging - Windows driver maintenance + +* adelikat - document thyself (sf:adelikat) - UI cleanup, project management, Win32 features & maintenance, TAS tools, documentation + +* CaH4e3 - CaH4e3 at mail dot ru (sf: cah4e3) - Mappers + +* Luke Gustafson - (sf:???) - Windows TAS and movie recording enhancements + +* qfox - (sf:qfox) - lua scripting fucntions, luabot, basicbot (no longer implemented), various lua scripts + +* _mz - document thyself (mauzus) - Windows driver maintenance and cleanup + +* UncombedCoconut - UncombedCoconut at gmail dot com (sf:jeblanchard) - Build system and cross-compilation support - Driver maintenance and refactoring + +* DWEdit - Debugger additions + +* AnS - ansstuff at yandex dot ru (sf:ansstuff) - Win32 features & maintenance, TAS Editor, debugging tools, documentation + +FCEUX (>=2.0) Linux/SDL Developers +---------------------------------- +_These guys concentrated on keeping fceux the premiere linux/portable nes emu._ + +* Lukas Sabota - ltsmooth42 at gmail dot com (sf:punkrockguy318) - Head FceuX-SDL developer - GTK GUI, complete overhaul of SDL port, build scripts; maintainence; docs + +* Shinydoofy - sf:shinydoofy - SDL maintenence + +* Soules - gimmedonutnow at gmail dot com (sf:gimmedonutnow) - Linux SDL driver maintenance + +* radsaq - radsaq at gmail dot com (sf:radsaq) - Build system, testing, and random cleanups + +* Bryan Cain - sf:plombo - Patch to embed SDL in the GTK+ GUI, miscellaneous other SDL and GTK+ contributions + +Included components: +-------------------- +* Mitsutaka Okazaki - YM2413 emulator. + +* Andrea Mazzoleni - Scale2x/Scale3x scalers + +* Gilles Vollant - unzip.c PKZIP fileio diff --git a/branches/fceux-2.2.2/COPYING b/branches/fceux-2.2.2/COPYING new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/branches/fceux-2.2.2/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/branches/fceux-2.2.2/INSTALL b/branches/fceux-2.2.2/INSTALL new file mode 100644 index 00000000..f1f2a562 --- /dev/null +++ b/branches/fceux-2.2.2/INSTALL @@ -0,0 +1,7 @@ +To compile and install FCEUX for SDL, follow the instructions in the README-SDL.md file. + +Users of Microsoft Visual Studio can use the solution files within the vc directory. +These solution files will compile FCEUX and some included libraries for full functionality. + +CMake has been depreciated in favor of scons. However, if you wish to use it you can find the old cmake build files in the attic. + diff --git a/branches/fceux-2.2.2/NewPPUtests.txt b/branches/fceux-2.2.2/NewPPUtests.txt new file mode 100644 index 00000000..6c74c119 --- /dev/null +++ b/branches/fceux-2.2.2/NewPPUtests.txt @@ -0,0 +1,69 @@ +NewPPU tests + +Bad +Nightshade (U) - flickering + +Good +3-D Battles of World Runner, The (U) +8 Eyes +10 Yard fight +Advanced Dungeons and Dragons - Pool of Radiance +Adventures of Bayou Billy +Adventures of Lolo 1 +Adventures of Lolo 2 +Advenutres of Lolo 3 +Akira +Akumajou secial - Boku Dracula-kun +Archon +Astyanax +Barbie +Bart vs the Space Mutants +Baseball +Batman - Return of the Joker +Battletoads +Battletoads & Double Dragon +Bee 52 +Bible Adventures +Castlevania +Castlevania II: Simon's Quest +Castlevania III: Dracula's Curse +Championship Pool +Chessmaster +Circus Charlie +Contra (U) +Contra (J) +Dragon Warrior +Dragon Warrior III +Dragon Warrior IV +Double Dragon +Double Dragon 2 +Double Dragon 3 +Donky Kong Classics +Doki Doki panic +Dragon's Lair - [FIXED] Black screen for level 1 (music plays) +Duck Tales +Duck Tales +Earthworm Jim 2 +Excitebike +Eggerland +Final Fantasy +Friday the 13th +Gauntlet +Gauntlet II +Legend of Zelda +Metroid +Mike Tyson's Punch-out!!/Punch-out!! +Power Blade +RBI Baseball +Rygar +Super C +Super Mario Bros 2 JPN +Super Mario Bros 2 USA +Super Mario Bros 3 +Tecmobowl +Tecmo NBA Basketball (U) +Tecmo Super Bowl (U) [!] - [FIXED] Intro screen messed up, menus out of whack, Team selection screen bad, pre game screen, field is messed up. +TMNT +Transformers +Zanac +Zelda II: The Adventure of Link diff --git a/branches/fceux-2.2.2/README-SDL b/branches/fceux-2.2.2/README-SDL new file mode 100644 index 00000000..92dbac5b --- /dev/null +++ b/branches/fceux-2.2.2/README-SDL @@ -0,0 +1,116 @@ +FCEUX SDL 2.2.1 SDL README +========================== +By Lukas Sabota (sf: punkrockguy318) + +http://www.fceux.com + +Last Modified: March 10, 2013 + +Table of Contents +----------------- + +1. Requirements +2. Installation +3. Compile-time options +4. GUI +5. LUA Scripting +5. FAQ +6. Contact + +1 - Requirements +---------------- +* libsdl1.2 - It is strongly recommended that you upgrade to the latest + version of sdl (1.2.15 at the time of writing). +* scons - Required to build fceux. +* libgtk2.0 (optional) - version >= 2.24 recommended +* libgtk3.0 (optional) - this compiles as of fceux 2.2.0 +* liblua5.1 (optional) +* minizip (optional) - you may chose to use the version of minizip on your system by enabling SYSTEM_MINIZIP in the SConstruct +* c++ compiler -- you may use g++ from gcc or clang++ from llvm. + +2 - Installation +---------------- +Fceux can be compiled and built using the scons build system. To compile, run: + + scons + +After a sucessful compilation, the fceux binary will be generated to +./src/fceux . You can install fceux to your system with the following command: + + scons install + +You can optionally define a prefix: + + scons --prefix=/usr/local install + +You can choose to install the lua scripts (located in output/luaScripts) to a directory of your choosing: + + cp -R output/luaScripts /usr/local/some/directory/that/i/will/find/later + +If you would like to clean the temporary scons files to perform a 'make clean' like function, you can do the following: + + scons -c && rm -rf .scon* + +3 - Compile-time options +------------------------ +You can enable and disable certain features of fceux at build time. +To edit these options, edit the "BoolOptions" following the "opts.AddVariables" method +at the head of the "SConstruct" file in this source directory. The +default options will be fine for most users, but power users may want to +tweak some of these options. + +4 - GUI +------- +You can enable the GTK GUI by setting GTK to 1 in the SConstruct build file. +GfceuX is deprecatiated in favor of the new GTK GUI. You can disable the GTK GUI at +run-time by passing the --nogui option, or disable it at build-time by setting +GTK to 0 in the SConstruct file. If you prefer GTK3 to GTK2, you can set the +GTK3 BoolVariable to 1 in the SConstruct. + +5 - LUA Scripting +----------------- +FCEUX provides a LUA 5.1 engine that allows for in-game scripting capabilities. LUA can be enabled or disabled at build time by adjusting the "LUA" BoolVariable in the SConstruct file. + +A collection of LUA scripts are provided with the source distribuition in the output directory: + + $source_directory/output/luaScripts + +You should be able to run most of the scripts in this directory out of the box. However, some of the the lua scripts require functionality from the "auxlib.lua" library. This file can be copied from "./bin/auxlib.lua" or "./src/auxlib.lua". You will need to place this file in the LUA library search path if a script bombs out looking for auxlib.lua. If the script bombs out, the console output will let you know what the search path are (/usr/local/lib/lua/5.1/ on my particular system). You can simply copy the auxlib to a preferred location to utilize the functions in the auxiliary lua library. + +In addition, some of the lua scripts require functionality from the "iup" GUI library. You can obtain binaries and source for "iup" upstream (http://www.tecgraf.puc-rio.br/iup/), but I would recommend obtaining packages from your Linux distribution if you are able, as it can be difficult to compile or get the binaries working correctly on a given system. + +You will need to add the location that the libiup*.so files to the LUA_CPATH. This can be done with the following command (please note that the location where iup is installed with vary based on how you installed iup): + + export LUA_CPATH="/path/to/iup/lib/lib?51.so;" + +For example, if libiuplua51.so is located in '/usr/lib', you can run the following command before executing fceux to place the library in the search path: + + export LUA_CPATH="/usr/lib/lib?51.so;" + +Finally, if any scripts complaints about "attempt to index global 'iup' (a nil value)", this means that "iup" needs to be explicitly loaded into the script. You can add the following line to the head of script to manually load "iup": + + require("iuplua") + +The latest version of iup (3.5 at the time of writing) is recomended. + +6 - FAQ +------- + +* Q. Im having issues with my sound! +* A. First of all, for the best sound quality be sure you are using SDL 1.2.14 or later. Versions 1.2.13 and earlier are known to have problems with fceux! Next, try different SDL audio drivers to see if this makes any difference. You can do this by using this command before running fceux: + + export SDL_AUDIODRIVER=driver + +where driver is either: 'pulse' for pulseaudio;' alsa' for ALSA; 'dsp' for OSS; 'esd' for ESD; see SDL documentation for details (http://www.libsdl.org/docs/html/sdlenvvars.html) + +There are sound options that you can tweak at runtime through command line switches: + +* -soundq x internal sound quality hack value (0 off) +* -soundrate x sound rate (sane values: 28000 48000 +* -soundbuffersize x (in ms) sane values (30, 50, 100, 120) + +Running fceux through esddsp is known to fix some audio issues with pulseaudio on some older Ubuntu versions. + +7 - Contact +----------- +If you have an issue with fceux, report it in the sourceforge bug tracker (see fceux.com). If you would like to contact the author of this readme personally, e-mail LTsmooth42 gmail com. You can also check us out at #fceu on irc.freenode.net. diff --git a/branches/fceux-2.2.2/SConstruct b/branches/fceux-2.2.2/SConstruct new file mode 100644 index 00000000..cb513e33 --- /dev/null +++ b/branches/fceux-2.2.2/SConstruct @@ -0,0 +1,241 @@ +# +# SConstruct - build script for the SDL port of fceux +# +# You can adjust the BoolVariables below to include/exclude features +# at compile-time. You may also use arguments to specify the parameters. +# ie: scons RELEASE=1 GTK3=1 +# +# Use "scons" to compile and "scons install" to install. +# + +import os +import sys +import platform + +opts = Variables(None, ARGUMENTS) +opts.AddVariables( + BoolVariable('DEBUG', 'Build with debugging symbols', 1), + BoolVariable('RELEASE', 'Set to 1 to build for release', 0), + BoolVariable('FRAMESKIP', 'Enable frameskipping', 1), + BoolVariable('OPENGL', 'Enable OpenGL support', 1), + BoolVariable('LUA', 'Enable Lua support', 1), + BoolVariable('GTK', 'Enable GTK2 GUI (SDL only)', 1), + BoolVariable('GTK3', 'Enable GTK3 GUI (SDL only)', 0), + BoolVariable('NEWPPU', 'Enable new PPU core', 1), + BoolVariable('CREATE_AVI', 'Enable avi creation support (SDL only)', 1), + BoolVariable('LOGO', 'Enable a logoscreen when creating avis (SDL only)', 1), + BoolVariable('SYSTEM_LUA','Use system lua instead of static lua provided with fceux', 1), + BoolVariable('SYSTEM_MINIZIP', 'Use system minizip instead of static minizip provided with fceux', 0), + BoolVariable('LSB_FIRST', 'Least signficant byte first (non-PPC)', 1), + BoolVariable('CLANG', 'Compile with llvm-clang instead of gcc', 0), + BoolVariable('SDL2', 'Compile using SDL2 instead of SDL 1.2 (experimental/non-functional)', 0) +) +AddOption('--prefix', dest='prefix', type='string', nargs=1, action='store', metavar='DIR', help='installation prefix') + +prefix = GetOption('prefix') +env = Environment(options = opts) + +if env['RELEASE']: + env.Append(CPPDEFINES=["PUBLIC_RELEASE"]) + env['DEBUG'] = 0 + +# LSB_FIRST must be off for PPC to compile +if platform.system == "ppc": + env['LSB_FIRST'] = 0 + +# Default compiler flags: +env.Append(CCFLAGS = ['-Wall', '-Wno-write-strings', '-Wno-sign-compare']) + +if os.environ.has_key('PLATFORM'): + env.Replace(PLATFORM = os.environ['PLATFORM']) +if os.environ.has_key('CC'): + env.Replace(CC = os.environ['CC']) +if os.environ.has_key('CXX'): + env.Replace(CXX = os.environ['CXX']) +if os.environ.has_key('WINDRES'): + env.Replace(WINDRES = os.environ['WINDRES']) +if os.environ.has_key('CFLAGS'): + env.Append(CCFLAGS = os.environ['CFLAGS'].split()) +if os.environ.has_key('CXXFLAGS'): + env.Append(CXXFLAGS = os.environ['CXXFLAGS'].split()) +if os.environ.has_key('CPPFLAGS'): + env.Append(CPPFLAGS = os.environ['CPPFLAGS'].split()) +if os.environ.has_key('LDFLAGS'): + env.Append(LINKFLAGS = os.environ['LDFLAGS'].split()) + +print "platform: ", env['PLATFORM'] + +# compile with clang +if env['CLANG']: + env.Replace(CC='clang') + env.Replace(CXX='clang++') + +# special flags for cygwin +# we have to do this here so that the function and lib checks will go through mingw +if env['PLATFORM'] == 'cygwin': + env.Append(CCFLAGS = " -mno-cygwin") + env.Append(LINKFLAGS = " -mno-cygwin") + env['LIBS'] = ['wsock32']; + +if env['PLATFORM'] == 'win32': + env.Append(CPPPATH = [".", "drivers/win/", "drivers/common/", "drivers/", "drivers/win/zlib", "drivers/win/directx", "drivers/win/lua/include"]) + env.Append(CPPDEFINES = ["PSS_STYLE=2", "WIN32", "_USE_SHARED_MEMORY_", "NETWORK", "FCEUDEF_DEBUGGER", "NOMINMAX", "NEED_MINGW_HACKS", "_WIN32_IE=0x0600"]) + env.Append(LIBS = ["rpcrt4", "comctl32", "vfw32", "winmm", "ws2_32", "comdlg32", "ole32", "gdi32", "htmlhelp"]) +else: + conf = Configure(env) + # If libdw is available, compile in backward-cpp support + if conf.CheckLib('dw'): + conf.env.Append(CCFLAGS = "-DBACKWARD_HAS_DW=1") + conf.env.Append(LINKFLAGS = "-ldw") + if conf.CheckFunc('asprintf'): + conf.env.Append(CCFLAGS = "-DHAVE_ASPRINTF") + if env['SYSTEM_MINIZIP']: + assert conf.CheckLibWithHeader('minizip', 'minizip/unzip.h', 'C', 'unzOpen;', 1), "please install: libminizip" + assert conf.CheckLibWithHeader('z', 'zlib.h', 'c', 'inflate;', 1), "please install: zlib" + env.Append(CPPDEFINES=["_SYSTEM_MINIZIP"]) + else: + assert conf.CheckLibWithHeader('z', 'zlib.h', 'c', 'inflate;', 1), "please install: zlib" + if env['SDL2']: + if not conf.CheckLib('SDL2'): + print 'Did not find libSDL2 or SDL2.lib, exiting!' + Exit(1) + env.Append(CPPDEFINES=["_SDL2"]) + env.ParseConfig('pkg-config sdl2 --cflags --libs') + else: + if not conf.CheckLib('SDL'): + print 'Did not find libSDL or SDL.lib, exiting!' + Exit(1) + env.ParseConfig('sdl-config --cflags --libs') + if env['GTK']: + if not conf.CheckLib('gtk-x11-2.0'): + print 'Could not find libgtk-2.0, exiting!' + Exit(1) + # Add compiler and linker flags from pkg-config + config_string = 'pkg-config --cflags --libs gtk+-2.0' + if env['PLATFORM'] == 'darwin': + config_string = 'PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/ ' + config_string + env.ParseConfig(config_string) + env.Append(CPPDEFINES=["_GTK2"]) + env.Append(CCFLAGS = ["-D_GTK"]) + if env['GTK3']: + # Add compiler and linker flags from pkg-config + config_string = 'pkg-config --cflags --libs gtk+-3.0' + if env['PLATFORM'] == 'darwin': + config_string = 'PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/ ' + config_string + env.ParseConfig(config_string) + env.Append(CPPDEFINES=["_GTK3"]) + env.Append(CCFLAGS = ["-D_GTK"]) + + ### Lua platform defines + ### Applies to all files even though only lua needs it, but should be ok + if env['LUA']: + env.Append(CPPDEFINES=["_S9XLUA_H"]) + if env['PLATFORM'] == 'darwin': + # Define LUA_USE_MACOSX otherwise we can't bind external libs from lua + env.Append(CCFLAGS = ["-DLUA_USE_MACOSX"]) + if env['PLATFORM'] == 'posix': + # If we're POSIX, we use LUA_USE_LINUX since that combines usual lua posix defines with dlfcn calls for dynamic library loading. + # Should work on any *nix + env.Append(CCFLAGS = ["-DLUA_USE_LINUX"]) + lua_available = False + if conf.CheckLib('lua5.1'): + env.Append(LINKFLAGS = ["-ldl", "-llua5.1"]) + env.Append(CCFLAGS = ["-I/usr/include/lua5.1"]) + lua_available = True + elif conf.CheckLib('lua'): + env.Append(LINKFLAGS = ["-ldl", "-llua"]) + env.Append(CCFLAGS = ["-I/usr/include/lua"]) + lua_available = True + if lua_available == False: + print 'Could not find liblua, exiting!' + Exit(1) + # "--as-needed" no longer available on OSX (probably BSD as well? TODO: test) + if env['PLATFORM'] != 'darwin': + env.Append(LINKFLAGS=['-Wl,--as-needed']) + + ### Search for gd if we're not in Windows + if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI'] and env['LOGO']: + gd = conf.CheckLib('gd', autoadd=1) + if gd == 0: + env['LOGO'] = 0 + print 'Did not find libgd, you won\'t be able to create a logo screen for your avis.' + + if env['OPENGL'] and conf.CheckLibWithHeader('GL', 'GL/gl.h', 'c', autoadd=1): + conf.env.Append(CCFLAGS = "-DOPENGL") + conf.env.Append(CPPDEFINES = ['PSS_STYLE=1']) + + env = conf.Finish() + +if sys.byteorder == 'little' or env['PLATFORM'] == 'win32': + env.Append(CPPDEFINES = ['LSB_FIRST']) + +if env['FRAMESKIP']: + env.Append(CPPDEFINES = ['FRAMESKIP']) + +print "base CPPDEFINES:",env['CPPDEFINES'] +print "base CCFLAGS:",env['CCFLAGS'] + +if env['DEBUG']: + env.Append(CPPDEFINES=["_DEBUG"], CCFLAGS = ['-g', '-O0']) +else: + env.Append(CCFLAGS = ['-O2']) + +if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI']: + env.Append(CPPDEFINES=["CREATE_AVI"]) +else: + env['CREATE_AVI']=0; + +Export('env') +fceux = SConscript('src/SConscript') +env.Program(target="fceux-net-server", source=["fceux-server/server.cpp", "fceux-server/md5.cpp", "fceux-server/throttle.cpp"]) + +# Installation rules +if prefix == None: + prefix = "/usr/local" + +exe_suffix = '' +if env['PLATFORM'] == 'win32': + exe_suffix = '.exe' + +fceux_src = 'src/fceux' + exe_suffix +fceux_dst = 'bin/fceux' + exe_suffix + +fceux_net_server_src = 'fceux-net-server' + exe_suffix +fceux_net_server_dst = 'bin/fceux-net-server' + exe_suffix + +auxlib_src = 'src/auxlib.lua' +auxlib_dst = 'bin/auxlib.lua' +auxlib_inst_dst = prefix + '/share/fceux/auxlib.lua' + +fceux_h_src = 'output/fceux.chm' +fceux_h_dst = 'bin/fceux.chm' + +env.Command(fceux_h_dst, fceux_h_src, [Copy(fceux_h_dst, fceux_h_src)]) +env.Command(fceux_dst, fceux_src, [Copy(fceux_dst, fceux_src)]) +env.Command(fceux_net_server_dst, fceux_net_server_src, [Copy(fceux_net_server_dst, fceux_net_server_src)]) +env.Command(auxlib_dst, auxlib_src, [Copy(auxlib_dst, auxlib_src)]) + +man_src = 'documentation/fceux.6' +man_net_src = 'documentation/fceux-net-server.6' +man_dst = prefix + '/share/man/man6/fceux.6' +man_net_dst = prefix + '/share/man/man6/fceux-net-server.6' + +share_src = 'output/' +share_dst = prefix + '/share/fceux/' + +image_src = 'fceux.png' +image_dst = prefix + '/share/pixmaps' + +desktop_src = 'fceux.desktop' +desktop_dst = prefix + '/share/applications/' + +env.Install(prefix + "/bin/", fceux) +env.Install(prefix + "/bin/", "fceux-net-server") +# TODO: Where to put auxlib on "scons install?" +env.Alias('install', env.Command(auxlib_inst_dst, auxlib_src, [Copy(auxlib_inst_dst, auxlib_src)])) +env.Alias('install', env.Command(share_dst, share_src, [Copy(share_dst, share_src)])) +env.Alias('install', env.Command(man_dst, man_src, [Copy(man_dst, man_src)])) +env.Alias('install', env.Command(man_net_dst, man_net_src, [Copy(man_net_dst, man_net_src)])) +env.Alias('install', env.Command(image_dst, image_src, [Copy(image_dst, image_src)])) +env.Alias('install', env.Command(desktop_dst, desktop_src, [Copy(desktop_dst, desktop_src)])) +env.Alias('install', (prefix + "/bin/")) diff --git a/branches/fceux-2.2.2/STYLE-GUIDELINES-SDL b/branches/fceux-2.2.2/STYLE-GUIDELINES-SDL new file mode 100644 index 00000000..0ea3db6f --- /dev/null +++ b/branches/fceux-2.2.2/STYLE-GUIDELINES-SDL @@ -0,0 +1,14 @@ +FceuX-SDL Style Guidelines +========================= +Background +---------- +While having style guidelines specific to a directory in a sourcetree is slightly riddiculous, fceuX has a unique elaborate history of the code. I (prg318) have ressurected the majority of the SDL port code and tried to keep some aspects of the style consistant (although not many aspects were that consistent to begin with due to the amount of different people who have contributed to this codebase). Much of the SDL code is compliant to these guidelines so please use this guidelines when going forth and making contributions in src/drivers/sdl. + +Tabs +---- +Hard tabs only! Please! src/drivers/sdl/* entirely consists of hard tabbed code. Please continue to use this convention. Consult the documentation of your text editor documentation for instructions on how to this with your editor. + +Return Statements +----------------- +Please use the "return 0;" style return statements instead of the "return(0);" style return statements. + diff --git a/branches/fceux-2.2.2/TODO-SDL b/branches/fceux-2.2.2/TODO-SDL new file mode 100644 index 00000000..95defb4b --- /dev/null +++ b/branches/fceux-2.2.2/TODO-SDL @@ -0,0 +1,47 @@ +Priorities +========== + * SDL 2.0 RC is released - SDL2.0 compatibility is a goal + * Backwards-cpp still has an issue with clang++; look into this + * Users are reporting crashing issues with hotkey dialog (probably because its a mess!). A huge chunk of the hotkey code should be rewritten (GUI and hotkey structs - or lack there-of) + * GTK File menu quit element has "CTRL-Q" accelerator. This causes confusion with there being another SDL Hotkey for quit. This should be addressed. + * Quit was mapped to '0' to prevent users from accidently quitting. Perhaps a default quit combo could be used. + +Features +======== + * SDL.Vsync + * lets wait on this -- theres no simple way to use the OS default in SDL unless we just dont touch it, which might be the best thing to do here. + +GTK +=== + * Better on-the-fly video resizing with window resize / video config + * Smarter video config (disable widgets that are not used when openGL is enabled) + * Options to investigate: + * bpp + * scanlines + * GUI Cheat editor + +SDL 2.0 +======= + * segfaults when opening a second game + * segfaults on fullscreen entry + * has not been tested in a while + +BUGS +==== + * F1 from terminal-less gui fceux process hangs fceux (since input is required from console in cheat editor) + +OS X +==== + * Single window mode does not work (the XWINDOWID hack does not work in Apples X11 server, so this may never get fixed). + * It is possible to use GTK to build native OS X menus: http://developer.gnome.org/gtk3/3.4/GtkApplication.html . It would be awesome to do this and hide the main GTK window if the top bar is available + * Zapper input is taken from GTK window instead of X11 window (a workaround could be implemented to resolve with with some #ifdef APPLE etc) + * Not an "official" target, but testing should be done before release on OS X + * DMG Static binary download for Intel OS X + * Include needful libaries + * Adjust scons to produce static binary/libraries with an option + * http://www.scons.org/wiki/StaticallyLink + +DOCS +==== + * Be sure to include details about new scons features for package maintainers so that the manpage, luascripts, and auxlib will be included in future packages + * Docs REALLY need a cleanup/rewrite diff --git a/branches/fceux-2.2.2/attic/.gitignore b/branches/fceux-2.2.2/attic/.gitignore new file mode 100644 index 00000000..674deb69 --- /dev/null +++ b/branches/fceux-2.2.2/attic/.gitignore @@ -0,0 +1,17 @@ +# A simulation of Subversion default ignores, generated by reposurgeon. +*.o +*.lo +*.la +*.al +*.libs +*.so +*.so.[0-9]* +*.a +*.pyc +*.pyo +*.rej +*~ +*.#* +.*.swp +.DS_store +# Simulated Subversion default ignores end here diff --git a/branches/fceux-2.2.2/attic/BUGS b/branches/fceux-2.2.2/attic/BUGS new file mode 100644 index 00000000..cd938cf8 --- /dev/null +++ b/branches/fceux-2.2.2/attic/BUGS @@ -0,0 +1,12 @@ +BUILD SYSTEM BUGS: +Date - Person - Details + + + + +CLOSED * July 30, 2006 - Luke - I'm getting build errors about: +sh: illegal option -l +Started happening when the build system was edited to be more robust. +I'll check it out when i get the chance, or soules if you could take a look at it, that would be grand. +- July 31, 2006 - Luke - checked out to latest revision, all is well. + diff --git a/branches/fceux-2.2.2/attic/ChangeLog.older b/branches/fceux-2.2.2/attic/ChangeLog.older new file mode 100644 index 00000000..027420b3 --- /dev/null +++ b/branches/fceux-2.2.2/attic/ChangeLog.older @@ -0,0 +1,2183 @@ +0.98.12: + + Win32: Fixed the behavior of the sound logging function. + + Fixed a bug that was causing 2xscale/3xscale to be broken + when clipping the leftmost and rightmost 8 columns. + + Added an iNES header correction entry for JustBreed. + + Modified the MMC5 "ELROM" board emulation to not emulate WRAM. + + Corrected various pieces of code that were causing compiler warnings. + + Win32: Scaling settings(x, y, stretch to fill screen) are now respected while + using a special scaler in full screen mode, though if x or y scale is + less than what is needed for a particular scaler, it will be + adjusted. + + Win32: The window will be reblitted when it becomes invalidated while + a game is loaded(such as when you're resizing the window). + + When the PPU is in a "dead" state after starting up, the graphics + buffer is now cleared. Previously, particularly in the Windows port, when + a game was closed, and a new game was loaded, the last image from + the previous game would be displayed for a short time. + + Win32: Blit skipping will now occur when sound is disabled and FCE Ultra is + running behind the desired frame rate. + + Win32: Blit-skipping behavior can now be configured to some extent in the "Timing" configuration + window. + + Win32: Added a "Recent Directories" submenu to the "File" menu. + + Removed some debugging code that shouldn't have been enabled in 0.98.11. + +0.98.11: + + Win32: Special scalers are now also supported in windowed mode. For Scale2x/Scale3x, + the fastest "desktop" bit depth is 16bpp. For hq2x/hq3x, it is 32bpp. + + The shared video blitting code(drivers/common/vidblit.c) can now blit using Scale2x + and Scale3x to any target bit depth(8bpp, 16bpp, 24bpp, and 32bpp) instead of just + 8bpp, as it was before. + HQ2x and HQ3x can now blit to 16bpp, 24bpp(untested), and 32bpp. The 16bpp and + 24bpp targets are done doing post-processing conversion, after HQ2x/HQ3x, which + really does hurt speed. + + Changed a few names in the credits section of the documentation to their + aliases. Names you didn't get to pick to have are so troublesome. :b + I also made various fixes/updates to the documentation. + + Updated the FAQ with some information regard video mode bit depths and speed. + + SDL: Disabled the fast-forward-key speed-limiting code. I thought I had + done this before... + + Fixed a major bug in the movie recording code, and added some code to automatically detect + and fix playback of broken movies from earlier versions. + + Did a little swapping thing with mapper 90 and 209. I moved back Mortal Kombat 3 + to mapper 90, and moved Shin Samurai Spirits 2 to mapper 209. Sorry for any confusion. + Mapper 90 should be considered as having the fancy nametable select mode disabled, with + mapper 209 having it enabled. + + Added support for mapper 160, which turns out to be the same hardware as mapper + 90. Joy. + + Improved mapper 90 emulation. This mapper really needs low-level + emulation for IRQs to work right, though. :/ + + Win32: Fixed the "hide left/right 8 video columns" feature. + + Since FCE Ultra is ending(or has already exceeded? :b) its actively-updated life, + I've gone ahead and added per-game hacks for "Kick Master" and the PAL version + of "Star Wars". See the documentation for more details. + + Minor optimizations to the high-quality sound emulation code. The FIR filter + code is the bottleneck, though, so these changes won't have much of an effect + on overall speed. + + Altered MMC3 IRQ emulation(and the hooks in ppu.c for it). + + Fixed a rather major typo in the VRC7-emulation code. + +0.98.10: + + Reimplemented network play. It now requires a standalone network play server, which + will be released as a later time. For fun, "starmen.net" is running this server, + which is publicly accessible. + I also made various code fixes/improvements to allow for network play, particularly + with the command handling code. + + Reworked much of the VS Unisystem emulation code, partially based on information from + MAME. The following games are now supported: + + Battle City + Castlevania + Clu Clu Land + Dr. Mario + Duck Hunt + Excitebike + Excitebike (Japanese) + Freedom Force + Goonies, The + Gradius + Gumshoe + Hogan's Alley + Ice Climber + Ladies Golf + Mach Rider + Mach Rider (Japanese) + Mighty Bomb Jack (Japanese) + Ninja Jajamaru Kun (Japanese) + Pinball + Pinball (Japanese) + Platoon + RBI Baseball + Slalom + Soccer + Star Luster + Stroke and Match Golf + Stroke and Match Golf - Ladies + Stroke and Match Golf (Japanese) + Super Mario Bros. + Super Sky Kid + Super Xevious + Tetris + TKO Boxing + Top Gun + + Win32-native: Fixed a bug in the debugger's breakpoint list that appeared when + one tried to delete a breakpoint(the control accidentally had auto-sort enabled, + causing a discrepancy between what was displayed and what was contained in internal + data structures). + + The current disk image XOR original disk image is now stored in save states. This + should greatly increase compressability(important for network play), and make + it a little more legal to distribute such save states now. + + Modified the save state format to allow for more precise and larger version numbers. + + Various minor code changes. + + Fixed initialization of the FCEUGameInfo structure, which previously led + to problems with sound output on the SexyAL-using ports(Linux). + + Apparently I added support for mapper 255 a while back. Documentation updated. + + Added iNES header correction information for Armored Scrum Object and Alpha Mission. + + Merged banksw.h into ines.c, fixed some of its prototypes in ines.h. + +0.98.9: + + Win32-native: Fixed the speed throttling used when sound is disabled. In previous + 0.98.x Win32-native releases, emulation was running at 1/2 the speed it should + have been when sound was disabled. + + Win32-native: Moved settings in the "Miscellaneous" configuration window + to where they should have been in the first place, and added "GUI" and "Timing" + configuration windows to accommodate some. + + Win32-native: Fixed the handling of the "Scroll Lock" key used to disable and + enable Family BASIC Keyboard input. + + Updated documentation to handle some slight differences in the Win32-native + port("Win32-native" is what the Win32 port using native APIs, as opposed to something + like GTK+ and SDL, will be referred to in documentation now). I also made + some other minor wording adjustments to the documentation. + + Added an iNES header correction for Dragonball. + +0.98.8: + + Fixed a typo in sound.c that caused only part of the sound registers + to be saved in save states. + + Win32: Switched over to the DirectDraw7 interface, from DirectDraw4's. + The surface Flip() method will now block, which results in somewhat + smoother animation/scrolling, especially when combined with the + auto blit-skip implemented in 0.98.6 when sound is enabled. + + Win32: Undid a change made in the last release that limited the + speed of fast-forwarding when using the tilde key. I really do + need to implement some sort of unified timing/blit skip system... + + Win32: Added an option, disabled by default, to ask for confirmation + before exiting FCE Ultra. + + Win32: Added an option, enabled by default, to disable the system + screen saver while a game is loaded. + + Win32: Added a new video synchronization mode, a "lazy" wait for + vblank/vertical retrace. It calls Sleep(0) in its wait loop. This + still uses all available cpu cycles, but it is much more friendly + to other processes than the old-style wait for vblank. + + Win32: Added support for joystick POV hats. + +0.98.7: + + Fixed a bug in the debugger's disassembler when disassembling + opcode 0xBC. + + Fixed the behavior of the right mouse button with zapper emulation, to + correspond with what it is documented as doing. + + Win32: Added proper support for maximizing the window. + + Win32: Rewrote most of the input and input configuration code. + + Win32: Changed the configurable aspect ratio to something sensical, the current + display's pixel aspect ratio, default of 1:1(square pixels). + + Win32: Made the default full-screen video mode the custom video mode. I should have + done this a long time ago to make custom video mode configuration more straighforward + for users... + + Added some JACK audio code to be used by the SDL build. I'll test it and complete + it later. + +0.98.6: Made several code modifications to work with older versions of gcc. + + Fixed more header file network play #ifdef-age. + + Fixed a typo in cart.h. + + Fixed some funky code in FCEU_memmove(). + + Fixed some source code causing compiler warnings. + + Fixed SexyAL's format conversion code to not rely on deprecated casting semantics. + + Readded the native Win32 code, and made many improvements. The major thing + that needs to be done now with it is to rewrite the input handling code and input + configuration code. + +0.98.5: + Added LL to the 64-bit integer constants in ines.c + + Fixed OpenGL support under Mac OS X. + + Added the ability to hide background and/or sprites with the F4 key. + +0.98.4: + Moved NETWORK #ifdef's to netplay.c to simplify things. + + Fixed gzip file loading code(I think). I'm still a bit unsure about the semantics + of dup() and close(), though. + + Corrected FDS code to try loading the FDS image before loading the BIOS. + + Readded "native" SDL sound code, used for Mac OS X(and maybe BeOS). + +0.98.3: + Removed the wxWindows GUI code. GTK+ 2 code will take its place, + once it is ready. + + Added reset and power commands to the movie format. More commands(such as insert + disk, eject disk, flip dip switch, etc.) will be added simultaneously as work + on network play continues. + + Modified SexyAL OSS code to not adjust the number of fragments to a power of 2. + It works fine on my card, allowing finer-grained buffer size control, + but I'm not sure it will work with all chips. + + Fixed parsing of the "-specialfs" command-line argument. + + Added the hq3x scaler. + + Updated to the latest Scale2x code. I also added the Scale3x scaler. + + Changed the keyboard assignments for toggling full screen to "Alt" + "Enter". + + FCEUI_SaveState() and FCEUI_LoadState() changed. Porters should read + driver.h. + + Miscellaneous changes to accommodate new network play plan. It's not close + to being finished. + + Altered RTI emulation. In Paris Dakar Rally's NMI handler, it does "CLI ; RTI". + Previously, FCE Ultra would generate an interrupt right after RTI occured, due to the + presumed latency that RTI had with the I flag. I changed it so there is no latency, so + no interrupt will occur in this case(interrupts kill this game). The interrupt source + is the "frame IRQ", which it never disables, if anyone cares. + This change does break the "Stars SE" demo, though. Hmm. + + "FCEUGameInfo" is now a pointer, rather than just a statically-allocated structure. + This may cause some null-dereferencing-related crashes, but it should help keep + code a little cleaner(maybe?). + + Played around with the FDS FM code some more. It's still not right. Bah. + + Hacked in support for entering Datach/Barcode World barcodes without a GUI, using the + F8 key and the numeric keys. + + Added code to save/load movies. Movie support will only record/play back the + states of the four emulated gamepads. + + Modified the sound code to use timestamp/timestampbase differently. In addition, + timestampbase is now saved in save states("timestamp" doesn't need to be saved, since + it's reset to 0 at the end of each emulated frame). + +0.98.2: + Fixed a few problems with the SDL command-line build code + for Win32. Also, SDL 1.2.7 seems to have a bug that breaks FCE Ultra's + full-screen/windowed switching capabilities(at least under Win32). + Stupid everything. + + Minor SexyAL changes. + + Updated documentation. + +0.98.1: + + Increased the volume of the FME07 sound channels. + + Fixed a bug in the SexyAL endian conversion code. + + Made the SexyAL chunk conversion loop work. + + Replaced the old OPL2 emulator with a modified version of + Mitsutaka Okazaki's YM2413 emulator for the VRC7 sound emulation. + + Decreased the pitch of the FME 07 expansion sound channels by one octave. + + Decreased volume of output of $5011 in MMC5 emulation code. + + +0.98.0: Some changes I made aren't listed below. Ah well. The magnitude + of the changes was too great... + + + Default sound volume is 100(%), which makes a lot more sense than 75%, but not much. + It's multiplied by 3/4 internally now. + + Added support for the Datach barcode reader(GUI interface only). The emulation code + was adapted from the VirtuaNES source code. + + Reassigned the Datach games to mapper 157, from 16, with CRC32 checks. + + Increased the maximum number of screen snapshots in the snapshots directory + to 99999(from 999). + + Reassigned the following games to mapper 210, using CRC32 checks: + Chibi Maruko Chan + Dream Master + Family Circuit '91 + Famista '92 + Famista '93 + Famista '94 + Heisei Tensai Bakabon + Top Striker + Wagyan Land 2 + Wagyan Land 3 + If you use a hack/translation of one or more of these games, you will of course + need to manually change the mapper number in the header for it to work properly in + FCE Ultra. Family Circuit '91 still may not fit in with the rest of these games, + but it's definitely not a "stock" mapper 19 setup. + + Fixed an OpenGL palette bug when using scanlines(previously, I think it was + setting the palette of the scanlines overlay texture instead of the actual image + texture in some instances). The bug showed up on games that make use of the color + deemphasis bits. + + Rewrote a lot of the PPU background rendering code to be more accurate(and + obfuscated!). This eliminates the X-offset hack I made earlier. + + Removed some of the NSF visualization code, and altered the look of the NSF + display slightly. The NSF waveform visualization code will now take into + account the current volume setting. + + Changed the default key bindings for the standard emulated gamepad + to something more compatible with window managers. I may change it back, but probably + not, since it is easily configurable now. + + Updated the MMC5, VRC6, and FME07 low-quality sound emulation code + with the compatible parts of the high-quality sound emulation code for those chips. + + Adjusted timing of horizontal scroll update(near the beginning of hblank. I made + it occur sooner). I also added a hack to allow X-offset(fine X scroll) changes mid + scanline, however, it is extremely ugly, and may not work correctly for everything + (doing it correctly would probably kill speed). + I mainly did it to fix games like F-1 Race and Mach Rider, and other racing + games that are extremely sensitive to horizontal scrolling timing. + + Some FDS IRQ emulation changes to fix some screen corruption problems + in "Kaettekita Mario Bros". + + Removed zlib(the code, not support). + I also removed support for compiling without zlib(it's small, simple, provides + very useful functions, and may provide critical features for fceu in the future). + + *undone, breaks debugger, FIXME.* Replaced some inline functions with macros in x6502.c. + + Increased the speed of Namco 106 sound emulation in HQ sound mode. + + Many many sound emulation changes and adjustments based on blargg's tests. + The default sound volume is about 150% what it was before, because the sound range + has changed(now -soundvol 100 is like -soundvol 200 on older builds), and the + default "soundvol" setting is 75. 100 clips on some Namco games, and 200 clips + on many games, so I'll probably have the configurable volume range as [0:125]. + What exactly is "%" supposed to mean in this case.... 100% of what?! + + When using low-quality sound emulation mode, total emulation speed is about 10% + less than previous builds. The change in speed for high-quality sound emulation + mode is significantly less. + + Added beginnings of SexyAL to source code tree, removed SDL sound support, and + old OSS code. + + Copied over some autoconf/automake stuff from phamicom. It stills needs a bit + of work... + + Fixed DMC IRQ emulation. Fixes many CodeMasters games. Finally. ^_^ + + Restructured a lot of files, changed the interface between driver and + emulator code slightly. + + * Insert stuff here * + +November 28, 2003 - Snapshot + + Removed the DOS, Linux SVGAlib, and Win32 targets. *GASP* + Win32 support will return(eventually), using SDL + wxWindows. + SDL can use svgalib or GGI anyway, so it shouldn't be a huge loss. + DOS support will only return if someone ports SDL to DOS. ^_^ + It would be nice if SDL could accept modelines. Maybe in SDL 2.0... + + Merged fce.c and svga.c into fceu.c, and fce.h and svga.h into fceu.h. + + Reassigned "Mortal Kombat 3 - Special 56 Peoples" to mapper 209. + + Added emulation of the "Oeka Kids" tablet. + + Added emulation of the Family Trainer. + + Added emulation of the "Ultimate Quiz King" buzzers. + + Added emulation of the Mahjong controller. + + Added emulation of HyperShot controllers. + + Fixed loading of NSFs with load addresses below $8000. + + Cleaned and simplified some of the NES APU code. + + Altered mapper 65 emulation. Fixes Kaiketsu Yanchamaru 3. Does it break anything? + + Wrote a small FAQ file. + + Fixed displaying of garbage and other unpleasantness on the first scanline. I need + to clean up that code, though. + + Fixed color deemphasis emulation when all bits are set. For some + reason, I had commented out the code. Bleh. + + NSF player now writes $C0 to $4017 if the FDS is being used(the FDS + BIOS writes $C0 to $4017). $40 for all other NSFs. + + Added support for iNES mapper 58(nnnesterj). + + Added support for iNES mapper 208. + + Reassigned "Fudou Myouou Den" to mapper 207(CRC32 checks). + + Reassigned "Karnov" to mapper 206(CRC32 checks). + + Fixed the mapper 95 code, which was horribly broken. + + Differentiated between mappers 33 and 48. Added CRC checks to assign + some games to mapper 48. "Flintstones 2" and "Don Doko Don 2" are + the games that need to be assigned to 48. Are there others? + + Replaced usage of TriggerIRQ to X6502_IRQBegin/X6502_IRQEnd combos in + various mapper emulation files. 67, 33/48, 40, 73, 42, 65, 6, 182 + Removed function TriggerIRQ() from x6502.c + + Fixed the sound volume of the VRC7 emulation in high-quality sound mode. + Decreased(slightly) the volume of VRC7 emulation in both high-quality sound modes. + + Decreased the volume of the MMC5 expansion sound channels. + + Decreased the volume of the FME-7/mapper 69 expansion sound channels. + + Added FCEU_gmalloc(), which will call exit() if memory allocation fails, + otherwise it is guaranteed to return a memory block. + This will be used in the mapper code mainly. It should only + be used for small memory chunks. The reasoning is that if 64 some like KB of + RAM or less can't be allocated, for example, it'd probably be best to + exit the emulator ASAP. It also helps to simplify code logic, and + help (me) with modularization. + The behavior of this may change in the future. I still need to think about it. + I should probably save the configuration file regularly(or much better, + use the registry) on the Windows port, though. + + Cleaned up the save-state saving/loading code a bit, and added + support for linked save state structures for better modularity and + less code duplication. + + Merged the iNES and UNIF MMC1, MMC3, and MMC5 code more completely. + I may need to sanify CHR RAM and WRAM allocation for pedanticness, + though. Also worked on Tengen RAMBO-1 emulation, and mapper 90 emulation. + ***THIS MAKES SAVE STATES FOR GAMES THAT USE THESE EXPANSION CHIPS INCOMPATIBLE + WITH PREVIOUS VERSIONS*** + I plan on doing the same thing with other mappers/boards in the future, though. + Always on the quest for 1.0... + +November 12, 2003 - 0.97.5 Release + + Windows: Added limited support for arguments that change configuration + to be passed to FCE Ultra. Example: fceu -pal 1 c:\streetgangs.nes + It may be useful in frontends. + + Fixed filename generation for automatic IPS patching when a file + with no extension is loaded. Before this change, FCEU would + look for "game..ips" with a file named "game". + + Converted and updated the cheat guide in(to) HTML. + + Added support for iNES mappers 202,203,231 from info from cah4e3. + Fixed support for mappers 60, 200. + + Fixed various major bugs in the breakpoint deletion code. + + UN*X: Added support for OSS(/dev/dsp) devices that don't support mono + sound. + + Increased PPU startup idle time to 2 frames. Fixes that + unlicensed "Earthworm Jim 3" game. Does it break anything? + +November 9, 2003 - 0.97.4 Release + + Fixed another obscure PPU emulation screen corruption bug. + + Added support for Game Genie cheats in the cheat interface. + + Windows: Reworked the cheat interface, merging the cheat search + and cheat list windows into one. + + Windows: Greatly improved the CPU debugger. + The code still needs a lot of cleaning, though. + + Readjusted VRC6 IRQ emulation timing. + + Added support for the UNIF MMC3 board TEROM. The maximum PRG/CHR sizes + may not be correct in this implementation, though. + +November 8, 2003 - 0.97.3 Release + + Added a control to set the highest quality sound mode in Windows. + This change requires that any users who previously set + "high quality sound" to set it again. + + Fixed the volume of high-quality sound mode again. The changes + I made earlier didn't affect all the filter coefficients. + +November 8, 2003 - 0.97.2 Release + + Made a minor optimization to writes to palette memory. + + Altered VRC6 IRQ emulation timing slightly. + + Fixed a weirdo PPU emulation bug that could cause garbage on the right + side of the screen in certain situations. Thanks to FrenziedPanda for + bugging me enough to make me look into the problem and fix it. + I should be on the lookout to see if the fix breaks anything, though. + + Fixed the volume of high-quality sound mode(-soundq 1). It was + at 1/4 the volume it should have been. I compensated by increasing + the precision of the filter coefficients, which increased the sound + quality of that mode slightly without hurting performance. + +November 7, 2003 - 0.97.1 Release + + Fixed mapper 105 emulation. I had begun merging it into the + rest of the MMC1 code for 0.97, but I hadn't finished it. + + Changed things like RdMem(_PC++); to RdMem(_PC); _PC++; + Darn evil global variables. I need to fix them. Screw speed. + + Expanded checks for the global variable "fceuindbg"(used in debug + mode to prevent reads in the debugger from altering any registers). + +November 6, 2003 - 0.97 Release + * Note: I still had much more I had wanted to get done for 0.97, + but I lost even more interest. The Windows port still doesn't + have a way to enable the "highest" sound emulation mode, nor the + low pass filter code, not to mention that the lowpass filter code + isn't complete(I would need to design a high-order FIR filter from an IIR + filter to work properly-have the correct rolloff, among other + things-at finite playback rates). + + Fixed a bug in the IPS patcher. The recorded size wasn't being updated + after a successful realloc() was made, which could lead to corrupted patch + data from some patches. + + Added support for mappers 200, 201 from submitted code. + + Rewrote mapper 15 support to make more sense(well, depending + on your point of view...). + + Fixed 256KB CHR select support for mapper 115. + + Added support for mapper 12 from code from cah4e3. + +October 16, 2003 - Snapshot + + Fixed support for mapper 245(for nonencrypted/non-smynes-screwed up + ROM images only. Fixes "Yong Zhe Dou E Long [...] Dragon Quest 7". + + Added support for mappers 60, 62, 230, 244 from submitted code. + + Modified mapper 90 emulation to allow game-select on reset + for "Final Fight 3". + + Modified mapper 45 emulation to allow "Super 8-in-1" to work. + + Added a low-pass filter, and an option to enable it(CLI ports). + + 0x00 is now written to $4011 in the NSF player code instead of 0x40. + Fixed some other similar sound register init problems that I had fixed + in Festalon but forgot to fix in FCEU. Grrr. + + Removed some unnecessary 64-bit integer usage from FIR sound filtering + code. + + Added a new sound quality mode. Higher than high, it's highest(in + FCE Ultra, for now). Still need to fix the interface to allow + enabling it in the Windows port. + + Added some code for lower-level MMC3 IRQ emulation. It isn't completed + , and will not work properly as-is. I'm still playing around with + it occasionally. + + Fixed the sprite overflow flag(I think I fixed it), that was broken in an earlier + pre-0.97 release. + + Fixed support for iNES mapper 193. + + Command line arguments "-pal" and "-gg" now take extra arguments(1/0) + and are remembered in the configuration file. + +September 27, 2003 - Snapshot + + Added support for iNES mapper 50. + + Modified the UNIF board initialization code. Hopefully, this + new interface will eventually be used with the iNES code. + + Miscellaneous code cleanups. + + /dev/dsp is now set to 8(previously 9) buffers of 128 samples in length + in the SDL code. + + Tried to make the save state code more expandable and modular. + + Moved a lot of the PPU code into ppu.c. + + Added more extensive debugging code to the 6502 emulator, to allow + for memory read/write hooks(including zero page addressing modes). + + Readadjusted DMC timings when PAL emulation is enabled. It looks + like it was correct before I had made the August 2 change. Thanks + to Bananmos for the information. I think. :/ + + Added support for iNES mapper 193 from information from virtuanes. + I think my dump of it is "bad", though. PRG and CHR pages look + like they are in the wrong order(logical vs physical? Who's to say + what's physical?). + +September 1, 2003 - Snapshot + + Fixed some minor initialization issues with iNES mappers 7 and 34. + + Added support for UNIF board NES-GNROM. + + Removed support for save states created with versions of FCE Ultra + less than 0.56. + + Replaced SDL sound buffering code with a lock-free FIFO implementation + written by David Olofson, with a few modifications by myself. + + Fixed a VRC7 NSF bug(it showed up under the reworked driver/file + loading order in the cli code). + + The board in "Rolling Thunder" has "RAMBO 1" on it, not "RAMBO-1". + +August 9, 2003 - Snapshot + + Removed the old plain text documentation and replaced it with + a new document in HTML. It is not completed yet, though. + + Rewrote the SDL-native audio code to be less wacky and more + thread-safe(hopefully). I'm still waiting for a new SDL audio + API... + + Altered the MMC5 IRQ timing. Fixes minor graphical glitches + in Castlevania 3. Does it break anything? + + Removed some debugging code that got into the last snapshot. + +August 5, 2003 - Snapshot + + Added some code in the IPS patcher to allow for expanding the size of files. + + Fixed a double free() bug with a mapper 51 game(in ines.c). + + Added support for "Alien Syndrome" (US release) as iNES mapper 158. + It looks like a derivative of the normal RAMBO-1 board(or is that + the name of the chip?), similar to TKSROM/TLSROM(mapper 118). + + Improved the "native" SDL sound code. It will now call SDL_Delay(), + among other nice things. The code could probably be improved more, + though. + + Added support for decimal components in xscale/yscale in the SDL + port. Set the default xscale for windowed mode to 2.40(to get a + more correct aspect ratio, assuming the display is currently at + a 4:3 aspect ratio). + + Modified args.c to handle floating-point numbers. + +August 2, 2003 - Snapshot. + + Disabled texture wrapping with OpenGL(there were problems at the edges + of the screen with linear interpolation). Bah. Now the edges + are too bright... + + Improved the accuracy of the DMC timing when PAL emulation is enabled. + I still don't think it's totally correct, though. + + Changed the default settings for the SDL code. Full screen + is now 640x480x8bpp by default, xscale and yscale are 2 for both full + screen and windowed, opengl support is enabled, linear interpolation + for OpenGL is enabled, and X-axis stretching is + enabled(in full screen). + + "Scanlines" were enabled in 8bpp to 8bpp blits in + drivers/common/vidblit.c when they shouldn't have been. Fixed. + + Fixed OpenGL code under big-endian platforms. + +August 1, 2003 - Snapshot. + + Various code clean-ups. + + Played around with adding a GTK+ GUI to the SDL code. + + Rewrote part of the hq sound rectangle wave code. + + Replaced the high-quality sound inline assembly filter code with + slightly faster C code. + + Hacked around with GP32 support. I don't know if the GP32 would + be fast enough, though. + + Skipped frames will now have D5 of $2002 set at the beginning + of the frame. Fixes "Bee 52". I must see if it breaks anything. + + Added OpenGL support to the SDL code. + + Removed the PPU drawing inline assembly code, replacing it with a faster + algorithm written in C. + + "Disabling" the 8-sprite limitation will no longer cause + "Bee 52" to break. However, the "Solstice" wizard will still + have the weird thing growing out of his face in the introduction, + since it depends on no more sprites to be rendered. + + Added entry for that Black Bass game for header corrections in + ines.c + + Strip color burst bit(D0 of $2001) is only "emulated" if bg or + sprite rendering are turned on, at the end of the scanline. + Doing it with pixel/tile granularity would require modifying + the sprite graphics data copying routine, which I don't + feel like doing. Fixes that crazy Sayoonara demo by Chris Covell. + I also modified the NES RAM initialization code. + + Adjusted VRC7 IRQ emulation for better Lagrange Point goodness. + + Added support for iNES mapper 91. (VirtuaNES) + +0.96: + Improved RAMBO-1(mapper 64) emulation. "Skull and Crossbones" is + now playable. + +0.95: + + timestamp and timestampbase are no longer saved/loaded to/from + save states. They were causing too many problems I didn't + want to fix, and I never intended them to be saved in save states + when I wrote the code that uses them. + I think the reason they were being saved was that I wanted to make it + possible to add movie support and network play save state loading + (distributing the save state over the network). So if someone in + the future wants to add these features, the issues(primarily with + zapper emulation and sound emulation) with saving the time stamp will + need to be resolved. + + Fixed some crashing bugs when save states are loaded when + high-quality sound emulation is enabled. It is like patching + holes in a swiss-cheese boat. All the holes may be patched, but + it looks ugly. At least it tastes good... + TODO: Look into saving more data in the save states, especially + data that is based off of "timestamp" and "timestampbase". Also + look into validating this data. Right now, corrupt save state data + might cause memory corruption in FCE Ultra. + + Fixed some bugs in the NSF player. + + Cleaned up more code. + + Reduced the usage of TriggerIRQ(). + + Split the palette code into a new file, palette.c, from svga.c + + Low-G-Man(NTSC and PAL versions) are now recognized by CRC32 value, + and WRAM will be disabled if they are loaded. A warning/status message + will also be printed regarding this issue. + + Decreased the volume of the DMC/PCM channel in low-quality sound + emulation. + + Low-quality sound emulation now uses 32-bit integers for much + better speed. + + FCEUI_CRC32() wasn't returning anything. D'oh. Fixed. + + Added somewhat crude support for games that switch background CHR data + mid-scanline (this is needed in games such as Mother, Pirates!, + Business Wars, and Marble Madness). + + Altered NMI, IRQ, and BRK emulation again. Fixes some games, + like Bases Loaded 2 and Dynamite Bowling, and maybe some others. + I had to increase the size of the IRQlow variable for delayed + NMI execution... I also had to add a delay between PPU reset + and the PPU actually doing anything, to fix "Knight Rider". + + Fixed a mapper 90 save state bug. + + /dev/dsp code now searches for /dev/dsp before /dev/dspX (where X is + a non-negative integer). + + SDL joystick axes configuration is now done from the joystick. + + Tweaked various Konami mappers' IRQ counter emulation. + + Added custom SDL throttle code that gives up time slices instead of + using 100% cpu. + + Fixed an issue with sprite priorities on MSB-first platforms. + + Modified powerpad.c to avoid a symbol conflict when compiling on the + Power PC architecture. + +0.94r3: + sound.c: + Fixed a divide-by-zero bug that occurred when a virtual + reset(like by pressing F10) occurred when sound emulation was + disabled. + +0.94r2: + drivers/common/vidblit.c: + Fixed code for 32bpp blur effect. + + drivers/cli/sdl-video.c: + Added error message for unsupported bit depths. + + mappers/simple.c, ines.c: + Used this bug fix pseudo-release as an excuse to add + support for mapper 107. Information taken from virtuanes. + +0.94(fixed release) +--- + Fixed call to InitUNIXDSPSound in svgalib.c + + Added man pages. + +0.94 +--- + Added support for rapid fire A/B buttons on physical joysticks + in SDL/svgalib/DOS code. + + Implemented "high-quality" Namco 106 emulation(used for hq sound mode). + In this case, "high-quality" means sounding more like it should, + not necessarily cleaner. I'm not certain that it's totally correct, + but it's in the right direction. + + RAM cheats should no longer affect Game Genie emulation. I still + need to completely verify this. There may be some sort of race + condition. + + Removed various minor speed hacks in the name of style and + correctness(and to make maintaining FCE Ultra easier for those + people who are not me). :) + + Removed NSF cpu hacks, as I changed code to make them unnecessary. + + Fixed another FDS IRQ emulation bug. "Famicom Grand Prix II" works + now. + + Fixed a memory leak and a heap corruption bug in "file.c". + + Added support for on-the-fly IPS patching. + Place the IPS file in the same directory as the file to load, + and name it filename.ips. + + Examples: Boat.nes - Boat.nes.ips + Boat.zip - Boat.zip.ips + Boat.nes.gz - Boat.nes.gz.ips + Boat - Boat.ips + + Some operating systems and environments will hide file extensions. + Keep this in mind if you are having trouble. + + Patching is supported for all supported formats(iNES, FDS, UNIF, and + NSF), but it will probably only be useful for the iNES format. It + can be used with the FDS format, but be warned that it will permanently + patch your disk image, as the disk image is written back to disk + when the game is unloaded(unless the disk image is in a zip file, in + which case it isn't written back to disk). UNIF files can't be + patched well with the IPS format because they are chunk-based with no + fixed offsets. Support for a UNIF patching format may be added + in the future(probably by someone else.). + + Added more games to the list in ines.c for having battery-backed + WRAM, for header corrections. + + Copied over the 96KHz filter coefficients from Festalon that I forgot + to do in 0.92. Oops. + + +0.93 +--- + + Reduced the volume of the FDS sound channel. + + Fixed a bug in the FDS IRQ emulation code that caused "Lutter" to not work. + + Fixed a bug in unif.c that would cause a crash if a unif file were + loaded without a board name being specified(as could happen + with a corrupted nsf). + + Fixed a bug in general.c relating to relative filenames(running + fce ultra like "./fceu ../big.nes" would work, but "./fceu ../big" + would not work- it crashed). + + + +0.92r2 +--- + Fixed dpcm irq bug that broke Cobra Triangle. + +.92 +--- + + Removed NSF player background, and added some special effects goodies. + + Changed the NSF player to use the emulated gamepad as input instead + of having special NSF-player-only keys. + + Added support for mapper 249(using nonencrypted games), thanks to SARO + for info. SMYNES sucks. + + Updated video blitting library-thing(vidblit.c) with more special + effects, and removed 24bpp support. + + SDL cleanupification. + + Added support for mapper 61. + + nnnesterj: Added support for mapper 57. + + Fixed mapper number for "Golden Game 150 in 1". Changed it to 235 + from 43. + + DDraw back buffer surfaces are now created in system memory if the + hardware blitter can't do stretching. + + Restructured file wrapping code. + + Added new cheat search methods. + + Fixed a major cheat unloading memory bug(and memory leak). + + Emulated that funky nonlinear DAC effect for hi-quality sound. + + More fixes/cleanups to FDS emulation code. + + Tweaked PPU timing a bit. + + Improved network play. + + Holding the enter key down will no longer do fun stuff to the nsf + player. + + Improved NSF player. It should support streaming pcm nsfs now... + + Changed FDS keyboard keys around a bit. F6 is the disk select key, + and F8 is the disk insert/eject key. + F8 to insert VS Unisystem coin, F6 to view/toggle dip switches. + Hopefully people won't complain after blindly hitting the save state + buttons. :) + + Many fixes and improvements to the Windows port. No more cpu-consuming + wait loops(specifically, sound). Added a message window. + + FDS sound emulation improvements. + + FDS disks are now auto-inserted on power on(or was it loading a new + game...). + + Changed the default last rendered scanline to 231. + + ines header corrections are now printed as status messages, not errors. + + Rearranged input updating code. + + Fixed a sprite transfer bug. Fixes PAL version of Rainbow Islands. + + Debugger hooks added. + + Small optimizations in Refreshline and FetchSpriteData to hopefully + offset the slight slowdown in the cpu core. + + MapperHBIRQHook is now called differently(depending on hi/low bg/spr + addresses). + + Added support for unif board UNL-8237. + + Added support for mapper 144(death race). + + Added partial support for mapper 74. + + Fixed a cpu emulation bug in GETIYWR. It would sometimes set "target" + to 0x10000, which was a BAD THING(overflow; now it wraps). + + Tried to add support for mapper 241. Needs special keyboard emulation. + I think. + + Internal RAM is now initialized to something other than 0. Fixes + Minna no Taabou no Nakayoshi Dai Sakusen. + + Reassigned "The Money Game" to mapper 155. It doesn't seem to + respect the WRAM enable/disable bits. Silly game. And + Tatakae!! Rahmen Man. + + Added support for mapper 115(still needs 256KB CHR select), 241, 114,88. + + Attempted to add support for mappers 91, 187. + + Modified frame IRQ to not break so many damn games. + + Fixed sprite hit detection loop. + + Improved support for mappers 80, 90,117,154, 189. + nnnester and virtuanes. + + Reassigned "Devil Man" to mapper 154. + + Removed bogus Trojan header fix in ines.c. + + + +.81-post: +---- + Fixed/Worked around(?) compilation problems on gcc 3.2.x. + +.81: +---- + + More SDL goodies. + + Renamed "Makefile.olinuxsdl" to "Makefile.unixsdl" + + More SDL fixes and cleanups. + + BeOS port is now compiled with the "-no-fpic" flag, which allows + me to use my inline assembly. The executable work fine as far as + I can tell. + + Added "Makefile.beos". gcc doesn't like my inline assembly + used in RefreshLine(),so this port will likely be slightly slower than + other x86 ports. + + Added a check to make sure SIGBUS is not equal to SIGSEGV in + drivers/cli/main.c. Needed for compiling under BeOS. + + Renamed the "PI" member of the X6502 structure due to conflicts with + a defined symbol with some math header files. + + Merged fcelineasm.h into fceline.h + + Fixed(possibly) a possible problem in fcelineasm.h with input register + clobbering. + + More SDL changes. + + Added speed throttling code to the CLI code, and added a command + line switch "-nothrottle". + + Lots of restructuring/rewriting/merging of the MMC3 code. + + Updated DOS code to use the generic CLI wrapper. + + Reads from $4090 and $4092 now return the current envelope setting + in FDS sound emulation. I'm not sure if this is correct... Affects + "Ai Senshi Nicole" and "Bio Miracle Bokutte Upa". + + Added native SDL sound support to the SDL code. the "olinuxsdl" + now uses this code by default instead of the unixdsp sound code. + + Modified MMC3 IRQ counter emulation. I'll need to watch out to see + if it breaks any games. Fixes: MegaMan 3, Gun Nac, Klax(Japanese). + + Changed a few memory reads in x6502.c to use RdRAM instead of RdMem, + resulting in a slight speed increase. + + Cleaned up mapper 250 emulation code. + + Added support for iNES mapper 51(thanks to Kevin Horton for the + information). + + Merged some iNES mappers corresponding to bootleg multicarts + based on MMC3s with mbshare/mmc3.c. + + Added support for iNES mapper 52(thanks to Kevin Horton for the + information). + + Made some hacks to the MMC3 emulation code so that I can add support + for pirate MMC3 multicarts more easily. I should clean it up later. + Moved mapper 44 emulation code to mbshare/mmc3.c. + + Saving screen snapshots will no longer corrupt the frame buffer + for one frame(unless memory couldn't be allocated). + + Fixed screen snapshot saving(it was sort of broken due to the + changes made to the driver<->emulator interface code; status + messages were being saved to the image). FCEUI_SaveSnapshot() + no longer returns a value(the request to save a screen snapshot is + serviced before status information would be written in the next frame). + + nosprites is now set to 0 before RefreshSprite() returns, to prevent + problems if a game turns off the bg and sprites when FetchSpriteData() + for the next scanline is called but then turns on sprites when + the actual scanline is drawn. + + PPU_hook() is now called more often if PPU_hook is non-null. + Made changes to mappers 118, 95, 9, and 10 to compensate. + No games seem to be broken, and I added support for mapper 96 + (though the games aren't very playable because the special controller + isn't emulated). + + Romance of the 3 Kingdoms is now recognized to use 16KB ex-WRAM. + + Added support for mapper 185...sort of. I think this is another + instance of incompatible hardware being lumped onto one mapper number. + Sigh. + + Added support for "Famicom Jump 2" as iNES mapper 153. + If a good(as far as I can tell) dump is loaded, FCE Ultra will + automatically fix the mapper number. + I also made some changes to the mapper 16 IRQ emulation code. + + BRK now sets the I flag. + + Reads from $4015 no longer reset DPCM IRQ. + + Changed emulation of RTI instruction slightly. + + X.IRQlow is now set to 0 in PowerNES(). + + The VS Unisystem bit in the iNES header is no longer looked at( + I was having too many problems with this bit being set when it + shouldn't have been). Now, VS Unisystem emulation is enabled + when a known VS Unisystem game is loaded. I also rewrote the VS + Unisystem detection function. + + iNES mapper 1 now supports pageable CHR RAM if no CHR ROM is present. + Fixes "Family School". + + Mapper 70 no longer has a mirroring control emulated, and I extended + the number of 8KB CHR pages supported to 16. + + Cleaned up iNES MMC5 save RAM loading/saving code and added + support for MMC1 games with 16KB of RAM(the second 8KB are saved), + via CRC32s(currently only Genghis Khan(USA) and Nobunaga's Ambition( + USA and Japan) are recognized). + + Added support for the MMC5 Koei game "Ishin no Arashi", in the iNES + format(I added an entry with its CRC32 value and the number of 8KB + WRAM banks it needs). + + Better iNES mapper 33/48 IRQ counter emulation. + + Added the game "Uchuusen - Cosmo Carrier" to this list. I'm + beginning to hate the iNES format more and more...or maybe + just Fanwen. :) + + Added the mapper 32 game "Major League" to the list of games + that usually need iNES header correction...but in this case, the + iNES header cannot specify that this game needs to have one-screen + mirroring. + + iNES header information is now printed before any header corrections + are made based on a database. + + Fixed a bug in mapper 32 emulation. "Ai Sensei no Oshiete" + works now. + + Tried to add support for iNES mappers 245 and 249. + + Fixed the MMC5 read handler to return the data last on the data + bus instead of 0xFF when a read was made to an unmapped address. + This seems to fix the lockup problems in "Bandit Kings of Ancient + China". + + Reversed "Modified the time at which the "y scroll" register is updated + during hblank." The changes broke Klax. + + Added an unsigned 64-bit base timestamp variable "timestampbase". + Adding this to the 32-bit variable "timestamp" will return + the number of cycles executed since emulation started(in the future + I'll probably change it to since reset or power toggle). + This allowed me to replace "lastn" hack in the MMC1 code with + something better. + + Changed my mind and undid the removal of support for old save states. + + Removed support for old save states and in general I won't + try to support save states made with previous versions. + + MMC1: Writes to $8000-$FFFF with D7 set will now cause + the first MMC1 register to be OR'ed with 0x0C. I'm not sure + if this is correct, but it doesn't seem to break anything + and it fixes Robocop 3. I'll see if anyone reports games + not working in .81 that worked in .80. + + Worked on a generic driver interface wrapper very similar + to the driver interface FCE Ultra used to use(I'm getting + tired of all of the duplicated driver code). Eventually, + the DOS, SVGAlib, and SDL ports will use this wrapper. + + Similar change to the argument parsing code. + + Changed configuration file saving-loading routines and the + configuration structure to allow for linking config structures + to each other). + + Small fix to the emulation of the MMC5 split screen mode. + + Made Linux SDL code compilable again. + + Changes to MMC5 EXRAM emulation(read/write). + + Fixes to the emulation of the MMC5's split screen mode, based on + observations while using CastleVania 3 and a Game Genie(on a real + NES). + + Fixed a bug in ines.c that caused any calls to AddExState() from + a mapper initialization function to be effectively "erased"(ResetExState() + was called after the mapper was initialized). Fixes the VRC7 sound + state saving/loading stuff. + + Finished adding support for the MMC5's split screen mode(this does + not mean that the support is complete, but at least the intro in + "Uchuu Keibitai SDF" works correctly now). + + Worked on adding support for the MMC5's split screen mode. Not + completed. + + Reverted to .80's FDS sound code. + + Modified the time at which the "y scroll" register is updated + during hblank. + + NSF playing code will now disable FDS sound output on song init + (fixes some problems with the Zelda no Densetsu NSF rip). + + Increased the emulated clock speed of the FDS sound emulation code + to give better quality output. + + Modified NMI to occur a few cycles later. Fixes BattleToads...but + it may have broken other games. Also modified the way NMI's are + handled in x6502.c. + + Modified ines.c to memset() GameMemBlock to 0 on virtual power toggle. + Also, trainers are now loaded into their own buffer instead of + directly into emulated WRAM and copied into emulated WRAM on + power toggle; I've been meaning to do this for quite some time. + + Changes to the way the zapper cursor is drawn on the screen. + + FCEUD_WriteSoundData(), FCEUD_BlitScreen(), and FCEUD_UpdateInput() + have been combined into one function: FCEUD_Update(). + + More fixes to the network play code, and a fix to the Windows network + play driver code that fixes(hopefully) a rather evil bug that caused + lockups when the remote stopped network play. + + Added code to set the battery-backed bit in RAM if a game needs it, + based on CRC32. + + Added more games to the list of games that commonly have bad iNES + headers, in ines.c + + Updated docs and usage.h for DOS and Linux regarding the new video + mode and the new refresh rates. + + Linux: Fixed a bug with video mode 6(a few upper scanlines were being + cut off). Increased the refresh rate of video mode 3 to 120hz. + + Increased the refresh rate of video mode 2 to 65 hz in the Linux port. + + Screen snapshots can now be taken while playing an NSF. + + Added a new sexy tweaked vga mode that I created to the Linux svgalib + port. It's 256x224 at a refresh rate of 103hz. Hopefully it won't + blow up anyone's monitor. ;) + DOS port will follow eventually. + + Modified Makefile.base to produce an executable named "fceu" instead + of "fce". + + The plans(cycle-accurate ppu emulation) for .90 were a bit ambitious, + and I still need to make other fixes before then. + + Fixed some minor(usually) bugs with setting 256x240 tweaked VGA mode + in DOS and Linux ports. + +.80: +---- + + Cleaned/fixed a few things in the mapper 19 emulation code. + Family Circuit '91 still doesn't work quite right... I wonder if + it's a bad dump. + + Added input override code to Windows port. + + Added code to fix iNES header information in RAM and suggest + changes to the user. + + Added support for iNES mapper 152(to be used with games set to + mapper 70, that use one-screen mirroring instead of h/v mirroring). + + Blits using the DirectX blitting function(method?) to the primary + surface are now done with the asynchronous flag set(if that + fails, a "normal" blit is tried). + + The DirectX blit buffer(secondary surface that FCE Ultra writes to + directly and then uses the DirectDraw blit function on to blit + to the primary buffer) is now created without specifying it + should be in system memory or video memory, except in the case + when no hardware blitting is available, and then DDraw is explicitly + told to create the surface in system memory. + + Added Family Keyboard support to the DOS port. + + Cleaned up the VRC7 sound emulation code. I need to find a way + to save the current sound state in a save state. + + Found out the real name of the "Space Shadow" gun; it's + called the "Hyper Shot". I'm still not sure who made it, though. + Possibly Bandai did. The interesting thing is that Konami + also made a Famicom accessory(dual square boxy things with two buttons + on each) with the same name(though there might not be a space in the + name). + + Only the upper two bits read from $4016/$4017 are undefined. + Bit5 is always 0, though. Fixed the bug in "input.c". + Silly kevtris' old documents. New kevtris' brain is always good. + + Family Keyboard support for the Windows port. + + Added support for the Family Basic Keyboard to the Linux port, other + ports todo. + Might want to add support for the tape recorder at some time. + Also mapped the "Scroll Lock" key to disable/enable command keys + so that the FBK is more useable. It doesn't disable CTRL C, + though... + + Changed a lot of inlined functions in x6502.c to macros so that + I could test out some optimization ideas. + + DOS code updates for game input override support. + + Small optimzation to opcode $4c, and relative jumps. + + Added some code to ines.c to set controller information in + FCEUGameInfo(returned by FCEUI_LoadGame()) based on crc32 values. + + Updated user documentation and usage.h for DOS and SVGAlib input + command-line changes. + + Added an option to disable the four-score(to Windows and Linux ports + so far). + + Updated Windows interface to support the new Famicom expansion + devices. + + (Re)Added support for the Famicom 4-player device. + + Improved Zapper emulation...sort of. It still needs a lot of work. :/ + + Added *partial* support for the "Space Shadow" gun. + + Added support for the Arkanoid controller(both NES and Famicom style). + + Added code to support the extension Famicom input devices. + + Added PAL scanline start/end drawing settings to Windows port. + + Added pause emulation key(F2) to Windows port. + + In the process of rewriting/fixing up input code stuff. + + Minor bug fix to Power Pad emulation code. + + VS Hogan's Alley and VS Duck Hunt automatically select the zapper + now(though it only works on the SVGAlib port). + + Undid some FDS sound code changes introduced in 0.76 that totally + screwed up sound. Oops. + + Added code to allow different settings for first/last scanline + drawn while in PAL emulation mode, to the Linux and DOS ports. + + Added convenience(it's not necessary, but it reduces redundant and + confusing code in the driver code) function + FCEUI_GetCurrentVidSystem(int *slstart, int *slend). + + Updated file "TODO". + + Changed #include to #include "zlib/unzip.h" + in file.c. + + NSF 6502 player now initialized the stack pointer on reset. + + Worked on de-emphasis emulation code quite a bit. + The deemphasized palette calculated at the end of the frame is now + based on what deemphasis bits were set for the longest during + the screen(sampling interval is a scanline) update loop. + Added a "static" deemphasized palette at $40-$7F in the palette table. + This corresponds to the colors when all of the deemphasis bits are set. + I did this to fix the PAL game "Noah's Ark", without breaking + anything else. The only downside is a slight speed loss(~2% on + my system when sound is disabled), but this is acceptable to me, + at least. + Maybe it's time to write hi/true-color ppu drawing code... + + + Fixed an out of bounds array access in svga.c in SetNESDeemph(). + The variable "lastd" in svga.c was being initialized to the wrong value. + Thanks to "Jarod CANAL" for pointing this out. + + Removed FCEUI_SetFirstRenderedLine or whatever it was called and + the function to set the last line. Replaced with: + void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall); + + Changed SetVidSys(int w) to ResetVidSys() in fce.c. Reenabled + PAL/NTSC emulation overrides based on game loaded(really only useful + for NSFs and UNIFs now). + + UNIF loading code now recognizes the chunk "CTRL" and tries + to use it. Only the svgalib code supports overriding of input + settings based on game loaded, now, though... + The user is still going to have to configure powerpad settings + on his/her own. + + Fixed return values of FCEU_fseek() and fixed a problem in unif.c + related to it. + + Changed mechanism for how FCE Ultra tells the driver + code what type of system is being emulated. A structure of + type "FCEUGI" is returned from FCEUI_LoadGame(). + + Fixed a major mapper 64 emulation bug introduced in 0.76. + + Modified BlitVidHi() in drivers/win/video.c to speed it up. + + Added support for loading the iNES-format Game Genie ROM image. + + Removed ggrom.h and added code to load the Game Genie ROM + image from a file. + + Added Windows netplay.c. (new: the user exiting the emulator + while stuck in a blocking recv() or send() loop now works.) + + Fixed a vram address register bug in fce.c that I created when I got + rid of the pair/dpair data types. + + Added new mappers/92.c + + Removed mappers/92.c until I can contact LULU or rewrite it. + + drivers/win changes. Removed netplay.c until I can rewrite it. + + Got rid of pair/dpair data types. + + Got rid of silly "TempArray" thing. + + Began adding GPL headers to files. FCE Ultra is going to be in + a state of legal limbo for the next few days... + + Replaced crc32.c and crc32.h, and added some #ifdef's and #defines + to use the crc32 code in zlib instead if zlib is linked with + FCE Ultra. + + More fixes to sb.c. + + Cleaned up drawing.h and ggrom.h(even though ggrom.h will *probably* + be removed before the next release). + + Redid frameskip code. + + Rewrote necessary pieces of sb.c and sb.h and fixed quite a few + bugs. I still need to test it on various other sound cards, though. + + Rewrote(more like "recreated in my own image") DOS keyboard driver. + Removed unused "keyscan.h" from drivers/svgalib + + Rewrote part of(the parts that Marat wrote - the connection and + closing parts) the Linux TCP/IP network play code. I guess it works, + but I haven't tested it very much. In any case, it's still dangerous + to use network play in FCE Ultra with SVGAlib, since recv() or send() + might block and since the keyboard is in raw mode, you have a problem. + Maybe a future SVGAlib will fix the general problem of lockups if + keyboard_update() isn't called, though it is only partly SVGAlib's + problem... + + Fixed FCEU_fseek() when used with a compressed file in the PKZIP + format that has been loaded. Fixes a UNIF loading problem. + Also added a check to the return value of FCEU_fseek() in unif.c. + + Replaced Marat's 6502 emulation core with my own. + It should be fully functional, but as always, I don't know if + I implemented the undocumented instructions correctly. + Several things are correct in this new core that were not in + Marat's(D flag is no longer cleared by interrupts, for example). + + Altered mapper 16 irq counter emulation slightly. + + Fixed the behavior of the SXA, SYA, and XAS opcodes based on the + documentation I have. I'm not sure what happens when page crossing + occurs with those instructions on a real NES, though. + Also CHANGED(not fixed) emulation of opcode $8B("XAA"). + + Changed some of the M* functions(absolute indexed and maybe some others) + to perform dummy reads. + + Changed some of the macros in m6502.c to inlined functions so + that I can modify and examine them more easily. + +.77: +---- + + Fixed a silly network play bug(in the global network play code) + that caused excessive lag. + + Added a "niceness" setting to the sound configuration dialog. + Removed obsolete information from the dialog. + + Fixed speed throttling code in Windows port when PAL emulation is + disabled/enabled and a new game hasn't been loaded yet. + + Commented out a printf() to debug stuff in fds.c(oops). + + Applied PK's joystick patch to the osdl code. It allows the user + to map axes and it fixes a joystick button mapping configuration saving + bug. + + Added two command line options new to Linux port to DOS port. + Just need to test them... + + Added some stuff to unif.c to allow for boards that can support + CHR RAM instead of CHR ROM(darn Sachen boards...). Fixes UNIF + version of "Q-Boy". + + Added command line option "-snapname" to Linux port. I'll add it + to the Windows port as well, but probably not to the DOS port. + + Added clip option to Linux port. + + Fixed sound logging(in Windows port) so that multiple recording + sessions now work. + + Added an option to clip the leftmost and rightmost 8 columns + of graphics in the Windows port. + + Added a submenu that lists recently opened files, in the Windows + port. + +.76: +---- + + Updated porting.txt. + + Added speed throttling code to Windows port that's used when sound is + disabled(and an option in the "Miscellaneous" + configuration window to disable it). + + Added cheat interface to DOS build. + + A few tweaks to the text cheat interface code in the cheat listing code. + Added a command to quickly toggle the status of the cheat(though a + cheat can still be disabled/enabled by (M)odifying the cheat). + + Support for UNIF UNL-TC-U01-1.5M board added. Same credits as below. + + Rewrote mapper 228 code just for the heck of it(actually, I couldn't + figure out why some(about two) of the games in the Action 52 cart + weren't working in .75(and .76). I traced it back to .71, where an apparent bug in + the undocumented 6502 opcode emulation allowed it to work, which + was later fixed for the .72 release(opcode 0x7C)). I'm thinking + that the dump is bad... + + Added a few crc32 checks to ines.c to check for and report when + a known(by me) bad(hacked or bad dump) game is loaded. + + Added support for the following UNIF boards. Thanks to Quietust + and Kevin Horton for the information. Some problems still exist + with a few games that use these boards, though... + + UNL-Sachen-8259B + UNL-Sachen-8259A + UNL-Sachen-74LS374N + UNL-SA-016-1M + UNL-SA-72007 + UNL-SA-72008 + UNL-SA-0036 + UNL-SA-0037 + + Fixes to some stuff in cart.c(for example, calling setprg32() when + only 16kb of prg data is present now works). + + Added support for iNES mapper 189. + + Tried to add support for the UNIF board "UNL-H2288". Failed. + + Updated "cheat.txt" to fix a few typos and added an example of finding + and adding a cheat using the Linux port's text interface. The actual + section on the Linux cheat interface still needs to be written, however. + + Changed network play code in the Windows port and fixed a bug. + Fixed a similar bug in the Linux netplay code....sort of. + + A few cosmetic changes to the dialogs in the Windows port. + + Fixed sound initialization on the Windows port(it was being initialized + when FCE Ultra started even if it was disabled by the user. Oops.). + + Joystick button configuration code in Windows port changed slightly + to be more useable. + + Changed reference to video mode 5 in the linux port to "1 per 4". + It may not be very meaningful, but it is certainly better + than "TV Emulation". I'll change the Windows port reference later. + + Documented video mode 7(320x240) for the Linux port. Also added + a check for the FBDev driver in order to use this mode instead + of a tweaked vga mode if that driver is being used. + + Added/Fixed cheat interface for Linux port. It's still not perfect, + though. The code is ugly... + + Callback function for FCEUI_ListCheats() now receives + status information(enabled/disabled). + + Callback functions for cheat functions now must return 0 to + stop listing cheats or 1 to continue. + + Fixed a problem(the cheat code was reading in cheats + for address $0000 from cheat files if any blank lines were present). + + SDL port zlib changes(linked dynamically to zlib now). + + More changes to envelope decay + looping on code. No longer + depends on value @ $4017. It now sounds correct based on some + tests I did with SMB3 and a GG, but Goonies 2 doesn't sound right( + based on a sound file sent to me by another person). + + Added support for iNES mapper 140. Thanks to Quietust for the + information. + + I need to figure out how to deal with the problem of so many + bad NSFs that most people consider good... + + Changed envelope decays a bit. Their behavior now depends on bit + 7 of $4017. I don't know if this is right... + + Addition of debug.c for some debugging stuff. + + Updated zlib to 1.1.4. + + Modified code in various files to allow UNIF games to override + current selected video system emulation(NTSC or PAL). Need to + make sure this really works. + + Changed sound.c to prevent desynchronization during network play. + This might slow down sound emulation slightly, especially when + sound emulation is disabled. I really don't care... + + Updating network play code. More info later... + + Moved the sound/video/etc output code in EmLoop() to the top of the + for(;;) loop so that initialization prior to calling EmLoop() will + be the same as initialization done during a call to a FCEUD_* function. + + A few very small changes to sound emulation in fds.c. + + Changed unlink() to remove() in cheat.c and removed the including + of the header file unistd.h. + + Split up the cc=... statement in RefreshLine() to make it easier + to read and not ambiguous(to Borland's C compiler). + + Changed a lot of the function declarations in cheat.c. I'll need + to verify that cheat searching still works ok and that cheats still work + ok. I'll also need to update the Windows(and Linux console) cheat code + to prevent compiler warnings. + + Fixed various minor code problems(not minor if you want to use a + compiler besides gcc). This is an ongoing process... + + Removed bit fields after reading about and thinking about possible + portability problems, though I kept some optimizations in fceline.h + + Minor code simplification in drivers/win/joystick.c(replaced + "case 200 ... 207" and "case 208 ... 215". + + Modified some code to use bit-fields in the graphics rendering code + in fce.c and fceline.h. gcc seems to be able to optimize the new + code to run faster. + + Fixed m6502.c and fce.c to initialize variables on virtual power + toggle. This should fix network play on the Windows port. + I'm also in the process of cleaning up fce.c. + +.75: +---- + Fixed directories configuration stuff in Windows port(corresponds + to .75r2). + + More changes to square wave channel envelope/volume emulation... + Changes described in the large paragraph some lines down have been + abandoned. + + Added a command line switch to set the volume in the dos port. + + Changed Windows sound configuration dialog. Now buffer length is + specified in time, not samples. I also added a volume control. + + Reduced the volume on 8-bit sound output on all ports by 1/2. + + Added a function FCEUI_SetSoundVolume(). Added support for setting + the volume via the command line in the Linux port, other ports coming + soon. + + Changed FCEUD_WriteSoundData() again. No longer has a "Check" + argument. All clipping(ugh) is done internally now. + + Added a directories configuration dialog to the Windows port. I worked + on it too long and I became a zombie, so it might have a few bugs. + That's what guine...err...users are for. ;) Don't expect me to do + anything like this for any other port, though. I don't feel like + doing it on the DOS port, and the Linux and other UNIXy ports shouldn't + really need it. + + Made some changes to the rectangle/square wave channel emulation to + fix the pops in SMB. I have no idea if what I did is correct. To + be honest, I'm not sure I know EXACTLY what I did, but it's something + like this: Writes to $4003/$4007 now reset the duty cycle count + and reload the cycle counter with the current wavelength. Writes to + $4003/$4007 now do not update the amplitude output of the channels; they + will be updated after the cycle counter hits 0(or below). + + More information in iNES informational output. + + Minor changes to mappers/16.c. + + Increased the volume of the VRC6's sawtooth wave channel. + + Added more information to the RAM cheat guide. + + Changed the triangle wave generation code slightly. I decided + to remove support for the higher-frequency triangle waves, as they + are too cpu-costly to create and are probably not very audible on a + real NES anyway. + + Major changes to how sound is mixed. This necessitated a high pass + DC-offset removing filter, and a low-pass filter just to make things + sound better. ^_^ + Note: FCEUD_WriteSoundData() no longer needs to clear the waveform + data referenced by the passed pointer; it's done internally now. + + Fixed JMP ($xxxx) - now handles wrapping like it occurs on a real 6502 + (hopefully; I'm assuming that the same holds true for the NES' cpu). + + Added the ability to load a custom global palette in the DOS port. + + Fixed bug in drivers/common/unixdsp.c(wrong return value if sample + rate was out of range). + + Many sound fixes... - Frequency sweeps, length counter stuff,... + + Changed Windows port to use IDirectInput7 and IDirectInputDevice7 + interfaces. + + Fixed a Game Genie bug in the core emulation code. It only appeared + in the Windows port, though. (Enabling gg emulation, loading a game, + and then disabling gg emulation and loading a new game while in the + gg code entry screen would cause the new loaded game to not work + correctly). + + Modified windows port to use the config saving/loading stuff in + drivers/common/config.c + + Mapper 45 cleanups/fixes. + + Added the ability to load a custom global palette in the Linux port. + Yay. + + Fixed a large number of overcomplicated code and silly bugs in + drivers/common/config.c. This changes the format of the configuration + structure, too. Also added support for saving/loading strings with + automatic memory allocation when strings are loaded. + + Minor change in InitNetplay(). + + Fixed bad type conversions for pointers to functions and fixed + some bad declarations of functions. + + Reenabled zlib support for the sdl build. I need to pay attention + to patches that modify lines than don't fit on my screen. + + Fixed vidblit.c to not emit so many warnings when compiling. + +.74: +---- + + Stop sound in Windows port when user clicks l/m/r mouse buttons + in the non-client area of the window. + + Added "Drag and drop" file open support to Windows port. + + Various code cleanups. + + mappers/33.c optimization. + + Rewrote the function "FCEU_MakeFName()". + + Removed crc32.h from mappers directory. + + Modified some of the window resizing code in the Windows port. + + Added support for waiting for vblank/double buffering to the Windows + port. + + Added/Fixed support for iNES mapper 248. + + After an NSF file is loaded, information about its header is now + displayed. + + Fixed a typo in the Namco 106 extra ram handling code. + + Improved the quality of the Namco 106's extra sound channels. + - Thank Mamiya and Applepie(real name?) for info. + + When an NSF file is being played, FCE Ultra will no longer go through + its scanline rendering loop. This speeds up NSF playback considerably. + + Updated "porting.txt". + + Moved some stuff from DriverInterface() to their own functions. + + Fixed some iNES mapper 18 IRQ counter emulation bugs. "Ninja Jajamaru - + Ginga Dai Sakusen" now works. + + Rewrote large pieces of the mapper 64 code. "Skull and Crossbones" + still doesn't work, though. + + Changed format of iNES header information output, added "ROM CRC32" info. + + Modified the way cycle timing is done slightly. No change + for NTSC emulation, but PAL emulation is a little more accurate. + + Changed the behavior of indirect indexed(I hope I got that right ;)) + instructions to behave more like a real 6502(junk reads are now + performed). + + A few optimizations/cleanups in m6502.c. + +0.73 +---- + + * Fixed several bugs with sprite emulation. Several games(such + as "Trojan" and "VS Duck Hunt") that were broken in .71 and .72 now + work ok. + * Added support for iNES mapper 82. Thanks to those who work on + "unofficial nester". + * Added support for iNES mapper 250(used by "Time Diver Avenger"). + * Fixed the documentation to show that iNES mappers 48, 83, and 232 + are supported. + * Removed various pieces of stale code and fixed a few minor bugs. + * Fixed a triangle wave channel bug(the channel was sometimes enabled + when it shouldn't have been). + * Writing to $4010 with the upper bit clear now acknowledges the DPCM + IRQ. This appears to fix "Stunt Buggies". + * Rewrote pieces of the Zapper emulation code to be cleaner and more + accurate. + * Rewrote the VS Unisystem dip switch drawing code. + * Simplified the setting of VS Unisystem dip switches. The "V" key + now toggles viewing AND editing of dip switches. + +0.72 +---- + + * Various minor bug fixes. + * Various code cleanups and size and speed optimizations. + * Removed some (apparently) unused MMC5 sound emulation code. + * Changed the behavior of $2003 and $4014 to better simulate what occurs + in a real NES. + * Fixed a few bugs in the undocumented 6502 opcode emulation code. + The Game Genie code "NUTANT" for SMB 3 works correctly now, at + least(previously it caused the game to lock up at the end of levels). + * Rewrote large pieces of the 6502 memory fetching code, resulting + in a slight slowdown in the speed of emulation. Benefits include: + Game Genie emulation now works(again) and 6502 emulation is more + accurate. + * Added support for iNES mapper 72. Thanks to rinao for the information. + * Fixed support for iNES mapper 77(used by Napoleon Senki). + * Fixed/Added support for iNES mapper 226. Apparently I made a mistake + in the documentation. Thanks to Mark K. for the information. + * Added support for iNES mapper 227. Thanks to Mark K. for the + information. + * Added support for iNES mapper 234(used by the Maxi-15). Thanks + to Mark K. for the information. Note that many of the Maxi-15 + ROM images on the Internet have corrupt CHR data(graphics), or the + mapper number is set incorrectly(usually to 11). Use a utility to + fix the mapper number. + * Added support for the following UNIF boards(prefixes omitted): + - EKROM (and fixed the reference to "Gemfire" in the documentation). + - HKROM + * Added the ability to enable and disable individual RAM cheats. + * Fixed some problems with the cheat search code(the NES' internal + RAM was being searched differently than any external RAM, which + was being search incorrectly). + +0.71 +---- + + * Fixed a 6502 emulation bug that was causing some Koei games + (ex: Nobunaga's Ambition, Genghis Khan) to not work. + * Extensive PPU/CPU timing adjustments. + * Fixed support for iNES mapper 40. + * Added support for the following UNIF boards(prefixes omitted): + - ETROM + - ELROM + - EWROM + * Fixed a few bugs in the UNIF code. + * Added support for loading and saving cheat files and an interface + to search for/add/delete/list cheats(no interface yet on Linux/DOS). + * Fixed a few minor bugs in the Windows DX code. + * Command line options to control the number of sound fragments + and the fragment size have been added(Linux). + +0.70 +---- + + * Adjusted PPU/CPU timing. + * Removed(until I understand the problem) a hack to get one of the + games in the Caltron 6-in-1 to work. + * Fixed an MMC3 IRQ emulation bug("Project Q" works better now). + * Fixed a problem/misunderstanding regarding the upper scanline. + It can now be displayed again. + * More accurate sprite hit emulation(fixes the title screen of + "Ultimate Stuntman"). + * VRAM bank switching for iNES mapper 4 is now possible(and enabled + for all mapper 4 games without CHR ROM). Fixes "Tenchi o Kurau 2". + * Added support for the Famicom's four-player adapter and the ability + to enable it(it is disabled by default to prevent compatibility + problems). + * Added an option(under miscellaneous configuration) to automatically + open the "File Open" dialog box when FCE Ultra is started. + * Sound sampling rate is now configurable. + * Fixed some bugs in the DirectSound code. + * Joystick button configuration is a little more user friendly(and + stable, hopefully) (Linux). + +0.62 +---- + + * Added support for the Famicom Disk System's extra sound channel. + * Updated the version of Tatsuyuki Satoh's OPL2 emulator used in + FCE Ultra from .36f to .37a. The sound quality in "Lagrange Point" + seems to have improved. + * Added support for iNES mapper 242(used by "Wai Xing Zhan Shi"). + * Fixed a network play bug that could cause desynchronizations + if more than one network play session occured since FCE Ultra + was started. This bug only showed up on the Windows port, though. + * Increased the volume of the noise and triangle sound channels. + * Fixed a save state loading bug. + * Fixed a small memory leak that was being caused by the VRC7 + state loading code. + * Fixed a bug that could cause FCE Ultra to crash if a virtual disk + was being read and the user ejected the virtual disk. + * Various minor bug fixes/code cleanups. + * NTSC color "emulation" can now be enabled again(the code to + enable it was broken in the last version). (Linux) + +0.61 +---- + + * Speed optimizations in sprite rendering code. + * Screen snapshots are now saved in the PNG format instead of the PCX + format. + * Fixed Game Genie emulation(it wasn't working in the last release). + Also added support for Game Genie emulation to the UNIF code. + * Rewrote command line option parsing code. + * Fixed a problem(if FCE Ultra was configured to connect to a remote + host and the remote host was given as an IP address, and the IP + address couldn't be reverse resolved, which is commonly the case + on home LANs, the connection attempt would fail) in the network + play code. I had misinterpreted the Winsock API documentation + when I wrote the code. (Windows) + +0.60 +---- + + * Various speed optimizations. + * Sound is no longer messed up when a JAM/KIL opcode is emulated. + * Fixed an overflow bug that occured when $4014 was written to + during certain(rare) conditions. + * Fixed a few save state bugs. + * Fixed a MMC1 CHR bank switching bug. + * Added emulation of the MMC5's WRAM write-enable/disable registers. + * Fixed a sound frame IRQ emulation bug. "Qix" works now. + * Added UNIF support. Some of the board emulation is still a bit + buggy, though. Look at the documentation for a list of supported + boards. + * Updated the "Palette Notes" section of the documentation. Also + fixed a few other problems with the documentation. + * Added support for loading files in the PKZIP and gzip + compressed file formats via zlib. + * Added the ability to configure the first scanline and the last + scanline to draw to the screen. Enabling PAL emulation no longer + will cause all 239 scanlines to be displayed, though an option + to override these settings for when PAL emulation is enabled may + be in the next version. + * Fixed a bug that would cause the emulated D-pad of virtual gamepads + emulated through the keyboard to be duplicated through "higher" + virtual gamepads(gamepad 1 would affect 2,3,4; gamepad 2 would + affect 3,4; etc.). (Windows) + +0.55 +---- + * Rewrote window resizing code. The window will now resize itself + to a multiple of the NES' screen dimensions nearest to the user + selected dimensions. (Windows) + * Added an option to use buttons instead of axes on physical joysticks + for the emulated D-Pad. This is useful for some digital joysticks. (Windows) + * Fixed a bug that would cause FCE Ultra to crash if sound were + disabled during emulation. (Windows) + * Added the ability to "fast forward" emulation. + * Added an option to allow more than 8 sprites per scanline to be + displayed. + * Added an option to save all extra non-volatile game data + (such as battery-backed RAM) in a directory under FCE Ultra's + base directory(as opposed to the directory the game is located in). + * Added an option to allow the emulator to change to a full screen + video mode once a new game is loaded. (Windows) + * Rewrote pieces of DirectInput joystick handling code. Hopefully + it should increase compatibility. (Windows) + * Added the ability to automatically obtain button numbers when + configuring joysticks, by pressing buttons on the joystick. + * Added the ability to close the current game(decreases CPU usage). (windows) + * Increased the speed of various function calls by passing + arguments to functions through registers instead of through the + stack. + * Added emulation of the MMC5's raw PCM register. + * Added the ability to save/load save states while network play + is occuring. + * Having PAL emulation enabled will no longer override the + NTSC/PAL settings in NSF headers. + * Fixed a bug that got into the .54 release. Extraneous data was + being returned on reads from $2002, which caused problems + with some games(such as "Choujin Sentai Jetman"). + +0.54 +---- + * Fixed a bug that would cause a wrong battery-backed WRAM file + name to be produced if FCE Ultra was passed a file name without + any directory component(such as "fceu SuperBlah.nes"). + * Fixed an iNES mapper 118 emulation bug that got into the code + in a recent code cleanup. "Armadillo" is playable again. + * Fixed a typo(and bug) in the MMC5 emulation code. + * Data returned from emulated reads to "unmapped" areas or + memory locations where bits are undefined should now be correct. + * Fixed emulation of the sprite memory transfer register $4014. + It now takes into account the last value written to $2003 and + starts the transfer to that location in sprite memory(like on + a real NES). + * Added a video configuration dialog box. (Windows) + * Added the ability to configure a custom video mode. Aspects + that are configurable include width, height, bits per pixel, + and size transforming(stretching and scaling). (Windows) + +0.53 +---- + + * Fixed a bug with joysticks that occured on systems with multiple + joysticks. (Windows) + * Added support for iNES mappers 77 and 92(thanks to LULU for the code for both). + * Added partial(timer is non-configurable) support for iNES mapper 105. + * Changed save state format again. Save states made with previous + versions should still be compatible, though this may change in + future versions. + * Small optimization to sprite emulation code. + * Rewrote color-deemphasis code to use integer math instead of + floating-point math. + * Rewrote and restructured input code. (Linux) + * Added command line option "-f8bit" to force 8-bit sound. (Linux) + * Rewrote and restructured input code. Among other new features, + keyboard keys are now somewhat configurable. (Windows) + * Writes to $4003/$4007 will now reset the emulated square wave + duty cycle generator. + * Added emulation of the Power Pad. + * Rewrote joystick device reading code to use the event-driven + interface. This should fix various problems regarding support + for joysticks with many buttons. (linux) + +0.52 +---- + + * Fixed a PCM emulation bug(digitized voices in "Ikari Warriors 2" + and "The Immortal", among others, work now). + * Fixed noise channel's LSFR update frequencies(hopefully). + * Various minor bug fixes. + +0.51 +---- + + * Added support for iNES mappers 86 and 89. + * Reduced byte size of the NSF player's background. + * Adjusted CPU/PPU timing. + * Fixed sound channel frequency calculations for when PAL emulation is enabled. + * Rewrote large pieces of the sound code and got rid of the sound queue. Sound quality should be slightly better now. + * Various minor bug fixes. + + Windows: + + * Fixed an FDS side reset bug when a new game is loaded. + * Screen width/depth/height changes while FCE Ultra is in windowed mode are handled now. + * Changed the configuration file format. + * Added a palette configuration dialog. + * Added the ability to load a custom NES palette. + * Added an option to double 16-bit sound volume. + * Added an option to force 8-bit sound. + * Added an option to use a secondary sound buffer(versus the primary). + * Added an option to wait for vertical blank if sound is disabled. + * Added an option to run while focus is lost. + +0.50 +---- + + * Many bug fixes. + * Sound code partially rewritten to improve quality(near-perfect + raw PCM now) and eliminate the need for a separate thread. + This created a small problem with network play, though, so read + the network play notes section. Also, synchronizing to + vertical blank has been removed. + * Rewrote other pieces of sound code. No more "buzzing" in MegaMan 2, + Codemasters games' intros, etc. + * Added support for the NES Zapper and the VS Unisystem's light + gun. Be sure to read "Light Gun Notes". + * Changed save state format. Save states should now be much + smaller for most games. Most(not all) save states created with + an older version should work. + * Added support for VS Duck Hunt and VS Hogan's Alley. + diff --git a/branches/fceux-2.2.2/attic/Makefile.am b/branches/fceux-2.2.2/attic/Makefile.am new file mode 100644 index 00000000..d397280d --- /dev/null +++ b/branches/fceux-2.2.2/attic/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = src diff --git a/branches/fceux-2.2.2/attic/SConstruct.pre1.0 b/branches/fceux-2.2.2/attic/SConstruct.pre1.0 new file mode 100644 index 00000000..bac63f3d --- /dev/null +++ b/branches/fceux-2.2.2/attic/SConstruct.pre1.0 @@ -0,0 +1,147 @@ +# Use this SConstruct if you are using scons < 1.x +# Just replace the SConstruct file with this one +# cp SConstruct.pre1.0 SConstruct +# +# or just updated scons already + +import os +import sys +import platform + +opts = Options() +opts.AddOptions( + BoolOption('FRAMESKIP', 'Enable frameskipping', 1), + BoolOption('OPENGL', 'Enable OpenGL support', 1), + BoolOption('LSB_FIRST', 'Least signficant byte first (non-PPC)', 1), + BoolOption('DEBUG', 'Build with debugging symbols', 1), + BoolOption('LUA', 'Enable Lua support', 1), + BoolOption('NEWPPU', 'Enable new PPU core', 1), + BoolOption('CREATE_AVI', 'Enable avi creation support (SDL only)', 0), + BoolOption('LOGO', 'Enable a logoscreen when creating avis (SDL only)', '1'), + BoolOption('GTK', 'Enable GTK2 GUI (SDL only)', 1), + BoolOption('GTK_LITE', 'Enable GTK2 for dialogs only', 0) +) + +env = Environment(options = opts) + +# LSB_FIRST must be off for PPC to compile +if platform.system == "ppc": + env['LSB_FIRST'] = 0 + +# Default compiler flags: +env.Append(CCFLAGS = ['-Wall', '-Wno-write-strings', '-Wno-sign-compare', '-O2', '-Isrc/lua/src']) + +if os.environ.has_key('PLATFORM'): + env.Replace(PLATFORM = os.environ['PLATFORM']) +if os.environ.has_key('CC'): + env.Replace(CC = os.environ['CC']) +if os.environ.has_key('CXX'): + env.Replace(CXX = os.environ['CXX']) +if os.environ.has_key('WINDRES'): + env.Replace(WINDRES = os.environ['WINDRES']) +if os.environ.has_key('CFLAGS'): + env.Append(CCFLAGS = os.environ['CFLAGS'].split()) +if os.environ.has_key('LDFLAGS'): + env.Append(LINKFLAGS = os.environ['LDFLAGS'].split()) + +print "platform: ", env['PLATFORM'] + +# special flags for cygwin +# we have to do this here so that the function and lib checks will go through mingw +if env['PLATFORM'] == 'cygwin': + env.Append(CCFLAGS = " -mno-cygwin") + env.Append(LINKFLAGS = " -mno-cygwin") + env['LIBS'] = ['wsock32']; + +if env['PLATFORM'] == 'win32': + env.Append(CPPPATH = [".", "drivers/win/", "drivers/common/", "drivers/", "drivers/win/zlib", "drivers/win/directx", "drivers/win/lua/include"]) + env.Append(CPPDEFINES = ["PSS_STYLE=2", "WIN32", "_USE_SHARED_MEMORY_", "NETWORK", "FCEUDEF_DEBUGGER", "NOMINMAX", "NEED_MINGW_HACKS", "_WIN32_IE=0x0600"]) + env.Append(LIBS = ["rpcrt4", "comctl32", "vfw32", "winmm", "ws2_32", "comdlg32", "ole32", "gdi32", "htmlhelp"]) +else: + conf = Configure(env) + if not conf.CheckLib('SDL'): + print 'Did not find libSDL or SDL.lib, exiting!' + Exit(1) + if not conf.CheckLib('z', autoadd=1): + print 'Did not find libz or z.lib, exiting!' + Exit(1) + if env['GTK'] or env['GTK_LITE']: + # Add compiler and linker flags from pkg-config + env.ParseConfig('pkg-config --cflags --libs gtk+-2.0') + env.Append(CPPDEFINES=["_GTK2"]) + if env['GTK']: + env.Append(CCFLAGS = ["-D_GTK"]) + env.Append(CCFLAGS =["-D_GTK_LITE"]) + if env['GTK_LITE']: + env.Append(CCFLAGS =["-D_GTK_LITE"]) + + ### Lua platform defines + ### Applies to all files even though only lua needs it, but should be ok + if env['LUA']: + if env['PLATFORM'] == 'darwin': + # Define LUA_USE_MACOSX otherwise we can't bind external libs from lua + env.Append(CCFLAGS = ["-DLUA_USE_MACOSX"]) + if env['PLATFORM'] == 'posix': + # If we're POSIX, we use LUA_USE_LINUX since that combines usual lua posix defines with dlfcn calls for dynamic library loading. + # Should work on any *nix + env.Append(CCFLAGS = ["-DLUA_USE_LINUX"]) + + ### Search for gd if we're not in Windows + if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI'] and env['LOGO']: + gd = conf.CheckLib('gd', autoadd=1) + if gd == 0: + env['LOGO'] = 0 + print 'Did not find libgd, you won\'t be able to create a logo screen for your avis.' + + if conf.CheckFunc('asprintf'): + conf.env.Append(CCFLAGS = " -DHAVE_ASPRINTF") + if env['OPENGL'] and conf.CheckLibWithHeader('GL', 'GL/gl.h', 'c++', autoadd=1): + conf.env.Append(CCFLAGS = " -DOPENGL") + conf.env.Append(CPPDEFINES = ['PSS_STYLE=1']) + # parse SDL cflags/libs + env.ParseConfig('sdl-config --cflags --libs') + + env.Append(CPPDEFINES=["_S9XLUA_H"]) + env = conf.Finish() + +if sys.byteorder == 'little' or env['PLATFORM'] == 'win32': + env.Append(CPPDEFINES = ['LSB_FIRST']) + +if env['FRAMESKIP']: + env.Append(CPPDEFINES = ['FRAMESKIP']) + +print "base CPPDEFINES:",env['CPPDEFINES'] +print "base CCFLAGS:",env['CCFLAGS'] + +if env['DEBUG']: + env.Append(CPPDEFINES=["_DEBUG"], CCFLAGS = ['-g']) + +if env['PLATFORM'] != 'win32' and env['PLATFORM'] != 'cygwin' and env['CREATE_AVI']: + env.Append(CPPDEFINES=["CREATE_AVI"]) +else: + env['CREATE_AVI']=0; + +Export('env') +SConscript('src/SConscript') + +# Install rules +exe_suffix = '' +if env['PLATFORM'] == 'win32': + exe_suffix = '.exe' + +fceux_src = 'src/fceux' + exe_suffix +fceux_dst = 'bin/fceux' + exe_suffix + +auxlib_src = 'src/auxlib.lua' +auxlib_dst = 'bin/auxlib.lua' + +fceux_h_src = 'src/drivers/win/help/fceux.chm' +fceux_h_dst = 'bin/fceux.chm' + +env.Command(fceux_h_dst, fceux_h_src, [Copy(fceux_h_dst, fceux_h_src)]) +env.Command(fceux_dst, fceux_src, [Copy(fceux_dst, fceux_src)]) +env.Command(auxlib_dst, auxlib_src, [Copy(auxlib_dst, auxlib_src)]) + +# TODO: Fix this build script to gracefully install auxlib and the man page +#env.Alias(target="install", source=env.Install(dir="/usr/local/bin/", source=("bin/fceux", "bin/auxlib.lua"))) +env.Alias(target="install", source=env.Install(dir="/usr/local/bin/", source="bin/fceux")) diff --git a/branches/fceux-2.2.2/attic/TODO-SDL-2.1.6.md b/branches/fceux-2.2.2/attic/TODO-SDL-2.1.6.md new file mode 100644 index 00000000..83f6576e --- /dev/null +++ b/branches/fceux-2.2.2/attic/TODO-SDL-2.1.6.md @@ -0,0 +1,118 @@ +BUGS +==== +Save/Load State Console Print Bug +--------------------------------- +* ie: + -select state- + State -777722344 saved + +* If the root of the bug cannot be determined by release time, just #ifdef the print statement for win32 + +Clip sides bug in BOTH WINDOWED AND FULLSCREEN mode +--------------------------------------------------- +* Go to game genie with clip sides enabled or save a state to see +* Ensure no clip sides is only being enabled during fullscreen + +DONE! Gamepad dialog and others segfault on Ubuntu 10.04 (and older GTK versions) +--------------------------------------------------------------------------------- +* Not planning on using legacy code here (especially with Ubuntu 12.04 on its way) but perhaps +a messagebox can be displayed recommending the user to upgrade their GTK version to prevent +the frustrating segfault. Segfaults need to be avoided like the plague. + +* This is fixed in r2447. FceuX will print a warning to the console that the GTK version is old, and +provide instructions on how to configure the gamepad. +* Maybe we should also provide a GTK MessageBox with this info? + +FEATURES +======== +XDG Standardization of Config +----------------------------- +* fceux currently stores stuff to ~/.fceux by default +* FD.O/XDG recommends default to be ~/.config/fceux (and to check $XDG_whatever) +* If the XDG folder exists, use it. If NO folder exists, use the XDG folder. +* If .fceux exists, display a warning message but use .fceux +* Don't move around people's config files without asking (or at all in this case) + +input.cpp +========= +* This code is a fscking mess! However, now is not the time to clean it. Perhaps set a goal to clean this file up for +2.1.7, but cleaning this for 2.1.6 is not realistic (and would break too many things and require more testing time) + +DISTRO TESTING +============== +Summary +------- +* Out of box working distros: + * Arch Linux + * Ubuntu 10.04 + * Ubuntu 12.04 +* Works, but needs patching: + * Fedora Core 16 +* Couldn't get working + * openSUSE +* Untested: + * Linux Mint + * Debian + + +Arch Linux 64 bit +----------------- +* Flawless installation from fceux-svn in [aur]. No issues other than the ones already noted. +* Dpendencies: sdl, gtk2, scons libz + +Ubuntu 10.04 +------------ +* Compiles/builds without issue. +* Build deps: libsdl1.2-dev, scons, libgtk2.0-dev, zlib-dev, build-essentials +* No issues found in gameplay. +* DONE Some dialogs with segfault FCEUX due to an older version of GTK. Perhaps we can detect the old version of GTK and just prevent the dialog from being opened so the segfault doesnt occur? (bug added). + * DONE Wrote CheckGTKVersion(), which will be used like CheckGTKVersion(2, 24) to check the GTK version before segfaulting on dialogs + * DONE Implement a check for the dialogs that would bomb -- (a hook in init; makes all items under Options inacessible besides fullscreen if under 2.24) + +Ubuntu 12.04 Beta +----------------- +* Compiles/builds without issue. +* GTK3 preferred for Unity +* Build deps: libsdl1.2-dev, scons, libgtk-3-dev, zlib-dev, build-essentials +* No issues AFAICS + +Fedora Core 16 +-------------- +* Dependencies: subversion, scons, SDL-devel, gtk2-devel/gtk3-devel, gcc, [glib-devel?] +* You also need to install the "Development Tools" group: + + yum groupinstall "Development Tools" + +* scons bombs out (another missing dependency? + + /usr/bin/ld: src/lua/src/loadlib.o: undefined reference to symbol 'dlclose@@GLIBC_2.2.5' + /usr/bin/ld: note: 'dlclose@@GLIBC_2.2.5' is defined in DSO /lib64/libdl.so.2 so try adding it to the linker command line + /lib64/libdl.so.2: could not read symbols: Invalid operation + collect2: ld returned 1 exit status + scons: *** [src/fceux] Error 1 + scons: building terminated because of errors. + + * This was fixed by forcing "-ldl" to the linker command line. This can be done by adding the following + to line 92 of the SConstruct: + + env.Append(LINKFLAGS = ["-ldl"]) + + * TODO Answer some questions: + 1. Is -ldl necessary everywhere? + 2. Should we always use it? If not what can we test for for when to use it? + + * Check the code circa line 92 in SConstruct for a Fedora resolution. + + * Tested with GTK2, runs smoothly in VirtualBox. + +openSUSE 12.1 +------------- +* scons bombs out because can't find libgtk; I can't find gtk headers package + +PROJECT STUFF +============= +* Contact debian package management about inclusion +* Create a sane release procedure script that generates a release ready tarball +* DONE - Create markdown file of README +* Locate important features/changes new to 2.1.6 and summarize them. + diff --git a/branches/fceux-2.2.2/attic/acinclude.m4 b/branches/fceux-2.2.2/attic/acinclude.m4 new file mode 100644 index 00000000..a2d04875 --- /dev/null +++ b/branches/fceux-2.2.2/attic/acinclude.m4 @@ -0,0 +1,357 @@ +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN(AM_PATH_SDL, +[dnl +dnl Get the cflags and libraries from the sdl-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + if test x$sdl_exec_prefix != x ; then + sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_args="$sdl_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi + fi + + AC_PATH_PROG(SDL_CONFIG, sdl-config, no) + min_sdl_version=ifelse([$1], ,0.11.0,$1) + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl-config to some extent +dnl + rm -f conf.sdltest + AC_TRY_RUN([ +#include +#include +#include +#include + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) + +/* Steven G. Johnson and Alejandro Forero Cuervo */ +AC_DEFUN([ACX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_SAVE +AC_LANG_C +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) + AC_MSG_RESULT($acx_pthread_ok) + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# pthread: Linux, etcetera +# --thread-safe: KAI C++ + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthread or + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [acx_pthread_ok=yes]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT($acx_pthread_ok) + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: threads are created detached by default + # and the JOINABLE attribute has a nonstandard name (UNDETACHED). + AC_MSG_CHECKING([for joinable pthread attribute]) + AC_TRY_LINK([#include ], + [int attr=PTHREAD_CREATE_JOINABLE;], + ok=PTHREAD_CREATE_JOINABLE, ok=unknown) + if test x"$ok" = xunknown; then + AC_TRY_LINK([#include ], + [int attr=PTHREAD_CREATE_UNDETACHED;], + ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) + fi + if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then + AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, + [Define to the necessary symbol if this constant + uses a non-standard name on your system.]) + fi + AC_MSG_RESULT(${ok}) + if test x"$ok" = xunknown; then + AC_MSG_WARN([we do not know how to create joinable pthreads]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + AC_MSG_RESULT(${flag}) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with cc_r + AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) +else + PTHREAD_CC="$CC" +fi + +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_CC) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + : +else + acx_pthread_ok=no + $2 +fi +AC_LANG_RESTORE +])dnl ACX_PTHREAD diff --git a/branches/fceux-2.2.2/attic/aclocal.m4 b/branches/fceux-2.2.2/attic/aclocal.m4 new file mode 100644 index 00000000..42e071f0 --- /dev/null +++ b/branches/fceux-2.2.2/attic/aclocal.m4 @@ -0,0 +1,879 @@ +# generated automatically by aclocal 1.9.5 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.5])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([acinclude.m4]) diff --git a/branches/fceux-2.2.2/attic/authors b/branches/fceux-2.2.2/attic/authors new file mode 100644 index 00000000..f4220e5a --- /dev/null +++ b/branches/fceux-2.2.2/attic/authors @@ -0,0 +1,30 @@ +A list of people who have contributed code to FCE Ultra follows. +Please note that the "Code Contributions" field may not be all inclusive; +the coder may have done more than what is listed. + +Name/Alias Code Contributions Contact Information +------------------------------------------------------------------------------ +Aaron Oneal Many changes to compile http://www.morphgear.com + with MSVC and first frame + skipping code. + +BERO Base FCE code. bero@geocities.co.jp + +CaH4e3 Some mapper code. CaH4e3 at mail dot ru + +\Firebug\ VGA register setting code. ?? + +Joe Nahmias man pages. + +LULU SDL network play code. ?? + +Paul Various code for the official kuliniew@purdue.edu + Kuliniewicz SDL port. + +Quietust VRC7 "translation" code. quietust@ircN.org + +Tatsuyuki OPL2 emulator. ?? + Satoh + +Xodnizel Most of the FCE Ultra code. http://xodnizel.net/ + diff --git a/branches/fceux-2.2.2/attic/changelog b/branches/fceux-2.2.2/attic/changelog new file mode 100644 index 00000000..359eee9a --- /dev/null +++ b/branches/fceux-2.2.2/attic/changelog @@ -0,0 +1,1674 @@ +November 12, 2003 - 0.97.5 Release + + Windows: Added limited support for arguments that change configuration + to be passed to FCE Ultra. Example: fceu -pal 1 c:\streetgangs.nes + It may be useful in frontends. + + Fixed filename generation for automatic IPS patching when a file + with no extension is loaded. Before this change, FCEU would + look for "game..ips" with a file named "game". + + Converted and updated the cheat guide in(to) HTML. + + Added support for iNES mappers 202,203,231 from info from cah4e3. + Fixed support for mappers 60, 200. + + Fixed various major bugs in the breakpoint deletion code. + + UN*X: Added support for OSS(/dev/dsp) devices that don't support mono + sound. + + Increased PPU startup idle time to 2 frames. Fixes that + unlicensed "Earthworm Jim 3" game. Does it break anything? + +November 9, 2003 - 0.97.4 Release + + Fixed another obscure PPU emulation screen corruption bug. + + Added support for Game Genie cheats in the cheat interface. + + Windows: Reworked the cheat interface, merging the cheat search + and cheat list windows into one. + + Windows: Greatly improved the CPU debugger. + The code still needs a lot of cleaning, though. + + Readjusted VRC6 IRQ emulation timing. + + Added support for the UNIF MMC3 board TEROM. The maximum PRG/CHR sizes + may not be correct in this implementation, though. + +November 8, 2003 - 0.97.3 Release + + Added a control to set the highest quality sound mode in Windows. + This change requires that any users who previously set + "high quality sound" to set it again. + + Fixed the volume of high-quality sound mode again. The changes + I made earlier didn't affect all the filter coefficients. + +November 8, 2003 - 0.97.2 Release + + Made a minor optimization to writes to palette memory. + + Altered VRC6 IRQ emulation timing slightly. + + Fixed a weirdo PPU emulation bug that could cause garbage on the right + side of the screen in certain situations. Thanks to FrenziedPanda for + bugging me enough to make me look into the problem and fix it. + I should be on the lookout to see if the fix breaks anything, though. + + Fixed the volume of high-quality sound mode(-soundq 1). It was + at 1/4 the volume it should have been. I compensated by increasing + the precision of the filter coefficients, which increased the sound + quality of that mode slightly without hurting performance. + +November 7, 2003 - 0.97.1 Release + + Fixed mapper 105 emulation. I had begun merging it into the + rest of the MMC1 code for 0.97, but I hadn't finished it. + + Changed things like RdMem(_PC++); to RdMem(_PC); _PC++; + Darn evil global variables. I need to fix them. Screw speed. + + Expanded checks for the global variable "fceuindbg"(used in debug + mode to prevent reads in the debugger from altering any registers). + +November 6, 2003 - 0.97 Release + * Note: I still had much more I had wanted to get done for 0.97, + but I lost even more interest. The Windows port still doesn't + have a way to enable the "highest" sound emulation mode, nor the + low pass filter code, not to mention that the lowpass filter code + isn't complete(I would need to design a high-order FIR filter from an IIR + filter to work properly-have the correct rolloff, among other + things-at finite playback rates). + + Fixed a bug in the IPS patcher. The recorded size wasn't being updated + after a successful realloc() was made, which could lead to corrupted patch + data from some patches. + + Added support for mappers 200, 201 from submitted code. + + Rewrote mapper 15 support to make more sense(well, depending + on your point of view...). + + Fixed 256KB CHR select support for mapper 115. + + Added support for mapper 12 from code from cah4e3. + +October 16, 2003 - Snapshot + + Fixed support for mapper 245(for nonencrypted/non-smynes-screwed up + ROM images only. Fixes "Yong Zhe Dou E Long [...] Dragon Quest 7". + + Added support for mappers 60, 62, 230, 244 from submitted code. + + Modified mapper 90 emulation to allow game-select on reset + for "Final Fight 3". + + Modified mapper 45 emulation to allow "Super 8-in-1" to work. + + Added a low-pass filter, and an option to enable it(CLI ports). + + 0x00 is now written to $4011 in the NSF player code instead of 0x40. + Fixed some other similar sound register init problems that I had fixed + in Festalon but forgot to fix in FCEU. Grrr. + + Removed some unnecessary 64-bit integer usage from FIR sound filtering + code. + + Added a new sound quality mode. Higher than high, it's highest(in + FCE Ultra, for now). Still need to fix the interface to allow + enabling it in the Windows port. + + Added some code for lower-level MMC3 IRQ emulation. It isn't completed + , and will not work properly as-is. I'm still playing around with + it occasionally. + + Fixed the sprite overflow flag(I think I fixed it), that was broken in an earlier + pre-0.97 release. + + Fixed support for iNES mapper 193. + + Command line arguments "-pal" and "-gg" now take extra arguments(1/0) + and are remembered in the configuration file. + +September 27, 2003 - Snapshot + + Added support for iNES mapper 50. + + Modified the UNIF board initialization code. Hopefully, this + new interface will eventually be used with the iNES code. + + Miscellaneous code cleanups. + + /dev/dsp is now set to 8(previously 9) buffers of 128 samples in length + in the SDL code. + + Tried to make the save state code more expandable and modular. + + Moved a lot of the PPU code into ppu.c. + + Added more extensive debugging code to the 6502 emulator, to allow + for memory read/write hooks(including zero page addressing modes). + + Readadjusted DMC timings when PAL emulation is enabled. It looks + like it was correct before I had made the August 2 change. Thanks + to Bananmos for the information. I think. :/ + + Added support for iNES mapper 193 from information from virtuanes. + I think my dump of it is "bad", though. PRG and CHR pages look + like they are in the wrong order(logical vs physical? Who's to say + what's physical?). + +September 1, 2003 - Snapshot + + Fixed some minor initialization issues with iNES mappers 7 and 34. + + Added support for UNIF board NES-GNROM. + + Removed support for save states created with versions of FCE Ultra + less than 0.56. + + Replaced SDL sound buffering code with a lock-free FIFO implementation + written by David Olofson, with a few modifications by myself. + + Fixed a VRC7 NSF bug(it showed up under the reworked driver/file + loading order in the cli code). + + The board in "Rolling Thunder" has "RAMBO 1" on it, not "RAMBO-1". + +August 9, 2003 - Snapshot + + Removed the old plain text documentation and replaced it with + a new document in HTML. It is not completed yet, though. + + Rewrote the SDL-native audio code to be less wacky and more + thread-safe(hopefully). I'm still waiting for a new SDL audio + API... + + Altered the MMC5 IRQ timing. Fixes minor graphical glitches + in Castlevania 3. Does it break anything? + + Removed some debugging code that got into the last snapshot. + +August 5, 2003 - Snapshot + + Added some code in the IPS patcher to allow for expanding the size of files. + + Fixed a double free() bug with a mapper 51 game(in ines.c). + + Added support for "Alien Syndrome" (US release) as iNES mapper 158. + It looks like a derivative of the normal RAMBO-1 board(or is that + the name of the chip?), similar to TKSROM/TLSROM(mapper 118). + + Improved the "native" SDL sound code. It will now call SDL_Delay(), + among other nice things. The code could probably be improved more, + though. + + Added support for decimal components in xscale/yscale in the SDL + port. Set the default xscale for windowed mode to 2.40(to get a + more correct aspect ratio, assuming the display is currently at + a 4:3 aspect ratio). + + Modified args.c to handle floating-point numbers. + +August 2, 2003 - Snapshot. + + Disabled texture wrapping with OpenGL(there were problems at the edges + of the screen with linear interpolation). Bah. Now the edges + are too bright... + + Improved the accuracy of the DMC timing when PAL emulation is enabled. + I still don't think it's totally correct, though. + + Changed the default settings for the SDL code. Full screen + is now 640x480x8bpp by default, xscale and yscale are 2 for both full + screen and windowed, opengl support is enabled, linear interpolation + for OpenGL is enabled, and X-axis stretching is + enabled(in full screen). + + "Scanlines" were enabled in 8bpp to 8bpp blits in + drivers/common/vidblit.c when they shouldn't have been. Fixed. + + Fixed OpenGL code under big-endian platforms. + +August 1, 2003 - Snapshot. + + Various code clean-ups. + + Played around with adding a GTK+ GUI to the SDL code. + + Rewrote part of the hq sound rectangle wave code. + + Replaced the high-quality sound inline assembly filter code with + slightly faster C code. + + Hacked around with GP32 support. I don't know if the GP32 would + be fast enough, though. + + Skipped frames will now have D5 of $2002 set at the beginning + of the frame. Fixes "Bee 52". I must see if it breaks anything. + + Added OpenGL support to the SDL code. + + Removed the PPU drawing inline assembly code, replacing it with a faster + algorithm written in C. + + "Disabling" the 8-sprite limitation will no longer cause + "Bee 52" to break. However, the "Solstice" wizard will still + have the weird thing growing out of his face in the introduction, + since it depends on no more sprites to be rendered. + + Added entry for that Black Bass game for header corrections in + ines.c + + Strip color burst bit(D0 of $2001) is only "emulated" if bg or + sprite rendering are turned on, at the end of the scanline. + Doing it with pixel/tile granularity would require modifying + the sprite graphics data copying routine, which I don't + feel like doing. Fixes that crazy Sayoonara demo by Chris Covell. + I also modified the NES RAM initialization code. + + Adjusted VRC7 IRQ emulation for better Lagrange Point goodness. + + Added support for iNES mapper 91. (VirtuaNES) + +0.96: + Improved RAMBO-1(mapper 64) emulation. "Skull and Crossbones" is + now playable. + +0.95: + + timestamp and timestampbase are no longer saved/loaded to/from + save states. They were causing too many problems I didn't + want to fix, and I never intended them to be saved in save states + when I wrote the code that uses them. + I think the reason they were being saved was that I wanted to make it + possible to add movie support and network play save state loading + (distributing the save state over the network). So if someone in + the future wants to add these features, the issues(primarily with + zapper emulation and sound emulation) with saving the time stamp will + need to be resolved. + + Fixed some crashing bugs when save states are loaded when + high-quality sound emulation is enabled. It is like patching + holes in a swiss-cheese boat. All the holes may be patched, but + it looks ugly. At least it tastes good... + TODO: Look into saving more data in the save states, especially + data that is based off of "timestamp" and "timestampbase". Also + look into validating this data. Right now, corrupt save state data + might cause memory corruption in FCE Ultra. + + Fixed some bugs in the NSF player. + + Cleaned up more code. + + Reduced the usage of TriggerIRQ(). + + Split the palette code into a new file, palette.c, from svga.c + + Low-G-Man(NTSC and PAL versions) are now recognized by CRC32 value, + and WRAM will be disabled if they are loaded. A warning/status message + will also be printed regarding this issue. + + Decreased the volume of the DMC/PCM channel in low-quality sound + emulation. + + Low-quality sound emulation now uses 32-bit integers for much + better speed. + + FCEUI_CRC32() wasn't returning anything. D'oh. Fixed. + + Added somewhat crude support for games that switch background CHR data + mid-scanline (this is needed in games such as Mother, Pirates!, + Business Wars, and Marble Madness). + + Altered NMI, IRQ, and BRK emulation again. Fixes some games, + like Bases Loaded 2 and Dynamite Bowling, and maybe some others. + I had to increase the size of the IRQlow variable for delayed + NMI execution... I also had to add a delay between PPU reset + and the PPU actually doing anything, to fix "Knight Rider". + + Fixed a mapper 90 save state bug. + + /dev/dsp code now searches for /dev/dsp before /dev/dspX (where X is + a non-negative integer). + + SDL joystick axes configuration is now done from the joystick. + + Tweaked various Konami mappers' IRQ counter emulation. + + Added custom SDL throttle code that gives up time slices instead of + using 100% cpu. + + Fixed an issue with sprite priorities on MSB-first platforms. + + Modified powerpad.c to avoid a symbol conflict when compiling on the + Power PC architecture. + +0.94r3: + sound.c: + Fixed a divide-by-zero bug that occurred when a virtual + reset(like by pressing F10) occurred when sound emulation was + disabled. + +0.94r2: + drivers/common/vidblit.c: + Fixed code for 32bpp blur effect. + + drivers/cli/sdl-video.c: + Added error message for unsupported bit depths. + + mappers/simple.c, ines.c: + Used this bug fix pseudo-release as an excuse to add + support for mapper 107. Information taken from virtuanes. + +0.94(fixed release) +--- + Fixed call to InitUNIXDSPSound in svgalib.c + + Added man pages. + +0.94 +--- + Added support for rapid fire A/B buttons on physical joysticks + in SDL/svgalib/DOS code. + + Implemented "high-quality" Namco 106 emulation(used for hq sound mode). + In this case, "high-quality" means sounding more like it should, + not necessarily cleaner. I'm not certain that it's totally correct, + but it's in the right direction. + + RAM cheats should no longer affect Game Genie emulation. I still + need to completely verify this. There may be some sort of race + condition. + + Removed various minor speed hacks in the name of style and + correctness(and to make maintaining FCE Ultra easier for those + people who are not me). :) + + Removed NSF cpu hacks, as I changed code to make them unnecessary. + + Fixed another FDS IRQ emulation bug. "Famicom Grand Prix II" works + now. + + Fixed a memory leak and a heap corruption bug in "file.c". + + Added support for on-the-fly IPS patching. + Place the IPS file in the same directory as the file to load, + and name it filename.ips. + + Examples: Boat.nes - Boat.nes.ips + Boat.zip - Boat.zip.ips + Boat.nes.gz - Boat.nes.gz.ips + Boat - Boat.ips + + Some operating systems and environments will hide file extensions. + Keep this in mind if you are having trouble. + + Patching is supported for all supported formats(iNES, FDS, UNIF, and + NSF), but it will probably only be useful for the iNES format. It + can be used with the FDS format, but be warned that it will permanently + patch your disk image, as the disk image is written back to disk + when the game is unloaded(unless the disk image is in a zip file, in + which case it isn't written back to disk). UNIF files can't be + patched well with the IPS format because they are chunk-based with no + fixed offsets. Support for a UNIF patching format may be added + in the future(probably by someone else.). + + Added more games to the list in ines.c for having battery-backed + WRAM, for header corrections. + + Copied over the 96KHz filter coefficients from Festalon that I forgot + to do in 0.92. Oops. + + +0.93 +--- + + Reduced the volume of the FDS sound channel. + + Fixed a bug in the FDS IRQ emulation code that caused "Lutter" to not work. + + Fixed a bug in unif.c that would cause a crash if a unif file were + loaded without a board name being specified(as could happen + with a corrupted nsf). + + Fixed a bug in general.c relating to relative filenames(running + fce ultra like "./fceu ../big.nes" would work, but "./fceu ../big" + would not work- it crashed). + + + +0.92r2 +--- + Fixed dpcm irq bug that broke Cobra Triangle. + +.92 +--- + + Removed NSF player background, and added some special effects goodies. + + Changed the NSF player to use the emulated gamepad as input instead + of having special NSF-player-only keys. + + Added support for mapper 249(using nonencrypted games), thanks to SARO + for info. SMYNES sucks. + + Updated video blitting library-thing(vidblit.c) with more special + effects, and removed 24bpp support. + + SDL cleanupification. + + Added support for mapper 61. + + nnnesterj: Added support for mapper 57. + + Fixed mapper number for "Golden Game 150 in 1". Changed it to 235 + from 43. + + DDraw back buffer surfaces are now created in system memory if the + hardware blitter can't do stretching. + + Restructured file wrapping code. + + Added new cheat search methods. + + Fixed a major cheat unloading memory bug(and memory leak). + + Emulated that funky nonlinear DAC effect for hi-quality sound. + + More fixes/cleanups to FDS emulation code. + + Tweaked PPU timing a bit. + + Improved network play. + + Holding the enter key down will no longer do fun stuff to the nsf + player. + + Improved NSF player. It should support streaming pcm nsfs now... + + Changed FDS keyboard keys around a bit. F6 is the disk select key, + and F8 is the disk insert/eject key. + F8 to insert VS Unisystem coin, F6 to view/toggle dip switches. + Hopefully people won't complain after blindly hitting the save state + buttons. :) + + Many fixes and improvements to the Windows port. No more cpu-consuming + wait loops(specifically, sound). Added a message window. + + FDS sound emulation improvements. + + FDS disks are now auto-inserted on power on(or was it loading a new + game...). + + Changed the default last rendered scanline to 231. + + ines header corrections are now printed as status messages, not errors. + + Rearranged input updating code. + + Fixed a sprite transfer bug. Fixes PAL version of Rainbow Islands. + + Debugger hooks added. + + Small optimizations in Refreshline and FetchSpriteData to hopefully + offset the slight slowdown in the cpu core. + + MapperHBIRQHook is now called differently(depending on hi/low bg/spr + addresses). + + Added support for unif board UNL-8237. + + Added support for mapper 144(death race). + + Added partial support for mapper 74. + + Fixed a cpu emulation bug in GETIYWR. It would sometimes set "target" + to 0x10000, which was a BAD THING(overflow; now it wraps). + + Tried to add support for mapper 241. Needs special keyboard emulation. + I think. + + Internal RAM is now initialized to something other than 0. Fixes + Minna no Taabou no Nakayoshi Dai Sakusen. + + Reassigned "The Money Game" to mapper 155. It doesn't seem to + respect the WRAM enable/disable bits. Silly game. And + Tatakae!! Rahmen Man. + + Added support for mapper 115(still needs 256KB CHR select), 241, 114,88. + + Attempted to add support for mappers 91, 187. + + Modified frame IRQ to not break so many damn games. + + Fixed sprite hit detection loop. + + Improved support for mappers 80, 90,117,154, 189. + nnnester and virtuanes. + + Reassigned "Devil Man" to mapper 154. + + Removed bogus Trojan header fix in ines.c. + + + +.81-post: +---- + Fixed/Worked around(?) compilation problems on gcc 3.2.x. + +.81: +---- + + More SDL goodies. + + Renamed "Makefile.olinuxsdl" to "Makefile.unixsdl" + + More SDL fixes and cleanups. + + BeOS port is now compiled with the "-no-fpic" flag, which allows + me to use my inline assembly. The executable work fine as far as + I can tell. + + Added "Makefile.beos". gcc doesn't like my inline assembly + used in RefreshLine(),so this port will likely be slightly slower than + other x86 ports. + + Added a check to make sure SIGBUS is not equal to SIGSEGV in + drivers/cli/main.c. Needed for compiling under BeOS. + + Renamed the "PI" member of the X6502 structure due to conflicts with + a defined symbol with some math header files. + + Merged fcelineasm.h into fceline.h + + Fixed(possibly) a possible problem in fcelineasm.h with input register + clobbering. + + More SDL changes. + + Added speed throttling code to the CLI code, and added a command + line switch "-nothrottle". + + Lots of restructuring/rewriting/merging of the MMC3 code. + + Updated DOS code to use the generic CLI wrapper. + + Reads from $4090 and $4092 now return the current envelope setting + in FDS sound emulation. I'm not sure if this is correct... Affects + "Ai Senshi Nicole" and "Bio Miracle Bokutte Upa". + + Added native SDL sound support to the SDL code. the "olinuxsdl" + now uses this code by default instead of the unixdsp sound code. + + Modified MMC3 IRQ counter emulation. I'll need to watch out to see + if it breaks any games. Fixes: MegaMan 3, Gun Nac, Klax(Japanese). + + Changed a few memory reads in x6502.c to use RdRAM instead of RdMem, + resulting in a slight speed increase. + + Cleaned up mapper 250 emulation code. + + Added support for iNES mapper 51(thanks to Kevin Horton for the + information). + + Merged some iNES mappers corresponding to bootleg multicarts + based on MMC3s with mbshare/mmc3.c. + + Added support for iNES mapper 52(thanks to Kevin Horton for the + information). + + Made some hacks to the MMC3 emulation code so that I can add support + for pirate MMC3 multicarts more easily. I should clean it up later. + Moved mapper 44 emulation code to mbshare/mmc3.c. + + Saving screen snapshots will no longer corrupt the frame buffer + for one frame(unless memory couldn't be allocated). + + Fixed screen snapshot saving(it was sort of broken due to the + changes made to the driver<->emulator interface code; status + messages were being saved to the image). FCEUI_SaveSnapshot() + no longer returns a value(the request to save a screen snapshot is + serviced before status information would be written in the next frame). + + nosprites is now set to 0 before RefreshSprite() returns, to prevent + problems if a game turns off the bg and sprites when FetchSpriteData() + for the next scanline is called but then turns on sprites when + the actual scanline is drawn. + + PPU_hook() is now called more often if PPU_hook is non-null. + Made changes to mappers 118, 95, 9, and 10 to compensate. + No games seem to be broken, and I added support for mapper 96 + (though the games aren't very playable because the special controller + isn't emulated). + + Romance of the 3 Kingdoms is now recognized to use 16KB ex-WRAM. + + Added support for mapper 185...sort of. I think this is another + instance of incompatible hardware being lumped onto one mapper number. + Sigh. + + Added support for "Famicom Jump 2" as iNES mapper 153. + If a good(as far as I can tell) dump is loaded, FCE Ultra will + automatically fix the mapper number. + I also made some changes to the mapper 16 IRQ emulation code. + + BRK now sets the I flag. + + Reads from $4015 no longer reset DPCM IRQ. + + Changed emulation of RTI instruction slightly. + + X.IRQlow is now set to 0 in PowerNES(). + + The VS Unisystem bit in the iNES header is no longer looked at( + I was having too many problems with this bit being set when it + shouldn't have been). Now, VS Unisystem emulation is enabled + when a known VS Unisystem game is loaded. I also rewrote the VS + Unisystem detection function. + + iNES mapper 1 now supports pageable CHR RAM if no CHR ROM is present. + Fixes "Family School". + + Mapper 70 no longer has a mirroring control emulated, and I extended + the number of 8KB CHR pages supported to 16. + + Cleaned up iNES MMC5 save RAM loading/saving code and added + support for MMC1 games with 16KB of RAM(the second 8KB are saved), + via CRC32s(currently only Genghis Khan(USA) and Nobunaga's Ambition( + USA and Japan) are recognized). + + Added support for the MMC5 Koei game "Ishin no Arashi", in the iNES + format(I added an entry with its CRC32 value and the number of 8KB + WRAM banks it needs). + + Better iNES mapper 33/48 IRQ counter emulation. + + Added the game "Uchuusen - Cosmo Carrier" to this list. I'm + beginning to hate the iNES format more and more...or maybe + just Fanwen. :) + + Added the mapper 32 game "Major League" to the list of games + that usually need iNES header correction...but in this case, the + iNES header cannot specify that this game needs to have one-screen + mirroring. + + iNES header information is now printed before any header corrections + are made based on a database. + + Fixed a bug in mapper 32 emulation. "Ai Sensei no Oshiete" + works now. + + Tried to add support for iNES mappers 245 and 249. + + Fixed the MMC5 read handler to return the data last on the data + bus instead of 0xFF when a read was made to an unmapped address. + This seems to fix the lockup problems in "Bandit Kings of Ancient + China". + + Reversed "Modified the time at which the "y scroll" register is updated + during hblank." The changes broke Klax. + + Added an unsigned 64-bit base timestamp variable "timestampbase". + Adding this to the 32-bit variable "timestamp" will return + the number of cycles executed since emulation started(in the future + I'll probably change it to since reset or power toggle). + This allowed me to replace "lastn" hack in the MMC1 code with + something better. + + Changed my mind and undid the removal of support for old save states. + + Removed support for old save states and in general I won't + try to support save states made with previous versions. + + MMC1: Writes to $8000-$FFFF with D7 set will now cause + the first MMC1 register to be OR'ed with 0x0C. I'm not sure + if this is correct, but it doesn't seem to break anything + and it fixes Robocop 3. I'll see if anyone reports games + not working in .81 that worked in .80. + + Worked on a generic driver interface wrapper very similar + to the driver interface FCE Ultra used to use(I'm getting + tired of all of the duplicated driver code). Eventually, + the DOS, SVGAlib, and SDL ports will use this wrapper. + + Similar change to the argument parsing code. + + Changed configuration file saving-loading routines and the + configuration structure to allow for linking config structures + to each other). + + Small fix to the emulation of the MMC5 split screen mode. + + Made Linux SDL code compilable again. + + Changes to MMC5 EXRAM emulation(read/write). + + Fixes to the emulation of the MMC5's split screen mode, based on + observations while using CastleVania 3 and a Game Genie(on a real + NES). + + Fixed a bug in ines.c that caused any calls to AddExState() from + a mapper initialization function to be effectively "erased"(ResetExState() + was called after the mapper was initialized). Fixes the VRC7 sound + state saving/loading stuff. + + Finished adding support for the MMC5's split screen mode(this does + not mean that the support is complete, but at least the intro in + "Uchuu Keibitai SDF" works correctly now). + + Worked on adding support for the MMC5's split screen mode. Not + completed. + + Reverted to .80's FDS sound code. + + Modified the time at which the "y scroll" register is updated + during hblank. + + NSF playing code will now disable FDS sound output on song init + (fixes some problems with the Zelda no Densetsu NSF rip). + + Increased the emulated clock speed of the FDS sound emulation code + to give better quality output. + + Modified NMI to occur a few cycles later. Fixes BattleToads...but + it may have broken other games. Also modified the way NMI's are + handled in x6502.c. + + Modified ines.c to memset() GameMemBlock to 0 on virtual power toggle. + Also, trainers are now loaded into their own buffer instead of + directly into emulated WRAM and copied into emulated WRAM on + power toggle; I've been meaning to do this for quite some time. + + Changes to the way the zapper cursor is drawn on the screen. + + FCEUD_WriteSoundData(), FCEUD_BlitScreen(), and FCEUD_UpdateInput() + have been combined into one function: FCEUD_Update(). + + More fixes to the network play code, and a fix to the Windows network + play driver code that fixes(hopefully) a rather evil bug that caused + lockups when the remote stopped network play. + + Added code to set the battery-backed bit in RAM if a game needs it, + based on CRC32. + + Added more games to the list of games that commonly have bad iNES + headers, in ines.c + + Updated docs and usage.h for DOS and Linux regarding the new video + mode and the new refresh rates. + + Linux: Fixed a bug with video mode 6(a few upper scanlines were being + cut off). Increased the refresh rate of video mode 3 to 120hz. + + Increased the refresh rate of video mode 2 to 65 hz in the Linux port. + + Screen snapshots can now be taken while playing an NSF. + + Added a new sexy tweaked vga mode that I created to the Linux svgalib + port. It's 256x224 at a refresh rate of 103hz. Hopefully it won't + blow up anyone's monitor. ;) + DOS port will follow eventually. + + Modified Makefile.base to produce an executable named "fceu" instead + of "fce". + + The plans(cycle-accurate ppu emulation) for .90 were a bit ambitious, + and I still need to make other fixes before then. + + Fixed some minor(usually) bugs with setting 256x240 tweaked VGA mode + in DOS and Linux ports. + +.80: +---- + + Cleaned/fixed a few things in the mapper 19 emulation code. + Family Circuit '91 still doesn't work quite right... I wonder if + it's a bad dump. + + Added input override code to Windows port. + + Added code to fix iNES header information in RAM and suggest + changes to the user. + + Added support for iNES mapper 152(to be used with games set to + mapper 70, that use one-screen mirroring instead of h/v mirroring). + + Blits using the DirectX blitting function(method?) to the primary + surface are now done with the asynchronous flag set(if that + fails, a "normal" blit is tried). + + The DirectX blit buffer(secondary surface that FCE Ultra writes to + directly and then uses the DirectDraw blit function on to blit + to the primary buffer) is now created without specifying it + should be in system memory or video memory, except in the case + when no hardware blitting is available, and then DDraw is explicitly + told to create the surface in system memory. + + Added Family Keyboard support to the DOS port. + + Cleaned up the VRC7 sound emulation code. I need to find a way + to save the current sound state in a save state. + + Found out the real name of the "Space Shadow" gun; it's + called the "Hyper Shot". I'm still not sure who made it, though. + Possibly Bandai did. The interesting thing is that Konami + also made a Famicom accessory(dual square boxy things with two buttons + on each) with the same name(though there might not be a space in the + name). + + Only the upper two bits read from $4016/$4017 are undefined. + Bit5 is always 0, though. Fixed the bug in "input.c". + Silly kevtris' old documents. New kevtris' brain is always good. + + Family Keyboard support for the Windows port. + + Added support for the Family Basic Keyboard to the Linux port, other + ports todo. + Might want to add support for the tape recorder at some time. + Also mapped the "Scroll Lock" key to disable/enable command keys + so that the FBK is more useable. It doesn't disable CTRL C, + though... + + Changed a lot of inlined functions in x6502.c to macros so that + I could test out some optimization ideas. + + DOS code updates for game input override support. + + Small optimzation to opcode $4c, and relative jumps. + + Added some code to ines.c to set controller information in + FCEUGameInfo(returned by FCEUI_LoadGame()) based on crc32 values. + + Updated user documentation and usage.h for DOS and SVGAlib input + command-line changes. + + Added an option to disable the four-score(to Windows and Linux ports + so far). + + Updated Windows interface to support the new Famicom expansion + devices. + + (Re)Added support for the Famicom 4-player device. + + Improved Zapper emulation...sort of. It still needs a lot of work. :/ + + Added *partial* support for the "Space Shadow" gun. + + Added support for the Arkanoid controller(both NES and Famicom style). + + Added code to support the extension Famicom input devices. + + Added PAL scanline start/end drawing settings to Windows port. + + Added pause emulation key(F2) to Windows port. + + In the process of rewriting/fixing up input code stuff. + + Minor bug fix to Power Pad emulation code. + + VS Hogan's Alley and VS Duck Hunt automatically select the zapper + now(though it only works on the SVGAlib port). + + Undid some FDS sound code changes introduced in 0.76 that totally + screwed up sound. Oops. + + Added code to allow different settings for first/last scanline + drawn while in PAL emulation mode, to the Linux and DOS ports. + + Added convenience(it's not necessary, but it reduces redundant and + confusing code in the driver code) function + FCEUI_GetCurrentVidSystem(int *slstart, int *slend). + + Updated file "TODO". + + Changed #include to #include "zlib/unzip.h" + in file.c. + + NSF 6502 player now initialized the stack pointer on reset. + + Worked on de-emphasis emulation code quite a bit. + The deemphasized palette calculated at the end of the frame is now + based on what deemphasis bits were set for the longest during + the screen(sampling interval is a scanline) update loop. + Added a "static" deemphasized palette at $40-$7F in the palette table. + This corresponds to the colors when all of the deemphasis bits are set. + I did this to fix the PAL game "Noah's Ark", without breaking + anything else. The only downside is a slight speed loss(~2% on + my system when sound is disabled), but this is acceptable to me, + at least. + Maybe it's time to write hi/true-color ppu drawing code... + + + Fixed an out of bounds array access in svga.c in SetNESDeemph(). + The variable "lastd" in svga.c was being initialized to the wrong value. + Thanks to "Jarod CANAL" for pointing this out. + + Removed FCEUI_SetFirstRenderedLine or whatever it was called and + the function to set the last line. Replaced with: + void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall); + + Changed SetVidSys(int w) to ResetVidSys() in fce.c. Reenabled + PAL/NTSC emulation overrides based on game loaded(really only useful + for NSFs and UNIFs now). + + UNIF loading code now recognizes the chunk "CTRL" and tries + to use it. Only the svgalib code supports overriding of input + settings based on game loaded, now, though... + The user is still going to have to configure powerpad settings + on his/her own. + + Fixed return values of FCEU_fseek() and fixed a problem in unif.c + related to it. + + Changed mechanism for how FCE Ultra tells the driver + code what type of system is being emulated. A structure of + type "FCEUGI" is returned from FCEUI_LoadGame(). + + Fixed a major mapper 64 emulation bug introduced in 0.76. + + Modified BlitVidHi() in drivers/win/video.c to speed it up. + + Added support for loading the iNES-format Game Genie ROM image. + + Removed ggrom.h and added code to load the Game Genie ROM + image from a file. + + Added Windows netplay.c. (new: the user exiting the emulator + while stuck in a blocking recv() or send() loop now works.) + + Fixed a vram address register bug in fce.c that I created when I got + rid of the pair/dpair data types. + + Added new mappers/92.c + + Removed mappers/92.c until I can contact LULU or rewrite it. + + drivers/win changes. Removed netplay.c until I can rewrite it. + + Got rid of pair/dpair data types. + + Got rid of silly "TempArray" thing. + + Began adding GPL headers to files. FCE Ultra is going to be in + a state of legal limbo for the next few days... + + Replaced crc32.c and crc32.h, and added some #ifdef's and #defines + to use the crc32 code in zlib instead if zlib is linked with + FCE Ultra. + + More fixes to sb.c. + + Cleaned up drawing.h and ggrom.h(even though ggrom.h will *probably* + be removed before the next release). + + Redid frameskip code. + + Rewrote necessary pieces of sb.c and sb.h and fixed quite a few + bugs. I still need to test it on various other sound cards, though. + + Rewrote(more like "recreated in my own image") DOS keyboard driver. + Removed unused "keyscan.h" from drivers/svgalib + + Rewrote part of(the parts that Marat wrote - the connection and + closing parts) the Linux TCP/IP network play code. I guess it works, + but I haven't tested it very much. In any case, it's still dangerous + to use network play in FCE Ultra with SVGAlib, since recv() or send() + might block and since the keyboard is in raw mode, you have a problem. + Maybe a future SVGAlib will fix the general problem of lockups if + keyboard_update() isn't called, though it is only partly SVGAlib's + problem... + + Fixed FCEU_fseek() when used with a compressed file in the PKZIP + format that has been loaded. Fixes a UNIF loading problem. + Also added a check to the return value of FCEU_fseek() in unif.c. + + Replaced Marat's 6502 emulation core with my own. + It should be fully functional, but as always, I don't know if + I implemented the undocumented instructions correctly. + Several things are correct in this new core that were not in + Marat's(D flag is no longer cleared by interrupts, for example). + + Altered mapper 16 irq counter emulation slightly. + + Fixed the behavior of the SXA, SYA, and XAS opcodes based on the + documentation I have. I'm not sure what happens when page crossing + occurs with those instructions on a real NES, though. + Also CHANGED(not fixed) emulation of opcode $8B("XAA"). + + Changed some of the M* functions(absolute indexed and maybe some others) + to perform dummy reads. + + Changed some of the macros in m6502.c to inlined functions so + that I can modify and examine them more easily. + +.77: +---- + + Fixed a silly network play bug(in the global network play code) + that caused excessive lag. + + Added a "niceness" setting to the sound configuration dialog. + Removed obsolete information from the dialog. + + Fixed speed throttling code in Windows port when PAL emulation is + disabled/enabled and a new game hasn't been loaded yet. + + Commented out a printf() to debug stuff in fds.c(oops). + + Applied PK's joystick patch to the osdl code. It allows the user + to map axes and it fixes a joystick button mapping configuration saving + bug. + + Added two command line options new to Linux port to DOS port. + Just need to test them... + + Added some stuff to unif.c to allow for boards that can support + CHR RAM instead of CHR ROM(darn Sachen boards...). Fixes UNIF + version of "Q-Boy". + + Added command line option "-snapname" to Linux port. I'll add it + to the Windows port as well, but probably not to the DOS port. + + Added clip option to Linux port. + + Fixed sound logging(in Windows port) so that multiple recording + sessions now work. + + Added an option to clip the leftmost and rightmost 8 columns + of graphics in the Windows port. + + Added a submenu that lists recently opened files, in the Windows + port. + +.76: +---- + + Updated porting.txt. + + Added speed throttling code to Windows port that's used when sound is + disabled(and an option in the "Miscellaneous" + configuration window to disable it). + + Added cheat interface to DOS build. + + A few tweaks to the text cheat interface code in the cheat listing code. + Added a command to quickly toggle the status of the cheat(though a + cheat can still be disabled/enabled by (M)odifying the cheat). + + Support for UNIF UNL-TC-U01-1.5M board added. Same credits as below. + + Rewrote mapper 228 code just for the heck of it(actually, I couldn't + figure out why some(about two) of the games in the Action 52 cart + weren't working in .75(and .76). I traced it back to .71, where an apparent bug in + the undocumented 6502 opcode emulation allowed it to work, which + was later fixed for the .72 release(opcode 0x7C)). I'm thinking + that the dump is bad... + + Added a few crc32 checks to ines.c to check for and report when + a known(by me) bad(hacked or bad dump) game is loaded. + + Added support for the following UNIF boards. Thanks to Quietust + and Kevin Horton for the information. Some problems still exist + with a few games that use these boards, though... + + UNL-Sachen-8259B + UNL-Sachen-8259A + UNL-Sachen-74LS374N + UNL-SA-016-1M + UNL-SA-72007 + UNL-SA-72008 + UNL-SA-0036 + UNL-SA-0037 + + Fixes to some stuff in cart.c(for example, calling setprg32() when + only 16kb of prg data is present now works). + + Added support for iNES mapper 189. + + Tried to add support for the UNIF board "UNL-H2288". Failed. + + Updated "cheat.txt" to fix a few typos and added an example of finding + and adding a cheat using the Linux port's text interface. The actual + section on the Linux cheat interface still needs to be written, however. + + Changed network play code in the Windows port and fixed a bug. + Fixed a similar bug in the Linux netplay code....sort of. + + A few cosmetic changes to the dialogs in the Windows port. + + Fixed sound initialization on the Windows port(it was being initialized + when FCE Ultra started even if it was disabled by the user. Oops.). + + Joystick button configuration code in Windows port changed slightly + to be more useable. + + Changed reference to video mode 5 in the linux port to "1 per 4". + It may not be very meaningful, but it is certainly better + than "TV Emulation". I'll change the Windows port reference later. + + Documented video mode 7(320x240) for the Linux port. Also added + a check for the FBDev driver in order to use this mode instead + of a tweaked vga mode if that driver is being used. + + Added/Fixed cheat interface for Linux port. It's still not perfect, + though. The code is ugly... + + Callback function for FCEUI_ListCheats() now receives + status information(enabled/disabled). + + Callback functions for cheat functions now must return 0 to + stop listing cheats or 1 to continue. + + Fixed a problem(the cheat code was reading in cheats + for address $0000 from cheat files if any blank lines were present). + + SDL port zlib changes(linked dynamically to zlib now). + + More changes to envelope decay + looping on code. No longer + depends on value @ $4017. It now sounds correct based on some + tests I did with SMB3 and a GG, but Goonies 2 doesn't sound right( + based on a sound file sent to me by another person). + + Added support for iNES mapper 140. Thanks to Quietust for the + information. + + I need to figure out how to deal with the problem of so many + bad NSFs that most people consider good... + + Changed envelope decays a bit. Their behavior now depends on bit + 7 of $4017. I don't know if this is right... + + Addition of debug.c for some debugging stuff. + + Updated zlib to 1.1.4. + + Modified code in various files to allow UNIF games to override + current selected video system emulation(NTSC or PAL). Need to + make sure this really works. + + Changed sound.c to prevent desynchronization during network play. + This might slow down sound emulation slightly, especially when + sound emulation is disabled. I really don't care... + + Updating network play code. More info later... + + Moved the sound/video/etc output code in EmLoop() to the top of the + for(;;) loop so that initialization prior to calling EmLoop() will + be the same as initialization done during a call to a FCEUD_* function. + + A few very small changes to sound emulation in fds.c. + + Changed unlink() to remove() in cheat.c and removed the including + of the header file unistd.h. + + Split up the cc=... statement in RefreshLine() to make it easier + to read and not ambiguous(to Borland's C compiler). + + Changed a lot of the function declarations in cheat.c. I'll need + to verify that cheat searching still works ok and that cheats still work + ok. I'll also need to update the Windows(and Linux console) cheat code + to prevent compiler warnings. + + Fixed various minor code problems(not minor if you want to use a + compiler besides gcc). This is an ongoing process... + + Removed bit fields after reading about and thinking about possible + portability problems, though I kept some optimizations in fceline.h + + Minor code simplification in drivers/win/joystick.c(replaced + "case 200 ... 207" and "case 208 ... 215". + + Modified some code to use bit-fields in the graphics rendering code + in fce.c and fceline.h. gcc seems to be able to optimize the new + code to run faster. + + Fixed m6502.c and fce.c to initialize variables on virtual power + toggle. This should fix network play on the Windows port. + I'm also in the process of cleaning up fce.c. + +.75: +---- + Fixed directories configuration stuff in Windows port(corresponds + to .75r2). + + More changes to square wave channel envelope/volume emulation... + Changes described in the large paragraph some lines down have been + abandoned. + + Added a command line switch to set the volume in the dos port. + + Changed Windows sound configuration dialog. Now buffer length is + specified in time, not samples. I also added a volume control. + + Reduced the volume on 8-bit sound output on all ports by 1/2. + + Added a function FCEUI_SetSoundVolume(). Added support for setting + the volume via the command line in the Linux port, other ports coming + soon. + + Changed FCEUD_WriteSoundData() again. No longer has a "Check" + argument. All clipping(ugh) is done internally now. + + Added a directories configuration dialog to the Windows port. I worked + on it too long and I became a zombie, so it might have a few bugs. + That's what guine...err...users are for. ;) Don't expect me to do + anything like this for any other port, though. I don't feel like + doing it on the DOS port, and the Linux and other UNIXy ports shouldn't + really need it. + + Made some changes to the rectangle/square wave channel emulation to + fix the pops in SMB. I have no idea if what I did is correct. To + be honest, I'm not sure I know EXACTLY what I did, but it's something + like this: Writes to $4003/$4007 now reset the duty cycle count + and reload the cycle counter with the current wavelength. Writes to + $4003/$4007 now do not update the amplitude output of the channels; they + will be updated after the cycle counter hits 0(or below). + + More information in iNES informational output. + + Minor changes to mappers/16.c. + + Increased the volume of the VRC6's sawtooth wave channel. + + Added more information to the RAM cheat guide. + + Changed the triangle wave generation code slightly. I decided + to remove support for the higher-frequency triangle waves, as they + are too cpu-costly to create and are probably not very audible on a + real NES anyway. + + Major changes to how sound is mixed. This necessitated a high pass + DC-offset removing filter, and a low-pass filter just to make things + sound better. ^_^ + Note: FCEUD_WriteSoundData() no longer needs to clear the waveform + data referenced by the passed pointer; it's done internally now. + + Fixed JMP ($xxxx) - now handles wrapping like it occurs on a real 6502 + (hopefully; I'm assuming that the same holds true for the NES' cpu). + + Added the ability to load a custom global palette in the DOS port. + + Fixed bug in drivers/common/unixdsp.c(wrong return value if sample + rate was out of range). + + Many sound fixes... - Frequency sweeps, length counter stuff,... + + Changed Windows port to use IDirectInput7 and IDirectInputDevice7 + interfaces. + + Fixed a Game Genie bug in the core emulation code. It only appeared + in the Windows port, though. (Enabling gg emulation, loading a game, + and then disabling gg emulation and loading a new game while in the + gg code entry screen would cause the new loaded game to not work + correctly). + + Modified windows port to use the config saving/loading stuff in + drivers/common/config.c + + Mapper 45 cleanups/fixes. + + Added the ability to load a custom global palette in the Linux port. + Yay. + + Fixed a large number of overcomplicated code and silly bugs in + drivers/common/config.c. This changes the format of the configuration + structure, too. Also added support for saving/loading strings with + automatic memory allocation when strings are loaded. + + Minor change in InitNetplay(). + + Fixed bad type conversions for pointers to functions and fixed + some bad declarations of functions. + + Reenabled zlib support for the sdl build. I need to pay attention + to patches that modify lines than don't fit on my screen. + + Fixed vidblit.c to not emit so many warnings when compiling. + +.74: +---- + + Stop sound in Windows port when user clicks l/m/r mouse buttons + in the non-client area of the window. + + Added "Drag and drop" file open support to Windows port. + + Various code cleanups. + + mappers/33.c optimization. + + Rewrote the function "FCEU_MakeFName()". + + Removed crc32.h from mappers directory. + + Modified some of the window resizing code in the Windows port. + + Added support for waiting for vblank/double buffering to the Windows + port. + + Added/Fixed support for iNES mapper 248. + + After an NSF file is loaded, information about its header is now + displayed. + + Fixed a typo in the Namco 106 extra ram handling code. + + Improved the quality of the Namco 106's extra sound channels. + - Thank Mamiya and Applepie(real name?) for info. + + When an NSF file is being played, FCE Ultra will no longer go through + its scanline rendering loop. This speeds up NSF playback considerably. + + Updated "porting.txt". + + Moved some stuff from DriverInterface() to their own functions. + + Fixed some iNES mapper 18 IRQ counter emulation bugs. "Ninja Jajamaru - + Ginga Dai Sakusen" now works. + + Rewrote large pieces of the mapper 64 code. "Skull and Crossbones" + still doesn't work, though. + + Changed format of iNES header information output, added "ROM CRC32" info. + + Modified the way cycle timing is done slightly. No change + for NTSC emulation, but PAL emulation is a little more accurate. + + Changed the behavior of indirect indexed(I hope I got that right ;)) + instructions to behave more like a real 6502(junk reads are now + performed). + + A few optimizations/cleanups in m6502.c. + +0.73 +---- + + * Fixed several bugs with sprite emulation. Several games(such + as "Trojan" and "VS Duck Hunt") that were broken in .71 and .72 now + work ok. + * Added support for iNES mapper 82. Thanks to those who work on + "unofficial nester". + * Added support for iNES mapper 250(used by "Time Diver Avenger"). + * Fixed the documentation to show that iNES mappers 48, 83, and 232 + are supported. + * Removed various pieces of stale code and fixed a few minor bugs. + * Fixed a triangle wave channel bug(the channel was sometimes enabled + when it shouldn't have been). + * Writing to $4010 with the upper bit clear now acknowledges the DPCM + IRQ. This appears to fix "Stunt Buggies". + * Rewrote pieces of the Zapper emulation code to be cleaner and more + accurate. + * Rewrote the VS Unisystem dip switch drawing code. + * Simplified the setting of VS Unisystem dip switches. The "V" key + now toggles viewing AND editing of dip switches. + +0.72 +---- + + * Various minor bug fixes. + * Various code cleanups and size and speed optimizations. + * Removed some (apparently) unused MMC5 sound emulation code. + * Changed the behavior of $2003 and $4014 to better simulate what occurs + in a real NES. + * Fixed a few bugs in the undocumented 6502 opcode emulation code. + The Game Genie code "NUTANT" for SMB 3 works correctly now, at + least(previously it caused the game to lock up at the end of levels). + * Rewrote large pieces of the 6502 memory fetching code, resulting + in a slight slowdown in the speed of emulation. Benefits include: + Game Genie emulation now works(again) and 6502 emulation is more + accurate. + * Added support for iNES mapper 72. Thanks to rinao for the information. + * Fixed support for iNES mapper 77(used by Napoleon Senki). + * Fixed/Added support for iNES mapper 226. Apparently I made a mistake + in the documentation. Thanks to Mark K. for the information. + * Added support for iNES mapper 227. Thanks to Mark K. for the + information. + * Added support for iNES mapper 234(used by the Maxi-15). Thanks + to Mark K. for the information. Note that many of the Maxi-15 + ROM images on the Internet have corrupt CHR data(graphics), or the + mapper number is set incorrectly(usually to 11). Use a utility to + fix the mapper number. + * Added support for the following UNIF boards(prefixes omitted): + - EKROM (and fixed the reference to "Gemfire" in the documentation). + - HKROM + * Added the ability to enable and disable individual RAM cheats. + * Fixed some problems with the cheat search code(the NES' internal + RAM was being searched differently than any external RAM, which + was being search incorrectly). + +0.71 +---- + + * Fixed a 6502 emulation bug that was causing some Koei games + (ex: Nobunaga's Ambition, Genghis Khan) to not work. + * Extensive PPU/CPU timing adjustments. + * Fixed support for iNES mapper 40. + * Added support for the following UNIF boards(prefixes omitted): + - ETROM + - ELROM + - EWROM + * Fixed a few bugs in the UNIF code. + * Added support for loading and saving cheat files and an interface + to search for/add/delete/list cheats(no interface yet on Linux/DOS). + * Fixed a few minor bugs in the Windows DX code. + * Command line options to control the number of sound fragments + and the fragment size have been added(Linux). + +0.70 +---- + + * Adjusted PPU/CPU timing. + * Removed(until I understand the problem) a hack to get one of the + games in the Caltron 6-in-1 to work. + * Fixed an MMC3 IRQ emulation bug("Project Q" works better now). + * Fixed a problem/misunderstanding regarding the upper scanline. + It can now be displayed again. + * More accurate sprite hit emulation(fixes the title screen of + "Ultimate Stuntman"). + * VRAM bank switching for iNES mapper 4 is now possible(and enabled + for all mapper 4 games without CHR ROM). Fixes "Tenchi o Kurau 2". + * Added support for the Famicom's four-player adapter and the ability + to enable it(it is disabled by default to prevent compatibility + problems). + * Added an option(under miscellaneous configuration) to automatically + open the "File Open" dialog box when FCE Ultra is started. + * Sound sampling rate is now configurable. + * Fixed some bugs in the DirectSound code. + * Joystick button configuration is a little more user friendly(and + stable, hopefully) (Linux). + +0.62 +---- + + * Added support for the Famicom Disk System's extra sound channel. + * Updated the version of Tatsuyuki Satoh's OPL2 emulator used in + FCE Ultra from .36f to .37a. The sound quality in "Lagrange Point" + seems to have improved. + * Added support for iNES mapper 242(used by "Wai Xing Zhan Shi"). + * Fixed a network play bug that could cause desynchronizations + if more than one network play session occured since FCE Ultra + was started. This bug only showed up on the Windows port, though. + * Increased the volume of the noise and triangle sound channels. + * Fixed a save state loading bug. + * Fixed a small memory leak that was being caused by the VRC7 + state loading code. + * Fixed a bug that could cause FCE Ultra to crash if a virtual disk + was being read and the user ejected the virtual disk. + * Various minor bug fixes/code cleanups. + * NTSC color "emulation" can now be enabled again(the code to + enable it was broken in the last version). (Linux) + +0.61 +---- + + * Speed optimizations in sprite rendering code. + * Screen snapshots are now saved in the PNG format instead of the PCX + format. + * Fixed Game Genie emulation(it wasn't working in the last release). + Also added support for Game Genie emulation to the UNIF code. + * Rewrote command line option parsing code. + * Fixed a problem(if FCE Ultra was configured to connect to a remote + host and the remote host was given as an IP address, and the IP + address couldn't be reverse resolved, which is commonly the case + on home LANs, the connection attempt would fail) in the network + play code. I had misinterpreted the Winsock API documentation + when I wrote the code. (Windows) + +0.60 +---- + + * Various speed optimizations. + * Sound is no longer messed up when a JAM/KIL opcode is emulated. + * Fixed an overflow bug that occured when $4014 was written to + during certain(rare) conditions. + * Fixed a few save state bugs. + * Fixed a MMC1 CHR bank switching bug. + * Added emulation of the MMC5's WRAM write-enable/disable registers. + * Fixed a sound frame IRQ emulation bug. "Qix" works now. + * Added UNIF support. Some of the board emulation is still a bit + buggy, though. Look at the documentation for a list of supported + boards. + * Updated the "Palette Notes" section of the documentation. Also + fixed a few other problems with the documentation. + * Added support for loading files in the PKZIP and gzip + compressed file formats via zlib. + * Added the ability to configure the first scanline and the last + scanline to draw to the screen. Enabling PAL emulation no longer + will cause all 239 scanlines to be displayed, though an option + to override these settings for when PAL emulation is enabled may + be in the next version. + * Fixed a bug that would cause the emulated D-pad of virtual gamepads + emulated through the keyboard to be duplicated through "higher" + virtual gamepads(gamepad 1 would affect 2,3,4; gamepad 2 would + affect 3,4; etc.). (Windows) + +0.55 +---- + * Rewrote window resizing code. The window will now resize itself + to a multiple of the NES' screen dimensions nearest to the user + selected dimensions. (Windows) + * Added an option to use buttons instead of axes on physical joysticks + for the emulated D-Pad. This is useful for some digital joysticks. (Windows) + * Fixed a bug that would cause FCE Ultra to crash if sound were + disabled during emulation. (Windows) + * Added the ability to "fast forward" emulation. + * Added an option to allow more than 8 sprites per scanline to be + displayed. + * Added an option to save all extra non-volatile game data + (such as battery-backed RAM) in a directory under FCE Ultra's + base directory(as opposed to the directory the game is located in). + * Added an option to allow the emulator to change to a full screen + video mode once a new game is loaded. (Windows) + * Rewrote pieces of DirectInput joystick handling code. Hopefully + it should increase compatibility. (Windows) + * Added the ability to automatically obtain button numbers when + configuring joysticks, by pressing buttons on the joystick. + * Added the ability to close the current game(decreases CPU usage). (windows) + * Increased the speed of various function calls by passing + arguments to functions through registers instead of through the + stack. + * Added emulation of the MMC5's raw PCM register. + * Added the ability to save/load save states while network play + is occuring. + * Having PAL emulation enabled will no longer override the + NTSC/PAL settings in NSF headers. + * Fixed a bug that got into the .54 release. Extraneous data was + being returned on reads from $2002, which caused problems + with some games(such as "Choujin Sentai Jetman"). + +0.54 +---- + * Fixed a bug that would cause a wrong battery-backed WRAM file + name to be produced if FCE Ultra was passed a file name without + any directory component(such as "fceu SuperBlah.nes"). + * Fixed an iNES mapper 118 emulation bug that got into the code + in a recent code cleanup. "Armadillo" is playable again. + * Fixed a typo(and bug) in the MMC5 emulation code. + * Data returned from emulated reads to "unmapped" areas or + memory locations where bits are undefined should now be correct. + * Fixed emulation of the sprite memory transfer register $4014. + It now takes into account the last value written to $2003 and + starts the transfer to that location in sprite memory(like on + a real NES). + * Added a video configuration dialog box. (Windows) + * Added the ability to configure a custom video mode. Aspects + that are configurable include width, height, bits per pixel, + and size transforming(stretching and scaling). (Windows) + +0.53 +---- + + * Fixed a bug with joysticks that occured on systems with multiple + joysticks. (Windows) + * Added support for iNES mappers 77 and 92(thanks to LULU for the code for both). + * Added partial(timer is non-configurable) support for iNES mapper 105. + * Changed save state format again. Save states made with previous + versions should still be compatible, though this may change in + future versions. + * Small optimization to sprite emulation code. + * Rewrote color-deemphasis code to use integer math instead of + floating-point math. + * Rewrote and restructured input code. (Linux) + * Added command line option "-f8bit" to force 8-bit sound. (Linux) + * Rewrote and restructured input code. Among other new features, + keyboard keys are now somewhat configurable. (Windows) + * Writes to $4003/$4007 will now reset the emulated square wave + duty cycle generator. + * Added emulation of the Power Pad. + * Rewrote joystick device reading code to use the event-driven + interface. This should fix various problems regarding support + for joysticks with many buttons. (linux) + +0.52 +---- + + * Fixed a PCM emulation bug(digitized voices in "Ikari Warriors 2" + and "The Immortal", among others, work now). + * Fixed noise channel's LSFR update frequencies(hopefully). + * Various minor bug fixes. + +0.51 +---- + + * Added support for iNES mappers 86 and 89. + * Reduced byte size of the NSF player's background. + * Adjusted CPU/PPU timing. + * Fixed sound channel frequency calculations for when PAL emulation is enabled. + * Rewrote large pieces of the sound code and got rid of the sound queue. Sound quality should be slightly better now. + * Various minor bug fixes. + + Windows: + + * Fixed an FDS side reset bug when a new game is loaded. + * Screen width/depth/height changes while FCE Ultra is in windowed mode are handled now. + * Changed the configuration file format. + * Added a palette configuration dialog. + * Added the ability to load a custom NES palette. + * Added an option to double 16-bit sound volume. + * Added an option to force 8-bit sound. + * Added an option to use a secondary sound buffer(versus the primary). + * Added an option to wait for vertical blank if sound is disabled. + * Added an option to run while focus is lost. + +0.50 +---- + + * Many bug fixes. + * Sound code partially rewritten to improve quality(near-perfect + raw PCM now) and eliminate the need for a separate thread. + This created a small problem with network play, though, so read + the network play notes section. Also, synchronizing to + vertical blank has been removed. + * Rewrote other pieces of sound code. No more "buzzing" in MegaMan 2, + Codemasters games' intros, etc. + * Added support for the NES Zapper and the VS Unisystem's light + gun. Be sure to read "Light Gun Notes". + * Changed save state format. Save states should now be much + smaller for most games. Most(not all) save states created with + an older version should work. + * Added support for VS Duck Hunt and VS Hogan's Alley. + diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/CMakeLists.txt new file mode 100644 index 00000000..49277b50 --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.6) +project(fceux) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin) +add_subdirectory(cmake/native) +if(UNIX) + add_subdirectory(cmake/cross-mingw32) +endif(UNIX) + +add_custom_command( + OUTPUT ${EXECUTABLE_OUTPUT_PATH}/fceux.chm + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/drivers/win/help/fceux.chm ${EXECUTABLE_OUTPUT_PATH}/fceux.chm + DEPENDS ${CMAKE_SOURCE_DIR}/src/drivers/win/help/fceux.chm + VERBATIM +) +add_custom_target( + InstallHelpFile + ALL + DEPENDS ${EXECUTABLE_OUTPUT_PATH}/fceux.chm +) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/CMakeLists.txt new file mode 100644 index 00000000..9d36cf4b --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(release) +add_subdirectory(debug) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/debug/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/debug/CMakeLists.txt new file mode 100644 index 00000000..4ed85291 --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/debug/CMakeLists.txt @@ -0,0 +1,4 @@ +project("fceux: cross-mingw32 debug") +set(CMAKE_BUILD_TYPE debug) +set(FCEUX_EXE_NAME fceuxDBG.exe) +include(${CMAKE_SOURCE_DIR}/cmake/cross-mingw32/fceux_cross-mingw32.cmake) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/fceux_cross-mingw32.cmake b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/fceux_cross-mingw32.cmake new file mode 100644 index 00000000..cb9c34db --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/fceux_cross-mingw32.cmake @@ -0,0 +1,50 @@ +include(CheckIncludeFile) + +# Find mingw by looking for windows.h; set HOST accordingly. +find_path(PATH_TO_WINDOWS_H windows.h + /usr/i386-mingw32msvc/mingw/include + /usr/i586-mingw32msvc/mingw/include + /usr/i686-mingw32msvc/mingw/include + /usr/i386-mingw32/mingw/include + /usr/i586-mingw32/mingw/include + /usr/i686-mingw32/mingw/include +) +string(REGEX MATCH "i.86-[^/]*" HOST ${PATH_TO_WINDOWS_H}) + +set(CMAKE_CROSSCOMPILING TRUE) +set(MINGW TRUE) +set(WIN32 TRUE) +set(APPLE FALSE) +set(UNIX FALSE) +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_C_COMPILER "${HOST}-gcc") +set(CMAKE_CXX_COMPILER "${HOST}-g++") +set(CMAKE_RC_COMPILER "${HOST}-windres") + +set(CMAKE_FIND_ROOT_PATH "/usr/${HOST}") +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +include(${CMAKE_SOURCE_DIR}/cmake/fceux.cmake) +# I cannot fucking believe that I need to do this: +#don't: ENABLE_LANGUAGE(RC) # above +#do: (for cmake-2.6.0 at least) +set(OUTPUT_RES_RC_O CMakeFiles/${FCEUX_EXE_NAME}.dir/__/__/__/src/drivers/win/res.rc.o) +add_custom_command( + OUTPUT ${OUTPUT_RES_RC_O} + COMMAND ${HOST}-windres -Isrc/drivers/win -DLVS_OWNERDATA=0x1000 -o ${OUTPUT_RES_RC_O} ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + DEPENDS ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + VERBATIM +) +add_custom_target( + BuildResourceFileFor${FCEUX_EXE_NAME} + DEPENDS ${OUTPUT_RES_RC_O} +) +set(DEFINED_BUILD_RESOURCE_FILE TRUE CACHE GLOBAL "This is a hack to get CMake to build the .rc file") + +add_dependencies( ${FCEUX_EXE_NAME} BuildResourceFileFor${FCEUX_EXE_NAME} ) +set_property( + TARGET ${FCEUX_EXE_NAME} + PROPERTY LINK_FLAGS ${OUTPUT_RES_RC_O} +) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/release/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/release/CMakeLists.txt new file mode 100644 index 00000000..0e32033f --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/cross-mingw32/release/CMakeLists.txt @@ -0,0 +1,4 @@ +project("fceux: cross-mingw32 release") +set(CMAKE_BUILD_TYPE release) +set(FCEUX_EXE_NAME fceuxREL.exe) +include(${CMAKE_SOURCE_DIR}/cmake/cross-mingw32/fceux_cross-mingw32.cmake) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/fceux.cmake b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/fceux.cmake new file mode 100644 index 00000000..6d1a5191 --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/fceux.cmake @@ -0,0 +1,476 @@ +#TODO: install generated exe's, appropriately named, in bin/ +include(CheckFunctionExists) +include(TestBigEndian) + +option(FCEUX_FORCE_LE "Build for a little-endian target" OFF) +option(FCEUX_FORCE_BE "Build for a big-endian target" OFF) +option(FCEUX_FRAMESKIP "Build legacy frameskip code" OFF) + +if(WIN32) + OPTION (NOWIN32 "Replace Win32 support with SDL" OFF) + if (NOWIN32) + set(WIN32 OFF) + endif(NOWIN32) +endif(WIN32) + +if (NOT WIN32) + option(FCEUX_SDL_OPENGL "Build with OpenGL support" ON) + find_package(SDL REQUIRED) + find_package(ZLIB REQUIRED) + if(FCEUX_SDL_OPENGL) + find_package(OpenGL REQUIRED) + endif(FCEUX_SDL_OPENGL) +endif(NOT WIN32) + +set(SRC_CORE + ${CMAKE_SOURCE_DIR}/src/asm.cpp + ${CMAKE_SOURCE_DIR}/src/cart.cpp + ${CMAKE_SOURCE_DIR}/src/cheat.cpp + ${CMAKE_SOURCE_DIR}/src/conddebug.cpp + ${CMAKE_SOURCE_DIR}/src/config.cpp + ${CMAKE_SOURCE_DIR}/src/debug.cpp + ${CMAKE_SOURCE_DIR}/src/drawing.cpp + ${CMAKE_SOURCE_DIR}/src/fceu.cpp + ${CMAKE_SOURCE_DIR}/src/fds.cpp + ${CMAKE_SOURCE_DIR}/src/file.cpp + ${CMAKE_SOURCE_DIR}/src/emufile.cpp + ${CMAKE_SOURCE_DIR}/src/filter.cpp + ${CMAKE_SOURCE_DIR}/src/ines.cpp + ${CMAKE_SOURCE_DIR}/src/input.cpp + ${CMAKE_SOURCE_DIR}/src/movie.cpp + ${CMAKE_SOURCE_DIR}/src/netplay.cpp + ${CMAKE_SOURCE_DIR}/src/nsf.cpp + ${CMAKE_SOURCE_DIR}/src/oldmovie.cpp + ${CMAKE_SOURCE_DIR}/src/palette.cpp + ${CMAKE_SOURCE_DIR}/src/ppu.cpp + ${CMAKE_SOURCE_DIR}/src/sound.cpp + ${CMAKE_SOURCE_DIR}/src/state.cpp + ${CMAKE_SOURCE_DIR}/src/unif.cpp + ${CMAKE_SOURCE_DIR}/src/video.cpp + ${CMAKE_SOURCE_DIR}/src/vsuni.cpp + ${CMAKE_SOURCE_DIR}/src/wave.cpp + ${CMAKE_SOURCE_DIR}/src/x6502.cpp + ${CMAKE_SOURCE_DIR}/src/boards/01-222.cpp + ${CMAKE_SOURCE_DIR}/src/boards/103.cpp + ${CMAKE_SOURCE_DIR}/src/boards/106.cpp + ${CMAKE_SOURCE_DIR}/src/boards/108.cpp + ${CMAKE_SOURCE_DIR}/src/boards/112.cpp + ${CMAKE_SOURCE_DIR}/src/boards/117.cpp + ${CMAKE_SOURCE_DIR}/src/boards/120.cpp + ${CMAKE_SOURCE_DIR}/src/boards/121.cpp + ${CMAKE_SOURCE_DIR}/src/boards/15.cpp + ${CMAKE_SOURCE_DIR}/src/boards/164.cpp + ${CMAKE_SOURCE_DIR}/src/boards/175.cpp + ${CMAKE_SOURCE_DIR}/src/boards/176.cpp + ${CMAKE_SOURCE_DIR}/src/boards/177.cpp + ${CMAKE_SOURCE_DIR}/src/boards/178.cpp + ${CMAKE_SOURCE_DIR}/src/boards/179.cpp + ${CMAKE_SOURCE_DIR}/src/boards/183.cpp + ${CMAKE_SOURCE_DIR}/src/boards/185.cpp + ${CMAKE_SOURCE_DIR}/src/boards/186.cpp + ${CMAKE_SOURCE_DIR}/src/boards/187.cpp + ${CMAKE_SOURCE_DIR}/src/boards/189.cpp + ${CMAKE_SOURCE_DIR}/src/boards/199.cpp + ${CMAKE_SOURCE_DIR}/src/boards/208.cpp + ${CMAKE_SOURCE_DIR}/src/boards/222.cpp + ${CMAKE_SOURCE_DIR}/src/boards/23.cpp + ${CMAKE_SOURCE_DIR}/src/boards/235.cpp + ${CMAKE_SOURCE_DIR}/src/boards/253.cpp + ${CMAKE_SOURCE_DIR}/src/boards/3d-block.cpp + ${CMAKE_SOURCE_DIR}/src/boards/411120-c.cpp + ${CMAKE_SOURCE_DIR}/src/boards/43.cpp + ${CMAKE_SOURCE_DIR}/src/boards/57.cpp + ${CMAKE_SOURCE_DIR}/src/boards/603-5052.cpp + ${CMAKE_SOURCE_DIR}/src/boards/68.cpp + ${CMAKE_SOURCE_DIR}/src/boards/8157.cpp + ${CMAKE_SOURCE_DIR}/src/boards/8237.cpp + ${CMAKE_SOURCE_DIR}/src/boards/830118C.cpp + ${CMAKE_SOURCE_DIR}/src/boards/88.cpp + ${CMAKE_SOURCE_DIR}/src/boards/90.cpp + ${CMAKE_SOURCE_DIR}/src/boards/95.cpp + ${CMAKE_SOURCE_DIR}/src/boards/__dummy_mapper.cpp + ${CMAKE_SOURCE_DIR}/src/boards/a9711.cpp + ${CMAKE_SOURCE_DIR}/src/boards/a9746.cpp + ${CMAKE_SOURCE_DIR}/src/boards/addrlatch.cpp + ${CMAKE_SOURCE_DIR}/src/boards/ax5705.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bandai.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bmc13in1jy110.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bmc42in1r.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bmc64in1nr.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bmc70in1.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bonza.cpp + ${CMAKE_SOURCE_DIR}/src/boards/bs-5.cpp + ${CMAKE_SOURCE_DIR}/src/boards/onebus.cpp + ${CMAKE_SOURCE_DIR}/src/boards/datalatch.cpp + ${CMAKE_SOURCE_DIR}/src/boards/deirom.cpp + ${CMAKE_SOURCE_DIR}/src/boards/dream.cpp + ${CMAKE_SOURCE_DIR}/src/boards/edu2000.cpp + ${CMAKE_SOURCE_DIR}/src/boards/fk23c.cpp + ${CMAKE_SOURCE_DIR}/src/boards/ghostbusters63in1.cpp + ${CMAKE_SOURCE_DIR}/src/boards/gs-2004.cpp + ${CMAKE_SOURCE_DIR}/src/boards/gs-2013.cpp + ${CMAKE_SOURCE_DIR}/src/boards/h2288.cpp + ${CMAKE_SOURCE_DIR}/src/boards/karaoke.cpp + ${CMAKE_SOURCE_DIR}/src/boards/kof97.cpp + ${CMAKE_SOURCE_DIR}/src/boards/vrc5.cpp + ${CMAKE_SOURCE_DIR}/src/boards/ks7032.cpp + ${CMAKE_SOURCE_DIR}/src/boards/malee.cpp + ${CMAKE_SOURCE_DIR}/src/boards/mmc1.cpp + ${CMAKE_SOURCE_DIR}/src/boards/mmc3.cpp + ${CMAKE_SOURCE_DIR}/src/boards/mmc5.cpp + ${CMAKE_SOURCE_DIR}/src/boards/n-c22m.cpp + ${CMAKE_SOURCE_DIR}/src/boards/n106.cpp + ${CMAKE_SOURCE_DIR}/src/boards/n625092.cpp + ${CMAKE_SOURCE_DIR}/src/boards/novel.cpp + ${CMAKE_SOURCE_DIR}/src/boards/sachen.cpp + ${CMAKE_SOURCE_DIR}/src/boards/sc-127.cpp + ${CMAKE_SOURCE_DIR}/src/boards/sheroes.cpp + ${CMAKE_SOURCE_DIR}/src/boards/sl1632.cpp + ${CMAKE_SOURCE_DIR}/src/boards/smb2j.cpp + ${CMAKE_SOURCE_DIR}/src/boards/subor.cpp + ${CMAKE_SOURCE_DIR}/src/boards/super24.cpp + ${CMAKE_SOURCE_DIR}/src/boards/supervision.cpp + ${CMAKE_SOURCE_DIR}/src/boards/t-227-1.cpp + ${CMAKE_SOURCE_DIR}/src/boards/t-262.cpp + ${CMAKE_SOURCE_DIR}/src/boards/tengen.cpp + ${CMAKE_SOURCE_DIR}/src/boards/tf-1201.cpp + ${CMAKE_SOURCE_DIR}/src/input/arkanoid.cpp + ${CMAKE_SOURCE_DIR}/src/input/bworld.cpp + ${CMAKE_SOURCE_DIR}/src/input/cursor.cpp + ${CMAKE_SOURCE_DIR}/src/input/fkb.cpp + ${CMAKE_SOURCE_DIR}/src/input/ftrainer.cpp + ${CMAKE_SOURCE_DIR}/src/input/hypershot.cpp + ${CMAKE_SOURCE_DIR}/src/input/mahjong.cpp + ${CMAKE_SOURCE_DIR}/src/input/mouse.cpp + ${CMAKE_SOURCE_DIR}/src/input/oekakids.cpp + ${CMAKE_SOURCE_DIR}/src/input/powerpad.cpp + ${CMAKE_SOURCE_DIR}/src/input/quiz.cpp + ${CMAKE_SOURCE_DIR}/src/input/shadow.cpp + ${CMAKE_SOURCE_DIR}/src/input/suborkb.cpp + ${CMAKE_SOURCE_DIR}/src/input/toprider.cpp + ${CMAKE_SOURCE_DIR}/src/input/zapper.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/151.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/16.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/17.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/18.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/193.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/201.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/202.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/203.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/204.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/21.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/212.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/213.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/214.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/215.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/217.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/22.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/225.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/227.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/228.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/229.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/230.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/231.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/232.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/234.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/241.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/242.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/244.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/246.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/24and26.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/25.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/255.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/27.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/32.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/33.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/40.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/41.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/42.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/46.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/50.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/51.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/59.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/6.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/60.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/61.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/62.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/65.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/67.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/69.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/71.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/72.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/73.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/75.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/76.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/77.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/79.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/8.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/80.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/82.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/83.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/85.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/86.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/89.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/91.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/92.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/97.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/99.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/emu2413.c + ${CMAKE_SOURCE_DIR}/src/mappers/mmc2and4.cpp + ${CMAKE_SOURCE_DIR}/src/mappers/simple.cpp + ${CMAKE_SOURCE_DIR}/src/utils/ConvertUTF.c + ${CMAKE_SOURCE_DIR}/src/utils/crc32.cpp + ${CMAKE_SOURCE_DIR}/src/utils/endian.cpp + ${CMAKE_SOURCE_DIR}/src/utils/general.cpp + ${CMAKE_SOURCE_DIR}/src/utils/guid.cpp + ${CMAKE_SOURCE_DIR}/src/utils/md5.cpp + ${CMAKE_SOURCE_DIR}/src/utils/memory.cpp + ${CMAKE_SOURCE_DIR}/src/utils/unzip.cpp + ${CMAKE_SOURCE_DIR}/src/utils/xstring.cpp +) + +set(SRC_DRIVERS_COMMON + ${CMAKE_SOURCE_DIR}/src/drivers/common/args.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/cheat.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/config.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/configSys.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/hq2x.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/hq3x.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/scale2x.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/scale3x.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/scalebit.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/vidblit.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/common/nes_ntsc.c +) + +set(SRC_DRIVERS_SDL + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/config.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/input.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl-joystick.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl-sound.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl-throttle.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl-video.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/sdl/unix-netplay.cpp +) + +if(FCEUX_SDL_OPENGL) + set(SRC_DRIVERS_SDL ${SRC_DRIVERS_SDL} ${CMAKE_SOURCE_DIR}/src/drivers/sdl/sdl-opengl.cpp) +endif(FCEUX_SDL_OPENGL) + +set(SRC_DRIVERS_WIN + ${CMAKE_SOURCE_DIR}/src/lua-engine.cpp + ${CMAKE_SOURCE_DIR}/src/lua/src/lapi.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lauxlib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lbaselib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lcode.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ldblib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ldebug.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ldo.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ldump.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lfunc.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lgc.c + ${CMAKE_SOURCE_DIR}/src/lua/src/linit.c + ${CMAKE_SOURCE_DIR}/src/lua/src/liolib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/llex.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lmathlib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lmem.c + ${CMAKE_SOURCE_DIR}/src/lua/src/loadlib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lobject.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lopcodes.c + ${CMAKE_SOURCE_DIR}/src/lua/src/loslib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lparser.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lstate.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lstring.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lstrlib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ltable.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ltablib.c + ${CMAKE_SOURCE_DIR}/src/lua/src/ltm.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lundump.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lvm.c + ${CMAKE_SOURCE_DIR}/src/lua/src/lzio.c + ${CMAKE_SOURCE_DIR}/src/lua/src/print.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/archive.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/args.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/aviout.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/cdlogger.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/cheat.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/common.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/config.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/debugger.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/debuggersp.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/directories.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/gui.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/guiconfig.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/help.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/input.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/joystick.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/keyboard.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/log.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/luaconsole.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/main.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/mapinput.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/memview.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/memviewsp.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/memwatch.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/movieoptions.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/monitor.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/netplay.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/ntview.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/OutputDS.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/palette.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/ppuview.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/pref.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/ram_search.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/ramwatch.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/replay.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + ${CMAKE_SOURCE_DIR}/src/drivers/win/sound.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/state.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/tasedit.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/taseditproj.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/greenzone.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/bookmark.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/bookmarks.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/inputhistory.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/inputsnapshot.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/playback.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/taseditlib/markers.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/texthook.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/throttle.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/timing.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/tracer.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/video.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/wave.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/window.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/Win32InputBox.cpp + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/adler32.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/compress.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/crc32.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/deflate.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/gzio.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/infblock.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/infcodes.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/inffast.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/inflate.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/inftrees.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/infutil.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/trees.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/uncompr.c + ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib/zutil.c + # ${CMAKE_SOURCE_DIR}/src/drivers/res.rc +) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) +include_directories( ${CMAKE_SOURCE_DIR}/src ) +add_definitions( -DNETWORK ) + +if(WIN32) + set(SOURCES ${SRC_CORE} ${SRC_DRIVERS_COMMON} ${SRC_DRIVERS_WIN}) + include_directories( ${CMAKE_SOURCE_DIR}/src/drivers/win/directx ${CMAKE_SOURCE_DIR}/src/drivers/win/zlib ) + add_definitions( + -DWIN32 + -DFCEUDEF_DEBUGGER + -D_USE_SHARED_MEMORY_ + -DPSS_STYLE=2 + -DNOMINMAX + -D_S9XLUA_H + ) + link_directories( ${CMAKE_SOURCE_DIR}/src/drivers/win/directx ) +else(WIN32) + set(SOURCES ${SRC_CORE} ${SRC_DRIVERS_COMMON} ${SRC_DRIVERS_SDL}) + include_directories( ${SDL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) + add_definitions( ${SDL_DEFINITIONS} ${ZLIB_DEFINITIONS} ) + if(FCEUX_SDL_OPENGL) + add_definitions( -DOPENGL ) + include_directories( ${OPENGL_INCLUDE_DIR} ) + endif(FCEUX_SDL_OPENGL) +endif(WIN32) + +if(APPLE) + add_definitions( -DPSS_STYLE=4 ) +else(APPLE) + if(UNIX) + add_definitions( -DPSS_STYLE=1 ) + endif(UNIX) +endif(APPLE) + +if(MINGW) + add_definitions( -DNEED_MINGW_HACKS -D_WIN32_IE=0x0600 ) +endif(MINGW) +if(CMAKE_BUILD_TYPE STREQUAL "debug") + add_definitions( -D_DEBUG ) +endif(CMAKE_BUILD_TYPE STREQUAL "debug") +if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wno-write-strings -Wno-sign-compare") +endif(CMAKE_COMPILER_IS_GNUCXX) + +if(FCEUX_FRAMESKIP) + add_definitions( -DFRAMESKIP ) +endif(FCEUX_FRAMESKIP) + +if(NOT FCEUX_FORCE_BE) + if(FCEUX_FORCE_LE) + add_definitions( -DLSB_FIRST ) + else(FCEUX_FORCE_LE) + test_big_endian(SYS_IS_BE) + if(NOT SYS_IS_BE) + add_definitions( -DLSB_FIRST ) + endif(NOT SYS_IS_BE) + endif(FCEUX_FORCE_LE) +endif(NOT FCEUX_FORCE_BE) + +check_function_exists(asprintf HAVE_ASPRINTF) +# HACK: cmake seems to cache HAVE_ASPRINTF and I don't know how to ask it +# to forget--even if your compiler changes. So tell it mingw=>no. +if(HAVE_ASPRINTF AND NOT MINGW) + add_definitions( -DHAVE_ASPRINTF ) +endif(HAVE_ASPRINTF AND NOT MINGW) + +add_executable( ${FCEUX_EXE_NAME} ${SOURCES} ) + +if(WIN32) + add_dependencies( ${FCEUX_EXE_NAME} InstallHelpFile ) + #add_dependencies( ${FCEUX_EXE_NAME} res.o) + #add_custom_command( + # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/res.o + # COMMAND windres + # ARGS ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc ${CMAKE_CURRENT_BINARY_DIR}/res.o --use-temp-file -D_WIN_IE=0x300 + # MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + #) + set(OUTPUT_RES_RC_O CMakeFiles/${FCEUX_EXE_NAME}.dir/__/__/__/src/drivers/win/res.rc.o) + add_custom_command( + OUTPUT ${OUTPUT_RES_RC_O} + COMMAND windres -o ${OUTPUT_RES_RC_O} ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + DEPENDS ${CMAKE_SOURCE_DIR}/src/drivers/win/res.rc + VERBATIM + ) + add_custom_target( + BuildResourceFileFor${FCEUX_EXE_NAME} + DEPENDS ${OUTPUT_RES_RC_O} + ) + set(DEFINED_BUILD_RESOURCE_FILE TRUE CACHE GLOBAL "This is a hack to get CMake to build the .rc file") + + add_dependencies( ${FCEUX_EXE_NAME} BuildResourceFileFor${FCEUX_EXE_NAME} ) + set_property( + TARGET ${FCEUX_EXE_NAME} + PROPERTY LINK_FLAGS "${OUTPUT_RES_RC_O} -mwindows" + ) + + target_link_libraries( ${FCEUX_EXE_NAME} rpcrt4 comctl32 vfw32 winmm ws2_32 + comdlg32 ole32 gdi32 + dsound dxguid ddraw dinput + ) + if(MINGW) + include_directories(${CMAKE_SOURCE_DIR}/src/drivers/win/lua/include/) + else(MINGW) + target_link_libraries( ${FCEUX_EXE_NAME} htmlhelp) + endif(MINGW) +else(WIN32) + target_link_libraries( ${FCEUX_EXE_NAME} ${SDL_LIBRARY} ${ZLIB_LIBRARIES} ) + if(FCEUX_SDL_OPENGL) + target_link_libraries( ${FCEUX_EXE_NAME} ${OPENGL_gl_LIBRARY} ) + endif(FCEUX_SDL_OPENGL) +endif(WIN32) + + diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/CMakeLists.txt new file mode 100644 index 00000000..9d36cf4b --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(release) +add_subdirectory(debug) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/debug/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/debug/CMakeLists.txt new file mode 100644 index 00000000..d21d1f2b --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/debug/CMakeLists.txt @@ -0,0 +1,4 @@ +project("fceux: native debug") +set(CMAKE_BUILD_TYPE debug) +set(FCEUX_EXE_NAME fceuxDBG) +include(${CMAKE_SOURCE_DIR}/cmake/native/fceux_native.cmake) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/fceux_native.cmake b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/fceux_native.cmake new file mode 100644 index 00000000..474a4288 --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/fceux_native.cmake @@ -0,0 +1 @@ +include(${CMAKE_SOURCE_DIR}/cmake/fceux.cmake) diff --git a/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/release/CMakeLists.txt b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/release/CMakeLists.txt new file mode 100644 index 00000000..4f78c90a --- /dev/null +++ b/branches/fceux-2.2.2/attic/cmake-stuff/cmake/native/release/CMakeLists.txt @@ -0,0 +1,4 @@ +project("fceux: native release") +set(CMAKE_BUILD_TYPE release) +set(FCEUX_EXE_NAME fceuxREL) +include(${CMAKE_SOURCE_DIR}/cmake/native/fceux_native.cmake) diff --git a/branches/fceux-2.2.2/attic/compile b/branches/fceux-2.2.2/attic/compile new file mode 100755 index 00000000..9bb997a6 --- /dev/null +++ b/branches/fceux-2.2.2/attic/compile @@ -0,0 +1,99 @@ +#! /bin/sh + +# Wrapper for compilers which do not understand `-c -o'. + +# Copyright 1999, 2000 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Usage: +# compile PROGRAM [ARGS]... +# `-o FOO.o' is removed from the args passed to the actual compile. + +prog=$1 +shift + +ofile= +cfile= +args= +while test $# -gt 0; do + case "$1" in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we do something ugly here. + ofile=$2 + shift + case "$ofile" in + *.o | *.obj) + ;; + *) + args="$args -o $ofile" + ofile= + ;; + esac + ;; + *.c) + cfile=$1 + args="$args $1" + ;; + *) + args="$args $1" + ;; + esac + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$prog" $args +fi + +# Name of file we expect compiler to create. +cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir $lockdir > /dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir $lockdir; exit 1" 1 2 15 + +# Run the compile. +"$prog" $args +status=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +fi + +rmdir $lockdir +exit $status diff --git a/branches/fceux-2.2.2/attic/config.guess b/branches/fceux-2.2.2/attic/config.guess new file mode 100755 index 00000000..dff9e481 --- /dev/null +++ b/branches/fceux-2.2.2/attic/config.guess @@ -0,0 +1,1317 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-09-04' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# Please send patches to . +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c ; + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $dummy.c $dummy.o $dummy.rel ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE}" in + i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + sparc*:NetBSD:*) + echo `uname -p`-unknown-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + case "${HPUX_REV}" in + 11.[0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; + esac + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in + big) echo mips-unknown-linux-gnu && exit 0 ;; + little) echo mipsel-unknown-linux-gnu && exit 0 ;; + esac + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_supported_targets=`cd /; ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + cat >$dummy.c < +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-pc-linux-gnu\n", argv[1]); +# else + printf ("%s-pc-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-pc-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-pc-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/branches/fceux-2.2.2/attic/config.sub b/branches/fceux-2.2.2/attic/config.sub new file mode 100755 index 00000000..393f13d3 --- /dev/null +++ b/branches/fceux-2.2.2/attic/config.sub @@ -0,0 +1,1411 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-09-07' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dsp16xx \ + | fr30 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el | mips64vr4300 \ + | mips64vr4300el | mips64vr5000 | mips64vr5000el \ + | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ + | mipsisa32 \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | s390 | s390x \ + | sh | sh[34] | sh[34]eb | shbe | shle \ + | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ + | stormy16 | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 \ + | we32k \ + | x86 | xscale \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alphapca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armv*-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c54x-* \ + | clipper-* | cray2-* | cydra-* \ + | d10v-* | d30v-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | m32r-* \ + | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ + | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ + | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | s390-* | s390x-* \ + | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ + | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | v850-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [cjt]90) + basic_machine=${basic_machine}-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb) + basic_machine=sh-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/branches/fceux-2.2.2/attic/configure-mingw32 b/branches/fceux-2.2.2/attic/configure-mingw32 new file mode 100644 index 00000000..faf8fb03 --- /dev/null +++ b/branches/fceux-2.2.2/attic/configure-mingw32 @@ -0,0 +1 @@ +CFLAGS="-mno-cygwin" CXXFLAGS="-mno-cygwin" LDFLAGS="-mno-cygwin" ./configure --host=mingw32 \ No newline at end of file diff --git a/branches/fceux-2.2.2/attic/configure.ac b/branches/fceux-2.2.2/attic/configure.ac new file mode 100644 index 00000000..a788deae --- /dev/null +++ b/branches/fceux-2.2.2/attic/configure.ac @@ -0,0 +1,101 @@ +AC_INIT([src/fceu.cpp]) + +AC_CANONICAL_HOST +AC_CANONICAL_TARGET +AM_INIT_AUTOMAKE([fceu], $FCEU_VERSION) + +AC_PROG_CC +AC_PROG_CPP +AM_PROG_CC_C_O +AC_PROG_CXX +AC_PROG_CXXCPP +AC_PROG_INSTALL + +AC_DEFINE(_GNU_SOURCE) +AC_CHECK_FUNC(asprintf, AC_DEFINE([HAVE_ASPRINTF]), []) +AC_CHECK_FUNC(alloca, AC_DEFINE([HAVE_ALLOCA]), []) + +dnl Check for zlib +AC_CHECK_LIB([z], [zlibVersion],[], AC_MSG_ERROR([*** zlib not found!])) +LIBS="$LIBS -lz" + +AM_CONDITIONAL(WIN32, false) +AM_CONDITIONAL(UNIX, false) +AM_CONDITIONAL(USE_SEXYAL, false) +AM_CONDITIONAL(OPENGL, false) +AM_CONDITIONAL(HAVE_GTK, false) +AC_DEFINE([NETWORK],[1]) + +if expr x"$target" : 'x.*beos' > /dev/null; then +CFLAGS="-no-fpic $CFLAGS" +CPPFLAGS="-no-fpic $CPPFLAGS" +AC_DEFINE([PSS_STYLE],[1]) +elif expr x"$target" : 'x.*mingw' > /dev/null; then +AC_DEFINE([PSS_STYLE],[2]) +AC_DEFINE([WIN32]) +AM_CONDITIONAL(WIN32, true) + +else +AM_CONDITIONAL(UNIX, true) +AC_DEFINE([UNIX]) +AC_DEFINE([PSS_STYLE],[1]) +AC_DEFINE([NETWORK],[1]) + +dnl AC_CHECK_HEADER([sys/soundcard.h], +dnl AM_CONDITIONAL(USE_SEXYAL, true) +dnl AC_DEFINE([USE_SEXYAL]),[]) +fi + +dnl if expr x"$target" : 'x.*darwin' > /dev/null; then +dnl AC_DEFINE([MACOSX]) +dnl fi + +if test x$use_nativewin32 = xno; then + dnl Check for SDL + SDL_VERSION=1.2.0 + AM_PATH_SDL($SDL_VERSION, [:], + AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])) + + AC_LANG_CPLUSPLUS + LIBS="$LIBS $SDL_LIBS" + CFLAGS="-Wall -fomit-frame-pointer $CFLAGS $SDL_CFLAGS" + CPPFLAGS="-Wall -fomit-frame-pointer $CPPFLAGS $SDL_CFLAGS" + + dnl Check for SDL_net for net play + HAS_SDL_NET=no + dnl AC_CHECK_LIB([SDL_net], [SDLNet_Init],[HAS_SDL_NET=yes]) + dnl if test x$HAS_SDL_NET = xyes; then + dnl AC_DEFINE([NETWORK]) + dnl LIBS="$LIBS -lSDL_net" + dnl fi + + AC_ARG_WITH(opengl, + [AC_HELP_STRING([--with-opengl], + [use OpenGL])], + use_opengl=$withval, + use_opengl="no") + + if [[ "$use_opengl" = "yes" ]] ; then + dnl Check for OpenGL + + AC_CHECK_HEADER([GL/gl.h],[AC_DEFINE([OPENGL]) AM_CONDITIONAL(OPENGL, true)], + [ + AC_CHECK_HEADER([OpenGL/gl.h],[AC_DEFINE([OPENGL]) AM_CONDITIONAL(OPENGL, true)],[]) + AC_DEFINE([APPLEOPENGL]) + ]) + fi + AC_DEFINE([SDL],[1]) +fi + + +if expr match "$target_cpu" 'i.86' > /dev/null; then + AC_DEFINE([C80x86]) +fi + +AC_C_BIGENDIAN([], [AC_DEFINE([LSB_FIRST])]) + + +AC_DEFINE(FRAMESKIP) + +dnl Output Makefiles +AC_OUTPUT([Makefile src/Makefile]) diff --git a/branches/fceux-2.2.2/attic/depcomp b/branches/fceux-2.2.2/attic/depcomp new file mode 100755 index 00000000..807b991f --- /dev/null +++ b/branches/fceux-2.2.2/attic/depcomp @@ -0,0 +1,423 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. This file always lives in the current directory. + # Also, the AIX compiler puts `$object:' at the start of each line; + # $object doesn't have directory information. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. We will use -o /dev/null later, + # however we can't do the remplacement now because + # `-o $object' might simply not be used + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + -*) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/branches/fceux-2.2.2/attic/fceu-svga.6 b/branches/fceux-2.2.2/attic/fceu-svga.6 new file mode 100644 index 00000000..a2f7e503 --- /dev/null +++ b/branches/fceux-2.2.2/attic/fceu-svga.6 @@ -0,0 +1,135 @@ +.\" t Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH FCEU-SVGA 6 "March 27, 2003" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +fceu-svga \- An emulator for the original (8-bit) Nintendo game console. +.SH SYNOPSIS +.B fceu-svga +.RI [ options ] +"filename" +.SH DESCRIPTION +.B FCE Ultra +is an emulator for the original (8-bit) Nintendo Entertainment System (NES). +It has a robust color palette rendering engine that is fully customizable, +along with excellent sound and joystick support, and even includes TCP/IP based +network playing for head-to-head gaming with your friends! +.PP +The emulator is available in two versions for Linux (there are also versions +for DOS and Windows): an SDL-based version, and one based on SVGALIB. The two +versions are essentially the same \-\- use the SVGALIB version for the Linux +console, and the SDL version for playing in X. +.SH OPTIONS +These are some of the more frequently used options in FCE Ultra SVGALIB. Run +fceu-svga without any options for a larger list, or see the README for the full +list. +.TP +.BI \-gg +Enable Game Genie emulation support. +.TP +.BI "\-cpalette " +Use the custom palette in . +.TP +.BI "\-soundvol " +Sets the sound volume to the given percentage. +.TP +.BI "\-sound " +Set the sound playback sample rate (0 == off). +.TP +.BI "\-connect " +Connect as a client (player 2) to for TCP/IP network play. +.TP +.BI \-server +Be a host server (player 1) for a TCP/IP network game. +.TP +.BI "\-netport " +Use for TCP/IP network play. +.SH KEYBOARD COMMANDS +.B FCE Ultra +has a number of commands available within the emulator. +It also includes default keyboard bindings when emulating game pads or power pads. +.SS Gamepad Keyboard Bindings +.TS +center box; +cb | cb, c | ci. +NES Gamepad Keyboard += +Arrows Cursor Arrows +A Left ALT +B Left CTRL +Select TAB +Start ENTER +.TE +.SS Other Commands +.PP +.TP 15 +.BI +Activate cheat interface. +.TP 15 +.BI +Lock virtual console. +.TP 15 +.BI +Unlock virtual console. +.TP 15 +.BI +Save game state into current slot (set using number keys). +.TP 15 +.BI +Restore game state from current slot (set using number keys). +.TP 15 +.BI +Save screen snapshot. +.TP 15 +.BI +Reset NES. +.TP 15 +.BI +Toggle power to NES. +.TP 15 +.BR ", " +Quit +.B FCE Ultra. +.SH NOTES +This program needs permisison to the video hardware, this normally requires +root access. One way to accomplish this is by making +.BI "fceu-svga " suid-root. +An easy way to do this is using the +.BR dpkg-statoverride +command. For example, as root on a +.I Debian +system run: +.PP +.B dpkg-statoverride --update --add root games 04755 /usr/games/fceu-svga +.PP +This will ensure that the setuid bit is preserved across package upgrades. +.SH SEE ALSO +.BR dpkg-statoverride "(8), " fceu-sdl (6) +.TP +.I /usr/share/doc/fceu-doc/readme-linux.txt.gz +The +.B FCE Ultra README +for linux, available from the +.I fceu-doc +Debian package. +.TP +.I http://fceultra.sourceforge.net/ +The +.B FCE Ultra +project homepage. +.SH AUTHOR +This manual page was written by Joe Nahmias , +for the Debian GNU/Linux system (but may be used by others). diff --git a/branches/fceux-2.2.2/attic/install-sh b/branches/fceux-2.2.2/attic/install-sh new file mode 100755 index 00000000..11870f1b --- /dev/null +++ b/branches/fceux-2.2.2/attic/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + : + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + : + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/branches/fceux-2.2.2/attic/missing b/branches/fceux-2.2.2/attic/missing new file mode 100755 index 00000000..6a37006e --- /dev/null +++ b/branches/fceux-2.2.2/attic/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/branches/fceux-2.2.2/attic/mkinstalldirs b/branches/fceux-2.2.2/attic/mkinstalldirs new file mode 100755 index 00000000..8ab885ec --- /dev/null +++ b/branches/fceux-2.2.2/attic/mkinstalldirs @@ -0,0 +1,99 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case "${1}" in + -h | --help | --h* ) # -h for help + echo "${usage}" 1>&2; exit 0 ;; + -m ) # -m PERM arg + shift + test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } + dirmode="${1}" + shift ;; + -- ) shift; break ;; # stop option processing + -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option + * ) break ;; # first non-opt arg + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in +0) exit 0 ;; +esac + +case $dirmode in +'') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi ;; +*) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 3 +# End: +# mkinstalldirs ends here diff --git a/branches/fceux-2.2.2/attic/readme b/branches/fceux-2.2.2/attic/readme new file mode 100644 index 00000000..ca3c2e5b --- /dev/null +++ b/branches/fceux-2.2.2/attic/readme @@ -0,0 +1,32 @@ +FCE Ultra was developed with gcc and GNU make in mind. MSVC will probably +compile the Windows source code with a few modifications, but you'll still +need to make a project file. + +Several pre-made makefiles are provided: + Makefile.beos - BeOS(with SDL and SDL_net) + Makefile.unixsdl - UN*X(FreeBSD/Linux/etc, with SDL) + Makefile.linuxvga - Linux(with svgalib) + Makefile.dos - (MS/PC/DR) DOS + Makefile.win - MS Windows 9x/Me/Xp/2000/etc.(with DirectX). + Makefile.macosx - Mac OS X(with SDL) + +If you want to use Makefile.beos or Makefile.unixsdl for a cpu type other +than 80x86, you will need to remove "-DC80x86" from the defines line +and also remove "-DLSB_FIRST" if your target cpu uses MSB first ordering. +You'll also need to remove/change "-mcpu=xxx". + +For the Windows port, I use MINGW32. http://www.mingw.org + +To compile the DOS port, you'll need to download the DJGPP package. +Any version of gcc >=2.95.3 should compile the code without changes, BUT +the DJGPP versions of gcc have some problems: + gcc 2.95.3 sometimes breaks when compiling the code. gcc 3.0.2 seems to + produce bad code for sound.c. So, I recommend using gcc 3.0.4 for + compiling the DOS version. + +Modifying the "-mcpu=i686" string in the makefiles, to optimize more effectively +for your cpu type, is a good idea. + +Always do a "make -f Makefile. clean" before compiling for a +different platform or if you update via cvs and if you have stale object +files lying around. diff --git a/branches/fceux-2.2.2/changelog.txt b/branches/fceux-2.2.2/changelog.txt new file mode 100644 index 00000000..4eebbd5d --- /dev/null +++ b/branches/fceux-2.2.2/changelog.txt @@ -0,0 +1,817 @@ + +23-Sep-2013 - AnS - Tracer: do not clear window log when stopping the logging +22-Sep-2013 - AnS - Tracer: the dialog window can be resized +21-Sep-2013 - AnS - Debugger: newly created Bookmarks inherit existing symbolic name by default +20-Sep-2013 - AnS - Debugger, Tracer: clicking on Symbolic names works as well as clicking on addresses +17-Sep-2013 - zeromus - fixed "Single Instance Mode" +16-Sep-2013 - AnS - PPU Viewer: added "Mask unused graphics" and "Invert the mask" checkboxes; fixed window layout when using big fonts +15-Sep-2013 - feos - Lua: added tobitstring(), memory.readword(int address1 [, int address2]), memory.readwordsigned(int address1 [, int address2]) functions +15-Sep-2013 - CaH4e3 - mapper 002 - workaround for "Top Gun" issue #621, needs testing if this broke something else; mapper 012 - added hardware dip for language select; UNIF PEC-586 - fixed render finally, added 512K cartridges suppport, TODO: PEC keyboard +13-Sep-2013 - AnS - debuggerFontSize and hexeditorFontSize can be specified in fceux.cfg +13-Sep-2013 - AnS - Debugger: "Symbolic Debug" state is now saved in global fceux.cfg instead of different .deb files +12-Sep-2013 - AnS - Tracer: added mouse wheel support +12-Sep-2013 - AnS - Tracer: clicking any address select the address; double-clicking any address brings Debugger at the address +12-Sep-2013 - AnS - Tracer: added Symbolic Debug naming by right-clicking any address +10-Sep-2013 - feos - Hexeditor: Symbolic Debug naming by right-clicking address +10-Sep-2013 - AnS - Debugger: added Symbolic Debug naming by right-clicking any address +05-Sep-2013 - AnS - Debugger: fixed Cycles counter reset when loading an earlier savestate +15-Aug-2013 - CaH4e3 - fixed bandai mapper emulation +04-Aug-2013 - AnS - Hexeditor: added "Highlighting" submenu and "Highlight Activity" feature +04-Aug-2013 - AnS - Taseditor: an experiment with somewhat different colors for HotChanges +04-Aug-2013 - AnS - Auto-disable "Game Genie ROM" feature when no "gg.rom" file is found +16-Jul-2013 - AnS - Debugger: highlight PC pointer line when a breakpoint is hit +05-Jul-2013 - AnS - RAM Search: added "Hex Editor" button and right-click +04-Jul-2013 - AnS - Debugger: added CDL data column in place of left panel. It helps to distinguish executed branches of code from not logged code +04-Jul-2013 - AnS - Debugger: clever autoscrolling when stepping/seeking to PC. It maintains relative position of the ">" pointer inside the Disassembly window +03-Jul-2013 - AnS - RAM Watch: fixed epic bug when contents of old .wch file mixed with the newly saved data because of "r+b" mode (changed it to "w+b") +03-Jul-2013 - AnS - Taseditor: Greenzone: always keep Greenzone.lagLog in touch with history.currentSnapshot.laglog (fixes workflow with "Auto-adjust" disabled) +03-Jul-2013 - AnS - Tracer: only output "from $XXXX" when the subroutine was called by JSR (fixes possible errors in those cases when the subroutine was called using stack magic) +03-Jul-2013 - AnS - Debugger: do not reload ram.nl every time automatically +21-Jun-2013 - CaH4e3 - PPU Viewer: when CDLogger is on, display unused graphics in a dim palette +15-Jun-2013 - AnS - Movie recording: fixed bug when emulator allowed recording commands outside the range of FM2 specs +15-Jun-2013 - AnS - Movie recording: added ability to record "Insert coin" command (for VS games) +15-Jun-2013 - AnS - Movie recording: remember last Author name when creating a new movie +08-Jun-2013 - AnS - A couple of fixes which deal with "multiple ROMs in a single archive" case. The loading procedure now takes into account actual ROM name when loading ROM from an archive containing multiple files. This affects PAL/NTSC detection (in case there were ROMs of different regions inside a single zip). Also, "auto-resume play" now loads actual ROM on startup (instead of prompting a list of archived files to choose). Also, NL files (symbolic debug) are named correctly when debugging a ROM from such an archive, etc. +08-Jun-2013 - AnS - Hexeditor: fixed bugs when saving files while working with ROMs in archives +27-May-2013 - AnS - Hexeditor: specify Data bank condition when adding a Breakpoint by context menu +26-May-2013 - AnS - Debugger: added 'T' condition (checks the bank of the data accessed) +26-May-2013 - AnS - Win32: fixed storing and loading .deb files when working with archived ROMs +26-May-2013 - AnS - new Lua functions: debugger.hitbreakpoint(), debugger.getcyclescount(), debugger.getinstructionscount(), debugger.resetcyclescount(), debugger.resetinstructionscount() +26-May-2013 - AnS - Win32: when no script is currently running, Shift+L loads the most recent Lua script +26-May-2013 - CaH4e3 - fixed mapper 183 +14-May-2013 - CaH4e3 - fixed mapper 253 +13-May-2013 - CaH4e3 - mapper 43 +09-May-2013 - AnS - Video config: changed "Disable hardware acceleration" option to a drop-down list with 3 options: a) No hardware acceleration; b) Create surface in RAM; c) Hardware acceleration. Because it appears that some video cards still blur textures even when stored in RAM. +29-Apr-2013 - AnS - added checking if archive file has any files in it, because new 7z.dll confuses FDS files with archives (it recognizes the first "F" as a signature of an archive) +19-Apr-2013 - AnS - Video config: added "Square pixels" option +19-Apr-2013 - AnS - Video config: added aspect ratio fields for customizing "TV Aspect" ratio, by default it's 4:3 +17-Apr-2013 - AnS - "Auto-resume old play session" now also works with NSFs +17-Apr-2013 - zeromus - properly savestate NSF +17-Apr-2013 - zeromus - add missing mmc5 savestate variables +16-Apr-2013 - AnS - Tracer: added "Log Cycles count" and "Log Instructions count" options +13-Apr-2013 - AnS - Debugger: scrolling up/down by whole instructions +12-Apr-2013 - gocha - Lua: fix wrong frequency calculation in sound.get() +07-Apr-2013 - AnS - Taseditor: comply with Lua movie.rerecordcounting() setting +01-Apr-2013 - CaH4e3 - mapper 154 - fixed +26-Mar-2013 - CaH4e3 - mapper 53 - supported ines format of SUPERVISION UNIF board; UNIF 8157 - fix according to hw; UNIF T-262 - fix according to hw +24-Mar-2013 - CaH4e3 - UNIF DANCE2000 - now emulated properly +20-Mar-2013 - gocha - link to lua51.dll instead of static linking +19-Mar-2013 - zeromus - bring some improvements to newppu from bizhawk, and fix vtoggle5/6 back to vtoggle +19-Mar-2013 - zeromus - fix mapper 28 +17-Mar-2013 - AnS - Replay: removed redundant window update when using "Browse" (fixes #585) +17-Mar-2013 - CaH4e3 - UNIF DSOUNDV1 - removed due to duplicate of 178 mapper; mapper 178 - added more features of 8/16M carts with 32K SRAM; UNIF 09-034A - added support for a new SMB2j Lite version +14-Mar-2013 - AnS - Debugger: ported "smart scrolling" from an obscure version of FCEUXD 1.1 +14-Mar-2013 - CaH4e3 - palette ram reading fix for old ppu + +---r2869 - FCEUX 2.2.1 Released--- +---March 10 2013--- + +10-Mar-2013 - prg - SDL: added option to use system minizip +10-Mar-2013 - prg - updated to use minizip v1.2.7 +10-Mar-2013 - CaH4e3 - CDLogger: improved CHR logging, now it also logs the data when using Old PPU +02-Mar-2013 - AnS - Hexeditor: fixed ROM coloring when using CDLogger data +28-Feb-2013 - AnS - PPU/PAL/Input type changing is now disabled when a movie is playing +28-Feb-2013 - AnS - Cheats: update the window when ROM is changed +28-Feb-2013 - AnS - show the number of active cheats when a ROM is loaded +27-Feb-2013 - CaH4e3 - CDLogger: added "Auto-load .CDL when opening the window" option +27-Feb-2013 - CaH4e3 - MMC5 refixed +24-Feb-2013 - AnS - CDLogger: added "Auto-save .CDL when closing ROMs" and "Auto-resume logging when loading ROMs" options +23-Feb-2013 - AnS - Hexeditor: show symbolic names in the window caption +18-Feb-2013 - CaH4e3 - various mapper improvements; UNIF MALISB - Mali Splash Bomb dump; mapper 19 - Dream Master mirror fix +18-Feb-2013 - CaH4e3 - fixed mapper 69 low quality sound issue +11-Feb-2013 - AnS - fixed possible crash when saving the ROM in Hex Editor +11-Feb-2013 - AnS - Moved "Config->Game Genie" to "Config->Enable->Game Genie ROM" +03-Feb-2013 - AnS - win32: speed up screen blitting +02-Feb-2013 - AnS - Added "TV Aspect (4:3)" to Video Config +21-Jan-2013 - AnS - Taseditor: fixed Bookmarks List height on Windows 7 +21-Jan-2013 - AnS - Taseditor: fixed bug with adding new item to History Log +20-Jan-2013 - AnS - Taseditor: changed the logic by which the Piano Roll follows Playback cursor, now it doesn't follow it while seeking +15-Jan-2013 - AnS - Lua: removed "shadow pixels" from gui.text(), made gui.parsecolor() function available for users +10-Jan-2013 - AnS - Taseditor: Config->Project file saving options +01-Jan-2013 - zeromus - NameTableViewer: do something reasonable if a 4-screen, table2, table3 mirror mode is chosen when the corresponding nametable ram is not available on the cart (instead of crashing) +31-Dec-2012 - CaH4e3 - fixed mappers 24, 26, 115 +29-Dec-2012 - AnS - Taseditor: Changed "Compact save" dialog, added 4 options of Greenzone saving +29-Dec-2012 - AnS - Cheats: added "Add from CHT file..." button +29-Dec-2012 - AnS - win32: force the entire client area to be invalidated at the beginning of WM_PAINT; this fixes the rare bug with DIRECTDRAWCLIPPER sometimes calculating wrong region (was noticed on some video cards) +27-Dec-2012 - AnS - Play movie dialog shows New PPU in red if the required setting does not match +27-Dec-2012 - thezlomus - RAM Search: added "Search ROM" checkbox +19-Dec-2012 - AnS - win32: remodel "Video config" dialog +19-Dec-2012 - AnS - win32: fixed restoring maximized window after switching from fullscreen +18-Dec-2012 - CaH4e3 - fixed mapper 018 and 198 +15-Dec-2012 - AnS - win32: added Config->Enable->Auto-resume old play session +13-Dec-2012 - AnS - win32: added Emulation Speed->Set custom speed for FrameAdvance +13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set FrameAdvance Delay +13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set Custom Speed +12-Dec-2012 - CaH4e3 - finish with mapper to boards conversion +07-Dec-2012 - CaH4e3 - Tracer: fixed RAM-located code logging when CDLogger options are enabled +05-Dec-2012 - AnS - fixed zapper and mouse positioning in fullscreen +04-Dec-2012 - AnS - speed up HUD text drawing +04-Dec-2012 - AnS - Taseditor: speed up consecutive Recordings (when combining) +03-Dec-2012 - AnS - Taseditor: fixed accelerators when editing Notes +03-Dec-2012 - AnS - fixed "X" button in the "Enter New Input" dialog (Hotkey Mapping); changed "Cancel" button to "OK" +03-Dec-2012 - CaH4e3 - fixed mapper 99 +29-Nov-2012 - zeromus - fix "you ling xing dong" by assigning to mapper 192 + +---r2768 - FCEUX 2.2.0 Released--- +---November 27 2012--- + +24-Nov-2012 - AnS - when the New PPU is on, it displays "(NewPPU)" in the window caption +20-Nov-2012 - AnS - Taseditor: added "Ungreenzone" item to context menu; added "Config->Enable Greenzoning" +13-Nov-2012 - AnS - Taseditor: changed fm3 format to version 3 +10-Nov-2012 - AnS - win32 hotkeys mapping: added the condition that both commands must have the same EMUCMDFLAG_TASEDITOR, or else they are not considered conflicting +10-Nov-2012 - AnS - win32 hotkeys: disallow unwanted hits of e.g. F1 after pressing Shift+F1 and quickly releasing Shift +05-Nov-2012 - zeromus - support mapper 028 +05-Nov-2012 - AnS - Taseditor: fixed lag adjustments when dealing with previously unknown lag state +30-Oct-2012 - zeromus - default stack pointer to $FD instead of $FF +29-Oct-2012 - CaH4e3 - mapper 252 added +29-Oct-2012 - AnS - Taseditor: update RAM Search and RAM Watch when jumping causes game state to change +21-Oct-2012 - CaH4e3 - sync mappers with fceu-mm +30-Sep-2012 - AnS - added "(Europe)" and "(PAL)" strings to region detection +28-Sep-2012 - AnS - Hexeditor: Ctrl+F opens Find dialog +28-Sep-2012 - AnS - Hexeditor: display 0x5000-0x5FFF contents +28-Sep-2012 - AnS - Tracer: fixed crash when logging undefined opcodes +26-Sep-2012 - AnS - Debugger: "Name" button in Bookmarks, total revamp of Bookmarks +26-Sep-2012 - AnS - Debugger: single click on any address copies this address to the "Seek To" field and "Bookmark Add" field +26-Sep-2012 - AnS - Fixed replay engine bug that doubles the last input of the movie +26-Sep-2012 - AnS - Tracer: "RTS" instructions now output the subroutine address/name +23-Sep-2012 - AnS - Lua: clear previous frame drawings at the beginning of every frame +23-Sep-2012 - AnS - Debugger: fixed mouseover when using Symbolic debug; mouseover works for the disassembly window too +23-Sep-2012 - CaH4e3 - CDLogger: Now can log VROM access (CHR banks of the ROM) when NewPPU is enabled +22-Sep-2012 - AnS - Tracer: added "Symbolic trace", "Log current Frame number", "Log emulator messages", "Log breakpoint hits" options +11-Sep-2012 - AnS - new Lua function: emu.setlagflag() +11-Sep-2012 - AnS - Debugger: deleting a breakpoint leaves selection in the Breakpoints list +06-Sep-2012 - AnS - added "Use Custom Palette" checkbox to Palette config +06-Sep-2012 - AnS - Debugger: special strings (NMI/IRQ/etc) can be also used in "Seek To" field and Bookmarks +01-Sep-2012 - AnS - fixed movie savestates logic, loading post-movie savestates is not allowed in read-only +31-Aug-2012 - zeromus - update mapper 156 from fceu-mm sources +30-Aug-2012 - AnS - fixed savestates filenaming bug when working with a movie +29-Aug-2012 - AnS - added "Force Grayscale" checkbox to Palette config +26-Aug-2012 - AnS - Taseditor: History Log highlights items related to current item +25-Aug-2012 - AnS - Taseditor: fixed AdjustLag feature and changed fm3 version to v2 +22-Aug-2012 - AnS - added "Clear" button to Message Log +20-Aug-2012 - AnS - "Switch fullscreen by double-click" option in GUI config +20-Aug-2012 - AnS - "Hide mouse cursor" and "Use console BG color for empty areas" options +20-Aug-2012 - AnS - total revamp of Video config stuff, Best Fit also works for fullscreen mode +19-Aug-2012 - AnS - win32: "Maintain aspect ratio (best fit)" option in Video config +12-Aug-2012 - AnS - Debugger: "Display ROM offsets" option +12-Aug-2012 - AnS - Debugger: double-click breakpoint also adds current bank number to breakpoint condition +12-Aug-2012 - AnS - Added FPS display to Win32 port (Config->Display->FPS) +10-Aug-2012 - prg - gtk: reset video on video dialog close +10-Aug-2012 - prg - gtk: add gui option for showfps +10-Aug-2012 - prg - sdl: add runtime option for controling drawing fps (SDL.ShowFPS) +10-Aug-2012 - prg - core: move showfps from build option to runtime option +10-Aug-2012 - prg - sdl: fix and enable SHOWFPS build option (TODO: make runtime option) +10-Aug-2012 - AnS - Debugger: "Address Bookmark Add" field follows disassembly window scrolling position +08-Aug-2012 - AnS - Taseditor: frame counter display is auto-on when Taseditor launches +08-Aug-2012 - AnS - Debugger: improved stack display +08-Aug-2012 - AnS - Debugger: doubleclick on the disassembly prompts "Add Execute breakpoint" dialog +08-Aug-2012 - AnS - Debugger: fixed RAM peek by a rightclick on left pane +08-Aug-2012 - AnS - Debugger: ">" points at current line in disassembly +08-Aug-2012 - AnS - Debugger: show the number of breakpoints (enabled and total) above the breakpoints list +06-Aug-2012 - CaH4e3 - fixed bug when loading UNF games (#525 ) +06-Aug-2012 - AnS - Tracer also updates its window when user pauses the game, not just when Debugger snaps +06-Aug-2012 - AnS - Tracer: added "Use Stack Pointer for code tabbing" option and added "To the left from disassembly text" option +05-Aug-2012 - AnS - Debugger: .DEB file now also stores the state of "Break on Bad Opcode" and "Break when exceed" checkboxes/editfields +05-Aug-2012 - AnS - Debugger: added "CPU cycles" and "Instructions" counters (request #527) and added "Break when exceed" breakpoints +05-Aug-2012 - AnS - Debugger: window layout cleanup +06-Aug-2012 - prg - gtk: added hotkey gui config +04-Aug-2012 - prg - all: updated FSF address +04-Aug-2012 - prg - sdl: added SDL.Input.EnableOppositeDirectional option. allows/disallows simultaneous right+left / up+down. +03-Aug-2012 - AnS - Debugger: highlighting breakpoint item in BPs list when it's triggered +03-Aug-2012 - AnS - Debugger: allow Frame Advancing when Debugger is in breakpoint state +03-Aug-2012 - AnS - Debugger: don't update Debugger window at the beginning of Step command (it will update at at the end of Step) - fixes #528 +25-Jul-2012 - AnS - Taseditor: auto-starting Note editing when creating Marker by double-click +19-Jul-2012 - AnS - Taseditor: Lua registermanual allows changing the "Run function" button caption; Markers are always restored when deploying Bookmarks +01-Jul-2012 - AnS - new hotkey "Run Manual Lua function" +24-Jun-2012 - AnS - Taseditor: drawing selected_slot border in Branches Tree +24-Jun-2012 - zeromus - add ability for CNROM games to choose whether they have bus conflicts (fixes Colorful Dragon (Unl) (Sachen), since it flakes out if bus conflicts are emulated) +23-Jun-2012 - zeromus - add m116 from fceu-mm; fix mapper 178 big PRG support +20-Jun-2012 - zeromus - fix savestate engine to throw errors when a buggy SFORMAT is passed to AddExState, and fix those errors in m015 and m253 +19-Jun-2012 - AnS - added TASEDITOR type of hotkeys +19-Jun-2012 - AnS - Taseditor: 2 new hotkeys: "Switch Auto-restoring" (Ctrl+Spacebar), "Switch current Multitracking mode" (W) +16-Jun-2012 - AnS - Taseditor: drawing patterns with Alt held; no more row_last_clicked +15-Jun-2012 - AnS - Taseditor: added "rewatch from Selection to Playback" feature for Ctrl+middle click action +14-Jun-2012 - AnS - Taseditor: combining consecutive AdjustLag operations +13-Jun-2012 - AnS - Taseditor: truncated Greenzone is drawn by pale colors, not just white +12-Jun-2012 - AnS - Taseditor: "Auto-adjust Input due to lag" checkbox +11-Jun-2012 - AnS - Taseditor: green arrow doesn't disappear when Playback cursor goes through it +11-Jun-2012 - AnS - Taseditor: changed icons column in Piano Roll, now can show both Bookmark and arrow +09-Jun-2012 - zeromus - win32-support funny languages for opening roms, through drag&drop, at least +06-Jun-2012 - AnS - Taseditor: small fix for Branches Tree - among bookmarks with equal jump_frame the cursor must be pointing at current branch +06-Jun-2012 - zeromus - support mapper 176. mapper 176 no longer maps to BMCFK23C. BMCFK23C is still accessible through crc or unif? test case would be welcome. it is unclear to me why mapper 176 control was removed from 176.cpp and given to BMCFK23C +06-Jun-2012 - AnS - Taseditor: autosave works only when project has a filename +26-May-2012 - AnS - Taseditor: Ctrl+Space accelerator = toggle "Auto-restore last position" checkbox; remapped "Restore Playback" hotkey to Spacebar; "Restore Playback" also pauses seeking; mid-click = "Restore Playback" when possible +08-May-2012 - AnS - Taseditor: changed "lost_position" logic +01-May-2012 - AnS - Lua functions emu.pause() and emu.unpause() don't yield and don't reset emulator speed anymore +30-Apr-2012 - AnS - Taseditor: Ctrl + mid click = run to Selection cursor; Shift + mid click = run to nearest Marker +26-Apr-2012 - AnS - Taseditor: fixed filename logic when user creates project from an fm2 or a corrupted fm3 +23-Apr-2012 - AnS - Taseditor: menus overhaul +19-Apr-2012 - AnS - RAM Watch: fixed loading Data Size and Data Type from a .wch, now corrupted .wch won't crash +17-Apr-2012 - zeromus - fix bug in mapper 164 savestates which caused wram to be lost, also make mapper 164 sram work +17-Apr-2012 - AnS - Taseditor: gradual History Log autocompression when idle +14-Apr-2012 - zeromus - add hash database entry for Rasaaru Ishii no Childs Quest (J), whose extant roms specify both the wrong mapper and the wrong mirroring +14-Apr-2012 - zeromus - change mapper 12 (mmc3 variant) to specify MMC3A chip version +14-Apr-2012 - AnS - Taseditor: rightclicks in Branches Tree +14-Apr-2012 - AnS - "Play Movie" dialog doesn't search in fceux root folder anymore +10-Apr-2012 - AnS - bold items in some context menus +10-Apr-2012 - zeromus - fix mapper 115 (actually to fix mapper 248 for Bao Qing Tian) +09-Apr-2012 - zeromus - remove vram protection from mapper 227 +09-Apr-2012 - AnS - Taseditor: all GUI buttons fire off at mousedown; disabled Spacebar and enabled Middle mouse button on GUI buttons +09-Apr-2012 - AnS - Taseditor: clicks in Branches Tree +07-Apr-2012 - AnS - Taseditor: version data in fm3 +07-Apr-2012 - AnS - Taseditor: much better way of calculating Branches Tree; hinting full timelines; miniarrow showing current Playback cursor position in Branches Tree; "Bookmark#" modtype, undo/redo works for Bookmarks +07-Apr-2012 - AnS - Taseditor: applying PAL and PPU flags when loading projects +05-Apr-2012 - zeromus - fix mapper 242 (dragon quest 8 UNL) +26-Mar-2012 - AnS - Taseditor: Alt+Wheel = jump across gaps in Input/Markers +25-Mar-2012 - AnS - returned default mapping of Frame Advance hotkey to Backslash +25-Mar-2012 - AnS - Taseditor: BookmarksList clicks apply on buttonup only +22-Mar-2012 - AnS - Config->Combine consecutive Recordings/Draws +18-Mar-2012 - AnS - new hotkey "Cancel Seeking (TAS Editor)" (Esc) +18-Mar-2012 - AnS - Taseditor: Config->Autopause at the end of Movie +17-Mar-2012 - CaH4e3 - varous bugfixes, xstring trimming functions logic bugs, etc +17-Mar-2012 - AnS - Taseditor: showing row_last_clicked when Shift or Alt is held +17-Mar-2012 - AnS - Taseditor: no more "allow keys in Piano Roll"; new accelerators: Ctrl + arrows, Shift + arrows, Home/End/Page Up/Page Down, Ctrl + Home/End, Shift + Home/End +17-Mar-2012 - AnS - Taseditor: selection by dragging from Frame# +17-Mar-2012 - AnS - Taseditor: set/pick Markers by doubleclick, throw Markers away +14-Mar-2012 - AnS - Taseditor: drawing input; holding Shift when drawing +14-Mar-2012 - AnS - Taseditor: fixed known WinXP bug with scrollbar arrows +14-Mar-2012 - AnS - Taseditor: moving Markers by drag'n'drop, "Marker Drag" and "Marker Swap" operations +14-Mar-2012 - AnS - Taseditor: dragging blue arrow (moving Playback cursor) +14-Mar-2012 - AnS - Taseditor: observing Piano Roll by dragging cursor outside +11-Mar-2012 - AnS - Taseditor: double-tapping Shift/Ctrl scrolls Piano Roll to respective cursor +09-Mar-2012 - AnS - Taseditor: Config->Deselect on doubleclick +09-Mar-2012 - AnS - Taseditor: checking ROM checksum when saving/loading projects +09-Mar-2012 - AnS - Taseditor: TAS Editor can have mouse wheel input even when keyboard focus is on FCEUX window +09-Mar-2012 - AnS - disabled FCEUX context menu when TAS Editor is engaged +06-mar-2012 - prg - fceux no longer segfaults when opening gamepadconfig with GTK < 2.24 - a message is printed to the console +06-mar-2012 - prg - supports loading of configuration files in $FCEUXDIR/cfg.d/* +01-Mar-2012 - AnS - Taseditor: changing history size doesn't reset history +28-feb-2012 - AnS - Taseditor: "Deselect" option in menus +26-feb-2012 - AnS - Small save/load state speedup, noticeable only in TAS Editor or lua bots +21-feb-2012 - AnS - Taseditor: header lights on mouseover +21-feb-2012 - AnS - Taseditor: registering click at buttondown; Alt+click on input = set pattern +20-feb-2012 - AnS - Taseditor: Right button + wheel = Playback rewind/forward; Shift/Ctrl + wheel = jump via Markers with Playback/Selection cursor +20-feb-2012 - AnS - Taseditor: middle button pauses/unpauses emulation +18-feb-2012 - AnS - PATTERNS menu, loading data from "tools\taseditor_patterns.txt" +18-feb-2012 - AnS - "Use pattern" checkbox in Recorder; Config->ColumnSet Pattern skips Lag +18-feb-2012 - AnS - Taseditor: "Frame#" lights when Alt key is being held, not entering menu by Alt +18-feb-2012 - AnS - Changed some checkboxes to radiobuttons in FCEUX menu +13-feb-2012 - AnS - Taseditor: when clicking text fields, Piano Roll scrolls to corresponding Marker, not to cursor +13-feb-2012 - AnS - Replay dialog speedup, now movie is not loaded into memory when checking md5 +06-feb-2012 - AnS - new Lua scripts: SoundDisplay.lua, TrackNoise.lua +06-feb-2012 - AnS - refined Recording, now can safely record commands (Power, Reset, Insert, Switch) +02-feb-2012 - AnS - uploaded HelpNDoc3 project file +02-feb-2012 - AnS - added Lua scripts demonstrating some TAS Editor library functions +02-feb-2012 - AnS - new Lua function in TAS Editor library: getsuperimpose() +02-feb-2012 - AnS - new Lua function in Joypad library: getimmediate() +30-jan-2012 - AnS - Taseditor: 9 new Lua functions in TAS Editor library +30-jan-2012 - AnS - Taseditor: Added "Restore Playback (TAS Editor)" hotkey (Enter by default) +30-jan-2012 - AnS - Taseditor: Help->Show Tooltips +30-jan-2012 - AnS - Taseditor: quicksave/quickload hotkeys save/load current branch +23-jan-2012 - prg - sdl: pause will now show/ungrab cursor in fullscreen. this can be disabled with the SDL.NoFullscreenCursor option +12-jan-2012 - AnS - Tasedit: File->New Project, INPUT_TYPE_1P +12-jan-2012 - AnS - Tasedit: resizing TAS Editor window +08-jan-2012 - prg - sdl: switched advance one frame key from "\" to "`" +08-jan-2012 - AnS - changed default mapping of Frame Advance to Tilde +08-jan-2012 - AnS - fixed recording bug where "length" tag appeared in fm2s +08-jan-2012 - AnS - Tasedit: Lua panel; 5 new Lua functions +08-jan-2012 - AnS - Tasedit: refactoring; Config->Silent autosave +04-jan-2012 - AnS - Tasedit: colored marker captions; pale yellow and bright yellow when "Bind Markers" is off/on +27-dec-2011 - AnS - Tasedit: "About" window +27-dec-2011 - AnS - Tasedit: searching Markers with similar Notes ("Similar" and "More" buttons) +26-dec-2011 - AnS - Tasedit: Find Note dialog (Ctrl-F) +26-dec-2011 - AnS - new Lua functions (TAS Editor library) +19-dec-2011 - AnS - Tasedit: listview header lights +19-dec-2011 - AnS - Tasedit: Recording checkbox instead of radiobutton; Config->Use Input keys for ColumnSet +19-dec-2011 - AnS - Tasedit: Export dialog: "Convert Marker Notes to Movie Subtitles" +16-dec-2011 - AnS - Tasedit: new accelerators: Ctrl-PgUp/Ctrl-PgDn/Shift-PgUp/Shift-PgDn; Config->Allow keyboard controls in Listview +16-dec-2011 - AnS - Tasedit: View->Display Branch Tooltips +16-dec-2011 - AnS - Tasedit: Markers notes; View->Follow Marker Note context +16-dec-2011 - AnS - changed ".tas" extension to ".fm3" +10-dec-2011 - AnS - loading TAS Editor projects by drag-n-drop +10-dec-2011 - AnS - Tasedit: File->Save Compact dialog +09-dec-2011 - AnS - Replaying TAS Editor project files in FCEUX (win32 and SDL) +07-dec-2011 - AnS - disabled changing PPU/PAL/input_type when Taseditor is engaged +07-dec-2011 - AnS - Tasedit: File->Recent projects +07-dec-2011 - AnS - enhanced Reload hotkey (Ctrl-F1), now it loads last ROM or last TAS Editor project +05-dec-2011 - AnS - Tasedit: Import input, Export to FM2 +04-dec-2011 - AnS - Tasedit: branches autofind best parent, "Set Marker"/"Remove marker" in context menu, checking clipboard at selection.init() and retrieving info +29-nov-2011 - AnS - Tasedit: MsgBox about not working with movies starting from savestate +26-nov-2011 - aquanull - win32: fixed graphic-tearing WITH vertical sync enabled in windowed mode. It used to wait for V-Blank too early so that the V-Blank would end too soon before the blitting could be finished. +26-nov-2011 - AnS - Fixed crash when using machine with no sound card +26-nov-2011 - zeromus - Fixed wrong default palette entry +25-nov-2011 - zeromus - add nestopia palette files +25-nov-2011 - AnS - Tasedit: selection << and >>, Turbo Seek checkbox, PasteInsert, Config->Superimpose affects copy/paste, Editing info texts +23-nov-2011 - zeromus - fix [3441099] printf bug in SwapSaveState() +21-nov-2011 - AnS - Tasedit: multitrack recording, "Superimpose" checkbox, Config->Use 1P keys for all single recordings, Config->Combine consecutive Recordings +19-nov-2011 - AnS - Tasedit: selection strobe, soft reset and power switch messages, messages when saving/loading Branches +17-nov-2011 - AnS - Tasedit: selection history, undo/redo, Reselect Clipboard, saving/loading selection history to .tas +17-nov-2011 - AnS - Tasedit: input hotchanges +14-nov-2011 - zeromus - straighten out bandai m159/m016 handling and add valid null-EEPROM emulation to get those games booting. +12-nov-2011 - adelikat - win32 - cheat search - slight GUI tweak +12-nov-2011 - AnS - Tasedit: project autosaving +10-nov-2011 - AnS - Tasedit: Branches show saved screenshot on mouseover (alpha-fade popup window) +7-nov-2011 - AnS - Tasedit: Drawing Branches Tree (using GDI), animations, transitions, mouseover +04-nov-2011 - prg318 - gtk: added option for frameskipping and made label case consistent in gui +1-nov-2011 - zeromus - debugger - fix mysterious out of bounds condition while editing breakpoints +31-oct-2011 - zeromus - add winapi lua library +31-oct-2011 - zeromus - fix newppu bug; chr ram was not getting initialized to anything +28-oct-2011 - AnS - Switching Tasedit Bg input on/off when Tasedit gets/loses focus +27-oct-2011 - AnS - "Toggle Rerecord Display" hotkey (M), "Play Movie From Beginning" hotkey also works in Tasedit +27-oct-2011 - AnS - Tasedit: Bookmarks/Branches +23-oct-2011 - prg318 - sdl: fix a bug where alt key would get "stuck" when alt tabbing to window +21-oct-2011 - AnS - Tasedit: gradual greenzone cleaning +19-oct-2011 - prg318 - scons: "scons install" now installs auxlib and manpage +19-oct-2011 - prg318 - scons: added --prefix option to build system and improved "install" target +18-oct-2011 - prg318 - sdl: new hotkeys added - statestatenext savestateprev - useful for scrolling through savestates on a gamepad. mapped to pgup and pgdown by default +18-oct-2011 - prg318 - gtk: new video option for double buffering and ClipSides +18-oct-2011 - prg318 - sdl: GTK3 support is now functional. Set GTK3 to 1 in the SConstruct to try it out. +18-oct-2011 - prg318 - no longer use depreciated gtk2 functions +18-oct-2011 - prg318 - getSDLKey tool added to assist in remapping hotkeys +17-oct-2011 - prg318 - some segfaults fixed, also fixed some build errors +17-oct-2011 - prg318 - sdl netplay fixed +15-oct-2011 - zeromus - don't lose cheat compare value when toggle cheat enables through UI +14-oct-2011 - AnS - added rewind hotkey (~), works only in Taseditor +14-oct-2011 - AnS - Tasedit: execute lua functions when jumping inside greenzone +13-oct-2011 - AnS - Tasedit: major refactoring +9-oct-2011 - AnS - Tasedit: input history, undo, redo; greenzone reduces only from the point where actual differences were found +07-oct-2011 - prg318 - sdl: fixed some issues with --nogui . "--nogui" no longer requires an argument and can be used like this "$ fceux --nogui rom.nes" +07-oct-2011 - prg318 - gtk: support mouseclicks (ie zapper) +03-oct-2011 - AnS - Tasedit: Clone Frame(s) +02-oct-2011 - AnS - Tasedit: Markers +30-sept-2011 - AnS - logging all display messages to Message Log +30-sept-2011 - AnS - Tasedit: special method of inserting frames; progressbar updating when loading/saving large projects; moved "Follow cursor" checkbox from View menu to main TASEdit window +30-sept-2011 - AnS - Tasedit: View->Show dot in empty cells; ClearFrames (Del), Cut operation clears frames instead of deleting; checking unsaved project on Exit and Open project +28-sept-2011 - CaH4e3 - resetexstate crash fix +27-sept-2011 - AnS - Fixed old bug with "Play Movie From Beginning" +26-sept-2011 - AnS - added support for "Enable HUD recording" option to SDL version +25-sept-2011 - AnS - Tasedit: progressbar; holding "<" and ">" buttons +25-sept-2011 - zeromus - newppu-fix bug in scroll reg logic causing mis-scrolls in p'radikus conflict +24-sept-2011 - CaH4e3 - latest mapper changes; code/data logger now can log data access from the RAM code; the new button to save unused data to the code/data logger +24-sept-2011 - AnS - Tasedit: changed control scheme to single click instead of double click +23-sept-2011 - AnS - File->AVI/Wav->Enable HUD recording +23-sept-2011 - AnS - moved "Display movie status icon" from Config->Movie options to Config->Display +23-sept-2011 - AnS - Config->Display->Rerecord counter; no more TweakCount +23-sept-2011 - AnS - Config->Movie options->Always suggest Read-Only replay (for Replay dialog) +22-sept-2011 - AnS - deleted "Lag Counter Reset" hotkey; added "Open TAS Edit" hotkey +22-sept-2011 - AnS - fixed long "savestate" messages containing path +22-sept-2011 - AnS - Tasedit: auto clear "Disable speed throttling" and "Run in background", auto set "Set high-priority thread" when entering TASEdit; FCEUX runs in bg when TASEdit has focus; Config->"Mute Turbo" check +19-sept-2011 - AnS - Tasedit: accelerator table; Config->"Set greenzone capacity"; pauseframe is shown by flashing color +18-sept-2011 - zeromus - datalatch mapper-fix bug where wramless games would be able to do something mysterious to unmapped host emulator memory +17-sept-2011 - AnS - Tasedit: forced read-only behaviour when seeking or holding turbo +17-sept-2011 - AnS - Tasedit: "Auto-restore last position" checkbox in playback controls +17-sept-2011 - AnS - Tasedit: fixed item drawing method, no more flicker and slowdowns +12-sept-2011 - prg318 - sdl: rename InputType to CurInputType due to variable of same name in src/movie.h +12-sept-2011 - AnS - Tasedit: rewrote project save/load functions, various bugfixes +6-sept-2011 - AnS - Tasedit: red lines for lag frames +6-sept-2011 - AnS - fixed bug when trying to open Replay dialog without having ROM loaded +3-sept-2011 - AnS - Tasedit: tweaks and bugfixes +3-sept-2011 - CaH4e3 - fixed bus conflict emulation, no kage no densetsu bug anymore +31-Aug-2011 - AnS - Tasedit: Added 4 pads support; also now current frame is shown by blue line; minor cleanups +30-Aug-2011 - mart0258 - Ram Search updates list when emulator is paused (on Power, or when resetting search) +25-Aug-2011 - zeromus - win32: fix context menus to use rightclicks in context menus correctly +19-Aug-2011 - CaH4e3 - PAL/NTSC noise fixed +18-Jul-2011 - zeromus - slightly improve hud text rendering wrapping +16-Jul-2011 - adelikat - Add Button Count lua script written by Brandon Evans +15-Jul-2011 - prg318 - sdl: patch to resolve 'XKeysymToString' complication errors on debian sid and osx (thanks antonio ospite!) +6-Jul-2011 - plombo - sdl: fixed --nogui option and removed SDL.NoGUI from fceux.cfg +5-Jul-2011 - FatRatKnight - Lua console now gets the proper file path when selecting a file from the recent menu. + +---r2206 - FCEUX 2.1.5 Released--- +---June 21 2011--- + +16-Jun-2011 - zeromus - win32: poll hotkeys while no rom is loaded +1-jun-2011 - prg318 - sdl - print usage when --help is passed even if SDL fails +plombo - added stock icons to menu items +plombo - added new gamepad configuration dialog +19-mar-2011 - prg318 - gtk - added hard reset option (renamed reset->soft reset) +18-mar-2011 - prg318 - sdl - removed GTK_LITE; --nogui made it obsolete +12-feb-2010 - mart0258 - Fix input selection for Famicom Expansion port +25-jan-2010 - prg318 - gtk - filechooser now remembers last file opened +25-jan-2010 - prg318 - gtk - fixed xscale/yscale spinbuttons not changing config +24-jan-2010 - prg318 - gtk - game window integrated into sdl window (thanks bryan!) +11-nov-2010 - mart0258 - TasEdit - Invalidate greenzone when re-recording earlier portions of a movie. +09-oct-2010 - zeromus - fix bug in new ppu that made some intensify bits not get applied to output (fixes flashing siren screen in werefolf +09-oct-2010 - gocha - win32 - Ram Watch - fix the multiple selection of watches +09-oct-2010 - gocha - Win32 - Ram Search - multiple selection of addresses, fix restoration of the selection range +09-oct-2010 - gocha - Win32 - Ram Search - fix restoration of the selection range +01-oct-2010 - qeed - Fix many segfaults related to file handling +22-sept-2010 - adelikat - win32 - Hex Editor - ask before removing all bookmarks +04-sept-2010 - adelikat - Win32 - Ramwatch - fix displaying of 2 byte values +26-aug-2010 - mart0258 - Win32 - fix crash when re-opening debugging window +20-aug-2010 - adelikat - Win32 - Display movie name at the top of the main window +09-july-2010 - mart0258 - TasEdit - cleanup; prevent crash when truncating while turbo +13-june-2010 - adelikat - Win32 - avi capture commandline argument and related parameters +12-june-2010 - adelikat - Save Turbo frame skip amount to config so that it can be customized by user +12-june-2010 - adelikat - Lua - fix speed.mode() so that normal turns off turbo +12-june-2010 - CaH4e3 - Fix Young Indiana Jones Chronicals +10-june-2010 - Deign - Fix Ram Search to only display valid RAM addresses (0000-07FF and 6000-7FFF) +10-june-2010 - zeromus - add luasocket to built in lua library +09-june-2010 - adelikat - Movies - Fixed read-only loadstate error logic & messages +07-june-2010 - mart0258 - Movie loading now faster - TAS savestates moved from class MovieRecord to class MovieData +07-june-2010 - adelikat - Lua - new function: gui.screenshotas() +07-june-2010 - Deign/adelikat - Win32 - Added a SavestateAs Menu item +06-june-2010 - FatRatKnight - Added a return value to gui.text: The X position where the function would paint the next character. +02-june-2010 - adelikat - Win32 - Movie Options Dialog - Fix so Full Savestate Load checkbox is updated on load + +---r1984 - FCEUX 2.1.4a Released--- +---June 1 2010--- + +01-june-2010 - zeromus - fix crash bug in fcm convert +01-june-2010 - adelikat - fix logic error in read-only loadstate of movies, should not improperly report savestate after movie errors + +---r1977 - FCEUX 2.1.4 Released--- +---May 31 2010--- + +29-may-2010 - Cah4e3 - Added zapper autodetection for Gotcha! +28-may-2010 - adelikat - Added lua function movie.getfilename() which returns the current movie filename without the path included +27-may-2010 - ugetab - Win32 - Debugger - Made debugger able to break on and distinguish Stack reads/writes +24-may-2010 - adelikat - Win32 - Memwatch - ignore spaces at the beginnign of an address in the address boxes +24-may-2010 - mart0258 - Disable auto-savestates during turbo +24-may-2010 - mart0258 - Prevent .zip files containing no recognized files from causing crash +23-may-2010 - adelikat - Win32 - Replay dialog - fix bug that was causing it to always report savestate movies as soft-reset +23-may-2010 - adelikat - Fix PlayMovieFromBeginning when using a movie that starts from savestate +23-may-2010 - cah4e3 - mapper 19 savestate fix mirroring for "Dream Master (J)" corrected to "four-screen" by CRC check +23-may-2010 - ugetab - Win32 - Fixed bug involving pausing emulation outside of the debugger, then trying to use the debugger commands, and having teh CPU registers become corrupted. +22-may-2010 - ugetab - Win32 - Made cheat menu's Pause When Active effect immediate. +22-may-2010 - ugetab - Win32 - Enabled multi-select for Cheat menu to allow multiple toggles and deletes. +20-may-2010 - ugetab - Added NTSC 2x scalar option with some CFG config options of it's own +20-may-2010 - Cah4e3 - Win32 - CDLogger - fixed bug preventing correct interrupt vectors from logging +19-may-2010 - ugetab/adelikat - Win32 - Added single-instance mode, which makes starting a second copy of FCEUX load the file into the first, then exit.Mode off by default, togglable under Config -> GUI +18-may-2010 - adelikat - Movie + loadstate errors are handled more gracefully now, more informative error messages and the movie doesn't have to stop +18-may-2010 - adelikat - Implemented a "full savestate-movie load" mode similar to the implementation in VBA-rr & SNES9x-rr. In this mode loading a savestate in read+write doesn't truncate the movie to its frame count immediately. Instead it waits until input is recording into the movie (next frame). For win32 this feature is togglable in movie options and the context menu. For SDL this is off by default and a toggle will need to be added. +17-may-2010 - adelikat - Made gamepad 2 off by default. +17-may-2010 - adelikat - Movies - fully implemented "bulletproof" read-only +17-may-2010 - zeromus - Movie loading (& movie-savestate saving/loading) should now be faster due to the use of a emufile class instead of std::ostream for dumping +16-may-2010 - ugetab - Added player 3 and 4 to autohold notification window. Made FCEU_DispMessage able to display to different screen locations to do it. Made sure to update SDL with the change. Hope SDL still compiles ok. +15-may-2010 - ugetab - Win32 - Added option for palette selection as color for LUA colors. Included an LUA script to display all choices with the value used to pick displayed color. +14-may-2010 - adelikat - Win32 - Replay dialog, when selecting a movie in a relative path (.\movies for example), the recent movies list stores an absolute path instead. +14-may-2010 - adelikat - Win32 - When recording a movie, add it to recent movies +14-may-2010 - adelikat - Win32 - Replay dialog shows PAL flag & New PPU flag +14-may-2010 - adelikat - New PPU flag in movie headers (doesn't change an emulators PPU state when loading a movie) +13-may-2010 - adelikat - input display overhaul - a more desmume style system which shows both keys held the previous frame and immiately held keys that will be put in on the next frame +12-may-2010 - ugetab - Win32 - Added rudamentry Between-Frames input display code for adelikat to customize. +12-may-2010 - adelikat - Input Display - displays a silver color when input is from a movie rather than the user +12-may-2010 - ugetab - Win32 - With special scaler in window mode, it's possible to resize to anything above the minimum. +12-may-2010 - adelikat - Movies now have a "finished" option. If a playback stops the movie isn't cleared from memory, and can be replayed or a state loaded. Similar functionality as DeSmuME and GENS rerecording +11-may-2010 - adelikat - Loadstate updates input display +11-may-2010 - ugetab - Win32 - Added Ram Search hotkeys for the first 6 search types in the list. +10-may-2010 - ugetab - Added gui.getpixel() which gets any gui.pixel() set pixel colors, and possibly other functions. Added emu.getscreenpixel() which gets the RGB and Palette of any pixel on the screen. +08-may-2010 - ugetab - Added savestate.object() which is savestate.create() with intuitive numbering under windows +08-may-2010 - ugetab - Added emu.addgamegenie() and emu.delgamegenie() LUA functions. +07-may-2010 - ugetab - Win32 - Added context menu to Cheat Dialog Cheat Listbox, populated list with Toggle Cheat, Poke Cheat Value, and Goto In Hex Editor +07-may-2010 - ugetab - Win32 - Made enabling/disabling cheats no longer deselect the selected cheat. +06-may-2010 - ugetab - win32 - Add Cheat buttons for Ram Search and Ram Watch +06-may-2010 - ugetab - win32 - Hex editor - Made the Hex Editor display the Frozen, Bookmarked, etc. status of the selected address, and made the Frozen color override the Bookmarked color. +04-may-2010 - ugetab - Win32 - Added "Goto" command for hex editor. +28-april-2010 - ugetab - Added microphone support option. When enabled, Port 2 Start activates the Microphone. Movies also support this. +25-april-2010 - FatRatKnight - Fixed a potential desync that plays out an extra frame without an update to the frame count involving heavy lua use, joypad.get, and a loadstate. +23-april-2010 - ugetab - Win32 - Added Tools>GUI option to partially disable visual themes, so the emulator can be made to look like it did in 2.1.1 and earlier releases. +20-april-2010 - adelikat - New lua functions movie.ispoweron() and movie.isfromsavestate() +20-april-2010 - adelikat - Win32 - Drag & Drop - if dropping a .fcm with no ROM loaded, prompt for one (same functionality that was added to .fm2 files) +08-april-2010 - ugetab - Win32 - Added conditional debugging option 'K', for bank PC is on +07-april-2010 - adelikat - fix bug that caused zapper.read() to crash when movie playback ends + +---r1767 - FCEUX 2.1.3 Released--- +---April 7 2010--- + +07-april-2010 - sgrunt - Lua - gui.text now has out of bounds checking +07-april-2010 - adelikat - Win32 - Lua console - filename updates when lua scripts are dragged to emulator or recent filenames invoked +07-april-2010 - adelikat - Lua no longer unpauses the emulator when a script is loaded +30-march-2010 - ugetab - Win32 - Closing minimized windows no longer moves them the next time they get opened +28-march-2010 - adelikat - lua - fixed zapper.read() to read movie data if a movie is playing. Also changed the struct values to x,y,fire. This breaks lua scripts that used it previous, sorry. +04-march-2010 - prockguy - added menu buttons for loading nsf files +03-march-2010 - adelikat - Win32 - If .fm2 drag & dropped with no ROM load, the open ROM dialog will appear +03-march-2010 - prockguy - fceux - now prints the name of the mapper on rom load +03-march-2010 - prockguy - SDL - VS unisystem keys now configable +03-march-2010 - prcokguy - SDL - changed default hotkeys and keys to match w32 +03-march-2010 - prockguy - SDL - fixed dpad/joyhat support +01-march-2010 - adelikat - Movie file format header now has a FDS flag +01-march-2010 - adelikat - win32 - cheats dialog - toggling a cheat in the cheats list now updates the active cheats count +01-march-2010 - adelikat - win32 - a disable movie messages menu item +25-feb-2010 - prockguy - unix netplay is now functional; gtk network gui created +24-feb-2010 - prockguy - GTK - added basic movie controls +24-feb-2010 - prockguy - GTK - added file filters; added Load FDS function +24-feb-2010 - prockguy - GTK - added palette config dialog +23-feb-2010 - prockguy - GTK - added UI elemnts for x/y scale; added lowpass UI option +23-feb-2010 - prockguy - GTK - added GUI for color/tint/hue +23-feb-2010 - prockguy - GTK - implemented sound mixer dialog (for square1, 2, triangle, etc) +22-feb-2010 - prockguy - SDL - ported to SDL 1.3; compatibility maintained with 1.2 +18-feb-2010 - prockguy - GTK - a lot of options added to GTK gui; relatively stable; added GUI for gamepad config and sound config. +02-feb-2010 - ugetab - Win32 - Added window positions bounds checks. Accounts for -32000 positions & less out-of-range too +08-jan-2010 - rheiny - Win32 - Trace Logger - Trace logger now logs the values of the stack pointer register +31-dec-2009 - prg318 - added gtk gui +08-dec-2009 - Zeromus - Fix Name Table Viewer - Fix for use with New PPU +08-dec-2009 - - mart0258 - FDS - show name of missing bios file in error message +07-dec-2009 - qeed - NewPPU - fixed sprite hit before 255 and for non transparent hits only, thanks to dwedit for providing the fix +06-dec-2009 - Zeromus - SDL - disallow --inputcfg gamepad0 and gamepad5 +??-???-2009 - CaH4e3 - fixed mappers 82, 25, 21, and 18. Games such as SD Kiji Blader, Ganbare Goemon Gaiden, and Ganbare Goemon Gaiden 2, Jajamaru Gekimadden are now playable +17-nov-2009 - adelikat - Win32 - Cheats - Pause while active checkbox installed +17-nov-2009 - adelikat - Win32 - Fix debug window so it doesn't crash if unminimized with no game loaded. +13-nov-2009 - mart0258 - Win32 - TASEdit - Added interface functionality (save/load, running TASEdit mid-movie, etc.) +13-nov-2009 - adelikat - made savestate compression togglable +13-nov-2009 - adelikat - made savestate backups togglable +08-nov-2009 - gocha - Win32 - Lua console - added a menu +08-nov-2009 - gocha - change gui.line, gui.box, joypad.get to function like GENS rerecording +08-nov-2009 - gocha - New lua functions: gui.parsecolor, joypad.getup, joypad.getdown, emu.emulating. +08-nov-2009 - CaH4e3 - Fixes for mappers 253 & 226 - fixes games such as Fire Emblem (J) and Fire Emblem Gaiden (J) +08-nov-2009 - CaH4e3 - Fix crashing on game loading for any battery backed roms with mappers from MapInitTab (fixes Esper Dream 2 - Aratanaru Tatakai (J) +04-nov-2009 - adelikat - win32 - debugger - added an auto-load feature + +---r1527 - FCEUX 2.1.2 Released--- +---November 3, 2009--- + +02-nov-2009 - qeed - fixed mapper 226, 76-in-1 seems to work now, also super 42 also seems to work with this fix, but people with save states with this game should make a new one. Since the the save state format for this game was changed a little. +31-oct-2009 - adelikat - win32 - Memwatch - Save Changes prompt - Selecting yes will do quicksave first, save as 2nd (instead of always defaulting to save as) +19-oct-2009 - qeed - Mapper 253 mostly implemented, known game [ES-1064] Qi Long Zhu (C) is mostly playable (some minor graphic glitches). Thanks to VirtualNESEX for reverse engineering this, gil for giving me the mapper src for implementation reference, and Dead_Body for figuring out this game had to use chr-ram +10-oct-2009 - qeed - fixed dragon's lair the mapper 4 europe version in new PPU +10-oct-2009 - zeromus - fixed Tecmo Super Bowl in new PPU +08-oct-2009 - ugetab - win32 - fixed a debugger crash error, Unif/FDS filename issue, and enabled debugger bank display +01-oct-2009 - gocha - win32 - movie play dialog displays movie time based on ~60.1 (~50.1 PAL) instead of 60 & 50 +26-sept-2009 - qeed - fixed action 52 game that was broken in fceux >2.0.3 +16-sept-2009 - ugetab - win32 - Restored DPCM Logging when Code/Data Logger is active +sept-2009 - FatRatKnight - Finally got in that "invert" value for joypad.set. This value simply inverts the player input. Actually, any string will invert it, since we have not used strings for anything else in joypad.set. +15-sept-2009 - FatRatKnight - Reworked how input is taken from lua, and generally everything related to joypad.set and what it affects. Now setting stuff to false will: Prevent user control for exactly one frame, and allow more than one false button as a time. Yeah, bug fixes. Hopefully runs a little faster now. +22-aug-2009 - adelikat - Win32 - Map Hotkeys Dialog - Fixed but where "X" and Alt+F4 would not close dialog +22-aug-2009 - adelikat - Win32 - Added a Save Config File menu item +12-aug-2009 - adelikat - Win32 - Added a menu item to toggle to New PPU +10-aug-2009 - adelikat - fixed bug that caused new movies be created in /movie instead of /movies +08-aug-2009 - qeed - mappers - fixed mapper irq count, dragon ball z 3 +should be playable again. +07-aug-2009 - ugetab - win32 - imported NSF features from FCEU-XDSP-NSF +05-aug-2009 - adelikat - win32 - fixed an erroneous assumption made in 2.1.1 that caused the recent roms menu to be grayed out even when there were recent roms (however, it uncovered an underlying bug in the recent menu saving that needs to be fixed at some point). + +---r1375 - FCEUX 2.1.1--- +---July 29, 2009--- + +01-july-2009 - adelikat - win32 - texthooker - drag & drop for table files +01-july-2009 - adelikat - win32 - drag & drop for cheat (.cht) files +25-jun-2009 - qeed - sound/ppu - fixed the noise value, it seems that the noise logic was shifting the values to the left by 1 when reloading, but this doesnt work for PAL since one of the PAL reload value is odd, so fix the logic and used the old tables. Revert a stupid CPU ignore logic in PPU. Sorry about that. +25-jun-2009 - adelikat - Win32 - CD Logger - Drag and Drop for .cdl files +24-jun-2009 - qeed - sound/ppu - reverted to old noise table value since this seems to get correct sound for double +dragon 2. Also added experimental $2004 reading support to play micro machines with (little) shakes, and fixed some +timing in the new PPU. +24-jun-2009 - adelikat - win32 - memory watch - option to bind to main window, if checked it gives GENS dialog style control, where there is no extra task bar item, and it minimizes when FCEUX is minimized +24-jun-2009 - adelikat - win32 - palette commandline options +24-jun-2009 - adelikat - win32 - Sound Dialog - cleanup, when sound is off, all controls are grayed out +24-jun-2009 - adelikat - win32 - Hex Editor - Drag & Drop for .tbl files +24-jun-2009 - adelikat - win32 - Drag & Drop for .fcm, it converts and then loads the converted movie automatically +24-jun-2009 - adelikat - win32 - Drag & Drop support for palette files +23-jun-2009 - adelikat - win32 - Drag & Drop support for savestates +22-jun-2009 - qeed - Revert IRQ inhibit fix, since this seems to break Dragon + Warrior 4, added palette reading cases for the new PPU. +21-jun-2009 - adelikat - win32 - memwatch - save menu item is grayed if file hasn't changed +20-jun-2009 - adelikat - win32 - memwatch - fixed a regression I made in 2.0.1 that broke the Save As menu item +17-jun-2009 - qeed - Sound core fix, updated with the correct values for the noise and DMC table, + and also fixed the IRQ inhibit behavior for register $4017. Also fixed the CPU + unofficial opcode ATX, ORing with correct constant $FF instead of $EE, as tested + by blargg's. These fixes passes the IRQ flags test from blargg, and also one more + opcode test from blargg's cpu.nes test. +16-jun-2009 - adelikat - sound core fix - square 1 & square 2 volume controls no longer backwards +11-jun-2009 - zeromus - sound core fix, length counters for APU now correct variables +11-jun-2009 - adelikat - Win32 - Hex Editor - changed ROM values again dsiplay as red, saved in the config as RomFreezeColor +06-jun-2009 - rheiny - Fixed reported issue 2746924 (md5_asciistr() doesn't produce correct string) +23-may-2009 - adelikat - win32 - hex editor - freeze/unfreeze ram addresses now causes the colors to update immediately, but only with groups of addresses highlighted at once (single ones still don't yet update) +23-may-2009 - adelikat - win32 - context menu - Save Movie As... menu item (for when a movie is loaded in read+write mode) +23-may-2009 - adelikat - win32 - added opton to remove a recent item to the roms, lua, and movie recent menus +23-may-2009 - adelikat - win32 - Added a remove recent item function and hooked it up to memwatch recent menu, now if a bad recent item is clicked, the user has a choice to remove it from the list +23-may-2009 - adelikat - win32 - Load Last Movie context menu item added +23-may-2009 - adelikat - win32 - Recent Movie Menu added +22-may-2009 - adelikat - win32 - "Disable screen saver" gui option now also diables the monitor powersave +22-may-2009 - adelikat - win32 - Debugger - Step type functions now update other dialogs such as ppu, nametable, code/data, trace logger, etc. +22-may-2009 - adelikat - win32 - Hex Editor - Save Rom As... menu option enabled and implemented +22-may-2009 - adelikat - win32 - Window caption shows the name of the ROM loaded +22-may-2009 - adelikat - win32 - Hex Editor - allowed the user to customize the color scheme by use of RGB values stored in the .cfg file +21-may-2009 - adelikat - win32 - reverted fixedFontHeight to 13 instead of 14. Gave the option of adjusting the height by modifying RowHeightBorder in the .cfg file +21-may-2009 - adelikat - win32 - made fullscreen toggle (Alt+Enter) remappable +15-may-2009 - shinydoofy - sdl - added --subtitles +10-may-2009 - shinydoofy - sdl - fixed Four Score movie playback +02-may-2009 - adelikat - win32 - stop movie at frame x feature - fixed off by 1 error +23-apr-2009 - shinydoofy - sdl - added --ripsubs for converting fm2 movie subtitles to an srt file +15-apr-2009 - shinydoofy - sdl - Lua is optional again, fixed the real issue +14-apr-2009 - punkrockguy - sdl - LUA is NO longer optional, so the SConscripts have been updated to reflect that change. This fixes the mysterious non-working input issue. +12-apr-2009 - shinydoofy - sdl - implemented saving/loading a savestate from a specific file on Alt+S/L +11-apr-2009 - shinydoofy - sdl - implemented starting an FM2 movie on Alt+R +11-apr-2009 - adelikat - made default save slot 0 instead of 1, Win32 - remember last slot used +11-apr-2009 - shinydoofy - sdl - added --pauseframe to pause movie playback on frame x +11-apr-2009 - shinydoofy - sdl - dropped UTFConverter.c from SDL build and added hotkey Q for toggling read-only/read+write movie playback + +--version 2.1.0a released---- +04-apr-2009 - shinydoofy - fixed fcm->fm2 code once again (this time for good, hopefully). Thanks to Bisqwit! +04-apr-2009 - shinydoofy - Reverted UTF8<->UTF32 code changes to fix up the win32 build for now + +---version 2.1.0 released--- +29-mar-2009 - adelikat - Win32 - reverted acmlm's /dll folder change +28-mar-2009 - shinydoofy - sdl - added hotkey Del to toggle mute avi capturing +28-mar-2009 - shinydoofy - sdl - fix fm2 playback and fcm->fm2 conversion crash at the cost of ugly 0x00 bytes behind the author's comment line +28-mar-2009 - adelikat - Lua - added FCEU.poweron() and FCEU.softreset() +27-mar-2009 - shinydoofy - sdl - added --no-config +23-mar-2009 - adelikat - Win32 - blocked "hotkey explosion" by rshift on some laptops +22-mar-2009 - shinydoofy - sdl - added hotkey I and --inputdisplay {0|1|2|4} for toggling input display. +22-mar-2009 - shinydoofy - sdl - added commandline options for sound channels' volumes +22-mar-2009 - shinydoofy - sdl - updated window title +19-mar-2009 - adelikat - Win32 - make Video - windowed mode - disable hardware accel the default setting. Made high quality sound the default setting. +16-mar-2009 - adelikat - Win32 - GUI Dialog - added an option to disable the context menu +15-mar-2009 - adelikat - Lua - added movie.rerecordcount(), movie.length(), movie.getname(), movie.playbeginning(), FCEU.getreadonly(), FCEU.setreadonly() +14-mar-2009 - adelikat - Lua - added movie.active() - returns a bool value based on whether a movie is currently loaded +14-mar-2009 - adelikat - Fixed Joypad.set, it uses 3 values instead of 2 now. True will take control of a button and make it on, False will take control and make it off, and Nil will not take control (allowing the user to press the button) +14-mar-2009 - adelikat - Fix major crash issue where NROM game savestates were writing erroneous information if a non NROM game was loaded prior +13-mar-2009 - adelikat - Closing game / Opening new game resets the frame counter +13-mar-2009 - adelikat - Win32 - Debugger - Scanlines and PPU Pixels are displayed even in vblank (lines 240-261) +12-mar-2009 - shinydoofy - sdl - fixed compilation error and reactivated the mouse pointer in the SDL window +12-mar-2009 - adelikat - Win32 - Trace Logger - fixed bug where user can't scroll the log window while it is auto-updating +11-mar-2009 - adelikat - Win32 - Trace Logger - changed message about F2 pause (left over from FCEUXDSP) to display the current hotkey mapping +11-mar-2009 - adelikat - Added frame counter to savestates +08-mar-2009 - adelikat - Lua - added input.get() function +08-mar-2009 - adelikat - Lua - memory.readbyte will recognize frozen addresses +08-mar-2009 - adelikat - Lua - added FCEU.lagged() function +08-mar-2009 - adelikat - Lua - added zapper.read() function +07-mar-2009 - adelikat - Lua - added FCEU.lagcount() function +04-mar-2009 - adelikat - win32 - Fix bug so that Escape can now be assigned as a hotkey +03-mar-2009 - adelikat - win32 - Fix Directory Overrides so to allow users to have no override. Also fixes directory override reset bug +02-mar-2009 - adelikat - win32 - Drag & Drop for Memwatch dialog (.txt files) +01-mar-2009 - adelikat - win32 - Drag & Drop Lua files +25-feb-2009 - adelikat - win32 - Memwatch - added cancel to save changes? message box +22-feb-2009 - adelikat - win32 - Lua - made speedmode("turbo") turn on turbo (which employs frameskipping) rather than max speed +22-feb-2009 - adelikat - Increased lua gui.text height (and DrawTextTransWH() height) +21-feb-2009 - adelikat - win32 - Lua - Added -lua commandline argment, loads a lua script on startup +21-feb-2009 - adelikat - win32 - Debugger - Added pixel display after scanline display - Thanks to DWEdit for this patch +21-feb-2009 - adelikat - win32 - Debugger - Added Run Line, Run 128 Lines buttons - Thanks to DWEdit for this patch +21-feb-2009 - adelikat - win32 - Message Log - remembers X,Y position +19-feb-2009 - adelikat - win32 - Memory Watch - fixed recent file menu - no longer crashes when attempting to load a non existent recent file +07-feb-2009 - adelikat - win32 - Fix bug in screenshot numbering that caused numbering to not reset when changing ROMs +06-feb-2009 - adelikat - win32 - Hex editor - remembers window size +06-feb-2009 - adelikat - Win32 - sound config dialog - added sliders for individual sound channel volume control +06-feb-2009 - zeromus - Force processor affinity, fixes throttling problem on AMD dualcore machines +06-feb-2009 - adelikat - Sound channels now have individual volume control +01-jan-2009 - adelikat - Win32 - Timing - "disable throttling when sound is off" now only affects FCEUX when sound is off +26-dec-2008 - adelikat - Metadata - remember window position +24-dec-2008 - adelikat - auto-save fixes, prevent loading an auto-save from previous session. Win32 - added flags for enabling auto-save menu item. +24-dec-2008 - adelikat - added undo/redo savestate hotkey. Win32 - made undo/redo default key mapping Ctrl+Z +24-dec-2008 - adelikat - win32 - added Last ROM used context menu item when no game loaded +24-dec-2008 - shinydoofy - sdl - added option to mute FCEUX for avi capturing, check the docs for more detail +23-dec-2008 - adelikat - Win32 - Undo/redo loadstate and Undo/redo savestate context menu items added +23-dec-2008 - adelikat - undo/redo loadstate and undo/redo savestate implemented +22-dec-2008 - adelikat - backupSavestate system added. +22-dec-2008 - shinydoofy - sdl - added Shift+M for toggling automatic movie backups for SDL +22-dec-2008 - adelikat - Movie auto-backup feature implemented +22-dec-2008 - adelikat - win32 - moved movie related menu items to a movie options dialog box +22-dec-2008 - adelikat - Win32 - context menu item "create backup" for backing up movie files +21-dec-2008 - adelikat - Win32 - Name Table Viewer - Refresh value default to 15, Refresh value stored in config file +21-dec-2008 - adelikat - Win32 - PPU Viewer - Refresh value default to 15, Refresh value stored in config file +19-dec-2008 - adelikat - Loadbackup function added, Win32 - Undo Loadstate context menu item +19-dec-2008 - adelikat - Backup savestate is made before loading a state +18-dec-2008 - adelikat - win32 - turbo bypasses sound better if muteturbo is checked +18-dec-2008 - shinydoofy - sdl - fixed compiling errors for SDL due to r1037 +18-dec-2008 - adelikat - win32 - fullscreen mode fixed (both enters and returns to fullscreen just fine) +16-dec-2008 - adelikat - win32 - debugger - added "Restore original window size" button +16-dec-2008 - adelikat - win32 - debugger - fixed SF2073113 - Debugger now has a minimum valid size +15-dec-2008 - adelikat - win32 - cheats - number of active cheats listed, freezing ram addresses in hex editor automatically updates cheats dialog +15-dec-2008 - adelikat - win32 - hexeditor - added minimize & maximize buttons +14-dec-2008 - adelikat - win32 - memwatch - frozen addresses will display as blue +14-dec-2008 - adelikat - win32 - hexeditor - prevent the user from freezing more than 256 addresses at once +14-dec-2008 - adelikat - win32 - memwatch - collapsable to 1 column +08-dec-2008 - adelikat - win32 - stop lua menu item gray if no lua script is running +08-dec-2008 - adelikat - win32 - fix bug where no sound + mute turbo caused chirps when toggling +08-dec-2008 - adelikat - win32 - sound dialog - disabling sound disabled sound options +08-dec-2008 - adelikat - win32 - opening a rom runs closerom first, fixes bug where new sav file was not getting loaded +07-dec-2008 - adelikat - win32 - turbo now employs frame skip +30-nov-2008 - punkrockguy - commit 1000 +30-nov-2008 - punkrockguy - fixed gcc compile error +30-nov-2008 - punkrockguy - moved around some hotkeys to be consistent with docs +30-nov-2008 - punkrockguy - major update to sdl documentation +24-nov-2008 - qfox - win32 - fixed two position checks for memwatch and debugger that could cause these windows to "disappear" (moved far out of reach). +24-nov-2008 - adelikat - win32 - right click context menus installed +24-nov-2008 - adelikat - win32 - added lots of mappable hotkey items as Menu items +23-nov-2008 - adelikat - Win32 - fixed some errors in my AVI directory override code +23-nov-2008 - shinydoofy - movie subs now have a toggle button in the SDL build (F10 by default) +23-nov-2008 - adelikat - movie subtitle system installed +22-nov-2008 - adelikat - Win32 - added help menu item to TASEdit and Hex Editor, Minor TASEdit clean up +22-nov-2008 - adelikat - Win32 - fixed so that turbo works with VBlank sync settings +21-nov-2008 - qfox - Lua - added joypad.write and joypad.get for naming consistency. Added plane display toggle for lua: FCEU.fceu_setrenderplanes(sprites, background) which accepts two boolean args and toggles the drawing of those planes from Lua. Changed movie.framecount() to always return a number, even when no movie is playing. Should return the same number as in view; the number of frames since last reset, if no movie is playing. +17-nov-2008 - adelikat - added Open Cheats hotkey (currently a windows only function) +16-nov-2008 - adelikat - Win32 - menu items that are hotkey mappable show the current hotkey mapping +15-nov-2008 - adelikat - Win32 - memwatch - implemented RamChange() - monitors the behavior of ram addresses +15-nov-2008 - adelikat - Win32 - re-enabled sound buffer time +15-nov-2008 - adelikat - Clip Left and Right sides taken into account when drawing on screen (record/play/pause, lag & frame counters, messages, etc) +15-nov-2008 - adelikat - win32 - Implemented Drap & Drop for movie files +14-nov-2008 - adelikat - win32 Hex Editor - Dump Rom & Dump PPU to file Dialog - uses ROM to build default filename +14-nov-2008 - adelikat - Win32 Memwatch - Save as dialog - uses ROM name to build default memwatch filename if there is no last used memwatch filename +14-nov-2008 - adelikat - Win32 Text Hooker fixes - Init error checking reinstated, save .tht file no longer crashes, Dialog updates as ROM plays, Remembers window position, fix bug where canceling save as produces an error message, Save As produces default filename based on loaded ROM +14-nov-2008 - adelikat - fixed but when aspect correction and special scaling 3x are set, video was getting resized incorrectly +14-nov-2008 - adelikat - fixed a bug introduced in previous commit, frame display toggle now works when no movie is present +12-nov-2008 - adelikat - allowed frame counter to display even with no movie present +11-nov-2008 - punkrockguy - sdl - savestate slots now mappable [2175167] +10-nov-2008 - adelikat - win32 - removed accel keys from main window +10-nov-2008 - adelikat - Win32 - added Open & Close ROM mappable hotkeys, removed accel functions +10-nov-2008 - punkrockguy - improved the sdl sound code; drasticaly improves quality of sound. +09-nov-2008 - adelikat - minor memory watch menu clean up, removed Ctrl+W hotkey for close (and placed Alt+F4 on the menu name) +08-nov-2008 - zeromus - big endian wasnt compiling. fix issues. +02-nov-2008 - shinydoofy - added --fcmconvert for SDL +02-nov-2008 - zeromus - emulua - add rom.readbyte and rom.readbytesigned + + +---version 2.0.3 released--- + +02-nov-2008 - zeromus - fix fcm conversion, recording, and playback of reset and power commands +25-oct-2008 - shinydoofy - added support for AVI creation for SDL, see documentation/Videolog.txt for more +19-oct-2008 - shinydoofy - toggle lag frame counter for SDL, default hotkey F8 +19-oct-2008 - shinydoofy - toggle skipping of lag frames for SDL, default hotkey F6 +19-oct-2008 - shinydoofy - [ 2179829 ] user ability to toggle "bind savestates to movie" added for SDL, default hotkey F2 +19-oct-2008 - adelikat - win32 - added a toggle for binding savestates to movies +18-oct-2008 - adelikat - win32 - added -cfg (config file) command line argument +08-oct-2008 - zeromus - SF [ 2073113 ] Child windows inside debugging window get invalid sizes +08-oct-2008 - zeromus - SF [ 2153843 ] Lua ignores second joypad.set() +24-sep-2008 - punkrockguy318 - made the input config window more usable +24-sep-2008 - punkrockguy318 - --inputcfg can now be used without a filename +24-sep-2008 - punkrockguy318 - [ 2085437 ] should fix issues with missing author field crashing fceux +24-sep-2008 - punkrockguy318 - [ 2047057 ] added uninstall script for gfceux +24-sep-2008 - punkrockguy318 - [ 2062823 ] fixed ppc build errors and added LSB_FIRST option to build scripts +24-sep-2008 - punkrockguy318 - [ 2057006 ] --newppu option added to sdl, disabled by default +24-sep-2008 - punkrockguy318 - [ 2057008 ] lua is now optional, thanks shinydoofy for a patch. also fixed some build issues. +22-sep-2008 - punkrockguy318 - [ 2008437 ] fixed an issue where flawed movie would crash fceux on every startup +21-aug-2008 - punkrockguy318 - sdl - fixed issue where windowed mode would always be set to 32 bpp +18-aug-2008 - zeromus - windows - SF [ 2058942 ] Load state as... does not use the savestate override dir (fixed; now, it does) +18-aug-2008 - zeromus - windows - permit user optionally to proceed through the movie savestate mismatch error condition, in case he knows what he is doing. +18-aug-2008 - zeromus - fix a bug in the savestate recovery code which prevent aborted savestate loads from recovering emulator state correctly. +18-aug-2008 - zeromus - windows - bind a menu option for display framecounter +17-aug-2008 - zeromus - windows - fix problem where replay dialog couldnt work when the process current directory had changed to something other than emulator base directory +17-aug-2008 - zeromus - windows - autoload the only useful rom or movie from an archive, in cases where there is only one +17-aug-2008 - zeromus - gracefully handle non-convertible broken utf-8 text without crashing +17-aug-2008 - zeromus - windows - don't read every archive file when scanning for replay dialog. scan them, and only look for *.fm2 +17-aug-2008 - zeromus - debugger - fix issue where keyboard keys get stuck when switching between debugger window and main window +15-aug-2008 - adelikat - fixed an oversight on my part. Sound config dialog will now look to see if Mute Turbo should be checked + +---version 2.0.2 released--- + +14-aug-2008 - punkrockguy318 - SDL: prevent frame advance from crashing emulator +14-aug-2008 - punkrockguy318 - SDL build scripts now look for lua5.1 and lua (distributions package lua differently) +14-aug-2008 - zeromus - restore savestate error recovery functionality. This should have the side effect of guaranteeing that ( SF [ 2040761 ] Wrong savestate bug - crashes FCEUX) is resolved. +14-aug-2008 - zeromus - SF [ 2047001 ] Low speeds crash FCEUX +14-aug-2008 - zeromus - SF [ 2050371 ] FCM>FM2 converter should release file handle +13-aug-2008 - zeromus - restore ungzipping (and unzipping in sdl) capability which was lost when archive support was added +13-aug-2008 - zeromus - add FORBID breakpoints - regions which block breakpoints from happening if they contain the PC +13-aug-2008 - punkrockguy318 - SDL: fixed --input(1-4) options. input1 and 2 are regular inputs, input3 and 4 are famicom expansion inputs +12-aug-2008 - zeromus - fix SDL configfile woes. configfile now goes to ~/.fceux/fceux.cfg +12-aug-2008 - zeromus - SF [ 2047986 ] palflag 1 in .fm2 files crashes fceux +12-aug-2008 - adelikat - movie replay dialog displays fractions of a second +12-aug-2008 - punkrockguy318 - SDL: fixed segfault when opening .fcm files +12-aug-2008 - punkrockguy318 - SDL: Saner sound defaults for less choppy sound +12-aug-2008 - punkrockguy318 - SF [ 2047050 ] SDL: "--special" option fixed for special video scaling filters +12-aug-2008 - zeromus - SF [ 2046984 ] Player 3 inputs when not used +12-aug-2008 - zeromus - print a special message when trying to open an FCM reminding user to convert. (finishes SF [ 2011832 ] Opening non movie file crashes FCEUX) +12-aug-2008 - zeromus - SF [ 2046985 ] SRAM not wiped on power cycle (during movies) +11-aug-2008 - zeromus - restore IPS patching capability which was lost when archive support was added +11-aug-2008 - zeromus - SF [ 2011550 ] Buffer overflow (change vsprintf to vsnprintf) +11-aug-2008 - zeromus - SF [ 2047004 ] Moviefilenames without extension don't automatically get fm2 +10-aug-2008 - zeromus - upgrade to cah4e3's latest mapper 163&164 code to fix a crash in a game +10-aug-2008 - zeromus - remove cnrom chr rom size limit for homebrew roms +10-aug-2008 - punkrockguy318 - SDL: cleaned up the SConsruct +10-aug-2008 - punkrockguy318 - SDL: fixed issue where fceu would lock up when file dialogs were opened during fullscreen +10-aug-2008 - punkrockguy318 - SDL: fixed bug where fceux would close when file dialogs were closed +10-aug-2008 - punkrockguy318 - SDL: File open dialog is now used to movie playback +10-aug-2008 - punkrockguy318 - SDL: File open wrapper now takes a titlebar argument +10-aug-2008 - punkrockguy318 - SDL: Cleanup of usage +10-aug-2008 - punkrockguy318 - SDL: rename options --no8lim -> --nospritelim and --color -> --ntsccolor +10-aug-2008 - punkrockguy318 - SDL: Screenshots now always prepend the game name. +10-aug-2008 - punkrockguy318 - SDL: Changed default A/B from numpad 2 and 3 to j and k. +10-aug-2008 - punkrockguy318 - SDL: Enable frameskip by default +10-aug-2008 - punkrockguy318 - SDL: Fixed a bug that would crash fceux if the emulation speed was overincreased +10-aug-2008 - punkrockguy318 - SDL: New default hotkeys to more closely match win32 defaults +10-aug-2008 - punkrockguy318 - SDL: Added lua script loading hotkey (f3). Non win32 SDL requires zenity for this to function. +10-aug-2008 - punkrockguy318 - SDL: Build script cleanup; also added option for DEBUG builds. +10-aug-2008 - zeromus - SF [ 2030405 ] Avi recording: no sound b0rks format +10-aug-2008 - zeromus - SF [ 2037878 ] Convert .fcm doesn't do special characters +09-aug-2008 - zeromus - SF [ 2040463 ] Add an "author" text field in the record movie dialog +09-aug-2008 - zeromus - re-enable support for old-format savestates. +09-aug-2008 - zeromus - SF [ 2041944 ] Savestates remember Lua painting +09-aug-2008 - zeromus - support loading movies from archives +08-aug-2008 - adelikat - added input display to the FCEUX main menu +08-aug-2008 - adelikat - fixed the (null) in the default lua directory listing +08-aug-2008 - adelikat - added shift+L as default hotkey for reload lua script +08-aug-2008 - adelikat - removed accel ctrl+x (prevented cut from working in accel dialogs) +08-aug-2008 - zeromus - fiddle with nametable viewer to display correct NT,CHR,ATTR data in more cases (specifically, including some exotic mmc5 cases). +08-aug-2008 - zeromus - fix a new bug in windows build which caused fourscore emulation to fail in some cases +07-aug-2008 - zeromus - add an option to pick a constant color to draw in place of BG when BG rendering is disabled (look for gNoBGFillColor in config; 255 means to use palette[0]) +07-aug-2008 - adelikat - added a mute turbo option in sound config +07-aug-2008 - adelikat - new toggle - frame adv. - lag skip (menu item + hotkey mapping + saved in config) +07-aug-2008 - adelikat - put in -32000 protection on all dialogs that remember x,y +06-aug-2008 - adelikat - change config filename from fceu98.cfg to fceux.cfg +06-aug-2008 - zeromus - add lagcounter and lagflag to savestate +06-aug-2008 - zeromus - SF [ 2040448 ] View Slots bug - does not include new savestate naming +06-aug-2008 - zeromus - restore the debugger snap functionality +06-aug-2008 - zeromus - add memory.readbyterange to emulua +06-aug-2008 - zeromus - auto-fill .fcs extension in save state as dialog +06-aug-2008 - zeromus - mmc5 - 64KB WRAM games now work correctly +06-aug-2008 - zeromus - mmc5 - use of chr A regs for BG in sprite 8x8 mode is fixed +06-aug-2008 - zeromus - debugger - debugger window is now resizeable + +---version 2.0.1 released--- + +04-aug-2008 - reorganize display toggle options in the menu +04-aug-2008 - adelikat - autofire fix +04-aug-2008 - zeromus - homebrew mmc5 games now have 64KB of exwram instead of only 8KB +04-aug-2008 - zeromus - fix crash related to player2 in lua scripts +03-aug-2008 - qfox - fixed player2 in lua scripts + +---version 2.0.0 released--- diff --git a/branches/fceux-2.2.2/debian-crossbuild.sh b/branches/fceux-2.2.2/debian-crossbuild.sh new file mode 100755 index 00000000..f0623563 --- /dev/null +++ b/branches/fceux-2.2.2/debian-crossbuild.sh @@ -0,0 +1,5 @@ +#!/bin/sh +if [ -f /usr/bin/i586-mingw32msvc-windres ]; then HOST=i586-mingw32msvc +else HOST=i586-mingw32 +fi +PLATFORM=win32 CC=${HOST}-gcc CXX=${HOST}-g++ WRC=${HOST}-windres WINDRES=${HOST}-windres scons $@ diff --git a/branches/fceux-2.2.2/documentation/.gitignore b/branches/fceux-2.2.2/documentation/.gitignore new file mode 100644 index 00000000..674deb69 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/.gitignore @@ -0,0 +1,17 @@ +# A simulation of Subversion default ignores, generated by reposurgeon. +*.o +*.lo +*.la +*.al +*.libs +*.so +*.so.[0-9]* +*.a +*.pyc +*.pyo +*.rej +*~ +*.#* +.*.swp +.DS_store +# Simulated Subversion default ignores end here diff --git a/branches/fceux-2.2.2/documentation/TODO-PROJECT b/branches/fceux-2.2.2/documentation/TODO-PROJECT new file mode 100644 index 00000000..6354d36d --- /dev/null +++ b/branches/fceux-2.2.2/documentation/TODO-PROJECT @@ -0,0 +1,61 @@ +Items to be completed before 2.0 release + +FASTAPASS / FP_FASTAPASS / Are these archaic? They suck - ?? + +Separate frameskip/pause from EmulationPaused - zeromus + +Make ALL Debugging code conditional - zeromus + +Doxygen integration - DONE + * website integration + +Linux build - soules + * clean-up of input device code + +Windows build - zeromus + * verify rerecording + * verify debugging + * verify avi writing + +Commandline parsing - lukas + * verify in windows - zeromus + +Configfile parsing - lukas + * verify in windows - zeromus + +Do we really need vc7 project? Cah4e3? - zeromus +Source code docs cleaning - zeromus +Homepage docs - zeromus + +What is the proper gnu way to do CREDITS from the homepage? e.g. Marat Fayzullin - General NES information + +Freenode registration - lukas + * homepage update + +Default hotkey philosophy (there are different philosophies from XD and TAS) - ALL + +Netplay - FUTURE STUFF + Move server code into tree - DONE + Ensure netplay compiles + verify netplay + +----done----- + +Investigate OSX build [ http://www.lamer0.com/ ] - zeromus [posted on blog...] + +Move to scons - DONE + +Merge garnet and sf repos - DONE + * Ensure gnome frontend is in repo - DONE + * Move to sourceforge SVN - DONE + +--strategic-- + +Politics: + * aboutbox credits + * AUTHORS + +Release: + * Press Release - ?? + * Homepage updates + - eliminate old news, add new links diff --git a/branches/fceux-2.2.2/documentation/Videolog.txt b/branches/fceux-2.2.2/documentation/Videolog.txt new file mode 100644 index 00000000..15c349b1 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/Videolog.txt @@ -0,0 +1,48 @@ +Since SVN revision 931, FCEUX features a new option to create avi files from a recorded movie and it is relatively easy to use if you know the bare basics of mencoder. +Call "scons CREATE_AVI=1" to activate it. You will, however, most likely need mencoder to use it. + +You get the raw video data via stdin and the audio data from a fifo file. Let's say you want the video to be in the best quality available, no matter how long it takes or how big the avi file might get. In order to get the NES's original video resolution and a good sound quality, you might need to set some settings beforehand or just pass them along while calling mencoder. + + +Here's an example: +./fceux \ + --xscale 1 --yscale 1 --special 0 \ + --pal 0 \ + --sound 1 --soundq 1 --soundrate 48000 --mute 1 \ + --nospritelim 1 \ + --no-config 1 \ + --videolog "mencoder - -o myfirstencodedrun.avi \ + -ovc x264 -x264encopts qp=0 \ + -oac pcm \ + -noskip -nocache -mc 0 -aspect 4/3 + NESVSETTINGS" \ + --playmov mymovie.fm2 myROM.nes + +Now let's see what is done and why we did it: +First of all, we started fceux with "./fceux" and gave it some options: + "--xscale" and "--yscale" determine how much bigger the video in comparison to its regular size. It's no point to use anything other than 1 here because you can always see your video on fullscreen or at least scale it, can't you? As a nice addon, it saves time to create the avi file and also saves valuable space on your hard disk. + "--special" would usually do something fancy to your picture when you're playing a ROM, but again, it's mostly pointless to use for an avi. + "--pal 0" lets the game run at ~60Hz. Set this so 1 if you are using a PAL ROM. + "--sound 1" activates sound. + "--soundq 1" activates high quality sound. + "--soundrate 48000" sets the sound rate to 48kHz. + "--mute 1" mutes FCEUX while still passing the sound to mencoder. This way you can capture a movie and still listen to your music without having the NES sounds in the background. + "--nospritelim" deactivates the NES's 8 sprites per scanlines limit. + "--no-config 1" is used not to destroy your settings when creating an avi movie. + "--videolog" calls mencoder: + "-" states that we're getting the video stream from stdin. + "-o" determines the name of the produced avi file. + "-ovc x264" sets the video codec to be x264 and is highly recommended for quality reasons. However, if you using a version of x264 from Sep 28th 2008 or newer, mplayer will not be able to decode this again properly. Until this is fixed this mplayer, you might want to replace "-ovc x264 -x264encopts qp=0" with "-ovc lavc -lavcopts vcodec=ffv1:format=bgr32:coder=1:vstrict=-1". Watch out, though, as this needs *way* more space than x264 does. + "-x264encopts qp=0" tells the x264 codec to use a quantizer of 0, which results in lossless video quality. + "-oac pcm" saves the audio data uncompressed (this might turn out really big). + "-noskip" makes sure that no frame is dropped during capturing. + "-nocache" is responsible for immediate encoding and not using any cache. + "-mc 0" makes sure that the sound does not go out of sync. + "-aspect 4/3" sets the avi's aspect ratio so you can see it in fullscreen and have no borders to the left and right. + "NESVSETTINGS" takes care of proper recognition of the audio and video data from FCEUX. + "&> mencoder.log" lets mencoders log its output into a file called "mencoder.log" in your current working directory. + "--playmov" reads which movie file we want to load (here it's mymovie.fm2). + Lastly, we load our desired ROM (in this case it's "myROM.nes"). + +To go for faster encoding and thus less quality, change "-ovc x264 -x264encopts qp=0" to "-ovc xvid -xvidencopts bitrate=200" and "-oac pcm" to "-oac mp3lame -lameopts mode=3:preset=60" to create a 200 kbps xvid video with 60 kbps of mono mp3 audio. +Good luck! :) diff --git a/branches/fceux-2.2.2/documentation/cheat.html b/branches/fceux-2.2.2/documentation/cheat.html new file mode 100644 index 00000000..a0eac597 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/cheat.html @@ -0,0 +1,313 @@ + + + FCE Ultra Cheat Guide + + +

FCE Ultra Cheat Guide

+
Last updated November 12, 2003
Valid as of FCE Ultra 0.97.4
+

+ Table of Contents: +

+
+

Introduction

+

+ FCE Ultra allows cheating by the periodic "patching" of arbitrary addresses + in the 6502's memory space with arbitrary values, as well as read substitution. + "Read substitution" is the method that would be used on a real NES/Famicom, + such as done by the Game Genie and Pro Action Replay. It is required + to support GG and PAR codes, but since it is relatively slow when done + in emulation, it is not the preferred method when a RAM patch will + suffice. Also, in FCE Ultra, read substitution will not work properly with + zero-page addressing modes(instructions that operate on RAM at $0000 through + $00FF). +

+

+ The RAM patches are all applied a short time before the emulated + vertical blanking period. This detail shouldn't concern most people, though. + However, this does mean that cheating with games that use + bank-switched RAM may be problematic. Fortunately, such games are not very + common(in relation to the total number of NES and Famicom games). +

+

Cheat Files

+

+ Cheats are stored in the "cheats" subdirectory under the base FCE Ultra + directory. The files are in a simple plain-text format. Each line represents + a one-byte memory patch. The format is as follows(text in brackets [] + represents optional parameters): +

+

+

+ [S][C][:]Address(hex):Value(hex):[Compare value:]Description +
+ Example: + +
040e:05:Infinite super power.
+

+

+ A colon(:) near the beginning of the line is used to disable the cheat. + "S" denotes a cheat that is a read-substitute-style cheat(such as with Game + Genie cheats), and a "C" denotes that the cheat has a compare value. +

+ +
+

The Windows Interface

+

+ All addresses listed in the cheats window are in unsigned + 16-bit hexadecimal format and all values in these windows are in an + unsigned 8-bit decimal format(the range for values is 0 through 255). +

+

+ The cheats window contains the list of cheats for the currently loaded game + on the right side. Existing cheats can be selected, edited, and updated + using the "Update" button. +

+

Cheat Search Interface

+

+ The cheat search interface consists of several components: a list of + addresses and associated data for a search, several command buttons, + and the search parameters. +

+

+ Each entry in the list is in the format of: +

Address:Original Value:Current Value
+

+

+ The address is the location in the 6502's address space, the original + value is the value that was stored at this address when the search was + reset, and the current value is the value that is currently stored at + that address. Selecting an item in this list will automatically cause + the "Address" field in the cheat information box on the right side of the + window to be updated with the selected address. +

+

+ The "Reset Search" button resets the search process; all valid addresses + are displayed in the cheat list and the data values at those addresses noted. +

+

+ The "Do Search" buttons performs a search based on the search parameters + and removes any non-matching addresses from the address list. +

+

+ The "Set Original to Current" button sets the remembered original values + to the current values. It is like the "Reset Search" button, but it does + not affect which addresses are shown in the address list. This command is + especially useful when used in conjunction with the "O!=C" search filter. +

+

+ The "Unhide Excluded" button shows all addresses that are excluded as a + result of any previous searches. It is like the "Reset Search" button + except that it does not affect the remembered original values. +

+

+ The numbers assigned the names "V1" and "V2" have different meanings based + on which filter is selected. A list of the names of the filters and detailed + information on what they do follows("original value" corresponds to the value + remembered for a given addres and "current value" is the value currently + at that address. Also, if a value is not explicitly said to be shown + under a certain condition, then it is obviously excluded.): +

+ "O==V1 && C==V2": +

+ Show the address if the original value is equal to "V1" AND + the current value is equal to "V2". +
+

+

+ "O==V1 && |O-C|==V2": +

+ Show the address if the original value is equal to "V1" AND + the difference between the current value and the original + value is equal to "V2". +
+

+

+ "|O-C|==V2": +

+ Show the address if the difference between the current value + and the original value is equal to "V2". +
+

+

+ "O!=C": +

+ Show the address if the original value does not equal the + current value. +
+

+

+ The following cheat methods/filters automatically perform the function + of the "Set Original to Current" button after "Do Search" is pressed. +

+

+ "Value decreased." +

+ Show the address if the value has decreased. +
+

+

+ "Value increased." +

+ Show the address if the value has increased. +
+

+ +
+

Examples

+

"Mega Man 3" Windows Example

+

+ This example will give Mega Man unlimited energy. + Immediately after entering the Top Man stage, make your way to the + "Add Cheat" window. Push "Reset Search". + Go back to playing and move right until the first enemy appears. Allow + yourself to be hit twice. Each hit does "2" damage, so you've lost 4 energy + bars. Go to the "Add Cheat" window again and select the third filter + ("|O-C|==V2") and enter the value 4 next to "V2". Then push "Do Search". +

+

+ Several addresses will appear in the address list. You can try to find + the address you want through trial and error, or you can narrow the results + down further. We will do the latter. +

+

+ Go back to playing MM3 and get hit one more time and make your way back + to the "Add Cheat" window. Your damage is now "6". You can probably + see which address that contains your life(it is 00A2). If not, change + V2 to 6 and push "Do Search" again. This should leave only 00A2. +

+

+ Select that entry in the address list. Shift your attention to the "Add + Cheat" box to the right. Type in a meaningful name and the desired value(156; + it was the value when you had no damage, so it's safe to assume it's the + maximum value you can use). Push the "Add" button and a new entry will + appear in the cheats list. The cheat has been added. +

+

"Over Horizon" Text Interface Example

+

+ This example will give you infinite lives in the NTSC(Japanese) version + of "Over Horizon". +

+

+ Start a new game. Notice that when you press "Start" during gameplay, + the number of lives you have left is indicated. With no cheating, you + start with 3 lives(2 lives left). +

+

+ Activate the cheat interface immediately after starting a new game. + Select the "New Cheats" menu and "Reset Search". +

+

+ I'll assume that the number of lives left shown in the game is the same number + that's stored in RAM. Now, "Do Search". You're going to use the first search + filter. For V1, enter the value 2. For V2, enter the same value. This, + coupled with the fact that you just reset the search, will allow you to search + for a value "absolutely"(as opposed to changes in the value). +

+

+ Now, "Show Results". When I did it, I received 11 results: +

+
+	 1) $0000:002:002
+	 2) $001c:002:002
+	 3) $001e:002:002
+	 4) $009d:002:002
+	 5) $00b9:002:002
+	 6) $00e3:002:002
+	 7) $0405:002:002
+	 8) $0406:002:002
+	 9) $0695:002:002
+	10) $07d5:002:002	
+	11) $07f8:002:002
+
+

+ You really can't do much yet(unless you want to spend time doing trial + and error cheat additions). Return to the game. +

+

+ After losing a life, go back to the cheat interface, to the "New Cheats" + menu, and "Show Results". Here are my results: +

+
+	 1) $0000:002:002
+	 2) $001c:002:002
+	 3) $001e:002:002
+	 4) $009d:002:002
+	 5) $00b9:002:041
+	 6) $00e3:002:002
+	 7) $0405:002:001
+	 8) $0406:002:002
+	 9) $0695:002:002
+	10) $07d5:002:001
+	11) $07f8:002:002
+
+

+ Notice that two addresses seem to hold the number of lives($0405 and + $07d5). You can lose another life and go "Show Results" again, and you + should see that $07d5 is the address that holds the number of lives. +

+

+ Now that you know the address that holds the number of lives, you can + add a cheat. You can either type in the number from the cheat results list + corresponding to the address you want to add a cheat for, or you can + remember the address and select "Add Cheat" from the "New Cheats" menu. + Do the former. +

+

+ Now you will need to enter a name for the cheat. I suggest something short, + but descriptive. "Infinite lives" will work fine. Next, a prompt for + the address will show up. Since you selected an item from the list, you + can press enter to use the associated address($07d5). Next, you will + need to enter a value. It doesn't need to be large(in fact, it probably + shouldn't be; abnormally high numbers can cause some games to misbehave). + I suggest a value of 2. After this, you should get a prompt that looks like + this: +

+
+   Add cheat "Infinite lives" for address $07d5 with value 002?(Y/N)[N]:
+
+

+ Answer "Y". You now have infinite lives. +

+
+

Tips

+

+ Games store player information in many different ways. For example, + if you have "3" lives in Super Wacky Dodgeball 1989, the game might store + it in memory as 2, 3, or 4, or perhaps a different number all together. + Also, say that you have 69 life points out of 200 in Mole Mashers. The + game might store how many life points you have, or how much damage you have + taken. Relative value searches are very valuable because you probably + don't know the way that the game stores its player data. +

+

+ Some games, especially RPGs, deal with individual numbers greater than + 8-bits in size. Most that I've seen seem to store the multiple-byte data + least significant byte(lower byte of number) first in memory, though + conceivably, it could be stored most significant byte first, or the component + bytes of the number could be non-contiguous, though the latter is very unlikely. + For example, say I have 5304 experience points in Boring Quest for the + Overused Plot Device. To split the number into two eight bit decimal numbers, + take 5304 %(modulus) 256. This will give a number that is the lower 8 bits. + Next, take 5304 / 256. The integral component of your answer will be the + upper 8 bits(or the next 8 bits, if the number is or can be larger than 16 + bits) of 5304. Now you will need to search for these numbers. Fortunately, + most(all?) RPGs seem to store large numbers exactly as they are shown in the + game. +

+ + diff --git a/branches/fceux-2.2.2/documentation/faq b/branches/fceux-2.2.2/documentation/faq new file mode 100644 index 00000000..69b2914e --- /dev/null +++ b/branches/fceux-2.2.2/documentation/faq @@ -0,0 +1,67 @@ +FCE Ultra General User's FAQ + preliminary version + Last updated on: Friday 13th, 2003 +------------------ + + +Q: Why do some games make a popping sound(Rad Racer 2, Final Fantasy 3)? +A: These games do a very crude drum imitation by causing a large jump in + the output level for a short period of time via the register at $4011. + The analog filters on a real NES and Famicom make it sound rather decent. + I have not completely emulated these filters. Enabling high-quality + sound emulation will also make these pseudo-drums sound better. See + the next question for more information. + +Q: Why do some games' digitized sounds sound too loud? + Why do the drums in Crystalis and other games sound fuzzy? + +A: The NES' digital to analog converter is faulty, in that it does not output + sound linearly. This effect is most noteable when a games messes with + register $4011, which is added with the triangle wave channel and the noise + channel outputs. When $4011 is set to a large value, the volume + of the triangle wave channel and the noise channel drop significantly. More + Importantly, when digitized sounds are being played and the digitized sample + stream is at a high value, less changes will be noticeable. In other words, + the byte sequence "00 01 00" would be much more audible than the sequence + "7e 7f 7e". This non-linearity is only emulated when high-quality sound + emulation is enabled. + +Q: Why doesn't the NSF work(correctly) on FCE Ultra? +A: Some NSF rips are bad. Some read from addresses that are not specified + in the NSF specifications, expecting certain values to be returned. + Others execute undocumented instructions that have no affect on + less-accurate software NSF players, but will cause problems on NSF players + that emulate these instructions. Also, the playback rate specified + in the NSF header is currently ignored, though I haven't encountered + any problems in doing this. + +Q: Why doesn't the game work(correctly) on FCE Ultra? +A: Many factors can make a game not work on FCE Ultra: + + - If the ROM image is in the iNES format(typically files that have + the extension "nes"), its header may be incorrect. This + incorrectness may also be because of garbage in the + header. Certain utilities used to put text in the reserved + bytes of the iNES header, then those reserved bytes were + later assigned functions. FCE Ultra recognizes and + automatically removes(from the ROM image in RAM, not on the + storage medium) SOME header junk. + + If the game has graphical errors while scrolling, chances are + the mirroring is set incorrectly in the header. + + You can try to edit the header with a utility(in the NES + utilities section at http://zophar.net ) or a hex editor. + + - The on-cart hardware the game uses may not be emulated + correctly. + + - Limitations of the ROM image format may prevent a game from + being emulated correctly without special code to recognize that + game. This occurs quite often with many Koei MMC5(iNES mapper 5) + and MMC1(iNES mapper 1) games in the iNES format. FCE Ultra identifies + and emulates some of these games based on the ROM CRC32 value. + + - The ROM image may be encrypted. The author of SMYNES seems to + have done this intentionally to block other emulators from + playing "SMYNES only" games. diff --git a/branches/fceux-2.2.2/documentation/fceux-net-server.6 b/branches/fceux-2.2.2/documentation/fceux-net-server.6 new file mode 100644 index 00000000..a3cf7fd2 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/fceux-net-server.6 @@ -0,0 +1,74 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" (C) Copyright 2012 Joe Nahmias +.\" +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH FCEUX-NET-SERVER 6 "October 12, 2012" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +fceux-net-server \- FCE Ultra game server +.SH SYNOPSIS +.B fceux-net-server +.RI [ options ] +.SH DESCRIPTION +This manual page documents briefly the +.B fceux-net-server +command. +.PP +\fBfceux-net-server\fP is the game server for multiplayer use of the FCE Ultra +family of NES emulators. This server will first look in +\fI/etc/fceux-server.conf\fP for options. If that file does not exist, it will +use the defaults given here. Any argument given directly will override any +default values. +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +.TP +.B \-h, \-\-help +Displays a help message. +.TP +.B \-v, \-\-version +Displays the version number and quits. +.TP +.B \-p, \-\-port +Starts server on given port (default = \fI4046\fP). +.TP +.B \-w, \-\-password +Specifies a password for entry. +.TP +.B \-m, \-\-maxclients +Specifies the maximum number of clients allowed to access the +server (default = \fI100\fP). +.TP +.B \-t, \-\-timeout +Specifies the number of seconds before the server times out (default = \fI5\fP). +.TP +.B \-f, \-\-framedivisor +Specifies frame divisor, which controls the number of updates sent to client; +calculated as: 60 / framedivisor = updates per second (default = \fI1\fP). +.TP +.B \-c, \-\-configfile +Loads the given configuration file (default = \fI/etc/fceux\-server.conf\fP). +.SH SEE ALSO +.BR fceux (6), +The +.B FCEUX +project homepage +.RI < http://fceux.com/ >. +.SH AUTHOR +This manual page was written by Joe Nahmias +for the Debian GNU/Linux system (but may be used by others). + diff --git a/branches/fceux-2.2.2/documentation/fceux.6 b/branches/fceux-2.2.2/documentation/fceux.6 new file mode 100644 index 00000000..98c4182c --- /dev/null +++ b/branches/fceux-2.2.2/documentation/fceux.6 @@ -0,0 +1,353 @@ +.\" t Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH FCEUX 6 "June 24, 2012" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +fceux \- An emulator for the original (8-bit) Nintendo / Famicom game console. +.SH SYNOPSIS +.B fceux +.RI [ options ] +"filename" +.SH DESCRIPTION +.B FCEUX +is an emulator for the original (8-bit) Nintendo Entertainment System (NES). +It has a robust color palette rendering engine that is fully customizable, +along with excellent sound and joystick support, and even supports movie +recording and playback. +.SH OPTIONS +.SS Misc. Options +.TP +.B \--no-config {0|1} +Use default config file and do not save to it, when enabled. +.TP +.B \-g {0|1}, \--gamegenie {0|1} +Enable or disable emulated Game Genie. +.TP +.B \--nogui {0|1} +Enable or disable the GTK GUI. +.TP +.B \--loadlua FILE +Loads lua script from filename FILE. +.SS Emulation Options +.TP +.B \--pal {0|1} +Enable or disable PAL mode. +.SS Input Options +.TP +.B \-i DEV, \--inputcfg DEV +Configures input device DEV on startup. +Devices: gamepad powerpad hypershot quizking +.TP +.B \--input{1|2} DEV +Set which input device to emulate for input 1 or 2. +Devices: gamepad zapper powerpad.0 powerpad.1 arkanoid +.TP +.B \--input{3|4} DEV +Set the famicom expansion device to emulate for input 3 or 4. +Devices: quizking hypershot mahjong toprider ftrainer familykeyboard +oekakids arkanoid shadow bworld 4player +.TP +.B \--inputdisplay {0|1} +Enable or disable input display. +.TP +.B \--fourscore {0|1} +Enable or disable fourscore emulation. +.SS Graphics Options +.TP +.B \--newppu {0|1} +Enable or disable the new PPU core. (WARNING: May break savestates) +.TP +.B \--frameskip NUM +Set NUM of frames to skip per emulated frame. +.TP +.B \--clipsides {0|1} +Enable or disable clipping of the leftmost and rightmost 8 columns of +the video output. +.TP +.B \--slstart SCANLINE +Set the first scanline to be rendered. +.TP +.B \--slend SCANLINE +Set the last scanline to be rendered. +.TP +.B \--nospritelim {0|1} +When set to 0, this disables the normal 8 sprites per scanline limitation. +When set to 1, this enables the normal 8 sprites per scanline limitation. +NOTE: Yes, this option is 'backwards'. +.TP +.B \-x XRES, \--xres XRES +Set horizontal resolution for full screen mode. +.TP +.B \-y YRES, \--yres YRES +Set vertical resolution for full screen mode. +.TP +.B \--doublebuf {0|1} +Enable or disable double buffering. +.TP +.B \--autoscale {0|1} +Enable or disable autoscaling in fullscreen. +.TP +.B \--keepratio {0|1} +Keep native NES aspect ratio when autoscaling. +.TP +.B \--{x|y}scale VAL +Multiply width/height by VAL. +(Real numbers > 0 with OpenGL, otherwise integers > 0). +.TP +.B \--{x|y}stretch {0|1} +Stretch to fill surface on x/y axis (OpenGL only). +.TP +.B \-b {8|16|24|32}, \--bpp {8|16|24|32} +Set bits per pixel. +.TP +.B \--opengl {0|1} +Enable or disable OpenGL support. +.TP +.B \--openglip {0|1} +Enable or disable OpenGL linear interpolation. +.TP +.B \-f {0|1}, \--fullscreen {0|1} +Enable or disable full-screen mode. +.TP +.B \--noframe {0|1} +Hide title bar and window decorations. +.TP +.B \--special {1-4} +Use special video scaling filters. +(1 = hq2x 2 = Scale2x 3 = NTSC 2x 4 = hq3x 5 = Scale3x) +.TP +.B \-p FILE, \--palette FILE +Use the custom palette in FILE. +.TP +.B \--ntsccolor {0|1} +Enable or disable NTSC NES colors. +.TP +.B \--tint VAL +Set the NTSC tint. +.TP +.B \--hue VAL +Set the NTSC hue. +.SS Sound Options +.TP +.B \-s {0|1}, \--sound {0|1} +Enable or disable sound. +.TP +.B \--soundrate RATE +Set the sound playback sample rate (0 == off?). +.TP +.B \--soundq {0|1|2} +Set sound quality. (0 = Low 1 = High 2 = Very High) +.TP +.B \--soundbufsize MS +Set sound buffer size to MS milliseconds. +.TP +.B \--volume {0-256} +Sets the sound volume to the given value, where 256 is max volume. +.TP +.B \--trianglevol {0-256} +Sets the sound volume of the triangle wave to the given value, where 256 is max volume. +.TP +.B \--square1vol {0-256} +Sets the sound volume of square wave 1 to the given value, where 256 is max volume. +.TP +.B \--square2vol {0-256} +Sets the sound volume of square wave 2 to the given value, where 256 is max volume. +.TP +.B \--noisevol {0-256} +Sets the sound volume of the noise generator to the given value, where 256 is max volume. +.TP +.B \--lowpass {0|1} +Enables or disables lowpass filtering of the sound. +.TP +.B \--soundrecord FILE +Record sound to file FILE. +.SS Movie Options +.TP +.B \--playmov FILE +Play back a recorded FCM/FM2 movie from filename FILE. +.TP +.B \--pauseframe FRAME +Pause movie playback at frame FRAME. +.TP +.B \--moviemsg {0|1} +Enable or disable movie messages. +.TP +.B \--fcmconvert FILE +Convert fcm movie file FILE to fm2. +.TP +.B \--ripsubs FILE +Convert movie's subtitles to srt. +.TP +.B \--subtitles {0|1} +Enable or disable subtitle display. +.SS Networking Options +.TP +.B \-n SRV, \--net SRV +Connect to server SRV for TCP/IP network play. +.TP +.B \--port PORT +Use TCP/IP port PORT for network play. +.TP +.B \-u NICK, \--user NICK +Set the nickname to use in network play. +.TP +.B \-w PASS, \--pass PASS +Set password to use for connecting to the server. +.TP +.B \-k NETKEY, \--netkey NETKEY +Use string NETKEY to create a unique session for the game loaded. +.TP +.B \--players NUM +Set the number of local players. +.TP +.B \--rp2mic {0|1} +If enabled, replace Port 2 Start with microphone (Famicom). +.TP +.B \--videolog c +Calls mencoder to grab the video and audio streams to encode them. Check the documentation for more on this.? +.TP +.B \--mute {0|1} +Mutes FCEUX while still passing the audio stream to mencoder. +.TP +.SH KEYBOARD COMMANDS +.B FCEUX +has a number of commands available within the emulator. +It also includes default keyboard bindings when emulating game pads or power pads. +.SS Gamepad Keyboard Bindings +.TS +center box; +cb | cb, c | ci. +NES Gamepad Keyboard += +Up Keypad Up +Down Keypad Down +Left Keypad Left +Right Keypad Right +A F +B D +Select S +Start Enter +.TE +.SS Other Commands +.PP +.TP 15 +.BI +Toggle full-screen mode. +.TP 15 +.BI +Cheat menu (command-line only). +.TP 15 +.BI +Toggle savestate binding to movies. +.TP 15 +.BI +Load LUA script. +.TP 15 +.BI +Toggles background rendering. +.TP 15 +.BI +Save game state into current slot (set using number keys). +.TP 15 +.BI +Restore game state from current slot (set using number keys). +.TP 15 +.BI +Toggle movie subtitles. +.TP 15 +.BI +Reset NES. +.TP 15 +.BI +Save screen snapshot. +.TP 15 +.BI Shift + +Beging recording video. +.TP 15 +.BI Shift + +Load recorded video. +.TP 15 +.BI 0-9 +Select save state slot. +.TP 15 +.BI Page Up/Page Down +Select next/previous state. +.TP 15 +.BI \- +Decrease emulation speed. +.TP 15 +.BI = +Increase emulation speed. +.TP 15 +.BI Tab +Hold for turbo emulation speed. +.TP 15 +.BI Pause +Pause emulation. +.TP 15 +.BI \e +Advance a single frame. +.TP 15 +.BI . +Toggle movie frame counter. +.TP 15 +.BI , +Toggle input display. +.TP 15 +.BI q +Toggle movie read-only. +.TP 15 +.BI ' +Advance a single frame. +.TP 15 +.BI / +Lag counter display. +.TP 15 +.BI Delete +Frame advance lag skip display. +.TP 15 +.BR +Quit +.B FCEUX. +.SS VS Unisystem Commands +.PP +.TP 15 +.BI +Insert coin. +.TP 15 +.BI +Show/Hide dip switches. +.TP 15 +.BI 1-8 +Toggle dip switches (when dip switches are shown). +.SS Famicom Disk System Commands +.PP +.TP 15 +.BI +Select disk and disk side. +.TP 15 +.BI +Eject or insert disk. +.TP +.I http://fceux.com/ +The +.B FCEUX +project homepage. +.SH AUTHOR +This manual page was written by Joe Nahmias , +Lukas Sabota and Alexander Toresson + for the Debian GNU/Linux system +(but may be used by others). diff --git a/branches/fceux-2.2.2/documentation/fcs.txt b/branches/fceux-2.2.2/documentation/fcs.txt new file mode 100644 index 00000000..dbaeec53 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/fcs.txt @@ -0,0 +1,153 @@ +FCE Ultra Save State Format + Updated: Mar 9, 2003 +--------------------------------------- + +FCE Ultra's save state format is now designed to be as forward and backwards +compatible as possible. This is achieved through the (over)use of chunks. +All multiple-byte variables are stored LSB(least significant byte)-first. +Data types: + + (u)int8 - (un)signed 8 bit variable(also referred to as "byte") + (u)int16 - (un)signed 16 bit variable + (u)int32 - (un)signed 32 bit variable + +-- Main File Header: + +The main file header is 16-bytes in length. The first three bytes contain +the string "FCS". The next byte contains the version of FCE Ultra that saved +this save state. This document only applies to version "53"(.53) and higher. +After the version byte, the size of the entire file in bytes(minus the 16 byte +main file header) is stored. The rest of the header is currently unused +and should be nulled out. Example of relevant parts: + + FCS + +-- Section Chunks: + +Sections chunk headers are 5-bytes in length. The first byte defines what +section it is, the next four bytes define the total size of the section +(including the section chunk header). + + + +Section definitions: + + 1 - "CPU" + 2 - "CPUC" + 3 - "PPU" + 4 - "CTLR" + 5 - "SND" + 16 - "EXTRA" + +-- Subsection Chunks + +Subsection chunks are stored within section chunks. They contain the actual +state data. Each subsection chunk is composed of an 8-byte header and the data. +The header contains a description(a name) and the size of the data contained +in the chunk: + + +The name is a four-byte string. It does not need to be null-terminated. +If the string is less than four bytes in length, the remaining unused bytes +must be null. + +-- Subsection Chunk Description Definitions + +Note that not all subsection chunk description definitions listed below +are guaranteed to be in the section chunk. It's just a list of what CAN +be in a section chunk. This especially applies to the "EXTRA" subsection. + +---- Section "CPU" + + Name: Type: Description: + + PC uint16 Program Counter + A uint8 Accumulator + P uint8 Processor status register + X uint8 X register + Y uint8 Y register + S uint8 Stack pointer + RAM uint8[0x800] 2KB work RAM + +---- Section "CPUC" (emulator specific) + + Name: Type: Description: + + JAMM uint8 Non-zero value if CPU in a "jammed" state + IRQL uint8 Non-zero value if IRQs are to be generated constantly + ICoa int32 Temporary cycle counter + ICou int32 Cycle counter + +---- Section "PPU" + + Name: Type: Description: + + NTAR uint8[0x800] 2 KB of name/attribute table RAM + PRAM uint8[32] 32 bytes of palette index RAM + SPRA uint8[0x100] 256 bytes of sprite RAM + PPU uint8[4] Last values written to $2000 and $2001, the PPU + status register, and the last value written to + $2003. + XOFF uint8 Tile X-offset. + VTOG uint8 Toggle used by $2005 and $2006. + RADD uint16 PPU Address Register(address written to/read from + when $2007 is accessed). + TADD uint16 PPU Address Register + VBUF uint8 VRAM Read Buffer + PGEN uint8 PPU "general" latch. See Ki's document. + +---- Section "CTLR" (somewhat emulator specific) + + Name: Type: Description: + + J1RB uint8 Bit to be returned when first joystick is read. + J2RB uint8 Bit to be returned when second joystick is read. + +---- Section "SND" (somewhat emulator specific) + + NREG uint16 Noise LFSR. + P17 uint8 Last byte written to $4017. + PBIN uint8 DMC bit index. + PAIN uint32 DMC address index(from $8000). + PSIN uint32 DMC length counter(how many bytes left + to fetch). + + + +---- Section "EXTRA" (varying emulator specificness) + + For iNES-format games(incomplete, and doesn't apply to every game): + + Name: Type: Description: + + WRAM uint8[0x2000] 8KB of WRAM at $6000-$7fff + MEXR uint8[0x8000] (very emulator specific) + CHRR uint8[0x2000] 8KB of CHR RAM at $0000-$1fff(in PPU address space). + EXNR uint8[0x800] Extra 2KB of name/attribute table RAM. + MPBY uint8[32] (very emulator specific) + MIRR uint8 Current mirroring: + 0 = "Horizontal" + 1 = "Vertical" + $10 = Mirror from $2000 + $11 = Mirror from $2400 + IRQC uint32 Generic IRQ counter + IQL1 uint32 Generic IRQ latch + IQL2 uint32 Generic IRQ latch + IRQA uint8 Generic IRQ on/off register. + PBL uint8[4] List of 4 8KB ROM banks paged in at $8000-$FFFF + CBL uint8[8] List of 8 1KB VROM banks page in at $0000-$1FFF(PPU). + + For FDS games(incomplete): + + Name: Type: Description: + + DDT uint8[65500] Disk data for side x(0-3). + FDSR uint8[0x8000] 32 KB of work RAM + CHRR uint8[0x2000] 8 KB of CHR RAM + IRQC uint32 IRQ counter + IQL1 uint32 IRQ latch + IRQA uint8 IRQ on/off. + + WAVE uint8[64] Carrier waveform data. + MWAV uint8[32] Modulator waveform data. + AMPL uint8[2] Amplitude data. diff --git a/branches/fceux-2.2.2/documentation/fm2.txt b/branches/fceux-2.2.2/documentation/fm2.txt new file mode 100644 index 00000000..37ec4969 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/fm2.txt @@ -0,0 +1,79 @@ +FM2 is ascii plain text. +It consists of several key-value pairs followed by an inputlog section. +The inputlog section can be identified by its starting with a | (pipe). +The inputlog section terminates at eof. +Newlines may be \r\n or \n + +Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text. +Value text is always terminated by a newline, which the value text will not include. +The value text is parsed differently depending on the type of the key. +The key-value pairs may be in any order, except that the first key must be version. + +Integer keys (also used for booleans, with a 1 or 0) will have a value that is a simple integer not to exceed 32bits + - version (required) - the version of the movie file format; for now it is always 3 + - emuVersion (required) - the version of the emulator used to produce the movie + - rerecordCount (optional) - the rerecord count + - palFlag (bool) (optional) - true if the movie uses pal timing + - fourscore (bool) (*note C) - true if a fourscore was used + - port0, port1 (*note C) - indicates the types of input devices. Supported values are: + SI_GAMEPAD = 1, + SI_ZAPPER = 2 + - port2 (required) - indicates the type of the FCExp port device which was attached. Supported values are: + SIFC_NONE = 0 + +String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines. + - romFilename (required) - the name of the file used to record the movie + - comment (optional) - simply a memo. + by convention, the first token in the comment value is the subject of the comment. + by convention, subsequent comments with the same subject will have their ordering preserved and may be used to approximate multiline comments. + by convention, the author of the movie should be stored in comment(s) with a subject of: author + +Hex string keys (used for binary blobs) will have a value that is like 0x0123456789ABCDEF... + - romChecksum (required) - the MD5 hash of the rom which was used to record the movie + - savestate (optional) - a fcs savestate blob, in case a movie was recorded from savestate + +GUID keys have a value which is in the standard guid format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B + - guid (required) a unique identifier for a movie, generated when the movie is created, which is used when loading a savestate to make sure it belongs to the current movie. + +The inputlog section consists of lines beginning and ending with a | (pipe). +The fields are as follows, except as noted in note C. +|c|port0|port1|port2| + +field c is a variable length decimal integer which is a bitfield corresponding to miscellaneous input states which are valid at the start of the frame. +Current values for this are +MOVIECMD_RESET = 1 + +the format of port0, port1, port2 depends on which types of devices were attached. +SI_GAMEPAD: + the field consists of eight characters which constitute a bitfield. + any character other than ' ' or '.' means that the button was pressed. + by convention, the following mnemonics will be used in a column to remind us of which button corresponds to which column: + RLDUTSBA (Right,Left,Down,Up,sTart,Select,B,A) + This seemingly arbitrary ordering is actually the reverse of the originally-desired order, which was screwed up in the first release of FCEUX. So we have preserved it for compatibility's sake. +SI_ZAPPER: + XXX YYY B Q Z + XXX: %03d, the x position of the mouse + YYY: %03d, the y position of the mouse + B: %1d, 1 if the mouse button is pressed; 0 if not + Q: %1d, an internal value used by the emulator's zapper code (this is most unfortunate..) + Z: %d, a variable-length decimal integer; an internal value used by the emulator's zapper code (this is even more unfortunate..) +SIFC_NONE: + this field must always be empty. + +* Notes * +A. There is no key-value pair that indicates the length of the movie. This must be read by scanning the inputlog and counting the number of lines. + +B. All movies start from power-on, unless a savestate key-value is present. + +C. +If a fourscore is used, then port0 and port1 are irrelevant and ignored. +The input types must all be gamepads, and the inputlog will be in the following format: + {player1 player2 player3 player4} +|c|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2| +If a fourscore is not used, then port0 and port1 are required. + +D. The emulator uses these framerate constants + - NTSC: 1008307711 /256/65536 = 60.099822938442230224609375 + - PAL : 838977920 /256/65536 = 50.00698089599609375 + +E. The author of this format is curious about what people think of it. Please let him know! \ No newline at end of file diff --git a/branches/fceux-2.2.2/documentation/porting.txt b/branches/fceux-2.2.2/documentation/porting.txt new file mode 100644 index 00000000..63d2b4fc --- /dev/null +++ b/branches/fceux-2.2.2/documentation/porting.txt @@ -0,0 +1,289 @@ +FCE Ultra Porting Guide + Updated: October 4, 2003 + +*Incomplete* + + +***Driver-supplied functions: + These functions will only be called after the driver code calls + FCEUI_LoadGame() or FCEUI_Emulate(). + +void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count); + Called by FCE Ultra on every emulated frame. This function should + perform the following three things(in any order): + + 1. + Update the data pointed to by the pointers passed to + FCEUI_SetInput() and FCEUI_SetInputFC(). + 2. + Copy contents of XBuf over to video memory(or whatever needs to be + done to make the contents of XBuf visible on screen). + Each line is 256 pixels(and bytes) in width, and there can be 240 + lines. The pitch for each line is 272 bytes. + XBuf will be 0 if the symbol FRAMESKIP is defined and this frame + was skipped. + 3. + Write the contents of "Buffer" to the sound device. "Count" is the + number of samples to write. Only the lower 16-bits of each + sample are used, so each 32-bit sample in "Buffer" can be converted to + signed 16-bit by dropping the upper 16 bits. + When sound was disabled for the frame, "Count" will be 0. + +void FCEUD_SetPalette(uint8 index, uint8 r, uint8 g, uint8 b); + Set palette entry "index" to specified RGB values(value: min=0, max=255). + +void FCEUD_GetPalette(uint8 index, uint8 *r, uint8 *g, uint8 *b); + Get palette entry "index" data. + +void FCEUD_PrintError(char *s); + Print/Display an error message string pointed to by "s". + +void FCEUD_Message(char *s); + Display a status message string. + + +int FCEUD_NetworkConnect(void); + Initialize a network connection. Return 0 if an error occurs. + +int FCEUD_GetDataFromClients(uint8 *data); + +/* Sends 5 bytes of data to all clients. */ +int FCEUD_SendDataToClients(uint8 *data); + +/* Sends 1 byte of data to server, and maybe a command. */ +int FCEUD_SendDataToServer(uint8 v, uint8 cmd); + +/* Gets 5 bytes of data from the server. This function must block. */ +int FCEUD_GetDataFromServer(uint8 *data); + +void FCEUD_NetworkClose(void); + Close the network connection. + + +***FCE Ultra functions(called by the driver code): + The FCEUI_* functions may only be called before FCEUI_Emulate() is + called or after it returns and before it is called again, or after the + following functions are called and before they return: + FCEUD_Update(); + Calling the FCEUI_* functions at any other time may result in + undefined behavior. + +void FCEUI_SetInput(int port, int type, void *ptr, int attrib); + "port" can be either 0 or 1, and corresponds to the physical + ports on the front of a NES. + + "type" may be: + SI_NONE - No input on this port. + SI_GAMEPAD - Standard NES gamepad + SI_ZAPPER - "Zapper" light gun. + SI_POWERPAD - Power-pad mat. + SI_ARKANOID - Arkanoid controller. + +void FCEUI_SetInputFC(int type, void *ptr, int attrib); + Special Famicom devices. + "type" may be: + SIFC_NONE - No input here. + SIFC_ARKANOID - Arkanoid controller. + SIFC_SHADOW - "Space Shadow" gun. + SIFC_4PLAYER - Famicom 4-player adapter + SIFC_FKB - Family Keyboard + +void FCEUI_DisableFourScore(int s); + Disables four-score emulation if s is nonzero. + +void FCEUI_SetSnapName(int a); + 0 to order screen snapshots numerically(0.png), 1 to order them file + base-numerically(smb3-0.png). + +void FCEUI_DisableSpriteLimitation(int a); + Disables the 8-sprite-per-scanline limitation of the NES if "a" + is nonzero. The default behavior is the limitation is enabled. + +void FCEUI_SaveExtraDataUnderBase(int a); + If "a" is nonzero, save extra non-volatile game data(battery-backed + RAM) under FCE Ultra's base directory. Otherwise, the behavior is + to save it under the same directory the game is located in(this is + the default behavior). + +FCEUGI *FCEUI_LoadGame(char *name); + Loads a new file. "name" is the full path of the file to load. + Returns 0 on failure, or a pointer to data type "FCEUGI": + See file "git.h" for more details on this structure. + +int FCEUI_Initialize(void); + Allocates and initializes memory. Should only be called once, before + any calls to other FCEU functions. + +void FCEUI_SetBaseDirectory(void); + Specifies the base FCE Ultra directory. This should be called + immediately after FCEUI_Initialize() and any time afterwards. + +void FCEUI_SetDirOverride(int which, char *n); + + FCEUIOD_CHEATS - Cheats + FCEUIOD_MISC - Miscellaneous stuff(custom game palettes) + FCEUIOD_NV - Non-volatile game data(battery backed RAM) + FCEUIOD_SNAPS - Screen snapshots + FCEUIOD_STATE - Save states + +void FCEUI_Emulate(void); + Enters the emulation loop. This loop will be exited when FCEUI_CloseGame() + is called. This function obviously shouldn't be called if FCEUI_LoadGame() + wasn't called or FCEUI_CloseGame() was called after FCEUI_LoadGame(). + +void FCEUI_CloseGame(void); + Closes the loaded game and frees all memory used to load it. + Also causes FCEUI_Emulate() to return. + +void FCEUI_ResetNES(void); +void FCEUI_PowerNES(void); + +void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall); + Sets the first(minimum is 0) and last(NOT the last scanline plus one; + maximum is 239) scanlines of background data to draw, for both NTSC + emulation mode and PAL emulation mode. + + Defaults are as if this function were called with the variables set + up as follows: + ntscf=8, ntscl=231, palf=0, pall=239 + +void FCEUI_SetNetworkPlay(int type); + Sets status of network play according to "type". If type is 0, + then network play is disabled. If type is 1, then we are server. + If type is 2, then we are a client. + +void FCEUI_SelectState(int w); + Selects the state "slot" to save to and load from. + +void FCEUI_SaveState(void); + Saves the current virtual NES state from the "slot" selected by + FCEUI_SelectState(). + +void FCEUI_LoadState(void); + Loads the current virtual NES state from the "slot" selected by + FCEUI_SelectState(). + +void FCEUI_SaveSnapshot(void); + Saves a screen snapshot. + +void FCEUI_DispMessage(char *msg); + Displays a short, one-line message using FCE Ultra's built-in + functions and ASCII font data. + +int32 FCEUI_GetDesiredFPS(void); + Returns the desired FPS based on whether NTSC or PAL emulation is + enabled, shifted left by 24 bits(this is necessary because the real + FPS value is not a whole integer). This function should only be + necessary if sound emulation is disabled. + +int FCEUI_GetCurrentVidSystem(int *slstart, int *slend); + Convenience function(not strictly necessary, but reduces excessive code + duplication); returns currently emulated video system + (0=NTSC, 1=PAL). It will also set the variables pointed to by slstart + and slend to the first and last scanlines to be rendered, respectively, + if slstart and slend are not 0. + +void FCEUI_GetNTSCTH(int *tint, int *hue); +void FCEUI_SetNTSCTH(int n, int tint, int hue); + +int FCEUI_AddCheat(char *name, uint16 addr, uint8 val); + Adds a RAM cheat with the specified name to patch the address "addr" + with the value "val". + +int FCEUI_DelCheat(uint32 which); + Deletes the specified(by number) cheat. + +void FCEUI_ListCheats(void (*callb)(char *name, uint16 a, uint8 v)); + Causes FCE Ultra to go through the list of all cheats loaded for + the current game and call callb() for each cheat with the cheat + information. + +int FCEUI_GetCheat(uint32 which, char **name, int32 *a, int32 *v, int *s); + Gets information on the cheat referenced by "which". + +int FCEUI_SetCheat(uint32 which, char *name, int32 a, int32 v, int s); + Sets information for the cheat referenced by "which". + +void FCEUI_CheatSearchBegin(void); + Begins the cheat search process. Current RAM values are copied + to a buffer to later be processed by the other cheat search functions. + +void FCEUI_CheatSearchEnd(int type, int v1, int v2); + Searches the buffer using the search method specified by "type" + and the parameters "v1" and "v2". + +int32 FCEUI_CheatSearchGetCount(void); + Returns the number of matches from the cheat search. + +void FCEUI_CheatSearchGet(void (*callb)(uint16 a, int last, int current)); + +void FCEUI_CheatSearchGetRange(int first, int last, void (*callb)(uint16 a, int last, int current)); + Like FCEUI_CheatSearchGet(), but you can specify the first and last + matches to get. + +void FCEUI_CheatSearchShowExcluded(void); + Undos any exclusions of valid addresses done by FCEUI_CheatSearchEnd(). + +void FCEUI_CheatSearchSetCurrentAsOriginal(void); + Copies the current values in RAM into the cheat search buffer. + +void FCEUI_MemDump(uint16 a, int32 len, void (*callb)(uint16 a, uint8 v)); + Callback to dump memory. + +void FCEUI_DumpMem(char *fname, uint32 start, uint32 end); + Dump memory to filename fname. + +void FCEUI_MemPoke(uint16 a, uint8 v, int hl); + Write a byte to specified address. Set hl to 1 to attempt to store + it to ROM("high-level" write). + +void FCEUI_NMI(void); + Triggers(queues) an NMI. + +void FCEUI_IRQ(void); + Triggers(queues) an IRQ. + +void FCEUI_Disassemble(uint16 a, int (*callb)(uint16 a, char *s)); + Text disassembly. + +void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi); + Get current interrupt vectors. + + +***Recognized defined symbols: + +The following defined symbols affect the way FCE Ultra is compiled: + + C80x86 + - Include 80x86 inline assembly in AT&T syntax, if available. Also + use special 80x86-specific C constructs if the compiler is compatible. + + FRAMESKIP + - Include frame skipping code. + + NETWORK + - Include network play code. + + FPS + - Compile code that prints out a number when FCE Ultra exits + that represents the average fps. + + ZLIB + - Compile support for compressed PKZIP-style files AND gzip compressed + files. "unzip.c" will need to be compiled and linked in by you if + this is defined(it's in the zlib subdirectory). + + LSB_FIRST + - Compile code to expect that variables that are greater than 8 bits + in size are stored Least Significant Byte First in memory. + + PSS_STYLE x + - Sets the path separator style to the integer 'x'. Valid styles are: + 1: Only "/" - For UNIX platforms. + 2: Both "/" and "\" - For Windows and MSDOS platforms. + 3: Only "\" - For ???. + 4: Only ":" - For Apple IIs ^_^. + + + + diff --git a/branches/fceux-2.2.2/documentation/protocol.txt b/branches/fceux-2.2.2/documentation/protocol.txt new file mode 100644 index 00000000..0122e498 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/protocol.txt @@ -0,0 +1,90 @@ +FCE Ultra 0.91+ network play protocol. +Description v 0.0.1 +-------------------------------------- + +In FCE Ultra, all data is sent to the server, and then the server +distributes, every emulated frame(60hz on NTSC), the collated data to the +clients. + +The server should not block when it is receiving UDP data from the clients. +If no UDP data is available, then just go on. + +The clients MUST block until the input data packet comes on every emulated +frame. + +Packets from the server to the client are sent out over both TCP and UDP. +Duplicate packets should be discarded. Out-of-order packets can either +be cached, or discarded(what I recommend, as caching code gets a little +complex and wouldn't yield any benefit from what I've observed). +In the case of client->server UDP communications, the server should just use +the data from the UDP packet that has the highest packet number count, and +the server should then set its internal incoming packet counter to that +number(to prevent out-of-order packets from totally screwing up user input). + +The "magic number"(used with UDP packets) is meant to reduce the chance of a hostile remote host +from disrupting the network play, without resorting to using extreme amounts +of network bandwidth. The server generates the magic number, and it is best +if the magic number is as random as possible. +UDP packets received with an incorrect magic number should be discarded, of +course. + +Initialization, server->client: + +uint32 Local UDP port(what the server is listening on). +uint32 Player number(0-3) for client. +uint32 Magic number(for UDP). + + +Initialization, client->server + +uint32 Local UDP port(that the client is listening on). + + +Structure of UDP packet data: + +uint32 CRC32 - Includes magic number, packet counter, and + data. For reference, CRC32 is calculated + with the zlib function crc32(). +uint32 Magic number +uint32 Packet counter(linear, starts at 0). +uint8[variable] Data. + +Structure of tcp packet data: + +uint32 Packet counter(" "). +uint8[variable] Data. + + + +Data format of server->client communications: + + uint8[4] Controller data + uint8 Command byte. 0 if no command. Otherwise(in decimal): + + 1 Select FDS disk side. + 2 Insert/eject FDS disk. + 10 Toggle VS Unisystem dip switch editing. + 11 ... 18 Toggle VS Unisystem dip switches. + 19 Insert VS Unisystem coin. + 30 Reset NES. + 31 Power toggle NES. + 40 Save state(not implemented correctly). + 41 Load state(not implemented correctly). + 42 ... 50 Select save state slot(minus 42). + + Special message communications occurs if the "Packet counter" is + 0xFFFFFFFF(only with TCP): + + uint32 Length of text data, minus the null character(the null + character is sent, though). + uint8[variable] Text data. Convert all characters <32 to space, and + then display the text message(it's one line) as is. + +Structure of client->server communication: + + uint8 Controller data(for this client). + + Over tcp channel, a text message can be sent. It is one line, + null terminated(remember the data and parse it and display it and + distribute it to the clients once the null byte is received). + Maximum size of message(including the null byte) should be 256 bytes. diff --git a/branches/fceux-2.2.2/documentation/snes9x-lua.html b/branches/fceux-2.2.2/documentation/snes9x-lua.html new file mode 100644 index 00000000..13ab2bb5 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/snes9x-lua.html @@ -0,0 +1,417 @@ + +Snes9x Lua Library +This is the API from DeHackEd's version of Lua in ZSnes. At the time of writing, FCUE's Lua was based on this API.

+ +

Basics

+Your code will be run alongside the emulator's main loop. You code should +probably look roughly like this: +
+
-- initialization goes here
+while condition do
+   -- Code executed once per frame
+ 
+   snes9x.frameadvance()
+
+
+end
+
+-- Cleanup goes here
+

+ +When Lua execution starts, the emulator will be automatically unpaused if it +is currently paused. If so, it will automatically be paused when the script +exits, voluntarily or otherwise. This allows you to have a script execute +some work on your behalf and then when it exits the emulator will be paused, +ready for the player to continue use. + +
+

Base library

+Handy little things that are not put into a class. Mostly binary operations right now. +
+ +
int AND(int arg1, int arg2, ..., int argn)
+Since Lua lacks binary operators and since binary will come up with memory manipulation, +I offer this function. Output is the binary AND of all its parameters together. +Minimum 1 argument, all integers. +

+At a binary level, the AND of two binary bits is 1 if both inputs are 1, and the output +is 0 in any other case. Commonly used to test if a bit is set by ANDing with a number +with only the desired position set to 1. +


+ +
int OR(int arg1, int arg2, ..., int argn)
+The OR of two bits is 1 if either of the inputs is 1, and 0 if both inputs are 0. +Typically used to force a single bit to 1, regardless of its current state. +
+ +
int XOR(int arg1, int arg2, ..., int argn)
+XOR flips bits. An even number of 1s yields a zero and an odd number of 1s yields a 1. +Commonly used to toggle a bit by XORing. +
+ +
int BIT(int which)
+Returns a number with only the given bit set. which is in the range from 0 to 15 since the +SNES is a 16 bit system. BIT(15) == 32768 +

+... Actually this system will accept a range of 0 to 30, but none of the memory access functions will +accept it, so you're on your own for those. 31 is not allowed for now due to signedness risking wreaking havoc. +

snes9x

+ +Basic master emulator control. +
+ +
snes9x.speedmode(string mode)
+Selects the speed mode snes9x should run at while Lua is in control of frame advance. It must be set to one of the following: + +In modes other than normal, pause will have no effect. + +
+ +
snes9x.frameadvance()
+Snes9x executes one frame. This function pauses until the execution finishes. General system slowdown +when running at normal speed (ie. sleeping for 1/60 seconds) also occurs here when not in high speed mode. +

+Warning: Due to the way the code is written, the times this function may be called is restricted. Norably, +it must not be called within a coroutine or under a [x]pcall(). You can use coroutines for +your own purposes, but they must not call this function themselves. Furthermore, this function cannot be called from any +"registered" callback function. An error will occur if you do. +

+


+ +
snes9x.message(string msg)
+Displays the indicated string on the user's screen. snes9x.speedmode("normal") is probably the only way this is of any use, +lest the message not be displayed at all +
+ +
snes9x.pause()
+v0.05+ only
+Pauses the emulator. This function blocks until the user unpauses. +

+This function is allowed to be called from outside a frame boundary (ie. when it is not allowed to call +snes9x.frameadvance). In this case, the function does not wait for the pause because you can't pause +midway through a frame. Your code will continue to execute and the emulator will be paused at the end +of the current frame. If you are at a frame boundary, this function acts a lot like snes9x.frameadvance() +plus the whole pause thing. +

+It might be smart to reset the speed mode to "normal" if it is not already so. +


+ +
snes9x.wait()
+v0.06+ only
+Skips emulation of the next frame. If your script needs to wait for something to happen before proceeding (eg. +input from another application) then you should call this. Otherwise the GUI might jam up and your +application will not appear to be responding and need termination. It is expected that this function +will pause the script for 1/60 of a second without actually running the emulator itself, though it tends to be +OS-dependent right now. +

+If you're not sufficiently confused yet, think of this as pausing for one frame. +

+If you need to do a large amount of calculations -- so much that you risk setting off the rampant script +warning, just call this function every once in a while. +

+Might want to avoid using this if you don't need to. If the emulator is running at normal speed, paused +and the user presses frame-advance, they might be confused when nothing happens. +

+

memory

+ +Memory access and manipulation. + +
int memory.readbyte(int address)
+int memory.readword(int address)
+Reads a number of bits (8 or 16) and returns the memory contents. The address must be a fully qualified +memory address. The RAM range is 0x7e0000 through 0x7fffff, but you may use any memory address, including +the ROM data itself. +
+
int memory.readbytesigned(int address)
+int memory.readwordsigned(int address)
v0.04+ only
+ +Same as its counterparts, except numbers will be treated as signed. Numbers larger than 127 for bytes and +32767 for words will be translated into the correct negative numbers. For reference, an alternate formula +is to subtract 256 for bytes and 65536 for words from any number equal to or larger than half that number. +For example, a byte at 250 becomes 250-256 = -6. +

+ +
memory.writebyte(int address, int value)
+memory.writebyte(int address, int value)
+ +Writes a number of bits (8 or 16) to the indicated memory address. The address MUST be in the range of +0x7e0000 through 0x7fffff. + +
+
memory.register(int address, function func)
+When the given memory address is written to (range must be 0x7e0000 to 0x7fffff), the given function will be +called. The execution of the CPU will be paused mid-frame to call the given function. +

+Only one function can be registered with a memory address. 16 bit writes will only trigger the lower address +listener. There is no distinction between 8 and 16 bit writes. func may be nil in order to +delete a function from listening. +

+Code called may not call snes9x.frameadvance() or any savestate save/load functions, and any button +manipulation results are undefined. Those actions are only meaningful at frame boundaries. + + +

+

joypad

+ +Access to the gamepads. Note that Lua makes some joysticks do strange things. +Setting joypad inputs causes the user input for that frame to be ignored, but +only for that one frame. +

+Joypads are numbered 1 to 5. +

+Joypad buttons are selected by use of a table with special keys. The table +has keys start, select, up, down, left, right, A, B, X, Y, L, R. Note the +case is sensetive. Buttons that are pressed are set to a non-nil value +(use of the integer 1 is just a convention). Note that "false" is valid, +but discouraged as testing for logical true will fail. +

+Currently reading input from a movie file is not possible, but +a movie will record button presses from Lua. +

table joypad.read(int which)
+Returns a table indicating which buttons are pressed by the user. +This is probably the only way to get input to the script by the user. +This is always user input, even if the joypads have been set by joypad.set. +
+
joypad.set(int which, table buttons)
+Sets the buttons to be pressed. These choices will be made in place of +what the user is pressing during the next frame advance; they are then +discarded, so this must be called once every frame, even if you just want to +keep the same buttons pressed for several frames. + +

+

savestate

+Control over the savestate process. Savestate objects are opaque structures +that represent non-player accessible states (except for the functions that +return "official" savesates). Such an object is garbage collectable, in which +case the savestate is no longer usable. Recycling of existing savestate objects +is highly recommended for disk space concerns lest the garbage collector +grow lazy.

+Each object is basically a savestate file. Anonymous savestates are saved to +your temp directory. + +


+
object savestate.create(int userslot=nil)
+Creates a savestate object for use. If the userslot argument +is given, the state will be accessible via the associated +F-key (F1 through F12 are 1 through 12). If not specified or +nil, an anonymous savestate is created that only Lua can access. +

+Each call to savestate.create() (without parameters) returns +a unique savestate. As such, if you discard the contents of a variable +containing an important savestate, you've just shot yourself in the foot. +

+An object may be used freely once created, saved over and loaded whenever. +

+It is an error to load an anonymous (non-player accessbile) state that +has not been saved yet, since it's empty. +

+Each savestate uses about 120 KB of disk space and the random filename generator +has its limits with regards to how many filenames it can generate. Don't go too +overboard. If you need more than 1000 savestates, maybe you should rethink +your tehcnique. (The actual windows limit is about 32768, Linux is higher). +


savestate.save(object state)
+Saves the current state to the given object. Causes an error if something goes horribly +wrong, or if called within any "registered" callback function. +
savestate.load(object state)
+Loads the given state. Throws an error for all the same bad things that might happen. + +
+
function savestate.registersave(function save)
+v0.06+ only
+Registers a function to be called on a savestate event. This includes both calls to +savestate.save() and users pressing buttons. The function will be called without +parameters. +

+The function called is permitted to return any number of string and number values. +Lua lets you do this by simply writing return 1, 2, 3, "four and five", 6.2, integerVar +

+These variables must be numeric or string. They will be saved into the savestate itself +and returned back to the application via savestate.registerload() should the state ever be loaded +again later. +

+Only one function can be registered. Registering a second function will cause the first function +to be returned back by savestate.registersave() before being discarded. +

+Savestates created with this mechanism are likely to break some savestate features in other emulators. +Don't be surprised if savestates from this version don't work on others if you enable all those +fancy features. Compatible savestates are created if there is no registered save function, or if +the save function returns no parameters at all. +


+
function savestate.registerload(function load)
+v0.06+ only
+The companion to savestate.registersave, this function registers a function to be called during +a load. The function will be passed parameters -- exactly those returned by the function +registered for a save. If the savestate contains no saved data for your script, the function +will be called without parameters. +

+Concept code: + +

function saveState() .... end
+function loadState(arg1, arg2, ...)  ... end
+
+savestate.registersave(saveState)
+savestate.registerload(loadState)
+
+
+-- Behind the scenes
+local saved_variables 
+
+
+
+-- User presses savestate
+saved_variables = { saveState() } -- All return values saved
+
+
+-- Time passes
+-- ...
+
+
+-- User presses loadstate
+loadState(unpack(saved_variables))
+
+
+

Recommendations for registered savestates

+ +

+

movie

+Access to movie information. +
+

+
int movie.framecount()
+Returns the current frame count, or nil if no movie is running. +
+
string movie.mode()
+Returns "record", "playback", or nil, depending on the current movie. +
+
movie.rerecordcounting(boolean counting)
+Select whether rerecording should be counted. If set to false, you can do +all the brute force work you want without inflating the rerecord count. +

+This will automatically be set to true after a script finishes running, so +don't worry about messing up the rerecord count for the player. +


+
movie.stop()
+Stops movie recording/playback. I'm not sure why you'd want to do that, but you can. +
+ +

gui

+0.03+ only
+The ability to draw on the surface of the screen is a long sought feature. The surface is 256x239 pixels +(256x224 most of the time though) with (0,0) being in the top-left corner of the screen. +

+The SNES uses a 16 bit colour system. Red and blue both use 5 bits (0 through 31) while green uses +6 bits (0 through 63), in place of the usual 0 to 255 range. If you want to construct your own exact colours, +multiply your red value by 2048, your green value by 32 and leave your blue value untouched. Add these all +together to get a valid colour. Bright red would be 31*2048 = 63488, for example. +

+Some strings are accepted. HTML style encoding such as "#00ff00" for green is accepted. Some simple strings such +as "red", "green", "blue", "white" and "black" are also accepted. +

+The transparent colour is 1 (a VERY dark blue, which is probably not worth using in place of black) or the string +"clear". Remove drawn elements using this colour. +

+Output is delayed by a frame. The graphics are drawn on a separate buffer and then overlayed on the image +during the next refresh, which means allowing for a frame to execute. Also, the buffer is cleared after drawing, +so if you want to keep something on screen, you must keep drawing it on each frame. +

+It is an error to draw outside the drawing area. gdoverlay is the only exception to this rule - images will +be clipped to the visible area. +


+
r,g,b = gui.getpixel(int x, int y)
+Returns the pixel on the indicated coordinate. (0,0) is the top-left corner and (255, 223) is the typical bottom-right corner, +though (255,238) is allowed. The return value range is (0,0,0) to (31,63,31). You get the actual screen surface before +any damage is done by your drawing. Well, unless you call snes9x.wait() in which case your damage is applied and the SNES +hardware doesn't get a chance to draw a new frame. :) +
+
gui.drawpixel(int x, int y, type colour)
+Draw a single pixel on the screen. +
+
gui.drawline(int x1, int y1, int x2, int y2, type colour)
+Draw a line between the two indicated positions. +
+
gui.drawbox(int x1, int y1, int x2, int y2, type colour)
+Draw a box going through the indicated opposite corners. +
+
gui.text(int x, int y, string message)
+Write text on the screen at the indicated position. +

+The coordinates determine the top-left corner of the box that the text fits in. +The font is the same one as the snes9x messages, and you can't control colours or anything. :( +

+The minimum y value is 9 for the font's height and each letter will take around 8 pixels of width. +Text that exceeds the viewing area will be cut short, so ensuring your text will fit would be wise. + +


+
string gui.gdscreenshot()
+0.04+ only
+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 snes9x 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 colours. +

+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 gdimage)
+0.04+ only
+Overlays the given image on top of the screen with the top-left corner in the given screen location. +Transparency is not fully supported -- a pixel must be 100% transparent to actually leave +a hole in the overlayed image or else it will be treated as opaque.

+Naturally, the format for input is the gd file format, version 1. The image MUST be truecolour. + +

+The image will be clipped to fit into the screen area. +


+
gui.transparency(int strength)
+0.04+ only
+Transparency mode. A value of 0 means opaque; a value of 4 means invisible (useful option that one). +As for 1 through 3, I'll let you figure those out.

+All image drawing (including gui.gdoverlay) will have the given transparency level applied from that point +on. Note that drawing on the same point over and over will NOT build up to a higher opacity level. +


+
function gui.register(function func)
+0.04+ only
+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 a pain in the butt. +

This function is not necessarily complicated to use, but it's not recommended to users +new to the whole scripting thing. +

+You may pass nil as the parameter to kill off a registered function. The old function (if any) will be +returned. +


+
string function gui.popup(string message, [string type = "ok"])
+v0.05+ only
+Pops up a dialog to the user with a message, and returns after the user acknowledges the dialog. +type may be any of "ok", "yesno", "yesnocancel". The return value will be "yes", "no" or "cancel" +as the case may be. "ok" is a waste of effort. +

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

\ No newline at end of file diff --git a/branches/fceux-2.2.2/documentation/tech/cpu/4017.txt b/branches/fceux-2.2.2/documentation/tech/cpu/4017.txt new file mode 100644 index 00000000..25cb8393 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/cpu/4017.txt @@ -0,0 +1,97 @@ +This is an email posted to nesdev by Ki a while back. I have removed one +line at the end regarding the B flag of the cpu(the information was +incorrect, which Ki noted in a later email). + +-------------------------------------------------------------------------------- + + By reading Brad's NESSOUND document, we know that there is a +"frame counter" in the NES/FC APU. I would like to post +some more on this. + + The frame counter is reset upon any write to $4017. It is +reset at system power-on as well, but is NOT reset upon +system reset. + + Thanks to Samus Aran, we now know the exact period of the +PPU's single frame. In another words, we are now sure that +the NMI occurs on every 29780 2/3 CPU cycles. + + However, the APU's single frame is NOT 29780 2/3 CPU cycles. +What I mean by "APU's single frame" here is that it is the +number of CPU cycles taken between the frame IRQs. + + The APU's single frame seems to be: + + 1789772.727... / 60 = 29829 6/11 [CPU CYCLE] + + Below is a simple diagram which shows the difference +in periods of the PPU's single frame and the APU's. + + + RESET 29780 2/3 CPU CYCLES NMI +PPU |------------------------------------------| + | 29829 6/11 CPU CYCLES IRQ +APU |----------|----------|----------|----------| + + + Note that if you write $00 to $4017 on every NMI, the frame +IRQ would NEVER go off even if it is enabled. This is because +the the period of NMI is slightly shorter than the period of +the frame IRQ. This causes the frame counter to be reset +before the frame IRQ goes off. + +When you write zero to bit 7 of $4017, the frame counter will +be reset, and the first sound update will be done after 7457 CPU +cycles (i.e. 29829/4). 2nd update will be done 7457 after that, +same goes for 3rd update and 4th update, but the frame IRQ occurs +on 4th update, resetting the frame counter as well. + +When you write 1 to bit 7 of $4017, the frame counter will be +reset, but the first sound update will occur at the same time. +2nd, 3rd, and 4th update will be done after 7457, 14914, 22371 +CPU cycles after the first update respectively, but the 5th +update will be 14914 cycles after the 4th update. This causes +sound output to last 1.25 times longer than that of bit 7 = 0. + + +$4017W: + +o when the MSB of $4017 is 0: + +bit7=0 + |---------|---------|---------|---------|---------|---------|---- + 1st 2nd 3rd 4th 5th(1st) 6th(2nd) + + +o when the MSB of $4017 is 1: + +bit7=1 + |---------|---------|---------|-------------------|---------|---- + 1st 2nd 3rd 4th 5th(1st) 6th(2nd) + + +On 1st, 3rd, 5th, ... updates, the envelope decay and the +linear counter are updated. + +On 2nd, 4th, 6th, ... updates, the envelope decay, the +linear counter, the length counter, and the frequency sweep +are updated. +---- + + The original info was provided by goroh, and verified by me. +However, it could still be wrong. Please tell me if you +find anything wrong. +---- + +(Correction from my last posting) + + I have checked once again and it turned out that the frame IRQ +was NOT disabled upon system reset. What actually prevented the +frame IRQ to occur after system reset was, in fact, the I flag. +I checked this flag shortly after system reset (right after stack +pointer was initialized), and the flag was 1, although I never +executed "sei" after reset. Therefore the I flag of the PR2A03G +is 1 on system reset. + + Thanks Matthew Conte and Samus Aran for pointing out the +inaccuracy. diff --git a/branches/fceux-2.2.2/documentation/tech/cpu/dmc.txt b/branches/fceux-2.2.2/documentation/tech/cpu/dmc.txt new file mode 100644 index 00000000..c33f4de8 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/cpu/dmc.txt @@ -0,0 +1,235 @@ +Delta modulation channel tutorial 1.0 +Written by Brad Taylor + +Last updated: August 20th, 2000. + +All results were obtained by studying prior information available (from +nestech 1.00, and postings on NESDev from miscellanious people), and through +a series of experiments conducted by me. Results aquired by individuals +prior to my reverse-engineering have been double checked, and final results +have been confirmed. Credit is due to those individual(s) who contributed +any information in regards to the DMC. + +Description +----------- + +The delta modulation channel (DMC) is a complex digital network of counters +and registers used to produce analog sound. It's primary function is to play +"samples" from memory, and have an internal counter connected to a digital +to analog converter (DAC) updated accordingly. The channel is able to be +assigned a pointer to a chunk of memory to be played. At timed intervals, +the DMC will halt the 2A03 (NES's CPU) for 1 clock cycle to retrieve the +sample to pe played. This method of playback will be refered to here on as +direct memory access (DMA). Another method of playback known as pulse code +modulation (PCM) is available by the channel, which requires the constant +updating of one of the DMC's memory-mapped registers. + +Registers +--------- + +The DMC has 5 registers assigned to it. They are as follows: + +$4010: play mode and DMA frequency +$4011: delta counter +$4012: play code's starting address +$4013: length of play code +$4015: DMC/IRQ status + +Note that $4015 is the only R/W register. All others are write only (attempt +to read them will most likely result in a returned 040H, due to heavy +capacitance on the NES's data bus). + +$4010 - Play mode and DMA frequency +----------------------------------- +This register is used to control the frequency of the DMA fetches, and to +control the playback mode. + +Bits +---- +6-7 this is the playback mode. + + 00 - play DMC sample until length counter reaches 0 (see $4013) + x1 - loop the DMC sample (x = immaterial) + 10 - play DMC sample until length counter reaches 0, then generate a CPU +IRQ + +Looping (playback mode "x1") will have the chunk of memory played over and +over, until the channel is disabled (via $4015). In this case, after the +length counter reaches 0, it will be reloaded with the calculated length +value of $4013. + +If playback mode "10" is chosen, an interrupt will be dispached when the +length counter reaches 0 (after the sample is done playing). There are 2 +ways to acknowledge the DMC's interrupt request upon recieving it. The first +is a write to this register ($4010), with the MSB (bit 7) cleared (0). The +second is any write to $4015 (see the $4015 register description for more +details). + +If playback mode "00" is chosen, the sample plays until the length counter +reaches 0. No interrupt is generated. + +5-4 appear to be unused + +3-0 this is the DMC frequency control. Valid values are from 0 - F. The +value of this register determines how many CPU clocks to wait before the DMA +will fetch another byte from memory. The # of clocks to wait -1 is initially +loaded into an internal 12-bit down counter. The down counter is then +decremented at the frequency of the CPU (1.79MHz). The channel fetches the +next DMC sample byte when the count reaches 0, and then reloads the count. +This process repeats until the channel is disabled by $4015, or when the +length counter has reached 0 (if not in the looping playback mode). The +exact number of CPU clock cycles is as follows: + +value CPU +written clocks octave scale +------- ------ ------ ----- +F 1B0 8 C +E 240 7 G +D 2A0 7 E +C 350 7 C +B 400 6 A +A 470 6 G +9 500 6 F +8 5F0 6 D +7 6B0 6 C +6 710 5 B +5 7F0 5 A +4 8F0 5 G +3 A00 5 F +2 AA0 5 E +1 BE0 5 D +0 D60 5 C + +The octave and scale values shown represent the DMC DMA clock cycle rate +equivelant. These values are merely shown for the music enthusiast +programmer, who is more familiar with notes than clock cycles. + +Every fetched byte is loaded into a internal 8-bit shift register. The shift +register is then clocked at 8x the DMA frequency (which means that the CPU +clock count would be 1/8th that of the DMA clock count), or shifted at +3 +the octave of the DMA (same scale). The data shifted out of the register is +in serial form, and the least significant bit (LSB, or bit 0) of the fetched +byte is the first one to be shifted out (then bit 1, bit 2, etc.). + +The bits shifted out are then fed to the UP/DOWN control pin of the internal +delta counter, which will effectively have the counter increment it's +retained value by one on "1" bit samples, and decrement it's value by one on +"0" bit samples. This counter is clocked at the same frequency of the shift +register's. + +The counter is only 6 bits in size, and has it's 6 outputs tied to the 6 MSB +inputs of a 7 bit DAC. The analog output of the DAC is then what you hear +being played by the DMC. + +Wrap around counting is not allowed on this counter. Instead, a "clipping" +behaviour is exhibited. If the internal value of the counter has reached 0, +and the next bit sample is a 0 (instructing a decrement), the counter will +take no action. Likewise, if the counter's value is currently at -1 +(111111B, or 03FH), and the bit sample to be played is a 1, the counter will +not increment. + + +$4011 - Delta counter load register +----------------------------------- + +bits +---- +7 appears to be unused +1-6 the load inputs of the internal delta counter +0 LSB of the DAC + +A write to this register effectively loads the internal delta counter with a +6 bit value, but can be used for 7 bit PCM playback. Bit 0 is connected +directly to the LSB (bit 0) of the DAC, and has no effect on the internal +delta counter. Bit 7 appears to be unused. + +This register can be used to output direct 7-bit digital PCM data to the +DMC's audio output. To use this register for PCM playback, the programmer +would be responsible for making sure that this register is updated at a +constant rate. The rate is completely user-definable. For the regular CD +quality 44100 Hz playback sample rate, this register would have to be +written to approximately every 40 CPU cycles (assuming the 2A03 is running @ +1.79 MHz). + + +$4012 - DMA address load register +---------------------------- + +This register contains the initial address where the DMC is to fetch samples +from memory for playback. The effective address value is $4012 shl 6 or +0C000H. This register is connected to the load pins of the internal DMA +address pointer register (counter). The counter is incremented after every +DMA byte fetch. The counter is 15 bits in size, and has addresses wrap +around from $FFFF to $8000 (not $C000, as you might have guessed). The DMA +address pointer register is reloaded with the initial calculated address, +when the DMC is activated from an inactive state, or when the length counter +has arrived at terminal count (count=0), if in the looping playback mode. + + +$4013 - DMA length register +--------------------------- + +This register contains the length of the chunk of memory to be played by the +DMC, and it's size is measured in bytes. The value of $4013 shl 4 is loaded +into a 12 bit internal down counter, dubbed the length counter. The length +counter is decremented after every DMA fetch, and when it arrives at 0, the +DMC will take action(s) based on the 2 MSB of $4010. This counter will be +loaded with the current calculated address value of $4013 when the DMC is +activated from an inactive state. Because the value that is loaded by the +length counter is $4013 shl 4, this effectively produces a calculated byte +sample length of $4013 shl 4 + 1 (i.e. if $4013=0, sample length is 1 byte +long; if $4013=FF, sample length is $FF1 bytes long). + + +$4015 - DMC status +------------------ + +This contains the current status of the DMC channel. There are 2 read bits, +and 1 write bit. + +bits +---- +7(R) DMC's IRQ status (1=CPU IRQ being caused by DMC) +4(R) DMC is currently enabled (playing a stream of samples) +4(W) enable/disable DMC (1=start/continue playing a sample;0=stop playing) + +When an IRQ goes off inside the 2A03, Bit 7 of $4015 can tell the interrupt +handler if it was caused by the DMC hardware or not. This bit will be set +(1) if the DMC is responsible for the IRQ. Of course, if your program has no +other IRQ-generating hardware going while it's using the DMC, then reading +this register is not neccessary upon IRQ generation. Note that reading this +register will NOT clear bit 7 (meaning that the DMC's IRQ will still NOT be +acknowledged). Also note that if the 2 MSB of $4010 were set to 10, no IRQ +will be generated, and bit 7 will always be 0. + +Upon generation of a IRQ, to let the DMC know that the software has +acknowledged the /IRQ (and to reset the DMC's internal IRQ flag), any write +out to $4015 will reset the flag, or a write out to $4010 with the MSB set +to 0 will do. These practices should be performed inside the IRQ handler +routine. To replay the same sample that just finished, all you need to do is +just write a 1 out to bit 4 of $4015. + +Bit 4 of $4015 reports the real-time status of the DMC. A returned value of +1 denotes that the channel is currently playing a stream of samples. A +returned value of 0 indicates that the channel is inactive. If the +programmer needed to know when a stream of samples was finished playing, but +didn't want to use the IRQ generation feature of the DMC, then polling this +bit would be a valid option. + +Writing a value to $4015's 4th bit has the effect of enabling the channel +(start, or continue playing a stream of samples), or disabling the channel +(stop all DMC activity). Note that writing a 1 to this bit while the channel +is currently enabled, will have no effect on counters or registers internal +to the DMC. + +The conditions that control the time the DMC will stay enabled are +determined by the 2 MSB of $4010, and register $4013 (if applicable). + + +System Reset +------------ + +On system reset, all 7 used bits of $4011 are reset to 0, the IRQ flag is +cleared (disabled), and the channel is disabled. All other registers will +remain unmodified. + diff --git a/branches/fceux-2.2.2/documentation/tech/cpu/nessound-4th.txt b/branches/fceux-2.2.2/documentation/tech/cpu/nessound-4th.txt new file mode 100644 index 00000000..c592d2ed --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/cpu/nessound-4th.txt @@ -0,0 +1,551 @@ +******************************************* +*2A03 sound channel hardware documentation* +******************************************* +Brad Taylor (big_time_software@hotmail.com) + + 4th release: February 19th, 2K3 + + + All results were obtained by studying prior information available (from nestech 1.00, and postings on NESDev from miscellanious people), and through a series of experiments conducted by me. Results acquired by individuals prior to my reverse-engineering have been double checked, and final results have been confirmed. Credit is due to those individual(s) who contributed miscellanious information in regards to NES sound channel hardware. Such individuals are: + + Goroh + Memblers + FluBBa + Izumi + Chibi-Tech + Quietust + SnowBro + + Kentaro Ishihara (Ki) is responsible for posting (on the NESdev mailing list) differrences in the 2 square wave channels, including the operation of 2A03 hardware publically undocumented (until now) such as the frame IRQ counter, and it's ties with sound hardware. Goroh had originally discovered some of this information, and Ki confirmed it. + + A special thanks goes out to Matthew Conte, for his expertise on pseudo-random number generation (amoung other things), which allowed for the full reverse engineering of the NES's noise channel to take place. Without his help, I would still be trying to find a needle in a haystack, as far as the noise's method of pseudo-random number generation goes. Additionally, his previous findings / reverse engineering work on the NES's sound hardware really got the ball of NES sound emulation rolling. If it weren't for Matt's original work, this document wouldn't exist. + + +**************** +* Introduction * +**************** + The 2A03 (NES's integrated CPU) has 4 internal channels to it that have the ability to generate semi-analog sound, for musical playback purposes. These channels are 2 square wave channels, one triangle wave channel, and a noise generation channel. This document will go into full detail on every aspect of the operation and timing of the mentioned sound channels. + + +******************* +* Channel details * +******************* + Each channel has different characteristics to it that make up it's operation. + + The square channel(s) have the ability to generate a square wave frequency in the range of 54.6 Hz to 12.4 KHz. It's key features are frequency sweep abilities, and output duty cycle adjustment. + + The triangle wave channel has the ability to generate an output triangle wave with a resolution of 4-bits (16 steps), in the range of 27.3 Hz to 55.9 KHz. The key features this channel has is it's analog triangle wave output, and it's linear counter, which can be set to automatically disable the channel's sound after a certain period of time has gone by. + + The noise channel is used for producing random frequencys, which results in a "noisey" sounding output. Output frequencys can range anywhere from 29.3 Hz to 447 KHz. It's key feature is it's pseudo- random number generator, which generates the random output frequencys heard by the channel. + + +***************** +* Frame counter * +***************** + The 2A03 has an internal frame counter. The purpose of it is to generate the various low frequency signals (60, 120, 240 Hz, and 48, 96, 192 Hz) required to clock several of the sound hardware's counters. It also has the ability to generate IRQ's. + + The smallest unit of timing the frame counter operates around is 240Hz; all other frequencies are generated by multiples of this base frequency. A clock divider of 14915 (clocked at twice the CPU speed) is used to get 240Hz (this was the actual measured ratio). + + ++---------------+ +|$4017 operation| ++---------------+ + Writes to register $4017 control operation of both the clock divider, and the frame counter. + + - Any write to $4017 resets both the frame counter, and the clock divider. Sometimes, games will write to this register in order to synchronize the sound hardware's internal timing, to the sound routine's timing (usually tied into the NMI code). The frame IRQ is slightly longer than the PPU's, so you can see why games would desire this syncronization. + + - bit 7 of $4017 controls the frame counter's divide rate. Every time the counter cycles (reaches terminal count (0)), a frame IRQ will be generated, if enabled by clearing bit 6 of $4017. $4015.6 holds the status of the frame counter IRQ; it will be set if the frame counter is responsible for the interrupt. + +$4017.7 divider frame IRQ freq. +------- ------- --------------- +0 4 60 +1 5 48 + + On 2A03 reset, both bits of $4017 (6 & 7) will be cleared, enabling frame IRQ's off the hop. The reason why the existence of frame IRQ's are generally unknown is because the 6502's maskable interrupt is disabled on reset, and this blocks out the frame IRQ's. Most games don't use any IRQ-generating hardware in general, therefore they don't bother enabling maskable interrupts. + + Note that the IRQ line will be held down by the frame counter until it is acknowledged (by reading $4015). Before this, the 6502 will generate an IRQ *every* time interrupts are enabled (either by CLI or RTI), since the IRQ design on the 6502 is level-triggered, and not edge. If you've written a program that does not read $4015 in the IRQ handler, and you execute CLI, the processor will immediately go into a infinite IRQ call-return loop. + + ++-----------------------+ +|Frame counter operation| ++-----------------------+ + Depending on the status of $4017.7, the frame counter will follow 2 different count sequences. These sequences determine when sound hardware counters will be clocked. The sequences are initialized immediately following any write to $4017. + +$4017.7 sequence +------- -------- +0 4, 0,1,2,3, 0,1,2,3,..., etc. +1 0,1,2,3,4, 0,1,2,3,4,..., etc. + + During count sequences 0..3, the linear (triangle) and envelope decay (square & noise) counters recieve a clock for each count. This means that both these counters are clocked once immediately after $4017.7 is written with a value of 1. + + Count sequences 1 & 3 clock (update) the frequency sweep (square), and length (all channels) counters. Even though the length counter's smallest unit of time counting is a frame, it seems that it is actually being clocked twice per frame. That said, you can consider the length counters to contain an extra stage to divide this clock signal by 2. + + No aforementioned sound hardware counters are clocked on count sequence #4. You should now see how this causes the 96, and 192 Hz signals to be generated when $4017.7=1. + + The rest of the document will describe the operation of the sound channels using the $4017.7=0 frequencies (60, 120, and 240 Hz). For $4017.7=1 operation, replace those frequencies with 48, 96, and 192 Hz (respectively). + + +************************ +* Sound hardware delay * +************************ + After resetting the 2A03, the first time any sound channel(s) length counter contains a non-zero value (channel is enabled), there will be a 2048 CPU clock cycle delay before any of the sound hardware is clocked. After the 2K clock cycles go by, the NES sound hardware will be clocked normally. This phenomenon only occurs prior to a system reset, and only occurs during the first 2048 CPU clocks after the activation of any of the 4 basic sound channels. + + The information in regards to this delay is only provided to keep this document accurate with all information that is currently known about the 2A03's sound hardware. I haven't done much tests on the behaviour of this delay (mainly because I don't care, as I view it as a inconvenience anyway), so this information should be taken with a grain of salt. + + +************************ +* Register Assignments * +************************ + The sound hardware internal to the 2A03 has been designated these special memory addresses in the CPU's memory map. + +$4000-$4003 Square wave 1 +$4004-$4007 Square wave 2 (identical to the first, except for upward frequency sweeps (see "sweep unit" section)) +$4008-$400B Triangle +$400C-$400F Noise +$4015 Channel enable / length/frame counter status +$4017 frame counter control + + Note that $4015 (and $4017, but is unrelated to sound hardware) are the only R/W registers. All others are write only (attempt to read them will most likely return the last byte on the bus (usually 040H), due to heavy capacitance on the NES's data bus). Reading a "write only" register, will have no effect on the specific register, or channel. + + Every sound channel has 4 registers affiliated with it. The description of the register sets are as follows: + ++----------------+ +| Register set 1 | ++----------------+ + +$4000(sq1)/$4004(sq2)/$400C(noise) bits +--------------------------------------- +0-3 volume / envelope decay rate +4 envelope decay disable +5 length counter clock disable / envelope decay looping enable +6-7 duty cycle type (unused on noise channel) + +$4008(tri) bits +--------------- +0-6 linear counter load register +7 length counter clock disable / linear counter start + + ++----------------+ +| Register set 2 | ++----------------+ + +$4001(sq1)/$4005(sq2) bits +-------------------------- +0-2 right shift amount +3 decrease / increase (1/0) wavelength +4-6 sweep update rate +7 sweep enable + +$4009(tri)/$400D(noise) bits +---------------------------- +0-7 unused + + ++----------------+ +| Register set 3 | ++----------------+ + +$4002(sq1)/$4006(sq2)/$400A(Tri) bits +------------------------------------- +0-7 8 LSB of wavelength + +$400E(noise) bits +----------------- +0-3 playback sample rate +4-6 unused +7 random number type generation + + ++----------------+ +| Register set 4 | ++----------------+ + +$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits +-------------------------------------------------- +0-2 3 MS bits of wavelength (unused on noise channel) +3-7 length counter load register + + ++--------------------------------+ +| length counter status register | ++--------------------------------+ + +$4015(read) +----------- +0 square wave channel 1 +1 square wave channel 2 +2 triangle wave channel +3 noise channel +4 DMC (see "DMC.TXT" for details) +5-6 unused +7 IRQ status of DMC (see "DMC.TXT" for details) + + ++-------------------------+ +| channel enable register | ++-------------------------+ + +$4015(write) +------------ +0 square wave channel 1 +1 square wave channel 2 +2 triangle wave channel +3 noise channel +4 DMC channel (see "DMC.TXT" for details) +5-7 unused + + +************************ +* Channel architecture * +************************ + This section will describe the internal components making up each individual channel. Each component will then be described in full detail. + +Device Triangle Noise Square +------ -------- ------ ------ +triangle step generator X +linear counter X +programmable timer X X X +length counter X X X +4-bit DAC X X X +volume/envelope decay unit X X +sweep unit X +duty cycle generator X +wavelength converter X +random number generator X + + ++-------------------------+ +| Triangle step generator | ++-------------------------+ + This is a 5-bit, single direction counter, and it is only used in the triangle channel. Each of the 4 LSB outputs of the counter lead to one input on a corresponding mutually exclusive XNOR gate. The 4 XNOR gates have been strobed together, which results in the inverted representation of the 4 LSB of the counter appearing on the outputs of the gates when the strobe is 0, and a non-inverting action taking place when the strobe is 1. The strobe is naturally connected to the MSB of the counter, which effectively produces on the output of the XNOR gates a count sequence which reflects the scenario of a near- ideal triangle step generator (D,E,F,F,E,D,...,2,1,0,0,1,2,...). At this point, the outputs of the XNOR gates will be fed into the input of a 4-bit DAC. + + This 5-bit counter will be halted whenever the Triangle channel's length or linear counter contains a count of 0. This results in a "latching" behaviour; the counter will NOT be reset to any definite state. + + On system reset, this counter is loaded with 0. + + The counter's clock input is connected directly to the terminal count output pin of the 11-bit programmable timer in the triangle channel. As a result of the 5-bit triangle step generator, the output triangle wave frequency will be 32 times less than the frequency of the triangle channel's programmable timer is set to generate. + + ++----------------+ +| Linear counter | ++----------------+ + The linear counter is only found in the triangle channel. It is a 7-bit presettable down counter, with a decoded output condition of 0 available (not exactly the same as terminal count). Here's the bit assignments: + +$4008 bits +---------- +0-6 bits 0-6 of the linear counter load register (NOT the linear counter itself) +7 linear counter start + + The counter is clocked at 240 Hz (1/4 framerate), and the calculated length in frames is 0.25*N, where N is the 7-bit loaded value. The counter is always being clocked, except when 0 appears on the output of the counter. At this point, the linear counter & triangle step counter clocks signals are disabled, which results in both counters latching their current state (the linear counter will stay at 0, and the triangle step counter will stop, and the channel will be silenced due to this). + + The linear counter has 2 modes: load, and count. When the linear counter is in load mode, it essentially becomes transparent (i.e. whatever value is currently in, or being written to $4008, will appear on the output of the counter). Because of this, no count action can occur in load mode. When the mode changes from load to count, the counter will now latch the value currently in it, and start counting down from there. In the count mode, the current value of $4008 is ignored by the counter (but still retained in $4008). Described below is how the mode of the linear counter is set: + + +Writes to $400B +--------------- +cur mode +--- ---- +1 load +0 load (on next linear counter clock), count + + Cur is the current state of the MSB of $4008. + + +Writes to $4008 +--------------- +old new mode +--- --- ---- +0 X count +1 0 no change (during the CPU write cycle), count +1 1 no change + + Old and new represent the state(s) of the MSB of $4008. Old is the value being replaced in the MSB of $4008 on the write, and new is the value replacing the old one. + + "no change" indicates that the mode of the linear counter will not change from the last. + + Note that writes to $400B when $4008.7=0 only loads the linear counter with the value in $4008 on the next *linear* counter clock (and NOT at the end of the CPU write cycle). This is a correction from older versions of this doc. + + ++--------------------+ +| Programmable timer | ++--------------------+ + The programmable timer is a 11-bit presettable down counter, and is found in the square, triangle, and noise channel(s). The bit assignments are as follows: + +$4002(sq1)/$4006(sq2)/$400A(Tri) bits +------------------------------------- +0-7 represent bits 0-7 of the 11-bit wavelength + +$4003(sq1)/$4007(sq2)/$400B(Tri) bits +------------------------------------- +0-2 represent bits 8-A of the 11-bit wavelength + + Note that on the noise channel, the 11 bits are not available directly. See the wavelength converter section, for more details. + + The counter has automatic syncronous reloading upon terminal count (count=0), therefore the counter will count for N+1 (N is the 11-bit loaded value) clock cycles before arriving at terminal count, and reloading. This counter will typically be clocked at the 2A03's internal 6502 speed (1.79 MHz), and produces an output frequency of 1.79 MHz/(N+1). The terminal count's output spike length is typically no longer than half a CPU clock. The TC signal will then be fed to the appropriate device for the particular sound channel (for square, this terminal count spike will lead to the duty cycle generator. For the triangle, the spike will be fed to the triangle step generator. For noise, this signal will go to the random number generator unit). + + ++----------------+ +| Length counter | ++----------------+ + The length counter is found in all sound channels. It is essentially a 7-bit down counter, and is conditionally clocked at a frequency of 60 Hz. + + When the length counter arrives at a count of 0, the counter will be stopped (stay on 0), and the appropriate channel will be silenced. + + The length counter clock disable bit, found in all the channels, can also be used to halt the count sequence of the length counter for the appropriate channel, by writing a 1 out to it. A 0 condition will permit counting (unless of course, the counter's current count = 0). Location(s) of the length counter clock disable bit: + +$4000(sq1)/$4004(sq2)/$400C(noise) bits +--------------------------------------- +5 length counter clock disable + +$4008(tri) bits +--------------- +7 length counter clock disable + + To load the length counter with a specified count, a write must be made out to the length register. Location(s) of the length register: + +$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits +-------------------------------------------------- +3-7 length + + The 5-bit length value written, determines what 7-bit value the length counter will start counting from. A conversion table here will show how the values are translated. + + +-----------------------+ + | bit3=0 | + +-------+---------------+ + | |frames | + |bits +-------+-------+ + |4-6 |bit7=0 |bit7=1 | + +-------+-------+-------+ + |0 |05 |06 | + |1 |0A |0C | + |2 |14 |18 | + |3 |28 |30 | + |4 |50 |60 | + |5 |1E |24 | + |6 |07 |08 | + |7 |0D |10 | + +-------+-------+-------+ + + +---------------+ + | bit3=1 | + +-------+-------+ + |bits | | + |4-7 |frames | + +-------+-------+ + |0 |7F | + |1 |01 | + |2 |02 | + |3 |03 | + |4 |04 | + |5 |05 | + |6 |06 | + |7 |07 | + |8 |08 | + |9 |09 | + |A |0A | + |B |0B | + |C |0C | + |D |0D | + |E |0E | + |F |0F | + +-------+-------+ + + The length counter's real-time status for each channel can be attained. A 0 is returned for a zero count status in the length counter (channel's sound is disabled), and 1 for a non-zero status. Here's the bit description of the length counter status register: + +$4015(read) +----------- +0 length counter status of square wave channel 1 +1 length counter status of square wave channel 2 +2 length counter status of triangle wave channel +3 length counter status of noise channel +4 length counter status of DMC (see "DMC.TXT" for details) +5 unknown +6 frame IRQ status +7 IRQ status of DMC (see "DMC.TXT" for details) + + Writing a 0 to the channel enable register will force the length counters to always contain a count equal to 0, which renders that specific channel disabled (as if it doesn't exist). Writing a 1 to the channel enable register disables the forced length counter value of 0, but will not change the count itself (it will still be whatever it was prior to the writing of 1). + + Bit description of the channel enable register: + +$4015(write) +------------ +0 enable square wave channel 1 +1 enable square wave channel 2 +2 enable triangle wave channel +3 enable noise channel +4 enable DMC channel (see "DMC.TXT" for details) +5-7 unknown + + Note that all 5 used bits in this register will be set to 0 upon system reset. + + ++-----------+ +| 4-bit DAC | ++-----------+ + This is just a standard 4-bit DAC with 16 steps of output voltage resolution, and is used by all 4 sound channels. On the 2A03, square wave 1 & 2 are mixed together, and are available via pin 1. Triangle & noise are available on pin 2. + + These analog outputs require a negative current source, to attain linear symmetry on the various output voltage levels generated by the channel(s) (moreover, to get the sound to be audible). Instead of current sources, the NES uses external 100 ohm pull-down resistors. This results in the output waveforms having some linear asymmetry (i.e., as the desired output voltage increases on a linear scale, the actual outputted voltage increases less and less each step). + + The side effect of this is that the DMC's 7-bit DAC port ($4011) is able to indirectly control the volume (somewhat) of both triangle & noise channels. While I have not measured the voltage asymmetery, others on the NESdev messageboards have posted their findings. The conclusion is that when $4011 is 0, triangle & noise volume outputs are at maximum. When $4011 = 7F, the triangle & noise channel outputs operate at only 57% total volume. + + The odd thing is that a few games actually take advantage of this "volume" feature, and write values to $4011 in order to regulate the amplitude of the triangle wave channel's output. + + ++------------------------------+ +| Volume / envelope decay unit | ++------------------------------+ + The volume / envelope decay hardware is found only in the square wave and noise channels. + +$4000(sq1)/$4004(sq2)/$400C(noise) +---------------------------------- +0-3 volume / envelope decay rate +4 envelope decay disable +5 envelope decay looping enable + + When the envelope decay disable bit (bit 4) is set (1), the current volume value (bits 0-3) is sent directly to the channel's DAC. However, depending on certain conditions, this 4-bit volume value will be ignored, and a value of 0 will be sent to the DAC instead. This means that while the channel is enabled (producing sound), the output of the channel (what you'll hear from the DAC) will either be the 4-bit volume value, or 0. This also means that a 4-bit volume value of 0 will result in no audible sound. These conditions are as follows: + + - When hardware in the channel wants to disable it's sound output (like the length counter, or sweep unit (square channels only)). + + - On the negative portion of the output frequency signal coming from the duty cycle / random number generator hardware (square wave channel / noise channel). + + When the envelope decay disable bit is cleared, bits 0-3 now control the envelope decay rate, and an internal 4-bit down counter (hereon the envelope decay counter) now controls the channel's volume level. "Envelope decay" is used to describe the action of the channel's audio output volume starting from a certain value, and decreasing by 1 at a fixed (linear) rate (which produces a "fade-out" sounding effect). This fixed decrement rate is controlled by the envelope decay rate (bits 0-3). The calculated decrement rate is 240Hz/(N+1), where N is any value between $0-$F. + + When the channel's envelope decay counter reaches a value of 0, depending on the status of the envelope decay looping enable bit (bit 5, which is shared with the length counter's clock disable bit), 2 different things will happen: + +bit 5 action +----- ------ +0 The envelope decay count will stay at 0 (channel silenced). +1 The envelope decay count will wrap-around to $F (upon the next clock cycle). The envelope decay counter will then continue to count down normally. + + Only a write out to $4003/$4007/$400F will reset the current envelope decay counter to a known state (to $F, the maximum volume level) for the appropriate channel's envelope decay hardware. Otherwise, the envelope decay counter is always counting down (by 1) at the frequency currently contained in the volume / envelope decay rate bits (even when envelope decays are disabled (setting bit 4)), except when the envelope decay counter contains a value of 0, and envelope decay looping (bit 5) is disabled (0). + + ++------------+ +| Sweep unit | ++------------+ + The sweep unit is only found in the square wave channels. The controls for the sweep unit have been mapped in at $4001 for square 1, and $4005 for square 2. + + The controls + ------------ + Bit 7 when this bit is set (1), sweeping is active. This results in real-time increasing or decreasing of the the current wavelength value (the audible frequency will decrease or increase, respectively). The wavelength value in $4002/3 ($4006/7) is constantly read & updated by the sweep. Modifying the contents of $4002/3 will be immediately audible, and will result in the sweep now starting from this new wavelength value. + + Bits 6-4 These 3 bits represent the sweep refresh rate, or the frequency at which $4002/3 is updated with the new calculated wavelength. The refresh rate frequency is 120Hz/(N+1), where N is the value written, between 0 and 7. + + Bit 3 This bit controls the sweep mode. When this bit is set (1), sweeps will decrease the current wavelength value, as a 0 will increase the current wavelength. + + Bits 2-0 These bits control the right shift amount of the new calculated sweep update wavelength. Code that shows how the sweep unit calculates a new sweep wavelength is as follows: + +bit 3 +----- +0 New = Wavelength + (Wavelength >> N) +1 New = Wavelength - (Wavelength >> N) (minus an additional 1, if using square wave channel 1) + + where N is the the shift right value, between 0-7. + + Note that in decrease mode, for subtracting the 2 values: + 1's compliment (NOT) is being used for square wave channel 1 + 2's compliment (NEG) is being used for square wave channel 2 + + This information is currently the only known difference between the 2 square wave channels. + + On each sweep refresh clock, the Wavelength register will be updated with the New value, but only if all 3 of these conditions are met: + + - bit 7 is set (sweeping enabled) + - the shift value (which is N in the formula) does not equal to 0 + - the channel's length counter contains a non-zero value + + Notes + ----- + There are certain conditions that will cause the sweep unit to silence the channel, and halt the sweep refresh clock (which effectively stops sweep action, if any). Note that these conditions pertain regardless of any sweep refresh rate values, or if sweeping is enabled/disabled (via bit 7). + + - an 11-bit wavelength value less than $008 will cause this condition + - if the sweep unit is currently set to increase mode, the New calculated wavelength value will always be tested to see if a carry (bit $B) was generated or not (if sweeping is enabled, this carry will be examined before the Wavelength register is updated) from the shift addition calculation. If carry equals 1, the channel is silenced, and sweep action is halted. + + ++----------------------+ +| Duty cycle generator | ++----------------------+ + The duty cycle generator takes the fequency produced from the 11-bit programmable timer, and uses a 4 bit counter to produce 4 types of duty cycles. The output frequency is then 1/16 that of the programmable timer. The duty cycle hardware is only found in the square wave channels. The bit assignments are as follows: + +$4000(sq1)/$4004(sq2) +--------------------- +6-7 Duty cycle type + + duty (positive/negative) +val in clock cycles +--- --------------- +00 2/14 +01 4/12 +10 8/ 8 +11 12/ 4 + + Where val represents bits 6-7 of $4000/$4004. + + This counter is reset when the length counter of the same channel is written to (via $4003/$4007). + + The output frequency at this point will now be fed to the volume/envelope decay hardware. + + ++----------------------+ +| Wavelength converter | ++----------------------+ + The wavelength converter is only used in the noise channel. It is used to convert a given 4-bit value to an 11-bit wavelength, which then is sent to the noise's own programmable timer. Here is the bit descriptions: + +$400E bits +---------- +0-3 The 4-bit value to be converted + + Below is a conversion chart that shows what 4-bit value will represent the 11-bit wavelength to be fed to the channel's programmable timer: + +value octave scale CPU clock cycles (11-bit wavelength+1) +----- ------ ----- -------------------------------------- +0 15 A 002 +1 14 A 004 +2 13 A 008 +3 12 A 010 +4 11 A 020 +5 11 D 030 +6 10 A 040 +7 10 F 050 +8 10 C 065 +9 9 A 07F +A 9 D 0BE +B 8 A 0FE +C 8 D 17D +D 7 A 1FC +E 6 A 3F9 +F 5 A 7F2 + + Octave and scale information is provided for the music enthusiast programmer who is more familiar with notes than clock cycles. + + ++-------------------------+ +| Random number generator | ++-------------------------+ + The noise channel has a 1-bit pseudo-random number generator. It's based on a 15-bit shift register, and an exclusive or gate. The generator can produce two types of random number sequences: long, and short. The long sequence generates 32,767-bit long number patterns. The short sequence generates 93-bit long number patterns. The 93-bit mode will generally produce higher sounding playback frequencys on the channel. Here is the bit that controls the mode: + +$400E bits +---------- +7 mode + + If mode=0, then 32,767-bit long number sequences will be produced (32K mode), otherwise 93-bit long number sequences will be produced (93-bit mode). + + The following diagram shows where the XOR taps are taken off the shift register to produce the 1-bit pseudo-random number sequences for each mode. + +mode <----- +---- EDCBA9876543210 +32K ** +93-bit * * + + The current result of the XOR will be transferred into bit position 0 of the SR, upon the next shift cycle. The 1-bit random number output is taken from pin E, is inverted, then is sent to the volume/envelope decay hardware for the noise channel. The shift register is shifted upon recieving 2 clock pulses from the programmable timer (the shift frequency will be half that of the frequency from the programmable timer (one octave lower)). + + On system reset, this shift register is loaded with a value of 1. + + +RP2A03E quirk +------------- + I have been informed that revisions of the 2A03 before "F" actually lacked support for the 93-bit looped noise playback mode. While the Famicom's 2A03 went through 4 revisions (E..H), I think that only one was ever used for the front loading NES: "G". Other differences between 2A03 revisions are unknown. + + +EOF \ No newline at end of file diff --git a/branches/fceux-2.2.2/documentation/tech/cpu/nessound.txt b/branches/fceux-2.2.2/documentation/tech/cpu/nessound.txt new file mode 100644 index 00000000..bb6d0598 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/cpu/nessound.txt @@ -0,0 +1,697 @@ +The NES sound channel guide 1.8 +Written by Brad Taylor. +btmine@hotmail.com + +Last updated: July 27th, 2000. + +All results were obtained by studying prior information available (from +nestech 1.00, and postings on NESDev from miscellanious people), and through +a series of experiments conducted by me. Results acquired by individuals +prior to my reverse-engineering have been double checked, and final results +have been confirmed. Credit is due to those individual(s) who contributed +any information in regards to the the miscellanious sound channels wihtin +the NES. + +A special thanks goes out to Matthew Conte, for his expertise on +pseudo-random number generation (amoung other things), which allowed for the +full reverse engineering of the NES's noise channel to take place. Without +his help, I would still be trying to find a needle in a haystack, as far as +the noise's method of pseudo-random number generation goes. Additionally, +his previous findings / reverse engineering work on the NES's sound hardware +really got the ball of NES sound emulation rolling. If it weren't for Matt's +original work, this document wouldn't exist. + +Thanks to Kentaro Ishihara, for his excellent work on finding the difference +in upward frequency sweep between the 2 square wave channels. + +**************** +* Introduction * +**************** + +The 2A03 (NES's integrated CPU) has 4 internal channels to it that have the +ability to generate semi-analog sound, for musical playback purposes. These +channels are 2 square wave channels, one triangle wave channel, and a noise +generation channel. This document will go into full detail on every aspect +of the operation and timing of the mentioned sound channels. + + +******************* +* Channel details * +******************* + +Each channel has different characteristics to it that make up it's +operation. + +The square channel(s) have the ability to generate a square wave frequency +in the range of 54.6 Hz to 12.4 KHz. It's key features are frequency sweep +abilities, and output duty cycle adjustment. + +The triangle wave channel has the ability to generate an output triangle +wave with a resolution of 4-bits (16 steps), in the range of 27.3 Hz to 55.9 +KHz. The key features this channel has is it's analog triangle wave output, +and it's linear counter, which can be set to automatically disable the +channel's sound after a certain period of time has gone by. + +The noise channel is used for producing random frequencys, which results in +a "noisey" sounding output. Output frequencys can range anywhere from 29.3 +Hz to 447 KHz. It's key feature is it's pseudo- random number generator, +which generates the random output frequencys heard by the channel. + + +***************** +* Frame counter * +***************** + +The 2A03 has an internal frame counter. It has the ability to generate 60 Hz +(1/1 framerate), 120 Hz (1/2 framerate), and 240 Hz (1/4 framerate) signals, +used by some of the sound hardware. The 1/4 framerate is calculated by +taking twice the CPU clock speed (3579545.454545 Hz), and dividing it by +14915 (i.e., the divide-by-14915 counter is decremented on the rising AND +falling edge of the CPU's clock signal). + + +************************ +* Sound hardware delay * +************************ + +After resetting the 2A03, the first time any sound channel(s) length counter +contains a non-zero value (channel is enabled), there will be a 2048 CPU +clock cycle delay before any of the sound hardware is clocked. After the 2K +clock cycles go by, the NES sound hardware will be clocked normally. This +phenomenon only occurs prior to a system reset, and only occurs during the +first 2048 CPU clocks for any sound channel prior to a sound channel being +enabled. + +The information in regards to this delay is only provided to keep this +entire document persistently accurate on the 2A03's sound hardware, but may +not be 100% accurate in itself. I haven't done much tests on the behaviour +of this delay (mainly because I don't care, as I view it as a inconvenience +anyway), so that's why I believe there could be some inaccuracies. + + +************************ +* Register Assignments * +************************ + +The sound hardware internal to the 2A03 has been designated these special +memory addresses in the CPU's memory map. + +$4000-$4003 Square wave 1 +$4004-$4007 Square wave 2 (identical to the first, except for upward +frequency sweeps (see "sweep unit" section)) +$4008-$400B Triangle +$400C-$400F Noise +$4015 Channel enable / length counter status + +Note that $4015 is the only R/W register. All others are write only (attempt +to read them will most likely result in a returned 040H, due to heavy +capacitance on the NES's data bus). Reading a "write only" register, will +have no effect on the specific register, or channel. + +Every sound channel has 4 registers affiliated with it. The description of +the register sets are as follows: + ++----------------+ +| Register set 1 | ++----------------+ + +$4000(sq1)/$4004(sq2)/$400C(noise) bits +--------------------------------------- +0-3 volume / envelope decay rate +4 envelope decay disable +5 length counter clock disable / envelope decay looping enable +6-7 duty cycle type (unused on noise channel) + +$4008(tri) bits +--------------- +0-6 linear counter load register +7 length counter clock disable / linear counter start + + ++----------------+ +| Register set 2 | ++----------------+ + +$4001(sq1)/$4005(sq2) bits +-------------------------- +0-2 right shift amount +3 decrease / increase (1/0) wavelength +4-6 sweep update rate +7 sweep enable + +$4009(tri)/$400D(noise) bits +---------------------------- +0-7 unused + + ++----------------+ +| Register set 3 | ++----------------+ + +$4002(sq1)/$4006(sq2)/$400A(Tri) bits +------------------------------------- +0-7 8 LSB of wavelength + +$400E(noise) bits +----------------- +0-3 playback sample rate +4-6 unused +7 random number type generation + + ++----------------+ +| Register set 4 | ++----------------+ + +$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits +-------------------------------------------------- +0-2 3 MS bits of wavelength (unused on noise channel) +3-7 length counter load register + + ++--------------------------------+ +| length counter status register | ++--------------------------------+ + +$4015(read) +----------- +0 square wave channel 1 +1 square wave channel 2 +2 triangle wave channel +3 noise channel +4 DMC (see "DMC.TXT" for details) +5-6 unused +7 IRQ status of DMC (see "DMC.TXT" for details) + + ++-------------------------+ +| channel enable register | ++-------------------------+ + +$4015(write) +------------ +0 square wave channel 1 +1 square wave channel 2 +2 triangle wave channel +3 noise channel +4 DMC channel (see "DMC.TXT" for details) +5-7 unused + + +************************ +* Channel architecture * +************************ + +This section will describe the internal components making up each individual +channel. Each component will then be described in full detail. + +Device Triangle Noise Square +------ -------- ------ ------ +triangle step generator X +linear counter X +programmable timer X X X +length counter X X X +4-bit DAC X X X +volume/envelope decay unit X X +sweep unit X +duty cycle generator X +wavelength converter X +random number generator X + + ++-------------------------+ +| Triangle step generator | ++-------------------------+ + +This is a 5-bit, single direction counter, and it is only used in the +triangle channel. Each of the 4 LSB outputs of the counter lead to one input +on a corresponding mutually exclusive XNOR gate. The 4 XNOR gates have been +strobed together, which results in the inverted representation of the 4 LSB +of the counter appearing on the outputs of the gates when the strobe is 0, +and a non-inverting action taking place when the strobe is 1. The strobe is +naturally connected to the MSB of the counter, which effectively produces on +the output of the XNOR gates a count sequence which reflects the scenario of +a near- ideal triangle step generator (D,E,F,F,E,D,...,2,1,0,0,1,2,...). At +this point, the outputs of the XNOR gates will be fed into the input of a +4-bit DAC. + +This 5-bit counter will be halted whenever the Triangle channel's length or +linear counter contains a count of 0. This results in a "latching" +behaviour; the counter will NOT be reset to any definite state. + +On system reset, this counter is loaded with 0. + +The counter's clock input is connected directly to the terminal count output +pin of the 11-bit programmable timer in the triangle channel. As a result of +the 5-bit triangle step generator, the output triangle wave frequency will +be 32 times less than the frequency of the triangle channel's programmable +timer is set to generate. + + ++----------------+ +| Linear counter | ++----------------+ + +The linear counter is only found in the triangle channel. It is a 7-bit +presettable down counter, with a decoded output condition of 0 available +(not exactly the same as terminal count). Here's the bit assignments: + +$4008 bits +---------- +0-6 bits 0-6 of the linear counter load register (NOT the linear counter +itself) +7 linear counter start + +The counter is clocked at 240 Hz (1/4 framerate), and the calculated length +in frames is 0.25*N, where N is the 7-bit loaded value. The counter is +always being clocked, except when 0 appears on the output of the counter. At +this point, the linear counter & triangle step counter clocks signals are +disabled, which results in both counters latching their current state (the +linear counter will stay at 0, and the triangle step counter will stop, and +the channel will be silenced due to this). + +The linear counter has 2 modes: load, and count. When the linear counter is +in load mode, it essentially becomes transparent (i.e. whatever value is +currently in, or being written to $4008, will appear on the output of the +counter). Because of this, no count action can occur in load mode. When the +mode changes from load to count, the counter will now latch the value +currently in it, and start counting down from there. In the count mode, the +current value of $4008 is ignored by the counter (but still retained in +$4008). Described below is how the mode of the linear counter is set: + +Writes to $400B +--------------- +cur mode +--- ---- +1 load +0 load (during the write cycle), count + +Cur is the current state of the MSB of $4008. + +Writes to $4008 +--------------- +old new mode +--- --- ---- +0 X count +1 0 no change (during the write cycle), count +1 1 no change + +Old and new represent the state(s) of the MSB of $4008. Old is the value +being replaced in the MSB of $4008 on the write, and new is the value +replacing the old one. + +"no change" indicates that the mode of the linear counter will not change +from the last. + + ++--------------------+ +| Programmable timer | ++--------------------+ + +The programmable timer is a 11-bit presettable down counter, and is found in +the square, triangle, and noise channel(s). The bit assignments are as +follows: + +$4002(sq1)/$4006(sq2)/$400A(Tri) bits +------------------------------------- +0-7 represent bits 0-7 of the 11-bit wavelength + +$4003(sq1)/$4007(sq2)/$400B(Tri) bits +------------------------------------- +0-2 represent bits 8-A of the 11-bit wavelength + +Note that on the noise channel, the 11 bits are not available directly. See +the wavelength converter section, for more details. + +The counter has automatic syncronous reloading upon terminal count +(count=0), therefore the counter will count for N+1 (N is the 11-bit loaded +value) clock cycles before arriving at terminal count, and reloading. This +counter will typically be clocked at the 2A03's internal 6502 speed (1.79 +MHz), and produces an output frequency of 1.79 MHz/(N+1). The terminal +count's output spike length is typically no longer than half a CPU clock. +The TC signal will then be fed to the appropriate device for the particular +sound channel (for square, this terminal count spike will lead to the duty +cycle generator. For the triangle, the spike will be fed to the triangle +step generator. For noise, this signal will go to the random number +generator unit). + + ++----------------+ +| Length counter | ++----------------+ + +The length counter is found in all sound channels. It is essentially a 7-bit +down counter, and is conditionally clocked at a frequency of 60 Hz. + +When the length counter arrives at a count of 0, the counter will be stopped +(stay on 0), and the appropriate channel will be silenced. + +The length counter clock disable bit, found in all the channels, can also be +used to halt the count sequence of the length counter for the appropriate +channel, by writing a 1 out to it. A 0 condition will permit counting +(unless of course, the counter's current count = 0). Location(s) of the +length counter clock disable bit: + +$4000(sq1)/$4004(sq2)/$400C(noise) bits +--------------------------------------- +5 length counter clock disable + +$4008(tri) bits +--------------- +7 length counter clock disable + +To load the length counter with a specified count, a write must be made out +to the length register. Location(s) of the length register: + +$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits +-------------------------------------------------- +3-7 length + +The 5-bit length value written, determines what 7-bit value the length +counter will start counting from. A conversion table here will show how the +values are translated. + + +-----------------------+ + | bit3=0 | + +-------+---------------+ + | |frames | + |bits +-------+-------+ + |4-6 |bit7=0 |bit7=1 | + +-------+-------+-------+ + |0 |05 |06 | + |1 |0A |0C | + |2 |14 |18 | + |3 |28 |30 | + |4 |50 |60 | + |5 |1E |24 | + |6 |07 |08 | + |7 |0E |10 | + +-------+-------+-------+ + + +---------------+ + | bit3=1 | + +-------+-------+ + |bits | | + |4-7 |frames | + +-------+-------+ + |0 |7F | + |1 |01 | + |2 |02 | + |3 |03 | + |4 |04 | + |5 |05 | + |6 |06 | + |7 |07 | + |8 |08 | + |9 |09 | + |A |0A | + |B |0B | + |C |0C | + |D |0D | + |E |0E | + |F |0F | + +-------+-------+ + +The length counter's real-time status for each channel can be attained. A 0 +is returned for a zero count status in the length counter (channel's sound +is disabled), and 1 for a non-zero status. Here's the bit description of the +length counter status register: + +$4015(read) +----------- +0 length counter status of square wave channel 1 +1 length counter status of square wave channel 2 +2 length counter status of triangle wave channel +3 length counter status of noise channel +4 length counter status of DMC (see "DMC.TXT" for details) +5-6 unused +7 IRQ status of DMC (see "DMC.TXT" for details) + +Writing a 0 to the channel enable register will force the length counters to +always contain a count equal to 0, which renders that specific channel +disabled (as if it doesn't exist). Writing a 1 to the channel enable +register disables the forced length counter value of 0, but will not change +the count itself (it will still be whatever it was prior to the writing of +1). + +Bit description of the channel enable register: + +$4015(write) +------------ +0 enable square wave channel 1 +1 enable square wave channel 2 +2 enable triangle wave channel +3 enable noise channel +4 enable DMC channel (see "DMC.TXT" for details) +5-7 unused + +Note that all 5 used bits in this register will be set to 0 upon system +reset. + + ++-----------+ +| 4-bit DAC | ++-----------+ + +This is just a standard 4-bit DAC with 16 steps of output voltage +resolution, and is used by all 4 sound channels. + +On the 2A03, square wave 1 & 2 are mixed together, and are available via pin +1. Triangle & noise are available on pin 2. These analog outputs require a +negative current source, to attain linear symmetry on the various output +voltage levels generated by the channel(s) (moreover, to get the sound to be +audible). Since the NES just uses external 100 ohm pull-down resistors, this +results in the output waveforms being of very small amplitude, but with +minimal linearity asymmetry. + + ++------------------------------+ +| Volume / envelope decay unit | ++------------------------------+ + +The volume / envelope decay hardware is found only in the square wave and +noise channels. + +$4000(sq1)/$4004(sq2)/$400C(noise) +---------------------------------- +0-3 volume / envelope decay rate +4 envelope decay disable +5 envelope decay looping enable + +When the envelope decay disable bit (bit 4) is set (1), the current volume +value (bits 0-3) is sent directly to the channel's DAC. However, depending +on certain conditions, this 4-bit volume value will be ignored, and a value +of 0 will be sent to the DAC instead. This means that while the channel is +enabled (producing sound), the output of the channel (what you'll hear from +the DAC) will either be the 4-bit volume value, or 0. This also means that a +4-bit volume value of 0 will result in no audible sound. These conditions +are as follows: + +- When hardware in the channel wants to disable it's sound output (like the +length counter, or sweep unit (square channels only)). + +- On the negative portion of the output frequency signal coming from the +duty cycle / random number generator hardware (square wave channel / noise +channel). + +When the envelope decay disable bit is cleared, bits 0-3 now control the +envelope decay rate, and an internal 4-bit down counter (hereon the envelope +decay counter) now controls the channel's volume level. "Envelope decay" is +used to describe the action of the channel's audio output volume starting +from a certain value, and decreasing by 1 at a fixed (linear) rate (which +produces a "fade-out" sounding effect). This fixed decrement rate is +controlled by the envelope decay rate (bits 0-3). The calculated decrement +rate is 240Hz/(N+1), where N is any value between $0-$F. + +When the channel's envelope decay counter reaches a value of 0, depending on +the status of the envelope decay looping enable bit (bit 5, which is shared +with the length counter's clock disable bit), 2 different things will +happen: + +bit 5 action +----- ------ +0 The envelope decay count will stay at 0 (channel silenced). +1 The envelope decay count will wrap-around to $F (upon the next clock +cycle). The envelope decay counter will then continue to count down +normally. + +Only a write out to $4003/$4007/$400F will reset the current envelope decay +counter to a known state (to $F, the maximum volume level) for the +appropriate channel's envelope decay hardware. Otherwise, the envelope decay +counter is always counting down (by 1) at the frequency currently contained +in the volume / envelope decay rate bits (even when envelope decays are +disabled (setting bit 4)), except when the envelope decay counter contains a +value of 0, and envelope decay looping (bit 5) is disabled (0). + + ++------------+ +| Sweep unit | ++------------+ + +The sweep unit is only found in the square wave channels. The controls for +the sweep unit have been mapped in at $4001 for square 1, and $4005 for +square 2. + +The controls +------------ +Bit 7 when this bit is set (1), sweeping is active. This results in +real-time increasing or decreasing of the the current wavelength value (the +audible frequency will decrease or increase, respectively). The wavelength +value in $4002/3 ($4006/7) is constantly read & updated by the sweep. +Modifying the contents of $4002/3 will be immediately audible, and will +result in the sweep now starting from this new wavelength value. + +Bits 6-4 These 3 bits represent the sweep refresh rate, or the frequency at +which $4002/3 is updated with the new calculated wavelength. The refresh +rate frequency is 120Hz/(N+1), where N is the value written, between 0 and +7. + +Bit 3 This bit controls the sweep mode. When this bit is set (1), sweeps +will decrease the current wavelength value, as a 0 will increase the current +wavelength. + +Bits 2-0 These bits control the right shift amount of the new calculated +sweep update wavelength. Code that shows how the sweep unit calculates a new +sweep wavelength is as follows: + +bit 3 +----- +0 New = Wavelength + (Wavelength >> N) +1 New = Wavelength - (Wavelength >> N) (minus an additional 1, if using +square wave channel 1) + +where N is the the shift right value, between 0-7. + +Note that in decrease mode, for subtracting the 2 values: +1's compliment (NOT) is being used for square wave channel 1 +2's compliment (NEG) is being used for square wave channel 2 + +This information is currently the only known difference between the 2 square +wave channels. + +On each sweep refresh clock, the Wavelength register will be updated with +the New value, but only if all 3 of these conditions are met: + +- bit 7 is set (sweeping enabled) +- the shift value (which is N in the formula) does not equal to 0 +- the channel's length counter contains a non-zero value + +Notes +----- +There are certain conditions that will cause the sweep unit to silence the +channel, and halt the sweep refresh clock (which effectively stops sweep +action, if any). Note that these conditions pertain regardless of any sweep +refresh rate values, or if sweeping is enabled/disabled (via bit 7). + +- an 11-bit wavelength value less than $008 will cause this condition +- if the sweep unit is currently set to increase mode, the New calculated +wavelength value will always be tested to see if a carry (bit $B) was +generated or not (if sweeping is enabled, this carry will be examined before +the Wavelength register is updated) from the shift addition calculation. If +carry equals 1, the channel is silenced, and sweep action is halted. + + ++----------------------+ +| Duty cycle generator | ++----------------------+ + +The duty cycle generator takes the fequency produced from the 11-bit +programmable timer, and uses a 4 bit counter to produce 4 types of duty +cycles. The output frequency is then 1/16 that of the programmable timer. +The duty cycle hardware is only found in the square wave channels. The bit +assignments are as follows: + +$4000(sq1)/$4004(sq2) +--------------------- +6-7 Duty cycle type + + duty (positive/negative) +val in clock cycles +--- --------------- +00 2/14 +01 4/12 +10 8/ 8 +11 12/ 4 + +Where val represents bits 6-7 of $4000/$4004. + +The output frequency at this point will now be fed to the volume/envelope +decay hardware. + + ++----------------------+ +| Wavelength converter | ++----------------------+ + +The wavelength converter is only used in the noise channel. It is used to +convert a given 4-bit value to an 11-bit wavelength, which then is sent to +the noise's own programmable timer. Here is the bit descriptions: + +$400E bits +---------- +0-3 The 4-bit value to be converted + +Below is a conversion chart that shows what 4-bit value will represent the +11-bit wavelength to be fed to the channel's programmable timer: + +value octave scale CPU clock cycles (11-bit wavelength+1) +----- ------ ----- -------------------------------------- +0 15 A 002 +1 14 A 004 +2 13 A 008 +3 12 A 010 +4 11 A 020 +5 11 D 030 +6 10 A 040 +7 10 F 050 +8 10 C 065 +9 9 A 07F +A 9 D 0BE +B 8 A 0FE +C 8 D 17D +D 7 A 1FC +E 6 A 3F9 +F 5 A 7F2 + +Octave and scale information is provided for the music enthusiast programmer +who is more familiar with notes than clock cycles. + + ++-------------------------+ +| Random number generator | ++-------------------------+ + +The noise channel has a 1-bit pseudo-random number generator. It's based on +a 15-bit shift register, and an exclusive or gate. The generator can produce +two types of random number sequences: long, and short. The long sequence +generates 32,767-bit long number patterns. The short sequence generates +93-bit long number patterns. The 93-bit mode will generally produce higher +sounding playback frequencys on the channel. Here is the bit that controls +the mode: + +$400E bits +---------- +7 mode + +If mode=0, then 32,767-bit long number sequences will be produced (32K +mode), otherwise 93-bit long number sequences will be produced (93-bit +mode). + +The following diagram shows where the XOR taps are taken off the shift +register to produce the 1-bit pseudo-random number sequences for each mode. + +mode <----- +---- EDCBA9876543210 +32K ** +93-bit * * + +The current result of the XOR will be transferred into bit position 0 of the +SR, upon the next shift cycle. The 1-bit random number output is taken from +pin E, is inverted, then is sent to the volume/envelope decay hardware for +the noise channel. The shift register is shifted upon recieving 2 clock +pulses from the programmable timer (the shift frequency will be half that of +the frequency from the programmable timer (one octave lower)). + +On system reset, this shift register is loaded with a value of 1. + + diff --git a/branches/fceux-2.2.2/documentation/tech/exp/mmc5-e.txt b/branches/fceux-2.2.2/documentation/tech/exp/mmc5-e.txt new file mode 100644 index 00000000..eab191af --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/exp/mmc5-e.txt @@ -0,0 +1,250 @@ +========= mmc5 infomation ========== +date 1998/05/31 +by goroh +translated May 31, 1998 by Sgt. Bowhack +mail goroh_kun@geocities.co.jp + +5000,5004 ch1,ch2 Pulse Control + bit CCwevvvv + CC Duty Cycle (Positive vs. Negative) + #0:87.5% #1:75.0% #2:50.0% #3:25.0% + w Waveform Hold (e.g. Looping) + 0: Off 1: On + e Envelope Select + 0: Varied 1: Fixed + < e=0 > + vvvv Playback Rate + #0<-fast<--->-slow--> #15 + < e=1 > + vvvv Output Volume + +5002,5006 ch1,ch2 frequency L + bit ffffffff +5003,5007 ch1,ch2 frequency H + bit tttttfff + ttttt sound occurence time + +Objective is to remove the continuous changing of frequency for +square wave setup and do the same to the main part of the square wave +of studying the main part of the famicom. (?- Sgt. Bowhack) + +5010 ch3 synthetic voice business channel + bit -------O + O wave output 0:Off 1:On + +5011 ch4 synthetic voice business channel 2 + bit vvvvvvvv + vvvvvvvv wave size + +5015 sound output channel + bit ------BA + A: ch1 output 1:enable 0:disable + B: ch2 output 1:enable 0:disable + +5100 PRG-page size Setting + bit ------SS + SS PRG-page size + 0: 32k 1:16k 2,3:8k +* Reset is misled the first times for about 8k (?- SB) + +5101 CHR-page size Setting + bit ------SS + SS CHR-page size + 0:8k 1:4k 2:2k 3:1k + +5102 W BBR-RAM Write Protect 1 + bit ------AA +5103 W BBR-RAM Write Protect 2 + bit ------BB + (AA,BB) = (2,1) permitted to write to BBR-RAM only when crowded +*Reset write around becomes prohibited when crowded + +5104 Grafix Mode Setting + $5c00-$5fff decides how it should be used + bit ------MM + #00:Enable only Split Mode + #01:Enable Split Mode & ExGrafix Mode + #02:ExRAM Mode + #03:ExRAM Mode & Write Protect + +Consideration + MMC5 has 2 graphic mode extensions that allow more than 256 characters +on one standard game screen. It uses Split Mode so it can display the +specified CHR-page and scroll position seperate from ExGrafix Mode to +be able to choose a palette, and the other divides it vertically. + +5105 W NameTable Setting + bit ddccbbaa + aa: Select VRAM at 0x2000-0x23ff + bb: Select VRAM at 0x2400-0x27ff + cc: Select VRAM at 0x2800-0x2bff + dd: Select VRAM at 0x2c00-0x2fff + #0:use VRAM 0x000-0x3ff + #1:use VRAM 0x400-0x7ff + #2:use ExVRAM 0x000-0x3ff + #3:use ExNameTable(Fill Mode) + +Consideration + The name table can designate 4 kinds of this resister and be a useful +special quality for this because painting and smashing it with a +character that there is 1 sheet for the remaining sheets can generally +be used. (?-SB) + +5106 W Fill Mode Setting 1 + bit vvvvvvvv + Fill chr-table + For whether it paints or smashes it at any non-designated character + +5107 W Fill Mode Setting 2 + bit ------pp + Whether or not it uses any non-designated palettes + +5113 RAM-page for $6000-$7FFF + bit -----p-- + +5114-5117 Program Bank switch + < page_size=32k > + $5117 [8]-[F] bit pppppp-- + + < page_size=16k > + $5115 [8]-[B] bit ppppppp- + $5117 [C]-[F] bit ppppppp- + + < page_size=8k > + $5114 [8][9] bit pppppppp + $5115 [A][B] bit pppppppp + $5116 [C][D] bit pppppppp + $5117* [E][F] bit pppppppp + +*Reset is around early, Last Page misled + +5120-512b Charactor Bank switch + < page_size=8k > + $5120-$5127 switch to mode A + $5128-$512b switch to mode B + $5127 [0]-[7] modeA + $512b [0]-[7] modeB + + < page_size=4k > + $5120-$5127 switch to mode A + $5128-$512b switch to mode B + $5123 [0]-[3] modeA + $5127 [4]-[7] modeA + $512b [0]-[3],[4]-[7] modeB + + < page_size=2k > + $5120-$5127 switch to mode A + $5128-$512b switch to mode B + $5121 [0]-[1] modeA + $5123 [2]-[3] modeA + $5125 [4]-[5] modeA + $5127 [6]-[7] modeA + $5129 [0]-[1],[4]-[5] modeB + $512b [2]-[3],[6]-[7] modeB + + < page_size=1k > + $5120-$5127 switch to mode A + $5128-$512b switch to mode B + $5120 [0] modeA + $5121 [1] modeA + $5122 [2] modeA + $5123 [3] modeA + $5124 [4] modeA + $5125 [5] modeA + $5126 [6] modeA + $5127 [7] modeA + $5128 [0],[4] modeB + $5129 [1],[5] modeB + $512a [2],[6] modeB + $512b [3],[7] modeB + +Consideration + MMC5 has mode A ,mode B and 2 kinds of CHR-page memory resistors. +They can be used for refreshing it. (?-SB) + +5130 ??? +analyzing it... + +5200 W Split Mode Control 1 + bit Ec-vvvvv + For the E function 0:don't use 1:use + c boundary's side is for using Split Mode extension of graphics + 0: left side 1: right side + vvvvv left boundary is designated with the char. # to count places + +Sample. + 5200 <- #00 + (not?) used yet + 5200 <- #82 + Used for SplitMode GFX extension from left 1-2 character + 5200 <- #c2 + Used for SplitMode GFX extension from the right side 3 chars. + 5200 <- #c0 + Used for SplitMode GFX extension on the whole screen + 5200 <- #d0 + Used for SplitMode GFX extension on the right side of the screen + 5200 <- #90 + Used for SplitMode GFX extension on the left side of the screen + +5201 W SplitMode setup for SplitMode Ext. GFX use 1 + $2005 determines the vertical movement; it can also delay ext. gfx's + vert. movement if necessary. It's written 2 times in bulk in the same + way as it would slip off a grade in $2005 (??-SB) + +5202 W SplitMode setup for SplitMode Ext. GFX use 2 + bit --pppppp + uses vertical division of ext. gfx CHR-page designation + index_size=4k(0x1000byte) +In case it uses a character 0x4000-0x4fff for the ext. gfx in question + $5202 <- 4 + +5203 W scanline break point + For scanline # that it splits and wants to make it designate it in bulk + +5204 WR IRQ enable/disable + W bit I------- + I 1:IRQ Enable 0:IRQ Disable + R bit I------- + I 1:Scanline Hit 0:Scanline not Hit + $5203 is designated as scanline when arrived. + +5205 WR mult input/output +5206 WR mult input/output +($5205in)*($5206in) = $5205,$5206out + +5c00-5fbf ext. gfx business VRAM + shows an attribute of every position character + + + bit PPpppppp + PP: use character palette number + pppppp: use background CHR-PAGE number index=4k + #0-#3F are designations, $0000-$3FFF is CHR-data's range + Use for extension gfx + + + SplitMode uses a Name Table for extension gfx use. + bit pppppppp + pppppppp: use for background char. number designation + + + Used for Extension RAM + +5fc0-5fff + + (not?) used yet + + + SplitMode uses gfx's Attribute Table extension. + PPU uses $23c0-$23ff in the same way as the Attribute Table + + + Used for Extension RAM + +Consideration + 5c00-5fff has 3 uses. + Split Mode and ExGrafix Mode's VBlank is written so as to become + crowded, it writes a 0 and becomes crowded. + Every mode tries to go around ExRAM mode including reading but it + writes it, is effective in bulk and #5c-#5f is the output at times + where it is effective. \ No newline at end of file diff --git a/branches/fceux-2.2.2/documentation/tech/exp/smb2j.txt b/branches/fceux-2.2.2/documentation/tech/exp/smb2j.txt new file mode 100644 index 00000000..074b1d3d --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/exp/smb2j.txt @@ -0,0 +1,112 @@ + SMB2j Revision "A". Mapper #50 Info + ----------------------------------- + + +12.09.2000 +V2.00 + +Mapper info by The Mad Dumper +--- + + +This mapper has been assigned the number 50. (that's 50 decimal) + + +Wow, another SMB2j cart! This one is alot different than the last one I +worked on. It has a single 128K PRG ROM and VRAM. The other SMB2j had +64K PRG and 8K CHR. Not much more to say other than this has one very +fucked up mapper circuit on it! + +--- + + +The hardware: + + +It consists of 6 TTL chips (74163, 74157, 74139, 7400, 7474, and a 4020), +1 8K RAM chip for the VRAM, and 1 128K 28 pin ROM. There is some +"M^2L" logic on the board (Mickey-Mouse Logic). It is a 3 input OR gate +made out of 3 diodes and a resistor. + +Also, they swapped D3 and D6, as well as A1 and A3. Why this was done, I +have no idea. It sure mussed up my REing efforts! I desoldered and read +the ROM out through the EPROM programmer as a check and was not happy to +find the data seemingly corrupt! + +After converting the ROM image over via some QBasic, it matched up great. +You do not have to swap the addresses or data bytes; I have done this +already in the released .NES ROM. + +--- + +There are two registers on this cartridge. They are located in the 4000h- +5FFFh block. + +Funny addresses are decoded for the register selection; presumably so they +did not interfere with the FDS or NES registers. + + +A15 ... A0 +------------------- +010x xxxQ x01x xxxx + + +x = Don't Care +0 = must be 0 +1 = must be 1 +Q = register selection bit. 0 = ROM Page; 1 = IRQ Timer Enable + +- + +ROM Page Register: +------------------ + +Accessed when the address lines are in the above state. An example address +would be 4020h. 4021h, 4022h, ... 403Fh, 40A0h, 40A1h, ... are all mirrors +of this register. Writing here stores the desired bank #. + +7 bit 0 +--------- +xxxx DCBA + +These 4 bits are shown below in the ROM memory map. Note that they are +somewhat "scrambled". The value of this register is unknown at powerup. + +- + +IRQ Timer. + +7 bit 0 +--------- +xxxx xxxI + +The IRQ Timer register controls the state of the IRQ timer. Writing here +will turn it on or off. Turning the IRQ timer off resets it to 0. Writing +a 1 here will turn the timer on, while writing a 0 will turn it off. + +The timer is composed of a binary ripple counter. After 4096 M2 cycles, +/IRQ is pulled low. This is about 36 scanlines. The idea behind the timer +is to split the screen for the score bar at the top. You start it at the +beginning of the VBI routine, and then after 36 scanlines, it sends the IRQ +which clears the timer, and resets the scroll registers. The value of this +register is unknown at powerup. + +--- + +ROM Memory Map: + + +Address Range | Bank bits: 3210 +------------------------------- + 6000h-7FFFh 1111 + 8000h-9FFFh 1000 + A000h-BFFFh 1001 + C000h-DFFFh DACB -- Selectable page + E000h-FFFFh 1011 + + +The ROM is composed of 16 8K banks. The 4 bank bits are shown above. Bit 3 +is the MSB while bit 0 is the LSB. 6000h-7FFFh is set to 1111b, or bank 0fh. +All banks are FIXED except the bank at C000h-DFFFh. Only it can be changed. + + diff --git a/branches/fceux-2.2.2/documentation/tech/exp/tengen.txt b/branches/fceux-2.2.2/documentation/tech/exp/tengen.txt new file mode 100644 index 00000000..cc84d596 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/exp/tengen.txt @@ -0,0 +1,18 @@ +Unknown: + +Alien Syndrome 128KiB/128KiB +Super Sprint + +MIMIC 1: + +Fantasy Zone 64KiB/64KiB +Toobin' 128KiB/64KiB +Vindicators 64KiB/32KiB + + +RAMBO 1(board looks like it can take 256KiB PRG/256KiB CHR max): + +Klax 64KiB PRG/64KiB CHR +Road Runner 64KiB PRG/128KiB CHR +Rolling Thunder 128KiB PRG/128KiB CHR +Skull and Crossbones 128KiB PRG/64KiB CHR diff --git a/branches/fceux-2.2.2/documentation/tech/exp/vrcvi.txt b/branches/fceux-2.2.2/documentation/tech/exp/vrcvi.txt new file mode 100644 index 00000000..52023577 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/exp/vrcvi.txt @@ -0,0 +1,388 @@ + VRCVI CHIP INFO + ----- ---- ---- + + By: + + + Kevin Horton + khorton@iquest.net + + + + + The RENES Project: + Reverse-engineering + the world. + + + + +V1.01 08/31/99 teeny fix +V1.00 08/31/99 Complete Version + + + +VRCVI (VRC6) (48 pin standard 600mil wide DIP) +------------ +This chip is used in such games as Konami's CV3j and Madara. It's unique +because it has some extra sound channels on it that get piped through the +Famicom (note this is a fami-only chip and you will not find one in any +NES game). "VI" of "VRCVI" is "6" for the roman numeral challenged. + + +This chip generates its audio via a 6 bit R2R ladder. This is contained +inside a 9 pin resistor network like so: + + + 3K 3K 3K 3K 3K 2K + /------*-\/\/-*-\/\/-*-\/\/-*-\/\/-*-\/\/-*------*-\/\/-\ + | | | | | | | | | + \ \ \ \ \ \ \ | | + / / / / / / / | | + \ 6K \ 6K \ 6K \ 6K \ 6K \ 6K \ 6K | | + / / / / / / / | | + | | | | | | | | | + O O O O O O O O O + + GND D0 D1 D2 D3 D4 D5 Aud In Aud Out + + +Legend: +------- + +(s) means this pin connects to the System +(r) this only connects to the ROM +(w) this is a SRAM/WRAM connection only +AUD : these pass to the resistor network +CHR : these connect to the CHR ROM and/or fami's CHR pins +PRG : these connect to the PRG ROM and/or fami's PRG pins +WRAM : this hooks to the WRAM +CIRAM : the RAM chip which is on the fami board + + .----\/----. + GND - |01 48| - +5V + AUD D1 - |02 47| - AUD D0 + AUD D3 - |03 46| - AUD D2 + AUD D5 - |04 45| - AUD D4 + (s) PRG A12 - |05 44| - PRG A16 (r) + (s) PRG A14 - |06 43| - PRG A13 (s) + (s) M2 - |07 42| - PRG A17 (r) + (r) PRG A14 - |08 41| - PRG A15 (r) + *1 (s) PRG A1 - |09 40| - PRG A13 (r) + *1 (s) PRG A0 - |10 39| - PRG D7 (s) + (s) PRG D0 - |11 38| - PRG D6 (s) + (s) PRG D1 - |12 37| - PRG D5 (s) + (s) PRG D2 - |13 36| - PRG D4 (s) + (r) PRG /CE - |14 35| - PRG D3 (s) + (s) R/W - |15 34| - PRG /CE (s) + *2 (w) WRAM /CE - |16 33| - /IRQ (s) + (r) CHR /CE - |17 32| - CIRAM /CE (s) + (s) CHR /RD - |18 31| - CHR A10 (s) + (s) CHR /A13 - |19 30| - CHR A11 (s) + (r) CHR A16 - |20 29| - CHR A12 (s) + (r) CHR A15 - |21 28| - CHR A17 (r) + (r) CHR A12 - |22 27| - CHR A14 (r) + (r) CHR A11 - |23 26| - CHR A13 (r) + GND - |24 25| - CHR A10 (r) + | | + `----------' + + VRCVI + + +*1: On some VRCVI carts, these are reversed. This affects some registers. + +*2: This passes through a small pulse shaping network consisting of a + resistor, diode, and cap. + + +Registers: (sound related only) +---------- + +regs 9000-9002 are for pulse channel #1 +regs a000-a002 are for pulse channel #2 +regs b000-b002 are for the phase accumulator channel (sawtooth) + +(bits listed 7 through 0) + +9000h: GDDDVVVV + + D - Duty Cycle bits: + + 000 - 1/16th ( 6.25%) + 001 - 2/16ths (12.50%) + 010 - 3/16ths (18.75%) + 011 - 4/16ths (25.00%) + 100 - 5/16ths (31.25%) + 101 - 6/16ths (37.50%) + 110 - 7/16ths (43.75%) + 111 - 8/16ths (50.00%) + + V - Volume bits. 0000b is silence, 1111b is loudest. Volume is + linear. When in "normal" mode (see G bit), this acts as a general + volume control register. When in "digitized" mode, these act as a + 4 bit sample input. + + G - Gate bit. 0=normal operation, 1=digitized. In digi operation, + registers 9001h and 9002h are totally disabled. Only bits 0-3 of + 9000h are used. Whatever binary word is present here is passed on + as a 4 bit digitized output. + + +9002h: FFFFFFFF + + F - Lower 8 bits of frequency data + + +9003h: X---FFFF + + X - Channel disable. 0=channel disabled, 1=channel enabled. + + F - Upper 4 bits of frequency data + + +A000h-A002h are identical in operation to 9000h-9002h. One note: this chip +will mix both digitized outputs (if the G bits are both set) into one +added output. (see in-depth chip operation below) + +B000h: --PPPPPP + + P - Phase accumulator input bits + +B001h: FFFFFFFF + + F - Lower 8 bits of frequency data + +B002h: X---FFFF + + X - Channel disable. 0=channel disabled, 1=channel enabled. + + F - Upper 4 bits of frequency data + + + +How the sounds are formed: +-------------------------- + +This chip is pretty cool. It outputs a 6 bit binary word for the sound +which is passed through a DAC and finally to the NES/Fami. Because of this, +the sound can be emulated *very* close to the original. + + +I used my scope to figure all this out as well as my meter and logic probe +so it should be 100% accurate. + + + +Block diagrams of the VRCVI: (as reverse engineered by me) +---------------------------- + + + | F bits | | D bits| | V bits | + | (12) | | (3) | | (4) | + \___________/ \_______/ \________/ ++-----+ +----------------+ +-----------+ +------------+ +| | | | | | | |--\ +| OSC |-->|Divider (12 bit)|-->| Duty Cycle|-->| AND array |(4)> chan out +|(M2) | | | | Generator | | |--/ ++-----+ +----------------+ +-----------+ +------------+ + ^ ^ + | | + | | + G X + + One Pulse channel (both are identical) + -------------------------------------- + + +How it works: The oscillator (in the NES, the clock arrives on the M2 line +and is about 1.78Mhz) generates our starting frequency. This is passed +first into a divide by 1 to 4096 divider to generate a base frequency. +This is then passed to the duty cycle generator. The duty cycle generator +generates the desired duty cycle for the output waveform. The "D" input +controls the duty cycle generator's duty cycle. If the "G" bit is +a "1", it forces the output of the duty cycle generator to a "1" also. If +the "X" bit is "0", it forces the output of the duty cycle generator to "0", +which effectively disables the channel. Note that this input has precidence +over the "G" bit. + +The AND array is just that- an array of 4 AND gates. If the output of +the duty cycle generator is a "0", then the "chan out" outputs will all be +forced to "0". If the output of the duty cycle generator is a "1", then +the chan out outputs will follow the V bit inputs. + +Note that the output of this generator is a 4 bit binary word. + + +--- + + + | F bits | | P bits| + | (12) | | (6) | + \___________/ \_______/ ++-----+ +----------------+ +-----------+ +| | | | | |--\ +| OSC |-->|Divider (12 bit)|-->| Phase |(5)> chan out +|(M2) | | | |Accumulator|--/ ++-----+ +----------------+ +-----------+ + ^ + | + | + X + + The Sawtooth (ramp) channel + --------------------------- + + +This one is pretty similar to the above when it comes to frequency selection. +The output frequency will be the same relative to the square wave channels. +OK, the tough part will be explaining the phase accumulator. :-) What it is +is just an adder tied to a latch. Every clock it adds a constant to the +latch. In the case of the VRCVI, what you do is this: + +The ramp is generated over the course of 7 evenly spaced cycles, generated +from the divider. Every clock from the divider causes the phase accumulator +to add once. So... let's say we have 03h in the P bits. Every 7 cycles +the phase accumulator (which is 8 bits) is reset to 00h. + + +cycle: accumulator: chan out: notes: +----------------------------------------- +0 00h 00h On the first cycle, the acc. is reset to 0 +1 03h 00h We add 3 to 0 to get 3 +2 06h 00h We add 3 to 3 to get 6 +3 09h 01h +4 0ch 01h +5 0fh 01h +6 12h 02h +7 00h 00h Reset the acc. back to 0 and do it again + + +This will look like so: (as viewed on an oscilloscope) + + + + - - - 2 + --- --- --- 1 +--- --- --- 0 + | +012345601234560123456-+ + + + +Note: if you enter a value that is too large (i.e. 30h) the accumulator +*WILL WRAP*. Yes, this doesn't sound very good at all and you no longer +have a sawtooth. ;-) + + +The upper 5 bits of said accumulator are run to the "chan out" outputs. +The lower 3 bits are not run anywhere. + +"X" disables the phase accumulator and forces all outputs to "0". +Note that the output of this generator is a 5 bit word. + + +--- + +Now that the actual sound generation is out of the way, here's how the +channels are combined into the final 6 bit binary output: + + ++---------+ +| Pulse | +|Generator| +| #1 | Final 6 Bit ++---------+ Output + | (4) | / \ + \ / | (6) | ++---------+ +---------+ +---------+ +| 4 Bit |--\ | 5 Bit | /--|Sawtooth | +| Binary |(5)>| Binary |<(5)|Generator| +| Adder |--/ | Adder | \--| | ++---------+ +---------+ +---------+ + / \ + | (4) | ++---------+ +| Pulse | +|Generator| +| #2 | ++---------+ + + Channel Combining + ----------------- + + +The three channels are finally added together through a series of adders +to produce the final output word. The two pulse chans are most likely added +first since they are 4 bit words, and that 5 bit result is most likely +added to the sawtooth's output. (The actual adding order is not known, +but I can make a *very* good guess. The above illustrated way uses the least +amount of transistors). In the end it does not matter the order in which +the words are added; the final word will always be the same. + +The final 6 bit output word is run through an "R2R" resistor ladder which +turns the digital bits into a 64 level analog representation. The ladder +is binarally weighted and works like the DAC on your soundcard. :-) +(so take heart emulator authours: just run the finished 6 bit word to +your soundcard and it will sound right ;-). + + + +Frequency Generation: +--------------------- + +The chip generates all its output frequencies based on M2, which is +colourburst divided by two (1789772.7272Hz). This signal is passed +directly into the programmable dividers (the 12 bit frequency regs). + +Squares: +-------- + +These take the output of the programmable divider and then run it through +the duty cycle generator, which in the process of generating the duty cycle, +divides the frequency by 16. + + +To calculate output frequency: + + 1789772.7272 +Fout = ---------------- + (freq_in+1) * 16 + + +This will tell you the exact frequency in Hz. (note that the * 16 is to +compensate for the divide by 16 duty cycle generator.) + +Saw: +---- + +This is similar to the above, however the duty cycle generator is replaced +with a phase accumulator which divides the output frequency by 14. + + +To calculate output frequency: + + 1789772.7272 +Fout = ---------------- + (freq_in+1) * 14 + + +This will tell you the exact frequency in Hz. (note that the * 14 is to +compensate for the phase accumulator.) + + + +So how accurate is this info, anyways? +-------------------------------------- + +I believe the info to be 100% accurate. I have extensively tested the +output of the actual VRCVI chip to this spec and everything fits perfectly. +I did this by using a register dump and a QBASIC program I wrote which +takes the register dump and produces a WAV file. All frequency and +duty cycle measurements were taken with a Fluke 83 multimeter, and all +waveform data was culled from my oscilloscope measuring the real chip. + + + + +---EOF--- diff --git a/branches/fceux-2.2.2/documentation/tech/exp/vrcvii.txt b/branches/fceux-2.2.2/documentation/tech/exp/vrcvii.txt new file mode 100644 index 00000000..fc07d05e --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/exp/vrcvii.txt @@ -0,0 +1,321 @@ + VRCVII CHIP INFO + ------ ---- ---- + + By: + + + Kevin Horton + khorton@iquest.net + + + + + The RENES Project: + Reverse-engineering + the world. + + + +V0.10 11/05/99 Document started, pinned out chip and audio thingy +V0.20 11/10/99 Added very, very, very preliminary register findings +v1.00 11/14/99 First release version of this doc + +VRCVII (VRC7) (48 pin standard 600mil wide DIP) +------------- + +This chip is used in only one Konami game that I know of- Lagrange Point. +I heard rumours it was used in another game, so if someone could provide +info and/or a ROM image, that would help immensely. It handles ROM +bankswitching as well as sound generation. The sound generation is done +using FM synthesis, so the music sounds like "Adlib" OPL2 music. Due to +extra sound, this is a Famicom-only chip like its cousin the +VRCVI. (See the VRCVI doc for more info) + +"VII" of "VRCVII" is "7" for the roman numeral challenged. + + +This chip appears to generate all of its audio internally, which is then +fed to a small hybrid (aka "black blob") that does the audio interfacing +to the Famicom proper. It is physically a small ceramic substrate with +an 8 pin SMD chip on it (probably an op-amp), and what appears to be three +0805 sized SMD chip parts (capacitors most likely, since resistors can be +formed on the substrate). The whole works is then coated with a black +dipped epoxy coating, and the smooth side (opposite the parts) is then +marked with an identifying part number and the pin 1 dot. + + +Here's the pinout for it: + + Front Side (parts facing away) + + +-----------------+ 1- Audio in from Famicom + | 054002 | 2- Audio out to Famicom + |@ | 3,7 - Ground + +-----------------+ 4-6 - NC + | | | | | | | | | 8- Audio from VRCVII + 1 2 3 4 5 6 7 8 9 9- +5V + + + + + +Legend: +------- + +(s) means this pin connects to the System +(r) this only connects to the ROM +(w) this is a SRAM/WRAM connection only +PRG : these connect to the PRG ROM and/or fami's PRG pins +WRAM : this hooks to the WRAM + +Note: There is a 3.58Mhz ceramic resonator connected to the "X1" and "X2" +pins. it is the three-pin style with internal caps tied to the third pin +which is grounded. + +Chip is physically marked: "VRV VII 053982" + + .----\/----. + *1 (RAM&s) CHR /OE - |01 48| - NC + *1 (RAM&s) CHR /CE - |02 47| - M2 (s) + GND - |03 46| - /CE WRAM (w) + (s) R/W - |04 45| - PRG /A15 (s) (aka /CE) + (s) /IRQ - |05 44| - PRG ROM /CE (r) + (s) CIRAM A11 - |06 43| - Audio Out + (s) PD0 - |07 42| - +5V + (s) PD1 - |08 41| - NC + (s) PD2 - |09 40| - NC + (s) PD3 - |10 39| - NC + (s) PD4 - |11 38| - NC + (s) PD5 - |12 37| - NC + (s) PD6 - |13 36| - CHR RAM A12 + (s) PD7 - |14 35| - CHR RAM A11 + +5V - |15 34| - CHR RAM A10 + (s) PRG A5 - |16 33| - CHR A12 (s) + Crystal X2 - |17 32| - CHR A11 (s) + Crystal X1 - |18 31| - CHR A10 (s) + (s) PRG A4 - |19 30| - +5V + (r) PRG ROM A13 - |20 29| - PRG A14 (s) + (r) PRG ROM A14 - |21 28| - PRG A13 (s) + (r) PRG ROM A15 - |22 27| - PRG A12 (s) + (r) PRG ROM A16 - |23 26| - PRG ROM A18 (r) + GND - |24 25| - PRG ROM A17 (r) + | | + `----------' + + VRCVII + + +*1: these connect to both the CHR RAM's pins and the card edge. + +Note: the NC pins 37-41 most likely for CHR ROM bankswitching. Since this +cart uses CHR RAM these obviously weren't used ;-) + +Registers: (sound related only) +---------- + +All sound registers are accessed through only two physical registers. + +9010: +----- + +This is the index register. You write the desired register number here. + +9030: +----- + +This is the data register. Data written here is stored in the register +pointed to by the above index register. + +There are 6 channels, each containing three registers, and 8 custom +instrument control registers. + + +Sound Registers: +---------------- + +00h - 07h : Custom instrument registers. See below for info. + +--- + +10h - 15h : ffffffff + +f: Lower 8 bits of frequency + +--- + +20h - 25h : ???tooof + +f: Upper bit of frequency +o: Octave Select +t: Channel trigger. +?: Dunno what these do yet (No audible effect) + +--- + +30h - 35h : iiiivvvv + +i: Instrument number +v: Volume + +Instrument numbers 01h-0fh are fixed and cannot be changed. + +Instrument number 00h is the "programmable" one. + +To program the custom instrument, you load registers 00h-07h with the +desired parameters for it. All channels set to instrument 00h will +then use this instrument. Note that you can only program one custom +instrument at a time. + + + +How do the frequency registers work? +------------------------------------ + +To generate a tone, you must select an octave and a frequency value. The +frequency values stay the same for say, the note "C", while the octave +bits determine which octave "C" lies in. This makes your note lookup table +quite small. + +o = 000 is octave 0 +o = 001 is octave 1 +. +. +. +o = 111 is octave 7 + + + 49722*freqval +F = ------------- + 2^(19-octave) + + +Where: + +F = output frequency in Hz +freqval = frequency register value +octave = desired octave (starting at 0) + + +Custom Instrument Registers (00-07) +----------------------------------- + +Note: I will not provide too extensive documentation of the instrument +registers since their functions are identical to those of the OPL2 chip, +commonly found on Adlib/Soundblaster/compatible cards, and there is alot +of information out on how to program these. I will use terminology +similar to that found in said documents. My VRC7 "emulator" test program +I wrote simply re-arranged and tweaked the register writes to correspond +with the OPL2 registers. + +Here's a link to a good document about this chip: + +http://www.ccms.net/~aomit/oplx/ + +The tremolo depth is set to 4.3db and the vibrato depth is set to 14 cent +(in reguards to OPL2 settings; to achieve this you would write 0C0h to +OPL register 0BDh). All operator connections are fixed in FM mode. (Where +Modulator modulates the Carrier). + +--- + + +00 (Modulator) - tvskmmmm +01 (Carrier) + +t: Tremolo Enable +v: Vibrato Enable +s: Sustain Enable +k: KSR +m: Multiplier + +--- + +02 - kkoooooo + +k: Key Scale Level +o: Output Level + +--- + +03 - ---qweee + +-: Not used: Write 0's +q: Carrier Waveform +w: Modulator Waveform + +Note: There are only two waveforms available. Sine and rectified sine (only + the positive cycle of the sine; negative cycle "chopped off".) + +e: Feedback Control + +--- + +04 (Modulator) - aaaadddd +05 (Carrier) + +a: Attack +d: Decay + +--- + +06 (Modulator) - ssssrrrr +07 (Carrier) + +s: Sustain +r: Release + + + +Register Settings for the 15 fixed instruments. +----------------------------------------------- + +*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION* +C C +A These instruments are not 100% correct! There is no way to extract A +U the register settings from the chip short of an electron microscope. U +T I have "tuned" these instruments best I could, though I know a couple T +I are not exactly right. Use them at your own perl! If someone wants I +O to waste all day tuning a new set, please let me know what you get. O +N N +*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION* + + + Register + -------- + + 00 01 02 03 04 05 06 07 + ----------------------- + 0 | -- -- -- -- -- -- -- -- + 1 | 05 03 10 06 74 A1 13 F4 + 2 | 05 01 16 00 F9 A2 15 F5 + 3 | 01 41 11 00 A0 A0 83 95 + 4 | 01 41 17 00 60 F0 83 95 + 5 | 24 41 1F 00 50 B0 94 94 + 6 | 05 01 0B 04 65 A0 54 95 + 7 | 11 41 0E 04 70 C7 13 10 + Instrument 8 | 02 44 16 06 E0 E0 31 35 + ---------- 9 | 48 22 22 07 50 A1 A5 F4 + A | 05 A1 18 00 A2 A2 F5 F5 + B | 07 81 2B 05 A5 A5 03 03 + C | 01 41 08 08 A0 A0 83 95 + D | 21 61 12 00 93 92 74 75 + E | 21 62 21 00 84 85 34 15 + F | 21 62 0E 00 A1 A0 34 15 + + + + +So how accurate is this info, anyways? +-------------------------------------- + +I believe the info to be 100% accurate. The pinout was generated with the +help of a multimeter and my Super-8 with both an NES cart and the Fami cart +plugged in. (this allows me to measure between my known "control" board +with the unknown "experimental" board to generate the connections). +Register info was gleaned via writing test code and listening and capturing +the resultant audio stream for analysis. + + + + +---EOF--- diff --git a/branches/fceux-2.2.2/documentation/tech/nsfspec.txt b/branches/fceux-2.2.2/documentation/tech/nsfspec.txt new file mode 100644 index 00000000..2ef526d2 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/nsfspec.txt @@ -0,0 +1,336 @@ + NES Music Format Spec + --------------------- + + +By: Kevin Horton khorton@iquest.net + + +NOTE: +----- + + +Remember that I am very willing to add stuff and update this spec. If +you find a new sound chip or other change let me know and I will get back +with you. E-mail to the above address. + + +V1.61 - 06/27/2000 Updated spec a bit +V1.60 - 06/01/2000 Updated Sunsoft, MMC5, and Namco chip information +V1.50 - 05/28/2000 Updated FDS, added Sunsoft and Namco chips +V1.32 - 11/27/1999 Added MMC5 register locations +V1.30 - 11/14/1999 Added MMC5 audio bit, added some register info +V1.20 - 09/12/1999 VRC and FDS prelim sound info added +V1.00 - 05/11/1999 First official NSF specification file + + + +This file encompasses a way to transfer NES music data in a small, easy to +use format. + +The basic idea is one rips the music/sound code from an NES game and prepends +a small header to the data. + +A program of some form (6502/sound emulator) then takes the data and loads +it into the proper place into the 6502's address space, then inits and plays +the tune. + +Here's an overview of the header: + +offset # of bytes Function +---------------------------- + +0000 5 STRING "NESM",01Ah ; denotes an NES sound format file +0005 1 BYTE Version number (currently 01h) +0006 1 BYTE Total songs (1=1 song, 2=2 songs, etc) +0007 1 BYTE Starting song (1= 1st song, 2=2nd song, etc) +0008 2 WORD (lo/hi) load address of data (8000-FFFF) +000a 2 WORD (lo/hi) init address of data (8000-FFFF) +000c 2 WORD (lo/hi) play address of data (8000-FFFF) +000e 32 STRING The name of the song, null terminated +002e 32 STRING The artist, if known, null terminated +004e 32 STRING The Copyright holder, null terminated +006e 2 WORD (lo/hi) speed, in 1/1000000th sec ticks, NTSC (see text) +0070 8 BYTE Bankswitch Init Values (see text, and FDS section) +0078 2 WORD (lo/hi) speed, in 1/1000000th sec ticks, PAL (see text) +007a 1 BYTE PAL/NTSC bits: + bit 0: if clear, this is an NTSC tune + bit 0: if set, this is a PAL tune + bit 1: if set, this is a dual PAL/NTSC tune + bits 2-7: not used. they *must* be 0 +007b 1 BYTE Extra Sound Chip Support + bit 0: if set, this song uses VRCVI + bit 1: if set, this song uses VRCVII + bit 2: if set, this song uses FDS Sound + bit 3: if set, this song uses MMC5 audio + bit 4: if set, this song uses Namco 106 + bit 5: if set, this song uses Sunsoft FME-07 + bits 6,7: future expansion: they *must* be 0 +007c 4 ---- 4 extra bytes for expansion (must be 00h) +0080 nnn ---- The music program/data follows + +This may look somewhat familiar; if so that's because this is somewhat +sorta of based on the PSID file format for C64 music/sound. + + +Loading a tune into RAM +----------------------- + +If offsets 0070h to 0077h have 00h in them, then bankswitching is *not* +used. If one or more bytes are something other than 00h then bankswitching +is used. If bankswitching is used then the load address is still used, +but you now use (ADDRESS AND 0FFFh) to determine where on the first bank +to load the data. + + +Each bank is 4K in size, and that means there are 8 of them for the +entire 08000h-0ffffh range in the 6502's address space. You determine where +in memory the data goes by setting bytes 070h thru 077h in the file. +These determine the inital bank values that will be used, and hence where +the data will be loaded into the address space. + +Here's an example: + +METROID.NSF will be used for the following explaination. + +The file is set up like so: (starting at 070h in the file) + + +0070: 05 05 05 05 05 05 05 05 - 00 00 00 00 00 00 00 00 +0080: ... music data goes here... + +Since 0070h-0077h are something other than 00h, then we know that this +tune uses bankswitching. The load address for the data is specified as +08000h. We take this AND 0fffh and get 0000h, so we will load data in +at byte 0 of bank 0, since data is loaded into the banks sequentially +starting from bank 0 up until the music data is fully loaded. + +Metroid has 6 4K banks in it, numbered 0 through 5. The 6502's address +space has 8 4K bankswitchable blocks on it, starting at 08000h-08fffh, +09000h-09fffh, 0a000h-0afffh ... 0f000h-0ffffh. Each one of these is 4K in +size, and the current bank is controlled by writes to 05ff8h thru 05fffh, +one byte per bank. So, 05ff8h controls the 08000h-08fffh range, 05ff9h +controls the 09000h-09fffh range, etc. up to 05fffh which controls the +0f000h-0ffffh range. When the song is loaded into RAM, it is loaded into +the banks and not the 6502's address space. Once this is done, then the +bank control registers are written to set up the inital bank values. +To do this, the value at 0070h in the file is written to 05ff8h, 0071h +is written to 05ff9h, etc. all the way to 0077h is written to 05fffh. +This is should be done before every call to the init routine. + +If the tune was not bankswitched, then it is simply loaded in at the +specified load address, until EOF + + +Initalizing a tune +------------------ + +This is pretty simple. Load the desired song # into the accumulator, +minus 1 and set the X register to specify PAL (X=1) or NTSC (X=0). +If this is a single standard tune (i.e. PAL *or* NTSC but not both) +then the X register contents should not matter. Once the song # and +optional PAL/NTSC standard are loaded, simply call the INIT address. +Once init is done, it should perform an RTS. + + +Playing a tune +-------------- + +Once the tune has been initalized, it can now be played. To do this, +simply call the play address several times a second. How many times +per second is determined by offsets 006eh and 006fh in the file. +These bytes denote the speed of playback in 1/1000000ths of a second. +For the "usual" 60Hz playback rate, set this to 411ah. + +To generate a differing playback rate, use this formula: + + + 1000000 +PBRATE= --------- + speed + +Where PBRATE is the value you stick into 006e/006fh in the file, and +speed is the desired speed in hertz. + + +"Proper" way to load the tune +----------------------------- + +1) If the tune is bankswitched, go to #3. + +2) Load the data into the 6502's address space starting at the specified + load address. Go to #4. + +3) Load the data into a RAM area, starting at (start_address AND 0fffh). + +4) Tune load is done. + + +"Proper" way to init a tune +--------------------------- + +1) Clear all RAM at 0000h-07ffh. + +2) Clear all RAM at 6000h-7fffh. + +3) Init the sound registers by writing 00h to 04000-0400Fh, 10h to 4010h, + and 00h to 4011h-4013h. + +4) Set volume register 04015h to 00fh. + +5) If this is a banked tune, load the bank values from the header into + 5ff8-5fffh. + +6) Set the accumulator and X registers for the desired song. + +7) Call the music init routine. + + +"Proper" way to play a tune +--------------------------- + +1) Call the play address of the music at periodic intervals determined + by the speed words. Which word to use is determined by which mode + you are in- PAL or NTSC. + + +Sound Chip Support +------------------ + +Byte 007bh of the file stores the sound chip flags. If a particular flag +is set, those sound registers should be enabled. If the flag is clear, +then those registers should be disabled. + +* VRCVI Uses registers 9000-9002, A000-A002, and B000-B002, write only. + +Caveats: 1) The above registers are *write only* and must not disrupt music + code that happens to be stored there. + + 2) Major caveat: The A0 and A1 lines are flipped on a few games!! + If you rip the music and it sounds all funny, flip around + the xxx1 and xxx2 register pairs. (i.e. 9001 and 9002) 9000 + and 9003 can be left untouched. I decided to do this since it + would make things easier all around, and this means you only + will have to change the music code in a very few places (6). + Esper2 and Madara will need this change, while Castlevania 3j + will not for instance. + + 3) See my VRCVI.TXT doc for a complete register description. + +* VRCVII Uses registers 9010 and 9030, write only. + +Caveats: 1) Same caveat as #1, above. + + 2) See my VRCVII.TXT doc for a complete register description. + +* FDS Sound uses registers from 4040 through 4092. + +Caveats: 1) 6000-DFFF is assumed to be RAM, since 6000-DFFF is RAM on the + FDS. E000-FFFF is usually not included in FDS games because + it is the BIOS ROM. However, it can be used on FDS rips to help + the ripper (for modified play/init addresses). + + 2) Bankswitching operates slightly different on FDS tunes. + 5FF6 and 5FF7 control the banks 6000-6FFF and 7000-7FFF + respectively. NSF header offsets 76h and 77h correspond to + *both* 6000-7FFF *AND* E000-FFFF. Keep this in mind! + +* MMC5 Sound Uses registers 5000-5015, write only as well as 5205 and 5206, + and 5C00-5FF5 + +Caveats: 1) Generating a proper doc file. Be patient. + + 2) 5205 and 5206 are a hardware 8*8 multiplier. The idea being + you write your two bytes to be multiplied into 5205 and 5206 + and after doing so, you read the result back out. Still working + on what exactly triggers it (I think a write to either 5205 + or 5206 triggers the multiply). + + 3) 5C00-5FF5 should be RAM to emulate EXRAM while in MMC5 mode. + +Note: Thanks to Mamiya for the EXRAM info. + + +* Namco 106 Sound Uses registers 4800 and F800. + + This works similar to VRC7. 4800 is the "data" port which is + readable and writable, while F800 is the "address" port and is + writable only. + + The address is 7 bits plus a "mode" bit. Bit 7 controls + address auto-incrementing. If bit 7 is set, the address will + auto-increment after a byte of data is read or written from/to + 4800. + + $40 ffffffff f:frequency L + $42 ffffffff f:frequency M + $44 ---sssff f:frequency H s:tone length (8-s)*4 in 4bit-samples + $46 tttttttt t:tone address(4bit-address,$41 means high-4bits of $20) + $47 -cccvvvv v:linear volume 1+c:number of channels in use($7F only) + $40-47:ch1 $48-4F:ch2 ... $78-7F:ch8 + ch2-ch8 same to ch1 + + $00-3F(8ch)...77(1ch) hhhhllll tone data + h:odd address data(signed 4bit) + l:even address data(signed 4bit) + + real frequency = (f * NES_BASECYCLES) / (40000h * (c+1) * (8-s)*4 * 45) + NES_BASECYCLES 21477270(Hz) + +Note: Very Special thanks to Mamiya for this information! + + +* Sunsoft FME-07 Sound uses registers C000 and E000 + + This is similar to the common AY 3-8910 sound chip that is + used on tons of arcade machines, and in the Intellivision. + + C000 is the address port + E000 is the data port + + Both are write-only, and behave like the AY 3-8910. + +Note: Special thanks to Mamiya for this information as well + + +Caveats +------- + +1) The starting song number and maximum song numbers start counting at + 1, while the init address of the tune starts counting at 0. To + "fix", simply pass the desired song number minus 1 to the init + routine. + +2) The NTSC speed word is used *only* for NTSC tunes, or dual PAL/NTSC tunes. + The PAL speed word is used *only* for PAL tunes, or dual PAL/NTSC tunes. + +3) The length of the text in the name, artist, and copyright fields must + be 31 characters or less! There has to be at least a single NULL byte + (00h) after the text, between fields. + +4) If a field is not known (name, artist, copyright) then the field must + contain the string "" (without quotes). + +5) There should be 8K of RAM present at 6000-7FFFh. MMC5 tunes need RAM at + 5C00-5FF7 to emulate its EXRAM. 8000-FFFF Should be read-only (not + writable) after a tune has loaded. The only time this area should be + writable is if an FDS tune is being played. + +6) Do not assume the state of *anything* on entry to the init routine + except A and X. Y can be anything, as can the flags. + +7) Do not assume the state of *anything* on entry to the play routine either. + Flags, X, A, and Y could be at any state. I've fixed about 10 tunes + because of this problem and the problem, above. + +8) The stack sits at 1FFh and grows down. Make sure the tune does not + attempt to use 1F0h-1FFh for variables. (Armed Dragon Villigust did and + I had to relocate its RAM usage to 2xx) + +9) Variables should sit in the 0000h-07FFh area *only*. If the tune writes + outside this range, say 1400h this is bad and should be relocated. + (Terminator 3 did this and I relocated it to 04xx). + +That's it! + + + diff --git a/branches/fceux-2.2.2/documentation/tech/ppu/2c02 technical operation.txt b/branches/fceux-2.2.2/documentation/tech/ppu/2c02 technical operation.txt new file mode 100644 index 00000000..3a79008b --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/ppu/2c02 technical operation.txt @@ -0,0 +1,296 @@ +******************************* +*NTSC 2C02 technical operation* +******************************* +Brad Taylor (big_time_software@hotmail.com) + +1st release: Sept 25th, Y2K +2nd release: Jan 27th, 2K3 +3rd release: Feb 4th, 2K3 +4th release: Feb 19th, 2K3 + + + This document describes the low-level operation and technical details of the 2C02, the NES's PPU. In general, it contains important information in regards to PPU timing, which no NES coder/emulator author should be without. This document assumes that you already understand the basics of how the PPU works, like how the playfield/object images are generated, and the behaviour of scroll/address counters during playfield rendering. + + Alot of the concepts behind how the PPU works described here have been extracted from Nintendo's patent documentation (U.S.#4,824,106). With block diagrams of the PPU's architecture (and even some schematics), these papers will definetely aid in the comprehension of this complex device. + + Since the first release, this document has been given a major overhaul. Most sections of the document have been reworked, and new information has been added just about everywhere. If you've read the old version of this document before, I recommend that you read this new one in it's entirity; there's new information even in sections which may look like they haven't changed much. + + Topics discussed hereon are as follows. + + - Video signal generation + - PPU base timing + - Miscellanious PPU info + - PPU memory access cycles + - Frame rendering details + - Scanline rendering details + - In-range object evaluation + - Details of playfield render pipeline + - Details of object pattern fetch & render + - Extra cycle frames + - The MMC3's scanline counter + - PPU pixel priority quirk + - Graphical enhancements + + ++-------+ +|History| ++-------+ + On the weekend of Sept. 25th, Y2K, I setup an experiment with my NTSC NES MB & my PC so's I could RE the PPU's timing. What I did was (using a PC interface) analyse the changes that occur on the PPU's address and data pins on every rising & falling edge of the PPU's clock. I was not planning on removing the PPU from the motherboard (yet), so basically I just kept everything intact (minus the stuff I added onto the MB so I could monitor the PPU's signals), and popped in a game, so that it would initialize the PPU for me (I used DK classics, since it was only taking somthing like 4 frames before it was turning on the background/sprites). + + The only change I made was taking out the 21 MHz clock generator circuitry. To replace the clock signal, I connected a port controlled latch to the NES's main clock line instead. Now, by writing a 0 or a 1 out to an PC ISA port of my choice (I was using $104), I was able to control the 21 MHz clockline of the NES. After I would create a rise or a fall on the NES's clock line, I would then read in the data that appeared on the PPU's address and data pins, which included monitoring what PPU registers the game read/wrote to (& the data that was read/written). + + ++-----------------------+ +|Video signal generation| ++-----------------------+ + A 21.48 MHz clock signal is fed into the PPU. This is the NES's main clock line, which is shared by the CPU. + + Inside the PPU, the 21.48 MHz signal is used to clock a three-stage Johnson counter. The complimentery outputs of both master and slave portions of each stage are used to form 12 mutually exclusive output phases- all 3.58 MHz each (the NTSC colorburst). These 12 different phases form the basis of all color generation for the PPU's composite video output. + + Naturally, when the user programs the lower 4-bits of a palette register, they are essentially selecting any 1 of 12 phases to be routed to the PPU's video out pin (this corresponds to chrominance (tint/hue) video information) when the appropriate pixel indexes it. Other chrominance combinations (0 & 13) are simply hardwired to a 1 or 0 to generate grayscale pixels. + + Bits 4 & 5 of a palette entry selects 1 of 4 linear DC voltage offsets to apply to the selected chrominance signal (this corresponds to luminance (brightness) video information) for a pixel. + + Chrominance values 14 & 15 yield a black pixel color, regardless of any luminance value setting. + + Luminance value 0, mixed with chrominance value 13 yield a "blacker than black" pixel color. This super black pixel has an output voltage level close to the vertical/horizontal syncronization pulses. Because of this, some video monitors will display warped/distorted screens for games which use this color for black (Game Genie is the best example of this). Essentially what is happening is the video monitor's horizontal timing is compromised by what it thinks are extra syncronization pulses in the scanline. This is not damaging to the monitors which are effected by it, but use of the super black color should be avoided, due to the graphical distortion it causes. + + The amplitude of the selected chrominance signal (via the 4 lower bits of a palette register) remain constant regardless of bits 4 or 5. Thus it is not possible to adjust the saturation level of a particular color. + + ++---------------+ +|PPU base timing| ++---------------+ + Other than the 3-stage Johnson counter, the 21.48 MHz signal is not used directly by any other PPU hardware. Instead, the signal is divided by 4 to get 5.37 MHz, and is used as the smallest unit of timing in the PPU. All following references to PPU clock cycle (abbr. "cc") timing in this document will be in respect to this timing base, unless otherwise indicated. + + - Pixels are rendered at the same rate as the base PPU clock. In other words, 1 clock cycle= 1 pixel. + + - 341 PPU cc's make up the time of a typical scanline (or 341/3 CPU cc's). + + - One frame consists of 262 scanlines. This equals 341*262 PPU cc's per frame (divide by 3 for # of CPU cc's). + + ++------------------------+ +|PPU memory access cycles| ++------------------------+ + All PPU memory access cycles are 2 clocks long, and can be made back-to-back (typically done during rendering). Here's how the access breaks down: + + At the beginning of the access cycle, PPU address lines 8..13 are updated with the target address. This data remains here until the next time an access cycle occurs. + + The lower 8-bits of the PPU address lines are multiplexed with the data bus, to reduce the PPU's pin count. On the first clock cycle of the access, A0..A7 are put on the PPU's data bus, and the ALE (address latch enable) line is activated for the first half of the cycle. This loads the lower 8-bit address into an external 8-bit transparent latch strobed by ALE (74LS373 is used). + + On the second clock cycle, the /RD (or /WR) line is activated, and stays active for the entire cycle. Appropriate data is driven onto the bus during this time. + + ++----------------------+ +|Miscellanious PPU info| ++----------------------+ + - Sprite DMA is 1536 clock cycles long (512 CPU cc's). 256 individual transfers are made from CPU memory to a temp register inside the CPU, then from the CPU's temp reg, to $2004. + + - The PPU makes NO external access to the PPU bus, unless the playfield or objects are enabled during a scanline outside vblank. This means that the PPU's address and data busses are dead while in this state. + + - palette RAM is accessed internally during playfield rendering (i.e., the palette address/data is never put on the PPU bus during this time). Additionally, when the programmer accesses palette RAM via $2006/7, the palette address accessed actually does show up on the PPU address bus, but the PPU's /RD & /WR flags are not activated. This is required; to prevent writing over name table data falling under the approprite mirrored area (since the name table RAM's address decoder simply consists of an inverter connected to the A13 line- effectively decoding all addresses in $2000-$3FFF). + + - the VINT impulse (NMI) and bit $2002.7 are set simultaniously. Reading $2002 will reset bit 7, but it seems that the VINT flag goes down on it's own. Because of this, when the PPU generates a VINT, it doesn't require any acknowledgement whatsoever; it will continue firing off VINTs, regardless of inservice to $2002. The only way to stop VINTs is to clear $2000.7. + + - Because the PPU cannot make a read from PPU memory immediately upon request (via $2007), there is an internal buffer, which acts as a 1-stage data pipeline. As a read is requested, the contents of the read buffer are returned to the NES's CPU. After this, at the PPU's earliest convience (according to PPU read cycle timings), the PPU will fetch the requested data from the PPU memory, and throw it in the read buffer. Writes to PPU mem via $2007 are pipelined as well, but it is unknown to me if the PPU uses this same buffer (this could be easily tested by writing somthing to $2007, and seeing if the same value is returned immediately after reading). + + ++-----------------------+ +|Frame rendering details| ++-----------------------+ + The following describes the PPU's status during all 262 scanlines of a frame. Any scanlines where work is done (like image rendering), consists of the steps which will be described in the next section. + + 0..19: Starting at the instant the VINT flag is pulled down (when a NMI is generated), 20 scanlines make up the period of time on the PPU which I like to call the VINT period. During this time, the PPU makes no access to it's external memory (i.e. name / pattern tables, etc.). + + 20: After 20 scanlines worth of time go by (since the VINT flag was set), the PPU starts to render scanlines. This first scanline is a dummy one; although it will access it's external memory in the same sequence it would for drawing a valid scanline, no on-screen pixels are rendered during this time, making the fetched background data immaterial. Both horizontal *and* vertical scroll counters are updated (presumably) at cc offset 256 in this scanline. Other than that, the operation of this scanline is identical to any other. The primary reason this scanline exists is to start the object render pipeline, since it takes 256 cc's worth of time to determine which objects are in range or not for any particular scanline. + + 21..260: after rendering 1 dummy scanline, the PPU starts to render the actual data to be displayed on the screen. This is done for 240 scanlines, of course. + + 261: after the very last rendered scanline finishes, the PPU does nothing for 1 scanline (i.e. the programmer gets screwed out of perfectly good VINT time). When this scanline finishes, the VINT flag is set, and the process of drawing lines starts all over again. + + ++--------------------------+ +|Scanline rendering details| ++--------------------------+ + Naturally, the PPU will fetch data from name, attribute, and pattern tables during a scanline to produce an image on the screen. This section details the PPU's doings during this time. + + As explained before, external PPU memory can be accessed every 2 cc's. With 341 cc's per scanline, this gives the PPU enough time to make 170 memory accesses per scanline (and it uses all of them!). After the 170th fetch, the PPU does nothing for 1 clock cycle. Remember that a single pixel is rendered every clock cycle. + + + Memory fetch phase 1 thru 128 + ----------------------------- + 1. Name table byte + 2. Attribute table byte + 3. Pattern table bitmap #0 + 4. Pattern table bitmap #1 + + This process is repeated 32 times (32 tiles in a scanline). + + + This is when the PPU retrieves the appropriate data from PPU memory for rendering the playfield. The first playfield tile fetched here is actually the 3rd to be drawn on the screen (the playfield data for the first 2 tiles to be rendered on this scanline are fetched at the end of the scanline prior to this one). + + All valid on-screen pixel data arrives at the PPU's video out pin during this time (256 clocks). For determining the precise delay between when a tile's bitmap fetch phase starts (the whole 4 memory fetches), and when the first pixel of that tile's bitmap data hits the video out pin, the formula is (16-n) clock cycles, where n is the fine horizontal scroll offset (0..7 pixels). This information is relivant for understanding the exact timing operation of the "object 0 collision" flag. + + Note that the PPU fetches an attribute table byte for every 8 sequential horizontal pixels it draws. This essentially limits the PPU's color area (the area of pixels which are forced to use the same 3-color palette) to only 8 horizontally sequential pixels. + + It is also during this time that the PPU evaluates the "Y coordinate" entries of all 64 objects in object attribute RAM (OAM), to see if the objects are within range (to be drawn on the screen) for the *next* scanline (this is why Y-coordinate entries in the OAM must be programmed to a value 1 less than the scanline the object is to appear on). Each evaluation (presumably) takes 4 clock cycles, for a total of 256 (which is why it's done during on-screen pixel rendering). + + + In-range object evaluation + -------------------------- + An 8-bit comparator is used to calculate the 9-bit difference between the current scanline (minus 21), and each Y-coordinate (plus 1) of every object entry in the OAM. Objects are considered in range if the comparator produces a difference in the range of 0..7 (if $2000.5 currently = 0), or 0..15 (if $2000.5 currently = 1). + + (Note that a 9-bit comparison result is generated. This means that setting object scanline coordinates for ranges -1..-15 are actually interpreted as ranges 241..255. For this reason, objects with these ranges will never be considered to be part of any on-screen scanline range, and will not allow smooth object scrolling off the top of the screen.) + + Tile index (8 bits), X-coordinate (8 bits), & attribute information (4 bits; vertical inversion is excluded) from the in-range OAM element, plus the associated 4-bit result of the range comparison accumulate in a part of the PPU called the "sprite temporary memory". Logical inversion is applied to the loaded 4-bit range comparison result, if the object's vertical inversion attribute bit is set. + + Since object range evaluations occur sequentially through the OAM (starting from entry 0 to 63), the sprite temporary memory always fills in order from the highest priority in-range object, to lower ones. A 4-bit "in-range" counter is used to determine the number of found objects on the scanline (from 0 up to 8), and serves as an index pointer for placement of found object data into the 8-element sprite temporary memory. The counter is reset at the beginning of the object evaluation phase, and is post-incremented everytime an object is found in-range. This occurs until the counter equals 8, when found object data after this is discarded, and a flag (bit 5 of $2002) is raised, indicating that it is going to be dropping objects for the next scanline. + + An additional memory bit associated with the sprite temporary memory is used to indicate that the primary object (#0) was found to be in range. This will be used later on to detect primary object-to-playfield pixel collisions. + + + Playfield render pipeline details + --------------------------------- + As pattern table & palette select data is fetched, it is loaded into internal latches (the palette select data is selected from the fetched byte via a 2-bit 1-of-4 selector). + + At the start of a new tile fetch phase (every 8 cc's), both latched pattern table bitmaps are loaded into the upper 8-bits of 2- 16-bit shift registers (which both shift right every clock cycle). The palette select data is also transfered into another latch during this time (which feeds the serial inputs of 2 8-bit right shift registers shifted every clock). The pixel data is fed into these extra shift registers in order to implement fine horizontal scrolling, since the periods when the PPU fetch tile data is fixed. + + A single bit from each shift register is selected, to form the valid 4-bit playfield pixel for the current clock cycle. The bit selection offset is based on the fine horizontal scroll value (this selects bit positions 0..7 for all 4 shift registers). The selected 4-bit pixel data will then be fed into the multiplexer (described later) to be mixed with object data. + + + Memory fetch phase 129 thru 160 + ------------------------------- + 1. Garbage name table byte + 2. Garbage name table byte + 3. Pattern table bitmap #0 for applicable object (for next scanline) + 4. Pattern table bitmap #1 for applicable object (for next scanline) + + This process is repeated 8 times. + + + This is the period of time when the PPU retrieves the appropriate pattern table data for the objects to be drawn on the *next* scanline. When less than 8 objects exist on the next scanline (as the in-range object evaluation counter indicates), dummy pattern table fetches take place for the remaining fetches. Internally, the fetched dummy-data is discarded, and replaced with completely transparent bitmap patterns). + + Although the fetched name table data is thrown away, and the name table address is somewhat unpredictable, the address does seem to relate to the first name table tile to be fetched for the next scanline. This would seem to imply that PPU cc #256 is when the PPU's scroll/address counters have their horizontal scroll values automatically updated. + + It should also be noted that because this fetch is required for objects on the next scanline, it is neccessary for a garbage scanline to exist prior to the very first scanline to be actually rendered, so that object attribute RAM entries can be evaluated, and the appropriate bitmap data retrieved. + + As far as the wasted fetch phases here, well, what can I say. Either Nintendo's engineers were VERY lazy, and didn't want to add the small amount of extra circuitry to the PPU so that 16 object fetches could take place per scanline, or Nintendo couldn't spot the extra memory required to implement 16 object scanlines. Thing is though- between the object attribute mem, sprite temporary & buffer mem, and palette mem, that's already 2406 bits of RAM; I don't think it would've killed them to just add the 408 bits it would've took for an extra 8 objects, which would've made games with horrible OAM cycling (Double Dragon 2 w/ 2 players) look half-decent (hell, with 16 object scanlines, games would hardly even need OAM cycling). + + + Details of object pattern fetch & render + ---------------------------------------- + Where the PPU fetches pattern table data for an individual object is conditioned on the contents of the sprite temporary memory element, and $2000.5. If $2000.5 = 0, the tile index data is used as usual, and $2000.3 selects the pattern table to use. If $2000.5 = 1, the MSB of the range result value become the LSB of the indexed tile, and the LSB of the tile index value determines pattern table selection. The lower 3 bits of the range result value are always used as the fine vertical offset into the selected pattern. + + Horizontal inversion (bit order reversing) is applied to fetched bitmaps, if indicated in the sprite temporary memory element. + + The fetched pattern table data (which is 2 bytes), plus the associated 3 attribute bits (palette select & priority), and the x coordinate byte in sprite temporary memory are then loaded into a part of the PPU called the "sprite buffer memory" (the primary object present bit is also copied). This memory area again, is large enough to hold the contents for 8 sprites. + + The composition of one sprite buffer element here is: 2 8-bit shift registers (the fetched pattern table data is loaded in here, where it will be serialized at the appropriate time), a 3-bit latch (which holds the color & priority data for an object), and an 8-bit down counter (this is where the x coordinate is loaded). + + The counter is decremented every time the PPU renders a pixel (the first 256 cc's of a scanline; see "Memory fetch phase 1 thru 128" above). When the counter equals 0, the pattern table data in the shift registers will start to serialize (1 shift per clock). Before this time, or 8 clocks after, consider the outputs of the serializers for each stage to be 0 (transparency). + + The streams of all 8 object serializers are prioritized, and ultimately only one stream (with palette select & priority information) is selected for output to the multiplexer (where object & playfield pixels are prioritized). + + The data for the first sprite buffer entry (including the primary object present flag) has the first chance to enter the multiplexer, if it's output pixel is non-transparent (non-zero). Otherwise, priority is passed to the next serializer in the sprite buffer memory, and the test for non-transparency is made again (the primary object present status will always be passed to the multiplexer as false in this case). This is done until the last (8th) stage is reached, when the object data is passed through unconditionally. Keep in mind that this whole process occurs every clock cycle (hardware is used to determine priority instantly). + + The multiplexer does 2 things: determines primary object collisions, and decides which pixel data to pass through to index the palette RAM- either the playfield's or the object's. + + Primary object collisions occur when a non-transparent playfield pixel coincides with a non-transparent object pixel, while the primary object present status entering the multiplexer for the current clock cycle is true. This causes a flip-flop ($2002.6) to be set, and remains set (presumably) some time after the VINT occurence (prehaps up until scanline 20?). + + The decision for selecting the data to pass through to the palette index is made rather easilly. The condition to use object (opposed to playfield) data is: + + (OBJpri=foreground OR PFpixel=xparent) AND OBJpixel<>xparent + + Since the PPU has 2 palettes; one for objects, and one for playfield, the appropriate palette will be selected depending on which pixel data is passed through. + + After the palette look-up, the operation of events follows the aforementioned steps in the "video signal generation" section. + + + Memory fetch phase 161 thru 168 + ------------------------------- + 1. Name table byte + 2. Attribute table byte + 3. Pattern table bitmap #0 (for next scanline) + 4. Pattern table bitmap #1 (for next scanline) + + This process is repeated 2 times. + + + It is during this time that the PPU fetches the appliciable playfield data for the first and second tiles to be rendered on the screen for the *next* scanline. These fetches initialize the internal playfield pixel pipelines (2- 16-bit shift registers) with valid bitmap data. The rest of tiles (3..32) are fetched at the beginning of the following scanline. + + + Memory fetch phase 169 thru 170 + ------------------------------- + 1. Name table byte + 2. Name table byte + + + I'm unclear of the reason why this particular access to memory is made. The name table address that is accessed 2 times in a row here, is also the same nametable address that points to the 3rd tile to be rendered on the screen (or basically, the first name table address that will be accessed when the PPU is fetching playfield data on the next scanline). + + + After memory access 170 + ----------------------- + The PPU simply rests for 1 cycle here (or the equivelant of half a memory access cycle) before repeating the whole pixel/scanline rendering process. + + ++------------------+ +|Extra cycle frames| ++------------------+ + Scanline 20 is the only scanline that has variable length. On every odd frame, this scanline is only 340 cycles (the dead cycle at the end is removed). This is done to cause a shift in the NTSC colorburst phase. + + You see, a 3.58 MHz signal, the NTSC colorburst, is required to be modulated into a luminance carrying signal in order for color to be generated on an NTSC monitor. Since the PPU's video out consists of basically square waves (as opposed to sine waves, which would be preferred), it takes an entire colorburst cycle (1/3.58 MHz) for an NTSC monitor to identify the color of a PPU pixel accurately. + + But now you remember that the PPU renders pixels at 5.37 MHz- 1.5x the rate of the colorburst. This means that if a single pixel resides on a scanline with a color different to those surrounding it, the pixel will probably be misrepresented on the screen, sometimes appearing faintly. + + Well, to somewhat fix this problem, they added this extra pixel into every odd frame (shifting the colorburst phase over a bit), and changing the way the monitor interprets isolated colored pixels each frame. This is why when you play games with detailed background graphics, the background seems to flicker a bit. Once you start scrolling the screen however, it seems as if some pixels become invisible; this is how stationary PPU images would look without this cycle removed from odd frames. + + Certain scroll rates expose this NTSC PPU color caveat regardless of the toggling phase shift. Some of Zelda 2's dungeon backgrounds are a good place to see this effect. + + ++---------------------------+ +|The MMC3's scanline counter| ++---------------------------+ + As most people know, the MMC3 bases it's scanline counter on PPU address line A13 (which is why IRQ's can be fired off manually by toggling A13 a bunch of times via $2006). What's not common knowledge is the number of times A13 is expected to toggle in a scanline (although if you've been paying close attention to the doc here, you should already know ;) + + A13 was probably used for the IRQ counter (as opposed to using the PPU's /READ line) because this address line already needed to be connected to the MMC for bankswitching purposes (so in other words, to reduce the MMC3's pin count by 1). They also probably used this method of counting (as opposed to a CPU cycle counter) since A13 cycles (0 -> 1) exactly 42 times per scanline, whereas the CPU count of cycles per scanline is not an exact integer (113.67). Having said that, I guess Nintendo wanted to provide an "easy-to-use" method of generating special image effects, without making programmers have to figure out how many clock cycles to program an IRQ counter with (a pretty lame excuse for not providing an IRQ counter with CPU clock cycle precision (which would have been more useful and versatile)). + + Regardless of any values PPU registers are programmed with, A13 will operate in a predictable fashion during image rendering (and if you understand how PPU addressing works, you should understand that A13 is the *only* address line with fixed behaviour during image rendering). + + ++------------------------+ +|PPU pixel priority quirk| ++------------------------+ + Object data is prioritized between itself, then prioritized between the playfield. There are some odd side effects to this scheme of rendering, however. For instance, imagine a low priority object pixel with foreground priority, a high priority object pixel with background priority, and a playfield pixel all coinciding (all non-transparent). + + Ideally, the playfield is considered to be the middle layer between background and foreground priority objects. This means that the playfield pixel should hide the background priority object pixel (regardless of object priority), and the foreground priority object should appear atop the PF pixel. + + However, because of the way the PPU renders (as just described), OBJ priority is evaluated first, and therefore the background object pixel wins, which means that you'll only be seeing the PF pixel after this mess. + + A good game to demonstrate this behaviour is Megaman 2. Go into airman's stage. First, jump into the energy bar, just to confirm that megaman's sprite is of a higher priority than the energy bar's. Now, get to the second half of the stage, where the clouds cover the energy bar. The energy bar will be ontop of the clouds, but megaman will be behind them. Now, look what happens when you jump into the energy bar here... you see the clouds where megaman underlaps the energy bar. + + ++----------------------+ +|Graphical enhancements| ++----------------------+ + Since an NES cartridge has access to the PPU bus, any number of on-cart hardware schemes can be used to enhance the graphic capabilities of the NES. After all, the PPU's playfield pipeline is very simple: it fetches 272 playfield pixels per scanline (as 34*2 byte fetches, in real-time), and outputs 256 of them to the screen (with the 0..7 pixel offset determined by the fine X scroll register), along with object data combined with it. + + Essentially, you can bypass the PPU's simple scrolling system, implement a custom one on your cart (fetching bitmap data in your own fashion), and feed the PPU bitmap data in your own order. + + The possibilities of this are endless (like sporting multiple playfields, or even playfield rotation/scaling), but of course what it comes down to is the amount of cartridge hardware required. + + Generally, playfield rotation/scaling can be done quite easily- it only requires a few sets of 16-bit registers and adders (the 16 bits are broken up into 8.8 fixed point values). But this kind of implementation is more suited for an integrated circuit, since this would require dozens of discrete logic chips. + + Multiple playfields are another thing which could be easily done. The caveat here is that pixel pipelines (i.e., shift registers) and a multiplexer would have to be implemented on the cart (not to mention exclusive name table RAM) in order to process the playfield bitmaps from multiple sources. The access to the CHR-ROM/RAM would also have to increased- but as it stands, the CHR-ROM/RAM bandwidth is 1.34 MHz, a rather low frequency. With a memory device capable of a 10.74 MHz bandwith, you could have 8 playfields to work with. Generally, this would be very useful for displaying multiple huge objects on the screen- without ever having to worry about annoying flicker. + + The only restriction to doing any of this is that: + + - every 8 sequential horizontal pixels sent to the PPU must share the same palette select value. Because of this, hardware would have to be implemented to decide which palette select value to feed the PPU between 8 horizontally sequential pixels, if they do not all share the same palette select value. The on-screen results of this may not be too flattering sometimes, but this is a small price to pay to do some neat graphical tricks on the NES. + + -only the playfield palette can be used. As usual, this pretty much limits your randomly accessable colors to about 12+1. + + It's a damn shame that Nintendo never created a MMC which would enhance graphics on the NES in useful ways as mentioned above. The MMC5 was the only device that came close, and it's only selling features were the single-tile color area, and the vertical split screen mode (which I don't think any game ever used). Considering the amount of pins (100) the MMC5 had, and number of gates they put in it just for the EXRAM (which was 1K bytes), they could've put some really useful graphics hardware inside there instead. + + Prehaps the infamous Color Dreams "Hellraiser" cart was the closest the NES ever came to seeing such sophisticated graphics. The cart was never released, but from what I've read, it was going to use some sort of frame buffer, and a Z80 CPU to do the graphical rendering. It had been rumored that the game had 3D graphics (or at least 2.5D) in it. If so (and the game was actually good), prehaps it would have raised a few eyebrows in the industry, and inspired Nintendo to develop a new MMC chip with similar capabilities, in order to keep the NES in it's profit margin for another few years (and allow it to compete somewhat with the more advanced systems of the time). + +EOF \ No newline at end of file diff --git a/branches/fceux-2.2.2/documentation/tech/ppu/loopy1.txt b/branches/fceux-2.2.2/documentation/tech/ppu/loopy1.txt new file mode 100644 index 00000000..bda6d852 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/ppu/loopy1.txt @@ -0,0 +1,63 @@ +Subject: [nesdev] the skinny on nes scrolling +Date: Tue, 13 Apr 1999 16:42:00 -0600 +From: loopy +Reply-To: nesdev@onelist.com +To: nesdev@onelist.com + +From: loopy + +--------- +the current information on background scrolling is sufficient for most games; +however, there are a few that require a more complete understanding. + +here are the related registers: + (v) vram address, a.k.a. 2006 which we all know and love. (16 bits) + (t) another temp vram address (16 bits) + (you can really call them 15 bits, the last isn't used) + (x) tile X offset (3 bits) + +the ppu uses the vram address for both reading/writing to vram thru 2007, +and for fetching nametable data to draw the background. as it's drawing the +background, it updates the address to point to the nametable data currently +being drawn. bits 0-11 hold the nametable address (-$2000). bits 12-14 are +the tile Y offset. + +--------- +stuff that affects register contents: +(sorry for the shorthand logic but i think it's easier to see this way) + +2000 write: + t:0000110000000000=d:00000011 +2005 first write: + t:0000000000011111=d:11111000 + x=d:00000111 +2005 second write: + t:0000001111100000=d:11111000 + t:0111000000000000=d:00000111 +2006 first write: + t:0011111100000000=d:00111111 + t:1100000000000000=0 +2006 second write: + t:0000000011111111=d:11111111 + v=t +scanline start (if background and sprites are enabled): + v:0000010000011111=t:0000010000011111 +frame start (line 0) (if background and sprites are enabled): + v=t + +note! 2005 and 2006 share the toggle that selects between first/second +writes. reading 2002 will clear it. + +note! all of this info agrees with the tests i've run on a real nes. BUT +if there's something you don't agree with, please let me know so i can verify +it. + +________________________________________________________ +NetZero - We believe in a FREE Internet. Shouldn't you? +Get your FREE Internet Access and Email at +http://www.netzero.net/download.html + +------------------------------------------------------------------------ +New hobbies? New curiosities? New enthusiasms? +http://www.ONElist.com +Sign up for a new e-mail list today! diff --git a/branches/fceux-2.2.2/documentation/tech/ppu/loopy2.txt b/branches/fceux-2.2.2/documentation/tech/ppu/loopy2.txt new file mode 100644 index 00000000..7a4585e1 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/ppu/loopy2.txt @@ -0,0 +1,33 @@ +Subject: [nesdev] Re: the skinny on nes scrolling +Date: Tue, 13 Apr 1999 17:48:54 -0600 +From: loopy +Reply-To: nesdev@onelist.com +To: nesdev@onelist.com + +From: loopy + +(more notes on ppu logic) + +you can think of bits 0,1,2,3,4 of the vram address as the "x scroll"(*8) +that the ppu increments as it draws. as it wraps from 31 to 0, bit 10 is +switched. you should see how this causes horizontal wrapping between name +tables (0,1) and (2,3). + +you can think of bits 5,6,7,8,9 as the "y scroll"(*8). this functions +slightly different from the X. it wraps to 0 and bit 11 is switched when +it's incremented from _29_ instead of 31. there are some odd side effects +from this.. if you manually set the value above 29 (from either 2005 or +2006), the wrapping from 29 obviously won't happen, and attrib data will be +used as name table data. the "y scroll" still wraps to 0 from 31, but +without switching bit 11. this explains why writing 240+ to 'Y' in 2005 +appeared as a negative scroll value. + +________________________________________________________ +NetZero - We believe in a FREE Internet. Shouldn't you? +Get your FREE Internet Access and Email at +http://www.netzero.net/download.html + +------------------------------------------------------------------------ +Looking for a new hobby? Want to make a new friend? +http://www.ONElist.com +Come join one of the 115,000 e-mail communities at ONElist! diff --git a/branches/fceux-2.2.2/documentation/tech/readme.now b/branches/fceux-2.2.2/documentation/tech/readme.now new file mode 100644 index 00000000..4575e0c6 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/readme.now @@ -0,0 +1,6 @@ +Many(possibly all) of these documents contain flaws or are incomplete, so +don't pull out your hair if there are inconsistencies between the documents, +what's in FCE Ultra, and what you observe. That's not to say that FCE Ultra +doesn't have its share of (emulation) flaws, though... + +For many more NES-related documents, try http://nesdev.parodius.com diff --git a/branches/fceux-2.2.2/documentation/tech/readme.sound b/branches/fceux-2.2.2/documentation/tech/readme.sound new file mode 100644 index 00000000..cce95040 --- /dev/null +++ b/branches/fceux-2.2.2/documentation/tech/readme.sound @@ -0,0 +1,2 @@ +Sound information is in the "cpu" subdirectory, due to the intimate +relationship between the sound circuitry and the cpu. diff --git a/branches/fceux-2.2.2/documentation/todo b/branches/fceux-2.2.2/documentation/todo new file mode 100644 index 00000000..5a1131dd --- /dev/null +++ b/branches/fceux-2.2.2/documentation/todo @@ -0,0 +1,70 @@ +The following games are broken to some extent: + +Crystalis: Mostly working, but the screen jumps around during + dialogue. It apparently resets the MMC3 IRQ counter + mid-scanline. It'll require low-level PPU and MMC3 + IRQ counter emulation to function properly. +Kyoro Chan Land: Expects a sprite hit to happen, but it has sprite 0 over + transparent background. + +*** First, things that are not on the TODO list(Don't bug me about these + things if you're an idiot. I don't like listening to idiots. + If you are not an idiot, and you can make decent arguments for why + these should be on the TODO list, then you can bug me.). + +*** General Features: + + Remappable command keys(to multiple keys on the keyboard and a joystick). + + Fix possible UNIF crashes(if no PRGx or CHRx chunks exist, it may crash, + due to changes made in 0.92). + + Windows Port: + Support for command-line options(so that one crazy guy will quit bugging + me). + + SDL Port: + Hotkey remap GUI + + Figure out a good way to add "turbo" button support and then do it. + + Make default svgalib video mode a non-tweaked VGA mode. + + Finish the software video blitting "library", add support for 2xsai, eagle, + interpolation, etc. effects. + + +*** Emulation: + + + ***IMPORTANT*** + If anyone ever cares to implement movie recording/playback, we must figure + out what to do with some unsaved variables, like timestamp and timestampbase. + These variables are abused in the sound emulation code, and modifying them + in certain ways elsewhere can cause crashes. + ***IMPORTANT*** + + Implement cart-based expansion devices, and interfaces for them(dip switches + and that Datach barcode reader, and maybe others). + + Fix DPCM playback and IRQ at end of playback. + + Fix some 6502 emulation bugs(undocumented opcodes might not be implemented + correctly and I'm not sure if the IRQ flag latency is implemented correctly). + + Implement more dummy CPU reads when in debug mode. + + Fix MMC3 IRQ emulation. + + Figure out correct timing for when the PPU refresh address register is + updated by the PPU(for the next scanline). + + Sound frame count stuff on PAL games(is it correct?). + + Fix FDS sound emulation. + + Fix NMI timing and D7 of 2002 setting timing. Fixing this might require + a small hack. Also be aware that this might break Battletoads, particularly + during the second level. + + Fix Zapper emulation(Chiller still doesn't always work correctly). diff --git a/branches/fceux-2.2.2/doxygen b/branches/fceux-2.2.2/doxygen new file mode 100644 index 00000000..580671e2 --- /dev/null +++ b/branches/fceux-2.2.2/doxygen @@ -0,0 +1,1237 @@ +# Doxyfile 1.4.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src src/boards src/drivers/common src/drivers/win src/drivers/sdl src/input src/utils + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.cpp *.h *.c *.inc + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/branches/fceux-2.2.2/fceux-server/.gitignore b/branches/fceux-2.2.2/fceux-server/.gitignore new file mode 100644 index 00000000..674deb69 --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/.gitignore @@ -0,0 +1,17 @@ +# A simulation of Subversion default ignores, generated by reposurgeon. +*.o +*.lo +*.la +*.al +*.libs +*.so +*.so.[0-9]* +*.a +*.pyc +*.pyo +*.rej +*~ +*.#* +.*.swp +.DS_store +# Simulated Subversion default ignores end here diff --git a/branches/fceux-2.2.2/fceux-server/AUTHORS b/branches/fceux-2.2.2/fceux-server/AUTHORS new file mode 100644 index 00000000..0888cb48 --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/AUTHORS @@ -0,0 +1,2 @@ +Major developer: Xodnizel +Interface changes and all releases past 0.0.3: Lukas Sabota diff --git a/branches/fceux-2.2.2/fceux-server/COPYING b/branches/fceux-2.2.2/fceux-server/COPYING new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/branches/fceux-2.2.2/fceux-server/ChangeLog b/branches/fceux-2.2.2/fceux-server/ChangeLog new file mode 100644 index 00000000..89dde3c4 --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/ChangeLog @@ -0,0 +1,30 @@ +0.0.5: + Interface received massive overhaul. Now takes command line + options. This will allow the server to communicate with + other front-ends. Integration can now occur in gfceu. + +0.0.4: + Renamed from "server" to "fceu-server". + Renamed standard.conf -> fceu-standard.conf + If no configuration file is specified, look in /etc and ./ + Added a --help option. + Added GPL headers + +0.0.3: + Error messages during server startup are more verbose(slightly). + + Fixed initialization of the sockaddr_in structure, sin_family + member. It's now initialized to AF_INET before calling bind(). + While not initializing that member seemed to work ok on + Linux 2.4, it won't work on Linux 2.2 and under Cygwin, + and possibly other environments. + +0.0.2: + Switched to using fcntl() to set the socket to nonblocking, + so I don't need to use MSG_NOWAIT in send() anymore, which is + undefined under Cygwin. + + Added a "clean" Makefile target. + +0.0.1: + First Release diff --git a/branches/fceux-2.2.2/fceux-server/Makefile b/branches/fceux-2.2.2/fceux-server/Makefile new file mode 100644 index 00000000..02d07f07 --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/Makefile @@ -0,0 +1,20 @@ +PREFIX = /usr +OUTFILE = fceux-net-server + +CC = g++ +OBJS = server.o md5.o throttle.o + + +all: ${OBJS} + ${CC} -o ${OUTFILE} ${OBJS} + +clean: + rm -f ${OUTFILE} ${OBJS} + +install: + install -m 755 -D fceux-net-server ${PREFIX}/bin/fceux-server + install -m 644 -D fceux-server.conf /etc/fceux-server.conf + +server.o: server.cpp +md5.o: md5.cpp +throttle.o: throttle.cpp diff --git a/branches/fceux-2.2.2/fceux-server/README b/branches/fceux-2.2.2/fceux-server/README new file mode 100644 index 00000000..d32988e5 --- /dev/null +++ b/branches/fceux-2.2.2/fceux-server/README @@ -0,0 +1,53 @@ +FCE Ultra Network Play Server v0.0.5 +------------------------------------ + +To compile, type this in the shell: +$ make +To install, type this in this shell: +$ sudo make install +To run, type this in shell: +$ ./fceu-server + +To compile under MS Windows, you should use Cygwin. I'm not +going to change this server to use Win-old-dirty-smelly-sock natively. + +There are known issues with running fceux-server in mac OSX. As a (somewhat extensive) workaround, you can run the server inside a Linux VM in bridged network mode. + +If it doesn't compile, sell your to the +. + +Most beings can run it like "./fceu-server >logfile &". +Windows users can run it some other way. A batch file with absolute paths, perhaps? + snuggums.bat: + C:\somethingdirectory\server.exe c:\somethingdirectory\standard.conf + +With the default settings, each client should use about 65-70Kbps, excluding any +data transferred during chat, state loads, etc(which should be negligible, but limits +will be placed on these types of transfers in the future). + +Clients connecting with high-latency or slow links may use more bandwidth, or they +may use less bandwidth. I'm really not quite sure. If it concerns you, test it. + +Any client connecting over VERY high latency links, such as bidirectional satellite connections, +may find that attempting network play will lock up his/her connection for +several minutes. Right, Disch. ;) + +The server probably won't scale well to a huge number of clients connected at the same time. + +Bumping up the server's priority and running it on a low-latency kernel(preferably with +1 ms or smaller timeslices) should help make network play more usable if you're running the +network play server on an otherwise non-idle physical server. + + + +TODO: + +Implement a more flexible timing system, so that PAL games will be playable. + +Change the protocol to allow the client to specify the size of input update information, +so devices like the powerpad or zapper can work over network play. + +Send emulation info, such as NTSC/PAL, input devices, and Game Genie emulation at connect +time, to make it easier on end users. + + diff --git a/branches/fceux-2.2.2/fceux-server/cygwin1.dll b/branches/fceux-2.2.2/fceux-server/cygwin1.dll new file mode 100644 index 0000000000000000000000000000000000000000..116037f1bf26f5d25f698c39afa047b4daf76601 GIT binary patch literal 2608311 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 {dTOaBU()`Oy0Y?}=R~|a$FMoJ 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
    rKs1b>+c~ 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

    ?VxHY?};+SUl2xs-I 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⋙uk?j{NrBr_Z&|Ox^B8Cbu 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�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

hIHKc1d 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